ทำเครื่องตัด Gimbap


23

Gimbap (김밥) เป็นอาหารเกาหลี, ดูเหมือนม้วนซูชิ

นี่คืออิโมติคอนเกาหลีแทน Gimbap: @))))))))))

ภารกิจของคุณคือทำให้ ASCII Gimbap เป็นตัวตัด

กฎ

ป้อนข้อมูลสตริงทำมีเพียงและ@)

เอาต์พุตจะตัด Gimbap ที่ถูกต้องทุกครั้งด้วย)และเพิ่ม @ระหว่างนั้น ดังนั้นสำหรับตัวอย่างการ@))@) @)

ที่ถูกต้อง Gimbapเริ่มต้นด้วยและตามด้วยจำนวนเงินใด@)

หากไม่มี Gimbap ที่ถูกต้องเอาต์พุตจะว่างเปล่า

อินพุตและเอาต์พุต

Input | Output
@))))) | @) @) @) @) @)
@))))))) | @) @) @) @) @) @) @)
@))@))) | @) @) @) @) @)
@) | @)
)) | 
@ | 
@@)@@@))) | @) @) @) @)
@)@)@)) | @) @) @) @)
@@@)) | @) @)
))@) | @)

สภาพการชนะ

นี่คือดังนั้นรหัสที่สั้นที่สุดจึงชนะ

จากsandbox


2
กฎเทียบเท่ากับ "เอาท์พุทหนึ่งสำเนา@) สำหรับทุกรายการ)ในอินพุทที่ไม่นับก่อน@หรือไม่? เอาท์พุทของเราอาจมีพื้นที่ต่อท้ายเช่นนี้"@) @) "หรือไม่
xnor

มันคือ. และเอาท์พุทสามารถรวมถึงพื้นที่ต่อท้าย
LegenDUST

เราจะต้องส่งออกสตริงคั่นด้วยช่องว่างหรือเราจะส่งออกอาร์เรย์ของชิ้น? นอกจากนี้เรายัง จำกัด ตัวละคร 2 ตัวนั้นหรือเราสามารถใช้ตัวละคร 2 ตัวที่เราเลือก
Shaggy

ครั้งแรกที่ฉันพยายามอ่านชื่อเรื่อง "Gimp-bat clutter? What?"
Draco18s

คำตอบ:












2

แบตช์ 58 ไบต์

@set s=%1@
@set s=%s:*@=(%
@set s=%s:@=%
@echo%s:)=@) %

รับอินพุตเป็นพารามิเตอร์บรรทัดคำสั่ง คำอธิบาย:

@set s=%1@

คำต่อท้ายและ@ในกรณีที่ไม่มีข้อมูลใด ๆ

@set s=%s:*@=(%

ลบสูงสุดก่อน@แทนที่ด้วย a (เพื่อให้แน่ใจว่าสตริงไม่ว่างเปล่า (เพราะ%:%ไม่ทำงานบนสตริงว่าง) (ยังทำให้echoการทำงานถ้าส่วนที่เหลือของสตริงที่ว่างเปล่า

@set s=%s:@=%

ลบ@s ที่เหลืออยู่

@echo%s:)=@) %

ขยาย)s ที่เหลืออยู่


2

05AB1E (ดั้งเดิม) 10 ไบต์

Z¡¦JS'@ìðý

ลองออนไลน์!

ข้อผิดพลาดนี้บังคับให้ฉันใช้เวอร์ชันดั้งเดิม นี่คือรหัสสำหรับรุ่นปัจจุบันของ 05AB1E (11 ไบต์):

'@¡¦JS'@ìðý

ลองออนไลน์!

พอร์ตคำตอบของเยลลี่ของฉัน


2

Japt v2.0a0 -S, 15 ไบต์

r/^\)+|@/ ¬mi'@

ลองมัน

r/^\)+|@/ ¬mi'@     :Implicit input of string
r                   :Remove
 /^\)+|@/           :  "@"s and leading ")"s
          ¬         :Split
           m        :Map
            i'@     :  Prepend "@"
                    :Implicit output, joined with spaces

ทางเลือก

e/^\)/ è\) Æ"@)

ลองมัน

e/^\)/ è\) Æ"@)     :Implicit input of string
e                   :Recursively remove
 /^\)/              :  Leading ")"
       è\)          :Count remaining ")"s
           Æ        :Map the range [0,Count)
            "@)     :  Literal string
                    :Implicit output, joined with spaces





1

Ruby -p , 28 ไบต์

$_= ~/@/&&'@) '*$'.count(?))

ลองออนไลน์!

คำอธิบาย

                                # -p gets a line of STDIN
$_=                             # Set output to
    ~/@/                        # Find first '@' in input
                                # nil (falsey) if not found
        &&                      # If found, set output to
          '@) '                 # Sliced gimbap
               *                # Repeat
                $'              # In the string after the first '@',
                  .count(?))    # ... count the number of ')'
                                # -p outputs the contents of $_
                                # nil outputs as a blank string


1

sed , 30 ไบต์

s/)\?@\()\?\)/\1/g; s/)/@) /gp

ลองออนไลน์!


ยินดีต้อนรับสู่ PPCG แต่น่าเสียดายที่รหัสของคุณไม่สามารถจัดการกับผู้นำ)และหลาย@อย่างถูกต้อง และลองใช้งานออนไลน์ได้อย่างไร
LegenDUST

1
อย่างที่คุณเห็นในตัวอย่างที่ 5 หรือสุดท้าย)ต้องห้ามละเว้นการนำหน้า
LegenDUST

@LenenDust คุณพูดถูก! มันไม่ง่ายเลย ฉันเดาว่าเวอร์ชันการทำงานนั้นน่า
เกลียด

28 ตัวอักษร: s / ^) * //; s / [^)] // g; s /./@) / gp
jnfnt


1

Pyth , 20 ไบต์

*?}\@z/>zxz\@\)0"@) 

ลองออนไลน์! โปรดทราบว่ามีช่องว่างท้ายท้ายโปรแกรม อันนี้คือ (หรือค่อนข้างเริ่มจาก) คำตอบที่ค่อนข้างตรงไปตรงของคำตอบ Python 2 (แม้ว่าส่วน lstrip นั้นยากอย่างน่าประหลาดใจ)

คำอธิบาย:

*            # repeat string
  ?          # repeat count: ternary
    }\@z     # condition: check whether input contains @
    /        # if condition is true: count occurrences of one string in another
      >      # array slice: all elements of array (or string) from a specific index and upwards
        z    # the thing to slice (input)
        xz\@ # the index first occurrence of \@ in z
      \)     # string to count occurrences of (\x is shorthand for "x")
    0        # value when ternary condition is false
  "@) "      # the string to be repeated (automatically terminated by end-of-line)

1

krrp , 63 ไบต์

^":\L,^*':?#?E'E!-@1#!r'?=#!f'$64.-?*L$64.L$41.L$32.-@0#!r'.0".

ลองออนไลน์!


คำอธิบาย

^":                   ~ take the string as a parameter named `"`
 \L                   ~ import the list module
 ,^*':                ~ apply a binary function
  ?#?E'               ~  if the string is empty,
   E                  ~   return the empty string; else
   !-@1#!r'           ~   define `-` as the cut Gimbap
   ?=#!f'$64.         ~    if an at sign is seen,
    -                 ~    return the cut Gimbap; else
    ?*                ~    if an at sign has been seen,
     L$64.L$41.L$32.- ~     return a Gimbap piece together
                      ~     with freshly cut Gimbap; else
     @0#!r'           ~     proceed to cut
 .0".                 ~ to zero and the above taken string

ลองออนไลน์!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.