Wprowadzenie
W tym przykładzie weźmy ciąg Hello, World!
i tablicę [3, 2, 3]
. Aby znaleźć łańcuch podciągów, przechodzimy przez następujący proces:
Pierwsza liczba tablicy to 3
, więc otrzymujemy podłańcuch [0 - 3]
, który jest Hel
. Następnie usuwamy pierwsze 3
znaki z początkowego ciągu, który pozostawia nam lo, World!
.
Druga liczba tablicy to 2
, więc otrzymujemy podłańcuch [0 - 2]
z naszego nowego ciągu, który daje nam lo
. Pozostaje ciąg znaków , World!
.
Ostatni numer to 3
, co daje nam , W
. Łańcuch podciąg to wszystkie podciągi połączono, co daje nam:
['Hel', 'lo', ', W']
Bardziej wizualny przykład:
[3, 2, 3], 'Hello, World!'
3 -> Hel
2 -> lo
3 -> , W
Zadanie
Biorąc pod uwagę, jest niepusty łańcuch i jest niepusty tablicę składających się tylko z dodatnich liczb całkowitych ( > 0
), wyjście z łańcucha podciągu . Możesz założyć, że suma wszystkich liczb całkowitych w tablicy nie przekracza długości łańcucha.
Możesz również założyć, że ciągi nigdy nie będą zawierać żadnych znaków nowej linii.
Przypadki testowe
Input: abcdefghijk, [2, 1, 3]
Output: ['ab', 'c', 'def']
Input: Code Golf, [4, 1]
Output: ['Code', ' ']
Input: Ayyy, [3]
Output: ['Ayy']
Input: lexicographically, [2, 2, 2, 7, 4]
Output: ['le', 'xi', 'co', 'graphic', 'ally']
To jest golf golfowy , więc wygrywanie z najmniejszą liczbą bajtów wygrywa!
Python 2, 42 bajty
Czasami robisz to po prostu nudno.
źródło
Brachylog ,
2013 bajtówWypróbuj online!
Jest to wyjątkowo nieefektywne i przekracza limit czasu dla TIO dla ostatniego przypadku testowego.
Wyjaśnienie
Nieco bardziej wydajna wersja, 15 bajtów
źródło
Python 3, 45 bajtów
To jeden podciąg drukuje jedną linię i kończy się błędem, gdy jest wyczerpany.
Przetestować go na repl.it .
źródło
Python,
52, 46 bajtówRekurencyjna funkcja lambda.
Dzięki Dennisowi za zgolenie 6 bajtów!
źródło
Galaretka , 6 bajtów
Wypróbuj online!
źródło
Haskell, 34 bajty
Przykład użycia:
"lexicographically" # [2,2,2,7,4]
->["le","xi","co","graphic","ally"]
Prosta rekurencja.
Lub nudne rozwiązanie 29 bajtów za pomocą wbudowanego:
źródło
Rubinowy, 26 bajtów
Ciągi są reprezentowane jako tablice znaków.
źródło
PowerShell v2 +, 46 bajtów
Pobiera wejściowy ciąg znaków
$a
i tablicę$b
, pętle$b
. Każda iteracja wykonuje wycinek tablicy na$a
podstawie$i
(domyślnie$null
lub0
) i bieżącej liczby. Musi zrobić-1
i$i++
dlatego ciągi w PowerShell są zero-indeksowane.Przykłady
(Dane wyjściowe są tutaj oddzielone spacjami, ponieważ jest to domyślna metoda stringowania dla tablic)
źródło
Perl, 28 bajtów
Obejmuje +1 dla
-n
Uruchom z ciągiem wejściowym na STDIN, a następnie każdą liczbą w osobnym wierszu:
Tylko kod:
Wersja z 23 bajtami
||"^"
również nie działa, ale drukuje fałszywe końcowe znaki nowego wiersza"^"
można zastąpić,$_
jeśli ciąg nie zawiera wyrażeń regularnych metaźródło
MATL , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6),
393835 bajtówZaoszczędzono 3 bajty dzięki produktom ETH:
Przykład:
Poprzednie rozwiązanie:
38 bajtów dzięki Huntro:
39 bajtów:
źródło
.slice
oszczędza kilka bajtów:s=>a=>a.map(v=>s.slice(t,t+=v),t=0)
Partia, 74 bajty
Biję C? To nie może być prawda! Pobiera ciąg znaków STDIN i tablicę jako argumenty wiersza polecenia.
źródło
Java, 119 bajtów
Gra w golfa:
Zmodyfikowałem odpowiedź Romana Gräfa ( /codegolf//a/93992/59935 ), ale nie mam wystarczającej liczby przedstawicieli, aby móc komentować.
Zmieniłem implementację pętli i zamiast ustawiania łańcucha źródłowego na inny podciąg w każdej iteracji, po prostu zmieniam indeksy, za pomocą których otrzymuję podłańcuch.
źródło
Pyke, 10 bajtów
Wypróbuj tutaj!
źródło
sed (82 + 2 dla -rn) 84
Pierwszy wiersz danych wejściowych to ciąg znaków. Potem każdy wiersz po to wielkość podciągu w jednoskładnikowa .
Przykład:
źródło
CJam , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
C, 81 bajtów
Ponieważ
write()
dane wyjściowe nie są buforowane, żaden kompilator online nie będzie miał trudności z wyświetleniem tego.test.c :
Wyjście bez orurowania:
źródło
PHP, 98 bajtów
Stosowanie:
Wydajność:
Prawdopodobnie jest lepsze rozwiązanie z PHP.
źródło
PHP, 82 bajty
Pobiera dane wejściowe jako ciąg znaków, a następnie listę liczb, dane wyjściowe są oddzielone nowymi wierszami. na przykład
Jeśli jesteś jedną z osób, które potrafią używać $ argv z opcją -r, możesz zapisać 6 bajtów używanych dla tagu otwierającego.
źródło
$argv[++$i]
. Dlaczego nie$argv[1]
i$argv[2]
?$argv[2]
dlatego, że musimy iterować dostarczone argumenty i$argv[++$i]
po raz pierwszy unikamy potrzeby a,,$i=1
a tym samym oszczędzamy 2 bajty.PHP, 63 bajtów
Dane wyjściowe jako tablica 85 bajtów
źródło
Pyth, 7 bajtów
Pobiera dane wejściowe oddzielone znakiem nowej linii, ciąg nie jest ukształtowany i występuje po tablicy. Wypróbuj online!
Wyjaśnienie:
źródło
Octave / MATLAB, 31 bajtów
Jest to anonimowa funkcja z danymi wejściowymi
s
: string;a
: tablica numeryczna.Wypróbuj w Ideone .
Wyjaśnienie
To jest port mojej odpowiedzi MATL.
źródło
Java 142 bajty
Gra w golfa:
źródło
Awk, 36 znaków
Przykładowy przebieg:
W prawdziwym życiu użyłbym tego w ten sposób, po prostu nie mam pojęcia, jak obliczyć jego wynik:
źródło
Dyalog APL 16,0, 15 znaków (niekonkurujący); 15,0, 17 bajtów
16,0 rozwiązanie
Dyalog APL 16.0 dodaje APL2 za partycja prymitywne
⊂
, z glifów⊆
.15,0 rozwiązanie:
Wypróbuj APL online!
źródło
GNU sed, 55 + 2 (flagi rn) = 57 bajtów
Wypróbuj online! (dzięki @Dennis za dodanie sed)
Objaśnienie: Łańcuch wejściowy powinien znajdować się w pierwszym wierszu, a cyfry, w formie jednoargumentowej , w osobnych wierszach po nim. Nowy wiersz jest odczytywany domyślnie na początku cyklu, za każdym razem uruchamiając skrypt.
Uruchomienie testowe: użycie dokumentu tutaj z EOF jako znacznikiem końcowym
Wydajność:
źródło
Vimscript,
7978 bajtówniezbyt ładne, jestem pewien, że można to poprawić ...
Pobiera bufor vima, a następnie wywołuje,
echom string(A([2,3]))
aby zobaczyć wynikWłaściwie myślałem o oszukiwaniu i wydawaniu struny
["abc", "def"]
... Ale opierałem się: PObjaśnienie: Usuń (umieszcza w rejestrze domyślnym) każdą tablicę zlicza znaki i dodaje ją do tablicy
r
... Naprawdę nudna odpowiedź.źródło
Common Lisp,
7876 bajtówZakładając, że funkcja anonimowa jest dozwolona:
Stosowanie
Wydajność
-2 bajty, używając
as
zamiastand
i zmieniając definicję y w celu dopasowania nawiasów między dwiema zmiennymi w(subseq ...)
źródło
Rebol, 38 bajtów
źródło