Machen Sie Gimbap Cutter

23

Gimbap (김밥) ist koreanisches Essen, sieht ein bisschen aus wie Sushi-Rolle.

Hier ist das koreanische Emoticon, das Gimbap repräsentiert: @))))))))))

Ihre Aufgabe ist es, ASCII Gimbap Cutter zu machen.

Regel

Die Eingabe erfolgt nur mit @und ).

Die Ausgabe schneidet jeden gültigen Gimbap mit ab )und fügt ihn @dazwischen hinzu. Also zum Beispiel @))nach @) @).

Gültiges Gimbap beginnt mit @und gefolgt von einem beliebigen Betrag von ).

Wenn es keine gültige Gimbap gibt, ist die Ausgabe leer.

Ein- und Ausgabe

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

Gewinnbedingung

Das ist , also gewinnt der kürzeste Code.

aus dem Sandkasten

LegenDUST
quelle
2
Ist die Regel gleichbedeutend mit "Eine Kopie von @) jeder )in der Eingabe @ausgeben, wobei die "@) @) "
vorherigen nicht berücksichtigt
Es ist. Die Ausgabe kann ein Leerzeichen enthalten.
LegenDUST
Müssen wir einen durch Leerzeichen getrennten String ausgeben oder können wir ein Array von Slices ausgeben? Sind wir auch auf diese 2 Zeichen beschränkt oder können wir 2 beliebige Zeichen verwenden?
Shaggy
Ich habe zum ersten Mal versucht, den Titel "Gimp-Fledermaus-Krempel? Was?" Zu lesen.
Draco18s

Antworten:

7

JavaScript, 42 41 Bytes

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

Probieren Sie es online!

Zottelig
quelle
5

C (gcc) , 53 Bytes

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

Probieren Sie es online!

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

Retina 0.8.2 , 14 Bytes

^\)+|@

\)
@) 

Probieren Sie es online! Link enthält Testfälle. Erläuterung:

^\)+|@

Führende )s und alle @s löschen .

\)
@) 

Ersetzen Sie alle )s durch @)s. (Hinweis: Leerzeichen am Ende.)

Neil
quelle
2

05AB1E , 12 Bytes

')Û'@KS'@ìðý

Probieren Sie es online!

Erläuterung

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

Batch, 58 Bytes

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

Übernimmt die Eingabe als Befehlszeilenparameter. Erläuterung:

@set s=%1@

Suffix @für den Fall, dass die Eingabe keine enthält.

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

Löschen Sie bis zur ersten Zeichenfolge @und ersetzen Sie sie durch ein, (um sicherzustellen, dass die Zeichenfolge nicht leer ist (da %:%dies bei leeren Zeichenfolgen nicht funktioniert). Das (macht auch die echoArbeit, wenn der Rest der Zeichenfolge leer ist.

@set s=%s:@=%

Löschen Sie alle verbleibenden @s.

@echo%s:)=@) %

Erweitern Sie alle verbleibenden )s.

Neil
quelle
2

Japt v2.0a0 -S, 15 Bytes

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

Versuch es

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

Alternative

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

Versuch es

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

Japt v2.0a0 -P, 15 Bytes

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

2 Bytes dank @Shaggy gespart.

Versuch es

Verkörperung der Ignoranz
quelle
15 Bytes
Shaggy
@ Shaggy Danke, ich habe in letzter Zeit nicht in Japt Golf gespielt
Verkörperung der Ignoranz
1

Ruby -p , 28 Bytes

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

Probieren Sie es online!

Erläuterung

                                # -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
Wert Tinte
quelle
1

sed , 30 bytes

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

Probieren Sie es online!

Vicente Bolea
quelle
Willkommen bei PPCG. Leider kann Ihr Code führende )s und multiple nicht @richtig verarbeiten. Und wie wäre es mit Try it online ?
LegenDUST
1
Wie Sie im fünften oder letzten Beispiel sehen können, müssen führende )Zeichen ignoriert werden.
LegenDUST
@LegenDUST, du hast recht! es war nicht so einfach. Ich denke, die Arbeitsversion ist viel hässlicher
Vicente Bolea
28 Zeichen: s / ^) * //; s / [^)] // g; s /./@) / gp
jnfnt
1

Pyth , 20 Bytes

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

Probieren Sie es online! Beachten Sie, dass am Ende des Programms ein Leerzeichen steht. Diese ist (oder besser gesagt, als) eine ziemlich direkte Übersetzung der Python 2-Antwort (obwohl der lstrip-Teil überraschend schwierig war).

Erläuterung:

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

Krrp , 63 Bytes

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

Probieren Sie es online!


Erläuterung

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

Probieren Sie es online!

Jonathan Frech
quelle
1

PowerShell , 42 Byte

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

Probieren Sie es online!

Abgerollt:

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