Zainspirowany memem, który widziałem dzisiaj dzisiaj.
Opis wyzwania
Rozważ nieskończoną siatkę alfabetu:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
...
Weź słowo ( CODEGOLF
w tym przykładzie) i uczyń z niego podsekwencję siatki, zastępując nieużywane litery spacją i usuwając litery na końcu nieskończonej siatki:
C O
DE G O
L
F
Przykłady
STACKEXCHANGE
ST
A C K
E X
C H
A N
G
E
ZYXWVUTSRQPONMLKJIHGFEDCBA
Z
Y
X
W
V
U
T
S
R
Q
P
O
N
M
L
K
J
I
H
G
F
E
D
C
B
A
F
F
ANTIDISESTABLISHMENTARIANISM
A N T
I
D I S
E ST
AB L
I S
H M
E N T
A R
I
A N
I S
M
Notatki
- Końcowe białe znaki są dozwolone.
- Nie musisz wypełniać
ostatniegowiersza spacjami. Na przykład, jeśli dane wejściowe sąABC
, możesz wygenerować wynikABC
bez 23 końcowych spacji. - Możesz założyć, że dane wejściowe będą pasować do
[A-Z]+
wyrażenia regularnego. - Alternatywnie możesz użyć małych liter alfabetu, w którym to przypadku wynik będzie zgodny
[a-z]+
. - Należy użyć znaku nowej linii (
\n
,\r\n
lub odpowiednik), aby oddzielić linie, czyli listą ciągów nie jest właściwy format. - Jest to wyzwanie dla golfistów , dlatego ustaw swój kod tak krótko, jak to możliwe!
BALLOON
(dwa sąsiednie znaki, które są takie same).Odpowiedzi:
Łuska , 15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Java 10,
161159152 bajtów-2 bajty dzięki @Nevay .
-7 bajtowe drukowanie bezpośrednio zamiast zwracania ciągu i konwertowanie do Java 10.
Objaśnienie: „
Wypróbuj tutaj.
Pierwsza część metody dzieli słowo wejściowe na części z separatorem.
Na przykład:
CODEGOLF
→CO;DEGO;L;F
lubBALLOON
→B;AL;LO;O;N
.Druga część zapętla się nad tymi częściami i używa wyrażenia regularnego,
[^...]
aby zastąpić wszystko, co nie jest spacją.Na przykład
.replaceAll("[^CO]"," ")
pozostawiaC
, iO
, i zastępuje wszystko inne spacją.źródło
B;AL;LO;O;N
?for(char c:s)x+=p<(p=c)?c:";"+c;
.C (gcc) , 69 bajtów
Wypróbuj online!
źródło
Perl 5 , 44 bajtów
40 bajtów kod + 4 dla
-lF
.Wypróbuj online!
źródło
Python 2 , 92 bajty
Wypróbuj online!
źródło
JavaScript (ES6), 79
Edytuj Po zaakceptowaniu wiodącej nowej linii mogę zapisać 2 bajty
Dla 1 bajta więcej mogę przyjąć małe lub duże litery:
Mniej golfa
Test
źródło
\n
dosłowny znak nowej linii w backtickach dla -1 bajtów.MATL ,
2423 bajtyUżywa małych liter.
Wypróbuj w MATL Online!
Wyjaśnienie
źródło
Japt ,
1816 bajtów-2 bajty dzięki @Shaggy
Tylko duże litery.
Wypróbuj online!
Wyjaśnienie
Przełącz na zmienne alternatywne, gdzie
B
jest wielkie litery.Podziel wejściowy ciąg znaków na znaki, których pierwszy jest większy lub równy (
¨
) drugiemu.Odwzoruj każdą partycję według funkcji, gdzie
X
jest bieżąca partycja.Zamapuj każdy znak wielkimi literami na następujący,
Z
jako bieżącą literę.Usuń wszystkie litery z bieżącej partycji z bieżącej litery. Jeśli bieżąca litera jest zawarta w bieżącej partycji, wynikiem jest pusty ciąg.
Jeśli to prawda (nie pusty ciąg znaków), zwróć spację (
S
), w przeciwnym razie zwróć bieżącą literę.Połącz wynik poprzedniego wiersza z nowymi wierszami i wydrukuj wynik.
źródło
r"[^{Z}]"S
wydaje się nieco niedorzeczne, ale nie mogę też znaleźć lepszego sposobu ...kX
!kX ?S:Z
abyoX ªS
zapisać dwa bajtyPyth, 18 bajtów
Wypróbuj tutaj.
Wiodąca nowa linia w wydruku, małe litery alfabetu.
źródło
Galaretka , 19 bajtów
Wypróbuj online!
źródło
OI<1®;
->>2\0;
aby zaoszczędzić jeden bajt (faktycznie zrobiłem też>2\0;œṗµØAf€ȯ€⁶µ€Y
dla 18, które osobiście uważam za łatwiejsze do przeanalizowania)BALLOON
lub coś.<2\1;¬
; No cóż.C (gcc),
9163 bajtów-28 dzięki tylko ASCII
Wypróbuj online!
Poprzedni:
Tak, istnieje krótsze rozwiązanie, ale zauważyłem po napisaniu tego ... Wypróbuj online!
źródło
Mathematica, 101 bajtów
Split
wkład w ściśle rosnące sekwencje liter, porównując sąsiednie litery zOrder
. JeśliOrder[x,y] == 1
, tox
poprzedzay
alfabet, a zatem może pojawić się w tym samym wierszu.Dla każdej sekwencji liter utwórz wzór dopasowujący ciągi znaków
Except
dla tych liter;#|##
jest skrótem odAlternatives
. Zastąp literyAlphabet
pasujące do wzoru spacjami.Ilustracja pośrednich kroków:
źródło
Golfscript,
2221 bajtówWypróbuj online!
-1 bajt dzięki starannemu ostatecznemu przedefiniowaniu
n
wbudowanego.Objaśnienie (z nieco inną wersją):
źródło
Siatkówka , 80 bajtów
Wypróbuj online!
Zawsze jest dokładnie jedna wiodąca nowa linia. Kod nieco niezdarnie poprzedza słowo alfabetem wraz ze znacznikiem (średnikiem). Następnie przesuwa znacznik do pierwszej litery słowa, zmieniając wszystkie pozostałe litery, które przechodzi w spacje. Usuwa również pierwszą literę słowa. Powtarza to, dopóki pierwsza litera słowa nie jest już za znacznikiem. Następnie usuwa znacznik i resztę alfabetu i zastępuje go nową linią, a alfabet ponownie znacznikiem. Powtarza to, dopóki słowo wejściowe nie będzie puste, a następnie czyści ostatni alfabet i znacznik, pozostawiając pożądany wynik.
źródło
05AB1E , 18 bajtów
Wypróbuj online!
Wystąpił problem z 05AB1E
ć
(ekstrakt 1) pozostawiającym pusty ciąg / listę na stosie po wyodrębnieniu ostatniego elementu. To rozwiązanie byłoby o 1-2 bajty krótsze, gdyby nie to.źródło
ð,
oznacza „wydrukuj spację i nowy wiersz”.Siatkówka ,
130126 bajtówWypróbuj online! Edycja: Zapisano 4 bajty za pomocą generatora alfabetów @ MartinEnder. Wyjaśnienie:
Dołącz alfabet.
Dopasuj jak najwięcej liter do ich pozycji w alfabecie.
Rozpocznij nowy wiersz przed pierwszą literą, której nie można wyrównać.
Usuń alfabet, ale następnie zrób wszystko od nowa, dopóki nie będzie żadnych niepoprawnych liter.
źródło
q / kdb + ,
4845 bajtówRozwiązanie:
Wypróbuj online!
Uwaga: Link jest do K (oK) portu tego rozwiązania, ponieważ nie ma TIO dla q / kdb +.
Przykłady:
Wyjaśnienie:
Q jest interpretowane od prawej do lewej. Rozwiązanie jest podzielone na dwie części. Najpierw podziel ciąg, w którym następny znak jest mniejszy lub równy bieżącemu:
"STACKEXCHANGE"
->"ST","ACK","EX","CH","AN","G","E"
Następnie weź ciąg 26 pustych pól i zastosuj dane wejściowe przy indeksach, w których dane wejściowe pojawiają się w alfabecie, i wypisz na standardowe wejście.
"__________________________"
->__________________ST______
Awaria:
Uwagi:
źródło
PowerShell,
7063 bajtów-7 bajtów dzięki @Veskah
Wypróbuj online!
Wyjaśnienie:
Dla każdego znaku w rozproszonym argumencie:
$x
i$x
wartośćrv
zerowa ( to alias dla zmiennej usuwania ), jeśli kod bieżącego znaku jest mniejszy lub równoważny (-le
) kodowi poprzedniego znaku.$x
, zapisz go$x
. Odświeża również poprzednią wartość postaci.Wyjście ostatnie
$x
.źródło
|% *ht
aby zapisać niektóre bajty, ale wygląda na to, że nawet się zepsuł.Galareta ,
2421 bajtów3 bajty dzięki Erikowi Outgolferowi.
Wypróbuj online!
źródło
SOGL V0.12 , 22 bajty
Wypróbuj tutaj!
źródło
JavaScript (ES6), 87 bajtów
Akceptuje wprowadzanie wielkich lub małych liter. Dane wyjściowe są zgodne z wielkością danych wejściowych.
Testy
Pokaż fragment kodu
źródło
Haskell,
81 7473 bajtyZaoszczędzono 1 bajt dzięki Laikoni !
Wypróbuj online.
Optymalizacje Haskell Hugs
Interpreter uścisków pozwala mi zaoszczędzić jeszcze jeden bajt, wykonując
(!cycle$['A'..'Z']++"\n")
zamiast :,(!cycle(['A'..'Z']++"\n"))
ale GHC nie lubi tego pierwszego . (To jest teraz przestarzałe; Laikoni przepisał już tę linię w sposób, który oszczędził 1 bajt.)Najwyraźniej uściski również nie wymagają nawiasów wokół dopasowywania wzorca listy, więc mogłem zapisać dwa kolejne bajty od:
q@(w:y)!(x:z)
doq@(w:y)!x:z
.źródło
a=['A'..'Z']++'\n':a;(!a)
. Interesujące jest to, że Uściski wydają się mieć nieco luźniejsze zasady.a=...:a
sztuczkę. Dzięki!Python 3 ,
8785 bajtówWypróbuj online!
źródło
J , 39 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 15 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
APL (Dyalog Classic) , 20 bajtów
Wypróbuj online!
źródło
K (ngn / k) ,
2928 bajtówWypróbuj online!
{
}
funkcja z argumentemx
>':x
dla każdego znaku, czy jest większy niż poprzedni znak?~
negować&
gdzie (przy jakich indeksach) mamy prawdę(
)_x
wyciętex
przy tych indeksach, zwróć listę ciągów{
}'
dla każdego z tych ciągówangielski alfabet
x?
znajdź indeks pierwszego wystąpienia każdej litery wx
, użyj0N
(specjalnej wartości „null”), jeśli nie zostanie znalezionax@
indeksujx
z tym; indeksowanie ze0N
zwrotami" "
, więc otrzymujemy ciąg o długości 26, w którym litery zx
są na swoich pozycjach alfabetycznych, a wszystko inne to spacjeźródło
R ,
129117 bajtówWypróbuj online!
Objaśnienie (bez golfa):
źródło
R , 95 bajtów
Wystarczy kilka razy przewijać wielkie litery, przesuwając licznik o 1, jeśli napotkasz literę w pozycji przeciwnej słowa i wydrukujesz literę, w przeciwnym razie spację.
Wypróbuj online!
źródło
GolfScript , 37 bajtów
Wypróbuj online!
Zrobiłem Golfscript pod inną nazwą, ale miał niepoprawny wynik.
źródło