Сделать резак Gimbap


23

Гимбап (김밥) - корейская еда, напоминающая суши-ролл.

Вот корейский смайлик представляющий Гимбап: @))))))))))

Ваш квест - сделать резак ASCII 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@

Суффикс a @в случае, если вход не содержит.

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

Удалите до первого @, заменив его на a, (чтобы строка не была пустой (потому %:%что не работает с пустыми строками). (Также делает echoработу , если остальная часть строки пусто.

@set s=%s:@=%

Удалить все оставшиеся @с.

@echo%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

Рубин -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
Как вы можете видеть в пятом или последнем примере, ведущие )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.