Hacer cortador de Gimbap

23

Gimbap (김밥) es comida coreana, de alguna manera parece un rollo de sushi.

Aquí está el emoticón coreano que representa Gimbap: @))))))))))

Su búsqueda es hacer el cortador ASCII Gimbap.

Regla

La entrada es una cadena hecha solo con @y ).

La salida corta cada Gimbap válido con ), y luego agrega @entre ellos. Así, por ejemplo, @))a @) @).

Gimbap válido comienza con @y seguido de cualquier cantidad de ).

Si no hay un Gimbap válido, la salida está en blanco.

Entrada y salida

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

Condición ganadora

Este es el , por lo que gana el código más corto.

de sandbox

LegenDUST
fuente
2
¿Es la regla equivalente a "generar una copia de @) cada una )de las entradas sin contarlas antes que ninguna @? ¿Puede nuestra salida incluir un espacio final, como "@) @) "?
xnor
Es. Y la salida puede incluir un espacio final.
LegenDUST
¿Tenemos que generar una cadena delimitada por espacios o podemos generar una matriz de sectores? Además, ¿estamos limitados a esos 2 caracteres o podemos usar cualquiera de los 2 caracteres de nuestra elección?
Shaggy
Mi primera vez tratando de leer el título, "¿Desorden de murciélagos? ¿Qué?"
Draco18s

Respuestas:

5

C (gcc) , 53 bytes

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

Pruébalo en línea!

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

Retina 0.8.2 , 14 bytes

^\)+|@

\)
@) 

Pruébalo en línea! El enlace incluye casos de prueba. Explicación:

^\)+|@

Eliminar los principales )s y todos los @s.

\)
@) 

Reemplace todos los )s con @)s. (Nota: espacio final).

Neil
fuente
2

05AB1E , 12 bytes

')Û'@KS'@ìðý

Pruébalo en línea!

Explicación

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

Lote, 58 bytes

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

Toma la entrada como un parámetro de línea de comando. Explicación:

@set s=%1@

Sufije un @en caso de que la entrada no contenga ninguno.

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

Elimine hasta el primero @, reemplazándolo con un (para asegurarse de que la cadena no esté vacía (porque %:%no funciona en cadenas vacías). El (también hace el echotrabajo si el resto de la cadena está vacía.

@set s=%s:@=%

Eliminar cualquier @s restante .

@echo%s:)=@) %

Expande cualquier )s.

Neil
fuente
2

Japt v2.0a0 -S, 15 bytes

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

Intentalo

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

Alternativa

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

Intentalo

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

Japt v2.0a0 -P, 15 bytes

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

Guardado 2 bytes gracias a @Shaggy.

Intentalo

Realización de la ignorancia
fuente
15 bytes
Shaggy
@ Shaggy Gracias, no he jugado golf en Japt recientemente
Encarnación de la ignorancia
1

Rubí -p , 28 bytes.

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

Pruébalo en línea!

Explicación

                                # -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
Tinta de valor
fuente
1

sed , 30 bytes

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

Pruébalo en línea!

Vicente Bolea
fuente
Bienvenido a PPCG. Desafortunadamente, su código no puede manejar correctamente los principales )y múltiples @. Y, ¿qué hay de usar Probar en línea ?
LegenDUST
1
Como puede ver en el quinto o último ejemplo, los )s principales deben ignorarse.
LegenDUST
@LegenDUST, tienes razón! No fue tan fácil. Supongo que la versión de trabajo es mucho más fea
Vicente Bolea
28 caracteres: s / ^) * //; s / [^)] // g; s /./@) / gp
jnfnt
1

Pyth , 20 bytes

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

Pruébalo en línea! Tenga en cuenta que hay un espacio final al final del programa. Esta es (o más bien, comenzó como) una traducción bastante directa de la respuesta de Python 2 (aunque la parte lstrip fue sorprendentemente difícil).

Explicación:

*            # 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
fuente
1

krrp , 63 bytes

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

Pruébalo en línea!


Explicación

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

Pruébalo en línea!

Jonathan Frech
fuente
1

PowerShell , 42 bytes

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

Pruébalo en línea!

Desenrollado:

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