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


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



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).





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

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.



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





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


1

sed , 30 bytes

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

Pruébalo en línea!


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)

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!


1

PowerShell , 42 bytes

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

Pruébalo en línea!

Desenrollado:

$arrayOfCuttedGimbaps = $args|select-string '(?<=@.*)\)' -AllMatches|% Matches|%{'@)'}
''+($arrayOfCuttedGimbaps)    # toString and output
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.