Zrób frez Gimbap

23

Gimbap (김밥) to koreańskie jedzenie, które wygląda trochę jak sushi.

Oto koreański emotikon reprezentujący Gimbap: @))))))))))

Twoim zadaniem jest zrobić nóż ASCII Gimbap.

Reguła

Dane wejściowe są ciągiem złożonym tylko z @i ).

Wyjście wycina każdy ważny Gimbap za pomocą ), a następnie dodaje @między nimi. Na przykład @))do @) @).

Ważny Gimbap zaczyna się od, @a po nim dowolna ilość ).

Jeśli nie ma prawidłowego Gimbap, dane wyjściowe są puste.

Wejście i wyjście

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

Warunki wygranej

To jest , więc wygrywa najkrótszy kod.

z piaskownicy

LegenDUST
źródło
2
Czy reguła jest równoważna z „wypisywaniem jednej kopii @) dla każdego )z danych wejściowych, nie licząc ich przed jakimkolwiek @? Czy nasze wyniki mogą zawierać spację końcową, na przykład "@) @) "?
xnor
To jest. Wyjście może zawierać spację końcową.
LegenDUST
Czy musimy wyprowadzać ciąg rozdzielany spacjami, czy możemy wypisać tablicę plasterków? Ponadto, czy ograniczamy się do tych 2 znaków, czy możemy użyć dowolnych 2 wybranych przez nas znaków?
Kudłaty
Pierwszy raz próbowałem przeczytać tytuł: „Gadżet nietoperza? Co?”
Draco18s

Odpowiedzi:

7

JavaScript, 42 41 bajtów

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

Wypróbuj online!

Kudłaty
źródło
5

C (gcc) , 53 bajty

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

Wypróbuj online!

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

Retina 0.8.2 , 14 bajtów

^\)+|@

\)
@) 

Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:

^\)+|@

Usuń wiodące )i wszystkie @.

\)
@) 

Zamień wszystkie )s na @)s. (Uwaga: końcowe spacje).

Neil
źródło
2

05AB1E , 12 bajtów

')Û'@KS'@ìðý

Wypróbuj online!

Wyjaśnienie

')Û            # trim leading ")"
   '@K         # remove all "@"
      S        # split to list of characters
       '@ì     # prepend "@" to each
          ðý   # join on spaces
Emigna
źródło
2

Partia, 58 bajtów

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

Pobiera dane wejściowe jako parametr wiersza polecenia. Wyjaśnienie:

@set s=%1@

Przyrostek a @na wypadek, gdyby dane wejściowe nie zawierały żadnych.

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

Usuń do pierwszego @, zastępując go znakiem, (aby upewnić się, że ciąg nie jest pusty (ponieważ %:%nie działa na pustych ciągach). Działa (również, echojeśli reszta ciągu jest pusta.

@set s=%s:@=%

Usuń wszelkie pozostałe @s.

@echo%s:)=@) %

Rozwiń wszystkie pozostałe )s.

Neil
źródło
2

Japt v2.0a0 -S, 15 bajtów

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

Spróbuj

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

Alternatywny

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

Spróbuj

e/^\)/ è\) Æ"@)     :Implicit input of string
e                   :Recursively remove
 /^\)/              :  Leading ")"
       è\)          :Count remaining ")"s
           Æ        :Map the range [0,Count)
            "@)     :  Literal string
                    :Implicit output, joined with spaces
Kudłaty
źródło
1

Japt v2.0a0 -P, 15 bajtów

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

Zaoszczędzono 2 bajty dzięki @Shaggy.

Spróbuj

Wcielenie ignorancji
źródło
15 bajtów
Shaggy
@Shaggy Dzięki, ostatnio nie grałem w golfa w Japt
of Ignorance
1

Rubinowy -p , 28 bajtów

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

Wypróbuj online!

Wyjaśnienie

                                # -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
Wartość tuszu
źródło
1

sed , 30 bajtów

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

Wypróbuj online!

Vicente Bolea
źródło
Witamy w PPCG. Niestety, twój kod nie może poprawnie obsłużyć wiodących )i wielokrotności @. A może skorzystasz Wypróbuj online ?
LegenDUST
1
Jak widać w piątym lub ostatnim przykładzie, wiodące )s należy zignorować.
LegenDUST
@LegenDUST, masz rację! to nie było takie łatwe. Myślę, że działająca wersja jest znacznie brzydsza
Vicente Bolea
28 znaków: s / ^) * //; s / [^)] // g; s /./@) / gp
jnfnt
1

Pyth , 20 bajtów

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

Wypróbuj online! Zauważ, że na końcu programu znajduje się spacja. Ta jest (a raczej zaczęta jako) raczej bezpośrednim tłumaczeniem odpowiedzi na Python 2 (choć część lstrip była zaskakująco trudna).

Wyjaśnienie:

*            # 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
źródło
1

krrp , 63 bajty

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

Wypróbuj online!


Wyjaśnienie

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

Wypróbuj online!

Jonathan Frech
źródło
1

PowerShell , 42 bajty

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

Wypróbuj online!

Rozwinięty:

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