Biorąc pod uwagę ciąg ASCII, wypisz jego rozbite przyrostki. Na przykład, jeśli ciąg był abcde
, istnieje 5 sufiksów, uporządkowanych od najdłuższego do najkrótszego:
abcde
bcde
cde
de
e
Każdy sufiks jest następnie eksplodowany , co oznacza, że każdy znak jest kopiowany tyle razy, ile jego indeks z jednym indeksem w tym sufiksie. Na przykład rozbijanie przyrostków abcde
,
abcde
12345
abbcccddddeeeee
bcde
1234
bccdddeeee
cde
123
cddeee
de
12
dee
e
1
e
W sumie rozszyfrowane przyrostki abcde
to
abbcccddddeeeee
bccdddeeee
cddeee
dee
e
Zasady
- To jest golf golfowy, więc wygrywa najkrótszy kod.
- Dane wejściowe będą składały się z drukowalnych znaków ASCII. (To wyklucza znaki nowej linii, ale obejmuje spacje).
- Dane wyjściowe będą miały każdy ciąg w osobnej linii.
- Końcowe spacje są dozwolone w każdej linii, a na końcu może znajdować się dodatkowa nowa linia.
Przypadki testowe
''
'a'
a
'bc'
bcc
c
'xyz'
xyyzzz
yzz
z
'code-golf'
coodddeeee-----ggggggooooooollllllllfffffffff
oddeee----gggggoooooolllllllffffffff
dee---ggggooooollllllfffffff
e--gggoooolllllffffff
-ggooollllfffff
goolllffff
ollfff
lff
f
's p a c e'
s ppp aaaaa ccccccc eeeeeeeee
pp aaaa cccccc eeeeeeee
p aaa ccccc eeeeeee
aa cccc eeeeee
a ccc eeeee
cc eeee
c eee
ee
e
Odpowiedzi:
Galaretka , 5 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
J,
22128 bajtówDzięki milom za zaoszczędzenie 14 bajtów!
To naprawdę miłe rozwiązanie. Całkiem zwięzłe.
To jest hak
#~#\
zastosowany do sufiksów (\.
) wejścia. Hak, gdy zostanie wywołany na wejściuy
, jest rozkładany w następujący sposób:Oto kilka wyników pośrednich:
Przypadki testowe
źródło
Python, 61 bajtów
Alternatywa 63:
źródło
Python 3,
916865 bajtówKończy się z błędem po wydrukowaniu żądanego wyjścia. Przetestuj na Ideone .
Jak to działa
Zanim f będzie mógł się nazwać rekurencyjnie,
s[1:...]
należy obliczyć wskaźnikiPierwsze
enumerate(s[0]+s)
wydajności wszystkie pary (I, C) znaków C z S - z jego pierwszej postaci powielona - a odpowiednie wskaźniki I . Przygotowywanies[0]
służy tutaj dwóm celom.Pierwszy znak s należy powtórzyć raz, ale pierwszym indeksem jest 0 .
Po przetworzeniu wszystkich znaków
s[0]
wywoła błąd IndexError , powodując, że f kończy się błędem, zamiast drukować nowe wiersze, aż do osiągnięcia limitu rekurencji.''.join(i*c for i,c in ...)
buduje płaski ciąg każdego c powtórzenia i razy, któryprint
powtarza echo do STDOUT.Wreszcie, ponieważ
print
zwraca None is[1:None]
jest po prostus[1:]
, wywołanie rekurencyjnef(s[1:...])
powtarza powyższy proces dla s bez swojego pierwszego znaku.źródło
Perl 6 , 38 bajtów
37 bajtów + 1 dla
-n
przełącznika wiersza poleceńPrzykład:
Rozszerzony:
źródło
Brachylog , 17 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
05AB1E , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
CJam , 14 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C #, 101 bajtów
Rekurencyjna anonimowa funkcja, która drukuje również wiodącą nową linię. Jeśli wiodący nowy wiersz nie jest dozwolony, 3 dodatkowe bajty zamieniają go w końcowy nowy wiersz:
Pełny program z nieprzylepioną metodą i testami:
źródło
Haskell, 48 bajtów
jest powiązany z dowolnym z
źródło
putStr.
, akceptujemy jako dane wyjściowe funkcji. Musiszimport Data.List
jednak użyćtails
.uncurry ... zip
zzipWith
:unlines.map(concat.zipWith replicate[1..]).tails
.zipWith replicate
Skraca wystąpił również do mnie, gdy się obudziłem. Szkoda, żetails
nie jest wPrelude
Mógłbym sprowadzićtails
zData.List
niejawnie bez pełnejimport
i nadal bez przerasta tenfoldr
ekwiwalent. Jeśli chodzi o czystość bezIO
płyty kotłowej, pozostawiłbymmapM_ putStrLn
przyprawę do gustów czytelników i nie wykonałem żadnej zunlines
nich. Zdefiniowanie blokue=
kosztowałoby liczbę bajtów.imports
nie jest standardowym Haskellem, ale cechąghci
repliki. W zależności od takich rzeczy liczy się jako osobny język, więc proponuję zmienić tytuł swojej odpowiedzi na coś podobnegoHaskell (ghci)
. ( Zobacz także tę meta dyskusję ).Perl, 36 + 1 (
-n
) = 37 bajtówPotrzebuje
-n
i-E
(lub-M5.010
) do uruchomienia:Zauważ, że działa tylko na jednej instancji za każdym razem, gdy go uruchamiasz (ponieważ używa zmiennej,
$.
która jest zwiększana za każdym razem, gdy czytana jest linia, więc zachowuje1
tylko przy pierwszym czytaniu linii). (Ale nie ma problemu, po prostu^D
uruchom go ponownie!)źródło
Retina , 31 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
źródło
Java,
150127 bajtówEdytować:
Snipet:
Nie golfowany:
źródło
f->{String s[]=f.split(""),o="";int i=-1,j,l=s.length;for(;++i<l;)for(j=-2;++j<i;o+=s[i]);return l<1?o:o+"\n"+f.substring(1);}
Rakieta 184 bajty
Nie golfowany:
Wynik:
źródło
JavaScript (ES6), 65 bajtów
Poprzednie próby:
źródło
PHP, 103 bajty (99 z krótkimi znacznikami)
Jestem pewien, że nie jest to najkrótsza możliwa odpowiedź.
źródło
MATL , 12 bajtów
Uwielbiam, kiedy łączą się znaki cudzysłowu!
Wypróbuj online!
Wyjaśnienie
Działa to poprzez zbudowanie macierzy, której kolumny są używane, jedna po drugiej, do dekodowania danych wejściowych przez całą długość. Na przykład
'abcde'
macierz wejściowa toKod:
źródło
Python 3, 95 bajtów
To było zaskakująco trudniejsze, niż się spodziewałem. Całą moją funkcję przerobiłem może 4 razy.
źródło
Java 7140 bajtów
Nie golfił
Następujący wiersz sprawia mi bardzo ból. Nie wiem, jak mogę go zagrać w golfa (ponieważ istnieją dwie pętle, aby przełamać warunek do wypisania
"\n"
instrukcji).System.out.println();
źródło
Pyke, 12 bajtów
Wypróbuj tutaj!
źródło
Rubinowy, 51 bajtów
Używa
-n
flagi dla bajtu +1.źródło
R, 108 bajtów
Czytaj dane wejściowe ze standardowego wejścia i drukuje na standardowe wyjście
Czułem, że użycie
do.call
tutaj było odpowiednie. Zasadniczo wymaga dwóch danych wejściowych: 1. nazwa funkcji w postaci ciągu (rep
tutaj) i listę argumentów oraz 2. iteracyjnie stosuje wywołuje funkcję przy użyciu argumentów z listy.Na przykład:
rep("c",3)
produkuje wektor"c" "c" "c"
do.call("rep",list(c("a","b","c"),1:3))
produkuje wektor"a" "b" "b" "c" "c" "c"
rep("a",1)
,rep("b",2)
orazrep("c",3)
źródło
Vim, 43 bajty
qqYlpx@qq@qqr0<C-H><C-V>{$:s/\v%V(.)\1*/&\1/g<CR>@rq@r
Pierwsze makro oddziela sufiksy, drugie makro „wybucha” je. Prawdopodobnie do pobicia. Przestrzenie są denerwujące.
źródło
C, 186 bajtów
Prawdopodobnie można to trochę skrócić, ale chciałem tylko spróbować. To moja druga próba gry w golfa, więc daj mi wszelkie wskazówki (* lol), jakie możesz. Bierze ciąg jako parametr i stamtąd eksploduje. u jest używany jako bufor, który przechowuje rozłożony ciąg.
Nie golfowany:
źródło
Acc !! , 150 bajtów
Oczekuje wejścia na standardowe wejście, zakończone znakiem tabulacji.
Wyjaśnienie
To jest całkiem niezłe zadanie dla Acc !! , ponieważ wymaga jedynie odczytu ciągu i iteracji nad nim za pomocą zagnieżdżonych pętli. Odczytujemy ciąg do akumulatora, traktując go jako sekwencję podstawowych cyfr 128, z pierwszym znakiem na końcu niskiego rzędu. Po
Count c
pętli otwierającej wartość akumulatora można skonfigurować w następujący sposób (wykorzystującxyz
jako przykładowe dane wejściowe):(Rzeczywista wartość akumulatora w tym przykładzie wynosi
9*128^3 + 122*128^2 + 121*128 + 120
=20888824
.)Następnie możemy iterować ciąg, iterując zwiększanie mocy 128. I możemy iterować przyrostki, dzieląc akumulator przez 128 po każdej iteracji, odcinając znak.
Z wcięciem i komentarzami:
źródło