!Wstawić! ! n! b! e! t! w! e! e! n!

24

Wysłano stąd .

Wyzwanie to jest wysoce „destylowane” z tego pytania. Specjalne podziękowania dla @Akababa!

W tym zadaniu należy wstawić wykrzyknik na początku łańcucha i po każdym znaku.

Zasady

  • Zawsze będzie niepuste wejście. Dane wejściowe również nie będą zawierać zakładek. Możesz założyć, że dane wejściowe zawierają tylko nierozszerzone znaki drukowane ASCII i znaki nowej linii.
  • Dane wejściowe nie będą zawierać końcowych znaków nowej linii, dopóki twój język nie będzie w stanie wykryć nowej linii.
  • To jest konkurs ; najkrótsza odpowiedź powinna wygrać.

Przykłady

  • 4 znaki nowej linii dają 5 wykrzykników rozdzielanych znakiem nowej linii. Bardzo trudno jest umieścić to jako tekst Markdown, więc jest to podane zamiast tego.
1 2 3 4 5 6
129591 129012 129127 129582

0

Wyjścia

! 1! ! 2! ! 3! ! 4! ! 5! ! 6!
! 1! 2! 9! 5! 9! 1! ! 1! 2! 9! 0! 1! 2! ! 1! 2! 9! 1! 2! 7! ! 1! 2! 9! 5! 8! 2!
!
! 0!
asd afjoK ak: e
kPrLd
    FOJOE;
    KFO
KFkepjgop sgpaoj faj

Wyjścia

! a! s! d! ! a! f! j! o! K! ! a! k!:! e!
! k! P! r! L! d!
! ! ! ! ! f! O! J! O! E!;!
! ! ! ! ! K! F! O!
! K! F! K! E! P! J! G! O! P! ! s! g! p! a! o! j! ! ! ! f! a! j!

Podstawowy przypadek testowy zawierający tylko jeden znak:

za

Wyjścia

!za!

(Autouzupełnianie! Żartuję, nie ma czegoś takiego.) Zawiera wykrzykniki:

!!
!!
!!
!!
!!

Wyjścia:

!!!!!
!!!!!
!!!!!
!!!!!
!!!!!
ZA
źródło
7
Naprawdę nie rozumiem opinii negatywnej - jest to jasne i dobrze napisane wyzwanie. Re: bycie duplikatem - tak nie jest (poprzedzenie „!” Robi dużą różnicę) i nie sądzę, żeby ktokolwiek to sugerował (brak ścisłych głosów).
Jonathan Allan
1
jeśli język nie potrafi odróżnić od a\ni a, czy możemy wymagać, aby nie było żadnych nowych linii?
Giuseppe
13
Komentarze negatywne są wstawiane między każdą oceną pozytywną, tak jak opisuje to wyzwanie.
2
To jest martwe.
V. Courtois,

Odpowiedzi:

12

Python 3 , 27 bajtów

lambda s:f"!{'!'.join(s)}!"

Wypróbuj online!

Szczerze mówiąc, mam nadzieję, że ktoś pokaże mi fajny sposób na zrobienie tego przy mniejszej liczbie bajtów.

Przywróć Monikę
źródło
To nie obsługuje poprawnie pustego przypadku linii
płatki
@flakes Co masz na myśli? Jeśli masz na myśli pusty ciąg znaków: nie musimy obsługiwać pustego ciągu (i niezależnie od tego !!, co w tym przypadku wyprowadza , co ma dla mnie sens). Jeśli masz na myśli ciąg \n: tak, ponieważ poprawny wynik to !\n!.
Jonathan Allan
3
@JAD O ile wiem, w przykładach nie ma pustego ciągu. Nie tylko to, ale pierwsza reguła dosłownie stwierdza: „zawsze będzie niepusty ciąg znaków wejściowych”.
Przywróć Monikę
1
Ach, myliłem się. Pierwszy przykład ma pustą linię na środku danych wejściowych. Ale ta odpowiedź będzie obsługiwać umieszczenie wykrzyknika w środku, że !\n!\n!. dobra robota.
płatki
1
codegolf.stackexchange.com/questions/190223/insert-nbetween/... jak mówiłeś, aby pokazać krótszą drogę
U10-Naprzód - Przywróć Monikę
10

Haskell, 18 bajtów

('!':).(>>=(:"!"))

-1 bajt dzięki @nimi

Wypróbuj online!

Leo Tenenbaum
źródło
2
('!':).zapisuje bajt.
nimi
8

JavaScript (ES6), 19 bajtów

Pobiera dane wejściowe jako tablicę znaków.

s=>`!${s.join`!`}!`

Wypróbuj online!


JavaScript (ES6),  23  20 bajtów

Zaoszczędzono 3 bajty dzięki @ShieruAsakoto

Pobiera dane wejściowe jako ciąg.

s=>[,...s,,].join`!`

Wypróbuj online!


JavaScript (ES6), 22 bajty

Sugerowany przez @tjjfvi

Pobiera dane wejściowe jako ciąg.

s=>s.replace(/|/g,"!")

Wypróbuj online!

Arnauld
źródło
@tjjfvi Nifty one!
Arnauld
5
Mam 20 za twoje 23:s=>[,...s,,].join`!`
Shieru Asakoto
7

R , 25 bajtów

function(x)gsub("","!",x)

Wypróbuj online!

Funkcja przyjmująca i zwracająca wektor znaków.

Nick Kennedy
źródło
Można ogolić 3 bajty, przełączając formularz funkcji na scan(,''), tak jak tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…
Sumner18
@ Sumner18 dzięki. Zacząłem od tego, ale dzieli dane wejściowe w spacjach.
Nick Kennedy,
1
@ Sumner18 Wyzwanie wymaga obsługi danych wejściowych z nowymi wierszami, których nie można zrobić scan(ale które rozwiązanie Nicka obsługuje, przynajmniej jeśli wyświetlasz dane wyjściowe za pomocą cat.)
Robin Ryder
7

Kod maszynowy 8086, format .COM (MS-DOS 2+), 32 bajty

(-1 w zależności od emulatora: patrz poniżej)

Aby uzyskać najlepsze wyniki, przekieruj standardowe wejście z pliku, ponieważ pisanie daje dziwnie wyglądające wyjście z powodu braku buforowania; także nowe wiersze wyglądają trochę dziwnie, ponieważ są przechowywane jako CR LFiCR część miesza wynik.

Ten program zachowuje się dobrze w rzeczywistej emulacji MS-DOS (np. PCjs), ale DOSBox wydaje się mieć problemy z Ctrl + Z EOF (patrz komentarze na liście zespołów), więc NIE próbuj wprowadzać danych wejściowych za pomocą konsoli w DOSBox, chyba że dodaj dodatkową kontrolę!

BB 01 00 53 59 BA 0B 01 B4 40 CD 21 4A 4B B4 3F CD 21 85 C0 74 09 B4 40 43 41 CD 21 49 EB EE C3

Kilka interesujących bitów:

  • Uratowałem trochę przestrzeni danych poprzez ponowne wykorzystanie pamięci, która została już wykonana ( 21Hw INT 21Hdzieje się !)

  • Niemal byłem w stanie użyć ciekawej sztuczki, którą znalazłem na stronie „Ukryta moc instrukcji BCD”, która pozwoliłaby mi użyć AAAzamiast standardu TESTdo porównania ALz 0, oszczędzając jeden bajt. Niestety nie jest to w pełni udokumentowane, więc nie mogłem na tym polegać: na przykład PCjs nie dostosowuje niczego poza flagami carry i pomocniczymi flagami carry. :-(

Kod zestawu (tryb idealny TASM):

IDEAL
MODEL   TINY

CODESEG
ORG 100H

;; DOSBox (tested with 0.74-2) didn't seem to handle Ctrl-Z as EOF
;; so uncomment the ";;" lines to run it there.
MAIN:
    MOV     BX,1
    PUSH    BX
    POP     CX
    MOV     DX,OFFSET MAIN_1+1  ; The 21H in INT 21H
    MOV     AH,40H
MAIN_1:
    INT     21H
    DEC     DX
    ;;PUSH  DX
    ;;POP   SI
IO_LOOP:
    DEC     BX
    MOV     AH,3FH
    INT     21H
    ;;; This should work on an non-emulated PC. 
    ;;;AAA      ; AL=0?
    TEST    AX,AX
    JZ      DONE
    ;;CMP   [BYTE PTR SI],1AH
    ;;JZ    DONE
    MOV     AH,40H
    INC     BX
    INC     CX
    INT     21H
    DEC     CX
    JMP     IO_LOOP
DONE:
    RET
ENDS
END MAIN
ErikF
źródło
7

pieprzenie mózgu , 24 22 bajtów

-2 bajty dzięki JoKing.

-[-[-<]>>+<],[>.<.,]>.

Wypróbuj online!

Krzysztof Szewczyk
źródło
@JoKing dzięki, zaktualizowałem swoją odpowiedź.
Krzysztof Szewczyk
cholera, to kiepskie
Cruncher
6

Pepe , 47 bajtów

REREEeRErEErREeeEeeeeEREEeeREEeereeREEEEeeEReee

Wypróbuj online!

Wyjaśnienie:

REREEeRE # Push 0,then input (str),then 0 -> (R)
         # The zeroes are pushed to correct the inserting
rEE # Begin loop labelled 0 -> (r)
  rREeeEeeeeE # Push "!" -> (R)
              # r flag inserts it instead of pushing
  REEeeREEee # Move pointer pos 2 steps forward -> (R)
ree # Loop while (R) != 0
REEEEeeE # Remove characters of (R) that are in stack of (r)
         # Removes the 0 in (R)
Reee # Output (R)
niezdefiniowany
źródło
Jak piszesz ten kod? Czy korzystasz z jakiegoś konwertera kodu? Pisanie tego wydaje się szalone
Cruncher
1
@Cruncher 1) Używam tego jako mojego przewodnika. 2) Nie, nie używam konwertera kodu, po prostu używam przewodnika do pisania kodu.
u_indefined
6

Labirynt ,  19 11 10  9 bajtów

33
..
",@

Wypróbuj online!

W jaki sposób?

Wchodzimy do Labiryntu w lewym górnym rogu po prawej stronie z nieskończonym stosem zer ...

                         I / O    stack
                                  0,0,0,...
3 - pop * 10 + 3                  3,0,0,0,...
  - 2 neighbours, forward
3 - pop * 10 + 3                  33,0,0,0,...
  - 2 neighbours, forward
. - pop & print chr          !    0,0,0,...
  - T junction from the side
  -   TOS==0, forward
, - read chr or -1       L        76,0,0,0,...   or   -1,0,0,0
  - T junction from the base
  -   if TOS > 0 right:
" -     no-op                     76,0,0,0,...
  -     2 neighbours, forward
. -     pop & print chr      L    0,0,0,...
  -     T junction from the side
  -       TOS==0, forward
3 -       ...back to the start
  -   elif TOS == -1 left:
@ -     exit                                          we're out!


  * right, but on the first occasion (from above) we hit the wall and turn
    around, so that's like a left

Na szczęście nie musimy zajmować się drukami, w przeciwnym razie pierwszy zerowy bajt zmieniłby nas ,i spowodowałby spustoszenie.

Jonathan Allan
źródło
5

sed , 12 bajtów

s/\b\|\B/!/g

Wypróbuj online!

-3 bajty dzięki Cows Quack

Jonasz
źródło
W rzeczywistości kod Sed ma tylko 15 znaków: wypróbuj online! .
manatwork
Wielkie dzięki. Nie byłem pewien, jak to działa ...
Jonasz
1
s/\b\|\B/!/gdziała również dla 12 bajtów
Kritixi Lithos
@ Cowsquack dziękuję. zaktualizowane.
Jonasz
4

Zsh , 32 bajty

for c ('' ${(s::)1})echo -nE $c!

Wypróbuj online!

(s::)dzieli się na znaki, ''dodaje pusty element na początku, a następnie echo -nE $c!powtarza każdy znak, po którym następuje znak !.

Funkcja Gamma
źródło
4

Perl 5 -p0, 17 6 bajtów

s,,!,g

Wypróbuj online!

Moja pierwotna odpowiedź brzmiała -pi $_='!'.s,.,$&!,gr. Dzięki @Nahuel Fouilleul za wycięcie 11 bajtów i @Grimy za -p0wskazówkę.

Kjetil S.
źródło
2
6 bajtów
Nahuel Fouilleul
1
@NahuelFouilleul -lppodaje niepoprawne dane wyjściowe dla \n\n\n\nprzypadku testowego (zwraca 4 rozdzielone znakiem nowej linii !zamiast podanych 5). -p0działa poprawnie.
Grimmy,
4

6502, 12 bajtów (13 bajtów, jeśli Apple II)

6502

Kod maszynowy zakłada, że ​​para zerowych lokalizacji stron jest podłączona do sprzętu do wprowadzania znaków ($ FE) i wyjścia (FF). Wiele systemów opartych na 6502 ułatwia we / wy w ten sposób, chociaż adres We / Wy zwykle nie jest na zerowej stronie.

Dla uproszczenia użyłem Py65 , symulatora systemu mikrokomputerowego 6502 napisanego w języku Python.

Oto zrzut pamięci z Py65. Możesz załadować następujący kod w dowolnym miejscu na zerowej stronie, aby nie nakładał się na $ FE i $ FF.

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.mem 0:b
0000:  a9  21  85  ff  a5  fe  f0  fc  85  ff  d0  f4

Działając w oknie poleceń systemu Windows, możesz wkleić (Ctrl + V) dowolny tekst lub po prostu wpisać. Podczas pisania naciśnij Ctrl + J, aby wstawić nową linię (ten sam znak ASCII). Naciśnij Ctrl + C, aby przerwać procesor i powrócić do wiersza polecenia Py65.

Oczywiście kod asemblera jest łatwiejszy do odczytania.

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.d 00:0b
$0000  a9 21     LDA #$21
$0002  85 ff     STA $ff
$0004  a5 fe     LDA $fe
$0006  f0 fc     BEQ $0004
$0008  85 ff     STA $ff
$000a  d0 f4     BNE $0000

Dla jasności, oto kod zestawu w formacie CBA65 .

; ASSEMBLE:
; cba65 bangit
;
; LOAD/RUN
; python3 py65/monitor.py -i 00fe -o 00ff -l bangit.bin
; goto 0000

        .FILES  BIN=256

; I/O LOCATIONS
GETC    .EQU    $FE             ; (1) MOVING PY65'S GETC TO ZP SHAVES 1 BYTE
PUTC    .EQU    $FF             ; (1) MOVING PY65'S PUTC TO ZP SHAVES 2 BYTES

        .ORG    $0000

VROOM   LDA     #'!'
        STA     PUTC
VROOM2  LDA     GETC
        BEQ     VROOM2
        STA     PUTC
        BNE     VROOM

        .END

Apple II

Powyższy kod zakłada, że ​​null wskazuje, że nie ma danych wejściowych, więc kontynuuje odpytywanie, dopóki nie zostanie zwrócona wartość inna niż null.

Dla porównania, Apple I i Apple II sygnalizują dostępność nowego znaku, ustawiając bit 7 adresu We / Wy klawiatury, który następnie musi zostać wyczyszczony po pobraniu znaku. W tych systemach znakowe operacje we / wy są zwykle wykonywane przez wywoływanie procedur monitorowania systemu zamiast bezpośredniego dostępu do sprzętu.

Wywołując RDKEY ($ FD0C) i COUT ($ FDED), powyższy ekwiwalent Apple II można zakodować w 13 bajtach i można go uruchomić w dowolnym miejscu w pamięci RAM. Oto kod, który uruchomiłem w emulatorze Apple // e, a2ix na Androida 9.

Naciśnięcie klawisza Return ma taki sam efekt jak nowa linia.

*300L

0300-   A9 A1       LDA   #$A1
0302-   20 ED FD    JSR   $FDED
0305-   20 0C FD    JSR   $FD0C
0308-   20 ED FD    JSR   $FDED
030B-   F0 F3       BEQ   $0300

Czy zauważyłeś, że zamiast normalnej wartości ASCII # 21 $ dla wykrzyknika, zamiast tego użyto # $ A1? Jest tak, ponieważ wysyłanie standardowych wartości ASCII do COUT powoduje, że są one wyświetlane w „trybie odwrotnym”, czarno-białym. Wyświetlanie ASCII w normalnym kolorze białym na czarnym wymaga dodania # 80 $ do wartości znaku w akumulatorze przed wywołaniem COUT. Ponieważ RDKEY zwraca znaki z zestawem hi-bitowym, programy asemblacyjne zwykle wyczyściły bit znaku, aby uzyskać jego wartość ASCII przed jego użyciem.

zawietrzny
źródło
1
Witamy na stronie! :)
Rahul Bharadwaj
Dziękuję, @Rahul!
Lee
4

Bash , 36 bajtów

while read -n1 c;do printf \!$c;done

Wypróbuj online!

To liczy się na to, że nowa linia zakończy wprowadzanie na końcu! znak.

spuck
źródło
Witamy! Zastanów się nad dodaniem wyjaśnienia lub linku do interpretera lub czegoś innego, ponieważ odpowiedzi tylko w kodzie są automatycznie oznaczane jako niskiej jakości.
mbomb007,
@ mbomb007, dzięki za wskaźnik.
spuck
1
Niestety nie dodaje to !na końcu danych wejściowych.
Kritixi Lithos
@ Cowsquack: na moim terminalu nowa linia, która kończy wejście, otrzymuje! dodany. W tio.run wejście musi zostać zakończone znakiem powrotu karetki. Zaktualizowałem link do Wypróbuj online, aby to odzwierciedlić.
spuck
4

MarioLANG , 95 94 90 89 69 bajtów

++++++
======< >)
>+++++++",+[
=======<.==<
>+++++++!(.-
========#===

Wypróbuj online!

Po raz pierwszy wypróbowanie MarioLANG było świetną zabawą!

Dzięki Jo King za -20 bajtów

Wyjaśnienie:

Jak sama nazwa wskazuje, MarioLANG ma działać jak gra Super Mario Bros. Działa podobnie do BF, z pamięcią ułożoną na taśmie komórek. Istnieją operatory do zwiększania, zmniejszania, drukowania (ascii lub numeryczne) i odczytywania do bieżącej komórki pamięci oraz operatory do przesuwania się w lewo lub w prawo wzdłuż taśmy.

Mario (wskaźnik instrukcji) zawsze zaczyna się w lewej górnej części programu, z zamierzonym kierunkiem ruchu ustawionym po prawej stronie. Jeśli Mario nie ma pod nim podobnego do podłogi obiektu (=, "lub #), spadnie, aż dojdzie do obiektu podobnego do podłogi. Jeśli Mario opuści przestrzeń programu, program kończy się z powodu zakończenia gry :(

Ten konkretny program można zasadniczo podzielić na dwie połowy: konfigurację i pętlę.

   Setup                          Loop
-----------------------------------------------
                       |
++++++                 |          
======<                |          >)
>+++++++               |          ",+[
=======<               |          .==<
>+++++++               |          !(.-
========               |          #===

W sekcji Ustawienia zwiększamy tylko pierwszą komórkę pamięci, aż osiągniemy 33 - wartość ASCII dla „!”. Wystarczająco łatwe; jeśli można to zagrać w golfa, to tylko kwestia kształtu. Mario zaczyna od lewego górnego rogu, podnosi 10 monet, zaczyna spadać po podniesieniu 11, zmienia kierunek, a następnie powtarza. Podnosi ostatnie 11 monet bez zmiany kierunku; kończy sekcję konfiguracji w prawym dolnym rogu „+”.

W sekcji z pętlami Mario zaczyna od dojścia do windy. „!” operator zmusza go do zaprzestania ruchu, aby pozostał na windzie. Po drodze drukuje odpowiedni znak ASCII do bieżącej wartości komórki pamięci (ta zawsze ma wartość 33, „!”), A następnie przechodzi do następnej komórki w pamięci. Mario osiąga szczyt i ustawia kierunek w prawo. Upada i odczytuje znak z wejścia jako jego wartość ASCII (lub -1, jeśli nie ma znaku). Zwiększamy, ponieważ jedyną miarą kontroli w MarioLANG jest pominięcie instrukcji, jeśli bieżąca komórka pamięci ma wartość 0. Jeśli tak, pomijamy zmianę kierunku Mario, więc przejdzie on z następnego piętra na swoje przeznaczenie. Jeśli nie, ustawiamy kierunek w lewo; chodzenie w lewo z podłogi poniżej zmniejsza bieżącą komórkę z powrotem do poprzedniej wartości,


Poprzednia wersja (89 bajtów):

+++++++++++>,
==========@"+
+++++++++++)[
@==========.==<
+++++++++++!(.-
===========#===
Przywróć Monikę
źródło
62 bajty przy użyciu pętli mnożenia zamiast tylko licznika
Jo King
OK, teraz to jest fajne. Zaktualizuję, jak tylko będę miał czas na ponowne wyjaśnienie, dziękuję!
Przywróć Monikę
1
Aha! 60 bajtów przez pomnożenie 5 * 6 + 3 zamiast 8 * 4 + 1
Jo King
Człowieku, wiem, że to nie jest twoje pierwsze rodeo, ale to naprawdę imponujące. xD
Przywróć Monikę
Właściwie to mój pierwszy raz w golfa MarioLANG. Mam tylko trochę doświadczenia z pieprzeniem mózgu, a także innymi językami 2D
Jo King
4

Perl 6 , 16 11 bajtów

{S:g/<(/!/}

Wypróbuj online!

Zastępuje wszystkie dopasowania o zerowej szerokości wykrzyknikami. Wyrazy regularne o wartości zerowej są niedozwolone, więc zamiast tego używamy znacznika przechwytywania

Jo King
źródło
3

05AB1E , 4 bajty

€'!Ć

I / O jako lista znaków.

Wypróbuj online.

Wyjaśnienie:

'!  '# Prepend a "!"-item before each character in the (implicit) input-list
   Ć  # Enclose (append the first character of the list at the end of it)
      # (after which the result is output implicitly)
Kevin Cruijssen
źródło
3

Trójkątny , 15 13 bajtów

B\3;#*~.,</@<

Wypróbuj online!

-2 bajty po zapamiętaniu, że trójkątny ma operator warunkowego zatrzymania.

Uważam, że jest to tak krótkie, jak to możliwe. Trójkątne robi operatory warunkowej zmiany kierunku, ale niestety działają one inaczej niż inne warunki warunkowe. Podczas gdy wszystkie inne sprawdzają, czy ToS <= 0, warunkowe zmieniające kierunek sprawdzają ToS! = 0. Gdyby tak nie było, mielibyśmy 10 bajtów w postaciBq3~#*/@<< .

Nie golfowany:

    B
   \ 3
  ; # *
 ~ . , <
/ @ <
----------------------------------------------------
B3*              - Push 11 and 3, then pop both and push their product.
    <,<          - Change directions 3 times (to save 2 bytes on last line)
        @/       - Print Top of Stack value as a character, do not pop
          ~;\    - Push a character from input to ToS. Halt if ToS <= 0. Change Direction.
              #  - Print ToS as a character and pop

Poprzednia wersja (15 bajtów):

B.3\.*#).(/?~@<
Przywróć Monikę
źródło
3

SimpleTemplate , 23 bajty

To jest język, który napisałem, i miał być przeznaczony do szablonów, ale dobrze.

!{@eachargv.0}{@echo_}!

Powinno być prawie oczywiste, gdy zobaczysz nieprzypisany kod:

!{@each argv.0 as char} {@echo char}!{@/}

I wyjaśnienie:

  • !- Drukuje dosłowny !znak
  • {@each argv.0 as char}- Pętle przechodzi przez każdy znak, z wartością ustawioną na zmienną char( opcjonalnie , zmienna domyślna to _).
    argv.0to pierwszy parametr przekazany dorender() metody kompilatora.
  • {@echo char}!- wypisuje charzmienną i znak dosłowny !.
    W przypadku wersji golfowej _używana jest zamiast tego zmienna domyślna .
  • {@/}- zamyka pętlę ( opcjonalnie )

Rozwiązanie Pure SimpleTemplate :

{@fn x}!{@eachargv.0}{@echo_}!{@/}{@/}

Tworzy funkcję, xktóra generuje ten sam wynik.

Możesz użyć tego w następujący sposób:

{@call x "this is an example"}

Możesz spróbować tego wszystkiego na: http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa

Na linii 908 można używać zmiennych $golfed, $ungolfedi $fnprzetestować wszystkie wersje.



Jeśli jednak można użyć tablicy znaków, kod jest uproszczony (20 bajtów):

!{@echoj"!" argv.0}!

I bez golfa:

!{@echo separator "!" argv.0}!

Zasadniczo wyświetla wszystkie elementy w tablicy, połączone przez "!", otoczone literałami !.
Ze względu na ograniczenia w klasie kompilatorów, miejsce jest obowiązkowe (w wersji golfowej).

Ten kod jest również wyjątkowo trudny do użycia w czystym SimpleTemplate (używając funkcji jako przykładu):

{@fn x}!{@echoj"!" argv.0}!{@/}

{@// alternative: @call str_split into a "a char array"}
{@set a "a", " ", "c", "h", "a", "r", " ", "a", "r", "r", "a", "y"}

{@call x a}

@callMoże wywołać funkcję, która istnieje w PHP, co oznacza, że nie jest to czyste SimpleTemplate rozwiązaniem.

Ismael Miguel
źródło
2

Gema, 11 characters

\A=\!
?=?\!

Unfortunately ! starts a comment in Gema, so must be escaped.

Sample run:

bash-5.0$ echo -ne '1 2 3 4 5 6\n129591 129012 129127 129582\n\n0' | gema '\A=\!;?=?\!'
!1! !2! !3! !4! !5! !6!
!1!2!9!5!9!1! !1!2!9!0!1!2! !1!2!9!1!2!7! !1!2!9!5!8!2!
!
!0!

Try it online!

manatwork
źródło
2

Jelly, 5 bytes

Ż”!ṁż

A full program accepting a string, which prints the result.

Try it online!

How?

Ż”!ṁż - Main Link: list of characters, s   e.g. "abc"
 ”!   - character '!'                           '!'
   ṁ  - mould like:
Ż     -   s with a zero prepended              "!!!!"
    ż - zip together with s                    ["!a","!b","!c",'!']
      - implicit (smashing) print              !a!b!c!
Jonathan Allan
źródło
2

Japt, 4 bytes

rP'!

Try it

r      Replace
 P     all empty strings "" with
  '!   An exclamation mark (If '!' wasn't a special character in Japt I could remove the quote)
Embodiment of Ignorance
źródło
You'd only be able to ditch the ' if the replacement were a number.
Shaggy
2

Japt, 4 bytes

rP'!

Try it

Japt -P, 7 bytes

Unfortunately ! is a reserved character, necessitating the quotation marks.

ï'! i'!

Try it

Not much to explain: ï is Cartesian product and i prepends.

Shaggy
źródło