Зробіть фрезу Gimbap


23

Джимбап (김밥) - корейська їжа, дещо схожа на рулет із суші.

Ось корейський смайлик представляють Gimbap: @))))))))))

Ваш квест - зробити фрезу ASCII Gimbap.

Правило

Введіть рядок, зроблений лише @та і ).

Вихід обрізає всі дійсні Gimbap ), а потім додає @між ними. Так, наприклад, @))до @) @).

Дійсний Gimbap починається з @і супроводжується будь-якою кількістю ).

Якщо немає дійсного Gimbap, вихід пустий.

Вхід і вихід

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

Умова виграшу

Це , тому найкоротший код виграє.

з пісочниці


2
Є чи це правило еквівалентно «вихідний по одному примірнику @) для кожного )в вхід не рахуючи тих , хто до того , @може включати наш вихід косу простір, як? "@) @) "?
XNOR

Це є. А вихід може містити простір.
LegenDUST

Чи потрібно нам виводити рядки з обмеженим пробілом або ми можемо вивести масив фрагментів? Також ми обмежуємось цими 2 символами чи можемо використовувати будь-які 2 символи за власним бажанням?
Кудлатий

Я вперше намагаюся прочитати заголовок: "Брязкальця-біт? Що?"
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

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

sed , 30 байт

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

Спробуйте в Інтернеті!


Ласкаво просимо до PPCG. На жаль, ваш код не може правильно обробляти провідні )s та множини @. А як щодо використання Спробуйте в Інтернеті ?
LegenDUST

1
Як ви бачите в 5-му чи останньому прикладі, провідні )s повинні ігноруватися.
LegenDUST

@LegenDUST, ти маєш рацію! це було не так просто. Я думаю, що робоча версія набагато потворніша
Вісенте Болеа

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

кррп , 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

Спробуйте в Інтернеті!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.