Ze względu na ograniczenia techniczne stosu wymiany, tytuł jest renderowany niepoprawnie. Poprawny tytuł na to wyzwanie jest
Zrobić
Word Icicle!
Word Icicle
Word cicle
ord cicle
ord icle
ord i le
or i le
or i l
or l
or
r
Dzisiejsze wyzwanie polega na tworzeniu sopli ze słowa wejściowego. Biorąc pod uwagę ciąg w całości drukowalnego ASCII i co najmniej 2 znaki spacji, wykonaj następujące czynności:
Wydrukuj bieżący stan ciągu.
Zastąp najmniejszy leksykalnie znak (inny niż spacje) spacją. Jeśli jest remis, zamień lewą postać.
Powtarzaj w kolejnych wierszach, aż łańcuch będzie zawierał tylko 1 znak spacji.
To powoduje, że ciąg wejściowy wygląda tak, jakby się topił ...
I'm Melting!!!
I'm Melting !!
I'm Melting !
I'm Melting
I m Melting
m Melting
m elting
m lting
m ltin
m lt n
m t n
t n
t
Zasady
Po kilku iteracjach, twój wynik prawie na pewno będzie zawierał końcowe spacje w każdej linii. Jeśli zdecydujesz się je obciąć, jest to dozwolone.
Możesz mieć jedną końcową pustą linię, ale nie więcej.
Pamiętaj, że dane wejściowe mogą zawierać kilka spacji, ale wszystkie są skutecznie pomijane. Na przykład dane wejściowe
a a
powinny daća a a
Możesz wziąć dane wejściowe jako listę ciągów, jeśli chcesz. W celu uzyskania wyników możesz zwrócić lub wydrukować listę ciągów, pojedynczy ciąg z znakami nowej linii lub macierz znaków / tablicę 2D. Zasadniczo preferuję dopuszczalne formaty We / Wy, więc inne formaty są najprawdopodobniej dozwolone, o ile są spójne i wyraźnie odpowiadają prawidłowemu wynikowi. W razie wątpliwości możesz zapytać. Jak zwykle dozwolone są pełne programy lub funkcje.
Pamiętaj, że jest to konkurs na najkrótszą odpowiedź w dowolnym języku! Jeśli zdecydujesz się na odpowiedź w Javie, spróbuj uzyskać najkrótszą możliwą odpowiedź Java (w bajtach).
Przypadki testowe
Hello World! -->
Hello World!
Hello World
ello World
ello orld
ello orl
llo orl
lo orl
o orl
o or
or
r
AbCdEfGhIjKlMnOpQrStUvWxYz -->
AbCdEfGhIjKlMnOpQrStUvWxYz
bCdEfGhIjKlMnOpQrStUvWxYz
b dEfGhIjKlMnOpQrStUvWxYz
b d fGhIjKlMnOpQrStUvWxYz
b d f hIjKlMnOpQrStUvWxYz
b d f h jKlMnOpQrStUvWxYz
b d f h j lMnOpQrStUvWxYz
b d f h j l nOpQrStUvWxYz
b d f h j l n pQrStUvWxYz
b d f h j l n p rStUvWxYz
b d f h j l n p r tUvWxYz
b d f h j l n p r t vWxYz
b d f h j l n p r t v xYz
b d f h j l n p r t v x z
d f h j l n p r t v x z
f h j l n p r t v x z
h j l n p r t v x z
j l n p r t v x z
l n p r t v x z
n p r t v x z
p r t v x z
r t v x z
t v x z
v x z
x z
z
PPCG is da BEST -->
PPCG is da BEST
PPCG is da EST
PP G is da EST
PP G is da ST
PP is da ST
P is da ST
is da ST
is da T
is da
is d
is
s
({({})({}[()])}{}) -->
({({})({}[()])}{})
{({})({}[()])}{})
{ {})({}[()])}{})
{ {}) {}[()])}{})
{ {}) {}[ )])}{})
{ {} {}[ )])}{})
{ {} {}[ ])}{})
{ {} {}[ ] }{})
{ {} {}[ ] }{}
{ {} {} ] }{}
{ {} {} }{}
{} {} }{}
} {} }{}
} } }{}
} } } }
} } }
} }
}
Odpowiedzi:
Python 2 ,
7170 bajtów-1 bajt dzięki ovs
Wypróbuj online!
źródło
Siatkówka , 28 bajtów
Wypróbuj online! Wyjaśnienie:
Powtarzaj, gdy wartość wejściowa nie jest pusta.
Wydrukuj bieżącą wartość.
Wykonaj resztę skryptu dla wartości. Następnie wykonaj wynik tego skryptu jako skrypt wartości.
Sortuj znaki w kolejności.
Wybierz pierwszy niepusty znak i wypisz program Retina, który zastępuje pierwsze
$\
wystąpienie literału ( ) tego znaku ($&
) spacją (spacja w kodzie oryginalnym).źródło
APL (Dyalog Unicode) ,
1811 bajtówWypróbuj online!
zastosowania
⎕io←1
; zwraca tablicę ciągów (wektor wektorów znaków)źródło
∪
konieczne?⍋∘⍋
:)05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
{ðKv=yð.;
był mój, miły.:
Zastępuje wszystkie znaki zamiast tego,.;
który zastępuje pierwszy (tzn. Zobacz, co robi twój 7-bajter!
w przypadku w przypadku testowym). Ponadto wyzwanie wyraźnie stwierdza wykluczenie spacji, więc twój 7-bajtowy nie działałby dla danych wejściowych z wieloma spacjami. PS: Dobra odpowiedź, Luis! +1 ode mnie :).;
w pierwszej kolejności. Dosłownie pamiętam, jak się z tym zmagałem 1 maja wcześniej w tym roku, skoro o tym wspomniałeś.Pyth,
171413 bajtówWypróbuj tutaj
źródło
sed
-rn
, 142143bajtyWypróbuj online!
(uwaga: w programie są zakładki)
Ponieważ sed nie ma pojęcia o porządku leksykograficznym, musiałem zakodować na stałe zestaw drukowalnych znaków ASCII i zajmuje to ponad połowę bajtu.
Użycie sed 4.2.2 zmniejszy liczbę bajtów o 2, ponieważ pozwala to na nienazwane etykiety. Wypróbuj online!
-r
włącza rozszerzone wyrażenia regularne (golfier)-n
wyłącza niejawne drukowanie przestrzeni wzorów na końcu programuPrzestrzeń wzorów zaczyna się od danych wejściowych
:a
etykietaa
, to jest główna pętla programup
wydrukuj przestrzeń wzoru (fantazyjna nazwa bufora)teraz dołączamy zestaw drukowalnych znaków ASCII (bez spacji)
s/$/ ABCDEFGHIJKLMNOPQRSTUVWXYZ/
dodaj tabulator, działający jak 1-bajtowy separator, a następnie wielkie literys<tab>
zamiennik (sed może przyjmować dowolny znak jako separator, w tym przypadku karta służy do zapisania bajtu przed ucieczką/
)\w+$
właśnie dodany duży alfabet<tab>
z!"#$%\&'()*+,-./0123456789:;<=>?@&[\\]^_\`\L&{|}~<tab>
reszta znaków, zwróć uwagę, że\L&
jest to mała wersja alfabetu:b
etykietab
, usuń znaki z zestawu początkowego, których nie ma na wejściu/(.).* \1/!
jeśli pierwszy znak z zestawu ASCII nie znajduje się na wejścius/ ./ /
usunąć totb
powtarzaj,b
dopóki podstawienie nie powiedzie sięs/(.)(.*) \1.*/ \2/
zamień pierwszy znak w zestawie ASCII obecnym na wejściu spacją i usuń zestaw ASCIIta
powrócićźródło
sed
wystarczająco dużo, aby zaoszczędzić co najmniej 4 bajty: Wypróbuj online!Rubinowy ,
60585547 bajtówWypróbuj online!
źródło
a-b=[' ']
ia-b
na szybkie -2 bajtyR ,
140100 bajtów-40 bajtów Dzięki Giuseppe!
Wypróbuj online!
Rozwiązanie wykorzystujące
outer
i magię Giuseppe do prawidłowego działania jest dłuższe i ma 104 bajty. Zainspirowany tą odpowiedzią .Wypróbuj online!
źródło
rank
!Python 3 , 71 bajtów
Wypróbuj online!
-4 bajty dzięki ovs
źródło
*bool({*a}-{" "})
zamiastif{*a}-{" "}else[a]
RecursionError
?if/else
skróty, ale*bool
nie ma, więc tak, rekursorerror jak ovs powiedziałPython 2 ,
70696664 bajtówWypróbuj online!
Dzięki za 2 bajty z ovs za pomocą
S and f()
zamiast zamiastif S:f()
źródło
...If there is a tie, replace the leftmost character...
Ci reguły, możesz to naprawić za pomocąreplace(min(...),' ',1)
Galaretka , 8 bajtów
Wypróbuj online!
Pomysł
Podstawową ideą jest bezpośrednie budowanie kolumn żądanego wyniku, zamiast manipulowania ciągiem i zwracania wszystkich wyników pośrednich.
Zaczynamy od numerowania znaków ciągu wejściowego w kolejności, w której zostaną usunięte. Na razie będziemy udawać, że spacje również zostaną usunięte.
Teraz budujemy kolumny, powtarzając każdy znak według jego indeksu w tym wyliczeniu.
Pozostało tylko usunąć duplikaty, aby uwzględnić spacje.
Kod
źródło
Perl 5
-n
,3734 bajtówUsunięto trzy bajty z pomocą @TonHospel
Wypróbuj online!
źródło
\Q
tego w ostatnim przypadku testowym .... Tęskniłem też za pierwszym razem!say&&s/\Q$a/ / while($a)=sort/\S/g
. Również poprawnie obsługuje0
JavaScript,
676665 bajtówPonieważ od dawna nie grałem w golfa!
Wypróbuj online
Dzięki DanielIndie za wskazanie 4 zbędnych bajtów, w tym piwo!
źródło
K (ngn / k) ,
2624 bajtówWypróbuj online!
źródło
{@[x;y;:;" "]}
mogłoby być@[;;:;" "]
. Z jakiej wersji k korzystasz? Nie jestem zaznajomiony z nich:_ci _ic _dv
.C # (interaktywny kompilator Visual C #) , 129 bajtów
Wypróbuj online!
źródło
c!=32
może byćc>32
;c==32
może byćc<33
; i(char)999
może być'¡'
(lub dowolnym innym znakiem powyżej drukowanego zakresu Unicode ASCII).while
sięfor
i umieszczenievar s=ReadLine()
is=s.Remove(i,1).Insert(i," ")
wewnątrz niego (tak dwa średniki nie są już potrzebne).Perl 5 z
-nlF/\s|/
, 39 bajtówMoże to przesuwać granice flag Perla, które nie są liczone, jeśli tak, wrócę do poprzedniej odpowiedzi.
Wypróbuj online!
źródło
-n
flagi: codegolf.stackexchange.com/questions/162161/make-a-word-icicle/…Haskell , 67 bajtów
12 bajtów zaoszczędzonych dzięki Laikoni
Wypróbuj online!
Ten kończy się błędem
Haskell ,
8379 bajtówWypróbuj online!
Ten kończy się błędem
Haskell , 86 bajtów
Wypróbuj online!
Haskell ,
1009188 bajtówWypróbuj online!
źródło
f s|(a,_:b)<-span(/=minimum(id=<<words s))s=putStrLn s>>f(a++' ':b)
Wypróbuj online!id=<<
to całkiem sprytneJavaScript (Node.js) ,
8065 bajtówWypróbuj online!
Nie wiedziałem,
replace
że ciąg należy traktować jako ciąg, a nie wyrażenie regularneźródło
K4 ,
282018 bajtówRozwiązanie:
Przykład:
Wyjaśnienie:
To to samo, co robi ngn . Znajdź indeksy, które spowodowałyby rosnącą listę, nadpisuj je jeden po drugim
" "
, a następnie usuń wszelkie duplikaty wierszy:źródło
gcc 32-bit,
6665 bajtówDzięki za Jonathan Frech za -1 bajt
źródło
*p==i?...:0;
prawdopodobnie może być*p-i?0:...;
.*p-1||(...)
ma taką samą długość)f(a)
kompiluje, jaka
powinno być typuchar*
, ale zakładam, że ma to coś wspólnego z 32-bitowym użyciem gcc.char*p,i;f(long long a){for(i=31;++i;)for(p=a;*p;)*p==i?puts(a),*p=32:++p;}
tio (64f(a)
MATLAB, 74 bajty
Wykorzystuje 2-wyjściową postać funkcji max () do pobrania najmniejszego znaku i jego indeksu, po przekształceniu ciągu na wartości zerowe w spacjach i 256-znakową wartość dla znaków do wydrukowania.
źródło
Common Lisp ,
240228224 bajtówWypróbuj online!
To mój pierwszy post.
Jestem w trakcie nauki seplenienia, więc jestem pewien, że ktoś może wymyślić coś krótszego niż to.
źródło
APL (Dyalog Unicode) , 39 bajtów SBCS
Wypróbuj online!
Dfn.
W jaki sposób?
źródło
V , 27 bajtów
Wypróbuj online!
Hexdump:
źródło
PowerShell ,
10399 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciąg znaków do
$a
. Następnie zapętlamy od2
do$a.length
(tj. Odpowiednią liczbę pionowych czasów potrzebnych do usunięcia wszystkich znaków oprócz jednego). W każdej iteracji generujemy bieżący ciąg i wygodnie zapisujemy go$x
w tym samym czasie. Następnie konstruowania nowego[regex]
obiektu$p
attern składający się z pozostałych znaków$a
, które są-n
OTe
qual do przestrzeni,sort
ed, wówczas0
XX jego drugim.Następnie ustawiamy
$a
równość nowego łańcucha obiektu wyrażenia regularnego za pomocą.Replace
metody zamiany ciągu$x
,$p
atrybutu, spacją" "
, ale tylko1
pasowaniem st. Tak, ta składnia jest dziwna.Ciągi są pozostawione w potoku i domyślnie
Write-Output
daje nam nową linię między nimi za darmo, plus jedną końcową nową linię.źródło
Java (JDK 10) , 140 bajtów
Wypróbuj online!
Technicznie jest pusta linia, ale nie jest pusta .
źródło
Stax , 9 bajtów
Uruchom i debuguj
Jest to ten sam algorytm, co rozwiązanie Luisa 05AB1E
źródło
MATL ,
1716 bajtówWypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Excel VBA, 167 bajtów
Anonimowa funkcja bezpośredniego okna VBE, która przenosi dane wejściowe z zakresu
[A1]
i wyjścia do bezpośredniego okna VBE.Niegolfowany i komentowany
źródło
Japt ,
3218 bajtówZaoszczędź 14 bajtów dzięki Shaggy!
Wypróbuj online!
źródło