Faire un cutter Gimbap

23

Le gimbap (김밥) est une cuisine coréenne, ressemble un peu à un rouleau de sushi.

Voici une émoticône coréenne représentant Gimbap: @))))))))))

Votre quête est de faire du cutter ASCII Gimbap.

Règle

L'entrée est une chaîne faite avec seulement @et ).

La sortie coupe chaque Gimbap valide avec ), puis ajoute @entre eux. Donc par exemple @))pour @) @).

Gimbap valide commence par @et est suivi de n'importe quelle quantité de ).

S'il n'y a pas de Gimbap valide, la sortie est vide.

Entrée et sortie

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

Condition gagnante

C'est le , donc le code le plus court l'emporte.

du bac à sable

LegenDUST
la source
2
Est-ce que la règle équivaut à "produire une copie de @) pour chaque )entrée, sans les compter avant @? Notre sortie peut-elle inclure un espace de fin, comme "@) @) "?
xnor
C'est. Et la sortie peut inclure un espace de fin.
LegenDUST
Doit-on sortir une chaîne délimitée par des espaces ou peut-on sortir un tableau de tranches? De plus, sommes-nous limités à ces 2 caractères ou pouvons-nous utiliser les 2 caractères de notre choix?
Shaggy
La première fois que j'essayais de lire le titre, "Gimp-bat fouillis? Quoi?"
Draco18s

Réponses:

7

JavaScript, 42 41 octets

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

Essayez-le en ligne!

Hirsute
la source
5

C (gcc) , 53 octets

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

Essayez-le en ligne!

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

Retina 0.8.2 , 14 octets

^\)+|@

\)
@) 

Essayez-le en ligne! Le lien inclut des cas de test. Explication:

^\)+|@

Supprimer les )s principaux et tous les @s.

\)
@) 

Remplacez tous les )s par @)s. (Remarque: espace de fin.)

Neil
la source
2

05AB1E , 12 octets

')Û'@KS'@ìðý

Essayez-le en ligne!

Explication

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

Lot, 58 octets

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

Prend l'entrée comme paramètre de ligne de commande. Explication:

@set s=%1@

Suffixez un @au cas où l'entrée n'en contient pas.

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

Supprimez jusqu'au premier @, en le remplaçant par un (pour vous assurer que la chaîne n'est pas vide (car %:%ne fonctionne pas sur les chaînes vides). Le (fait également le echotravail si le reste de la chaîne est vide.

@set s=%s:@=%

Supprimer tous les @s restants .

@echo%s:)=@) %

Développez tous les )s.

Neil
la source
2

Japt v2.0a0 -S, 15 octets

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

Essayez-le

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

Alternative

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

Essayez-le

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

Japt v2.0a0 -P, 15 octets

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

Sauvegardé 2 octets grâce à @Shaggy.

Essayez-le

Incarnation de l'ignorance
la source
15 octets
Shaggy
@Shaggy Merci, je n'ai pas joué au golf à Japt récemment
Embodiment of Ignorance
1

Rubis -p , 28 octets

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

Essayez-le en ligne!

Explication

                                # -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
Encre de valeur
la source
1

sed , 30 octets

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

Essayez-le en ligne!

Vicente Bolea
la source
Bienvenue chez PPCG. Malheureusement, votre code ne peut pas gérer correctement les principaux )et les multiples @. Et que diriez-vous d'utiliser Try it online ?
LegenDUST
1
Comme vous pouvez le voir dans le 5ème ou dernier exemple, les )s principaux doivent être ignorés.
LegenDUST
@LegenDUST, vous avez raison! ce n'était pas si simple. Je suppose que la version de travail est beaucoup plus laide
Vicente Bolea
28 caractères: s / ^) * //; s / [^)] // g; s /./@) / gp
jnfnt
1

Pyth , 20 octets

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

Essayez-le en ligne! Notez qu'il y a un espace de fin à la fin du programme. Celui-ci est (ou plutôt, a commencé comme) une traduction plutôt directe de la réponse Python 2 (bien que la partie lstrip ait été étonnamment difficile).

Explication:

*            # 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
la source
1

krrp , 63 octets

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

Essayez-le en ligne!


Explication

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

Essayez-le en ligne!

Jonathan Frech
la source
1

PowerShell , 42 octets

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

Essayez-le en ligne!

Déroulé:

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