Faça o cortador Gimbap

23

Gimbap (김밥) é comida coreana, parece um pouco com rolo de sushi.

Aqui está o emoticon coreano representa Gimbap: @))))))))))

Sua missão é fazer o cortador ASCII Gimbap.

Regra

A entrada é uma string feita com only @e ).

A saída corta todos os Gimbap válidos )e depois os adiciona @. Então, por exemplo, @))para @) @).

O Gimbap válido começa com @e é seguido por qualquer valor de ).

Se não houver um Gimbap válido, a saída estará em branco.

Entrada e saída

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

Condição vencedora

Isso é , então o código mais curto vence.

da caixa de areia

LegenDUST
fonte
2
A regra é equivalente a "gerar uma cópia @) para cada )entrada que não conte antes da anterior @? Nossa saída pode incluir um espaço à direita, como "@) @) "?"
xnor
Isto é. E a saída pode incluir um espaço à direita.
LegenDUST
Temos que gerar uma string delimitada por espaço ou podemos gerar uma matriz de fatias? Além disso, estamos limitados a esses 2 caracteres ou podemos usar 2 caracteres de nossa escolha?
Shaggy
Minha primeira vez tentando ler o título "Gimp-bat clutter? O quê?"
Draco18s 9/06

Respostas:

7

JavaScript, 42 41 bytes

s=>s.split(/(?<=@.*)\)/).fill``.join`@) `

Experimente Online!

Shaggy
fonte
5

C (gcc) , 53 bytes

i;f(char*_){for(i=1;*_;!i&*_++&&printf("@) "))i&=*_;}

Experimente online!

i;f(char*_){for(    *_;                      )      }   //loop over the string:
                i=1;   !i&                    i&=*_;    //skip leading `)`s
                       !i&*_++&&printf("@) ")           //and print "@) "for each `)` thereafter
attinat
fonte
4

Retina 0.8.2 , 14 bytes

^\)+|@

\)
@) 

Experimente online! O link inclui casos de teste. Explicação:

^\)+|@

Exclua se inicial )e todos os @s.

\)
@) 

Substitua todos os )s por @)s. (Nota: espaço à direita.)

Neil
fonte
2

05AB1E , 12 bytes

')Û'@KS'@ìðý

Experimente online!

Explicação

')Û            # trim leading ")"
   '@K         # remove all "@"
      S        # split to list of characters
       '@ì     # prepend "@" to each
          ðý   # join on spaces
Emigna
fonte
2

Lote, 58 bytes

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

Recebe a entrada como um parâmetro da linha de comando. Explicação:

@set s=%1@

Sufixe um @caso a entrada não contenha nenhum.

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

Exclua até o primeiro @, substituindo-o por um (para garantir que a sequência não esteja vazia (porque %:%não funciona em sequências vazias). Isso (também echofunciona se o restante da string estiver vazio.

@set s=%s:@=%

Exclua todos os @s restantes .

@echo%s:)=@) %

Expanda quaisquer )s restantes .

Neil
fonte
2

Japt v2.0a0 -S, 15 bytes

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

Tente

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

Alternativo

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

Tente

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

Japt v2.0a0 -P, 15 bytes

f/@\)+/ ËÅç"@) 

Economizou 2 bytes graças a @Shaggy.

Tente

Forma de Ignorância
fonte
15 bytes
Shaggy
@ Shaggy Obrigado, eu não joguei golfe em Japt recentemente
Modalidade de Ignorância
1

Ruby -p , 28 bytes

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

Experimente online!

Explicação

                                # -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
Value Ink
fonte
1

sed , 30 bytes

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

Experimente online!

Vicente Bolea
fonte
Bem-vindo ao PPCG. Infelizmente, seu código não pode lidar com os principais )e múltiplos @corretamente. E que tal usar o Experimente online ?
LegenDUST
1
Como você pode ver no quinto ou último exemplo, os líderes )devem ser ignorados.
LegenDUST 11/06
@LegenDUST, você está certo! não foi assim tão fácil. Eu acho que a versão de trabalho é muito mais feia
Vicente Bolea
28 caracteres: s / ^) * //; s / [^)] // g; s /./@) / gp
jnfnt
1

Pitão , 20 bytes

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

Experimente online! Observe que há um espaço à direita no final do programa. Esta é (ou melhor, começou como) uma tradução bastante direta da resposta do Python 2 (embora a parte lstrip fosse surpreendentemente difícil).

Explicação:

*            # 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)
randomdude999
fonte
1

krrp , 63 bytes

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

Experimente online!


Explicação

^":                   ~ 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

Experimente online!

Jonathan Frech
fonte
1

PowerShell , 42 bytes

''+($args|sls '(?<=@.*)\)'-a|% m*|%{'@)'})

Experimente online!

Desenrolado:

$arrayOfCuttedGimbaps = $args|select-string '(?<=@.*)\)' -AllMatches|% Matches|%{'@)'}
''+($arrayOfCuttedGimbaps)    # toString and output
confuso
fonte