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 golfa kodowego ; 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:
!!!!! !!!!! !!!!! !!!!! !!!!!
a\n
ia
, czy możemy wymagać, aby nie było żadnych nowych linii?Odpowiedzi:
QuadR , 1 bajt
Dzięki A__ za zmniejszenie o połowę liczby bajtów!
Wypróbuj online!
Nic nie zastępuje
!
źródło
Python 3 , 27 bajtów
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.
źródło
!!
, 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!
.!\n!\n!
. dobra robota.Python 3 , 26 bajtów
Wypróbuj online!
źródło
Retina 0.8.2 , 2 bajty
Wypróbuj online! Nareszcie wyzwanie, w którym Retina ma wbudowane!
źródło
Haskell, 18 bajtów
-1 bajt dzięki @nimi
Wypróbuj online!
źródło
('!':).
zapisuje bajt.Python 2 , 27 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 19 bajtów
Pobiera dane wejściowe jako tablicę znaków.
Wypróbuj online!
JavaScript (ES6),
2320 bajtówZaoszczędzono 3 bajty dzięki @ShieruAsakoto
Pobiera dane wejściowe jako ciąg.
Wypróbuj online!
JavaScript (ES6), 22 bajty
Sugerowany przez @tjjfvi
Pobiera dane wejściowe jako ciąg.
Wypróbuj online!
źródło
.replace
, 22 bajtóws=>[,...s,,].join`!`
R , 25 bajtów
Wypróbuj online!
Funkcja przyjmująca i zwracająca wektor znaków.
źródło
scan(,'')
, tak jak tio.run/##K/r/P724NElDSUlHSVFJpzg5MU9DR11dU/O/…scan
(ale które rozwiązanie Nicka obsługuje, przynajmniej jeśli wyświetlasz dane wyjściowe za pomocącat
.)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 LF
iCR
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ę!
Kilka interesujących bitów:
Uratowałem trochę przestrzeni danych poprzez ponowne wykorzystanie pamięci, która została już wykonana (
21H
wINT 21H
dzieje 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ć
AAA
zamiast standarduTEST
do porównaniaAL
z 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):
źródło
pieprzenie mózgu ,
2422 bajtów-2 bajty dzięki JoKing.
Wypróbuj online!
źródło
Pepe , 47 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Labirynt ,
19 11 109 bajtówWypróbuj online!
W jaki sposób?
Wchodzimy do Labiryntu w lewym górnym rogu po prawej stronie z nieskończonym stosem zer ...
Na szczęście nie musimy zajmować się drukami, w przeciwnym razie pierwszy zerowy bajt zmieniłby nas
,
i spowodowałby spustoszenie.źródło
sed , 12 bajtów
Wypróbuj online!
-3 bajty dzięki Cows Quack
źródło
s/\b\|\B/!/g
działa również dla 12 bajtówZsh , 32 bajty
Wypróbuj online!
(s::)
dzieli się na znaki,''
dodaje pusty element na początku, a następnieecho -nE $c!
powtarza każdy znak, po którym następuje znak!
.źródło
Perl 5 -p0,
176 bajtówWypróbuj online!
Moja pierwotna odpowiedź brzmiała
-p
i$_='!'.s,.,$&!,gr
. Dzięki @Nahuel Fouilleul za wycięcie 11 bajtów i @Grimy za-p0
wskazówkę.źródło
-lp
podaje niepoprawne dane wyjściowe dla\n\n\n\n
przypadku testowego (zwraca 4 rozdzielone znakiem nowej linii!
zamiast podanych 5).-p0
działa poprawnie.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.
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.
Dla jasności, oto kod zestawu w formacie CBA65 .
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.
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.
źródło
Bash , 36 bajtów
Wypróbuj online!
To liczy się na to, że nowa linia zakończy wprowadzanie na końcu! znak.
źródło
!
na końcu danych wejściowych.MarioLANG ,
9594908969 bajtówWypró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ę.
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):
źródło
Perl 6 ,
1611 bajtówWypró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
źródło
C # (interaktywny kompilator Visual C #) , 28 bajtów
Wypróbuj online!
źródło
05AB1E , 4 bajty
I / O jako lista znaków.
Wypróbuj online.
Wyjaśnienie:
źródło
Befunge-98 (PyFunge) , 7 bajtów
Wypróbuj online!
źródło
Trójkątny ,
1513 bajtówWypró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 postaci
Bq3~#*/@<<
.Nie golfowany:
Poprzednia wersja (15 bajtów):
źródło
SimpleTemplate , 23 bajty
To jest język, który napisałem, i miał być przeznaczony do szablonów, ale dobrze.
Powinno być prawie oczywiste, gdy zobaczysz nieprzypisany kod:
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.0
to pierwszy parametr przekazany dorender()
metody kompilatora.{@echo char}!
- wypisujechar
zmienną i znak dosłowny!
.W przypadku wersji golfowej
_
używana jest zamiast tego zmienna domyślna .{@/}
- zamyka pętlę ( opcjonalnie )Rozwiązanie Pure SimpleTemplate :
Tworzy funkcję,
x
która generuje ten sam wynik.Możesz użyć tego w następujący sposób:
Możesz spróbować tego wszystkiego na: http://sandbox.onlinephpfunctions.com/code/f6baff8d411fc8227ece81eccf05b6e7d3586bfa
Na linii 908 można używać zmiennych
$golfed
,$ungolfed
i$fn
przetestować wszystkie wersje.Jeśli jednak można użyć tablicy znaków, kod jest uproszczony (20 bajtów):
I bez golfa:
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):
@call
Może wywołać funkcję, która istnieje w PHP, co oznacza, że nie jest to czyste SimpleTemplate rozwiązaniem.źródło
Rubin ,
1716 bajtówWypróbuj online!
Dzięki Wartość atramentu za -1 bajt
źródło
gsub
.Gema, 11 characters
Unfortunately
!
starts a comment in Gema, so must be escaped.Sample run:
Try it online!
źródło
Jelly, 5 bytes
A full program accepting a string, which prints the result.
Try it online!
How?
źródło
Japt, 4 bytes
Try it
źródło
'
if the replacement were a number.Japt, 4 bytes
Try it
Japt
-P
, 7 bytesUnfortunately
!
is a reserved character, necessitating the quotation marks.Try it
Not much to explain:
ï
is Cartesian product andi
prepends.źródło
Perl 5 +
-p
, 11 bytesTry it online!
źródło