Biorąc pod uwagę drukowalny ciąg ASCII, podziel go na listę niepustych ciągów z nowym podciąganem rozpoczynającym się za każdym razem, gdy pojawi się znak, który nie był wcześniej widziany w tym samym przypadku.
Przykłady
"mississippi" → ["m","i","ssissi","ppi"]
"P P & C G" → ["P"," P ","& ","C ","G"]
"AAA" → ["AAA"]
"Adam" → ["A","d","a","m"]
"" → []
Anegdota : Wynik będzie miał od 0 do 95 elementów. 95- th podciąg koniecznie kontynuować aż do końca, ponieważ w tym momencie wszystkie drukowane znaki ASCII zaczęły sub-string, więc każda dodatkowa postać będzie mieć miejsce przed, a tym samym nie mogą powodować nowe podciąg zacząć.
"
i'
wydaje się dobrym pomysłem.""
→[""]
byłoby do przyjęcia?[""]
że jest nieważne. Westchnienie.Odpowiedzi:
Galaretka , 4 bajty
Wypróbuj online!
Wyjaśnienie
Wewnętrzna reprezentacja ciągów, które wyświetla łącze TIO, jest nieco inna.
źródło
Siatkówka , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Dopasuj każdy znak (
.
), odrzuć powtarzające się dopasowania (q
), odrzuć pierwsze dopasowanie (1,
) i wstaw linijkę przed każdym dopasowaniem¶$&
.źródło
05AB1E , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
¸«
może byćª
w nowej wersji 05AB1E.C,
756563 bajtówPodziękowania dla @Digital Trauma za uratowanie 10 bajtów oraz podziękowania dla @gastropner i @ l4m2 za uratowanie każdego bajtu!
Drukuje wiodącą nową linię.
Wypróbuj online!
Bez wiodącej nowej linii (71 bajtów):
Wypróbuj online!
źródło
{0}
=>{}
?Perl 6 ,
58 5240 bajtówSpróbuj
Spróbuj
Spróbuj
(dane wejściowe to lista znaków, a dane wyjściowe to lista list)
Rozszerzony:
Dane wyjściowe
classify
toI
.sort
po prostu zamienia to w:».value
usuwa kluczeźródło
HashMap
vs.LinkedHashMap
Java jeżeli zlecenie jest na podstawie wkładki vs. pamięć kolejności?J , 7 bajtów
Wypróbuj online!
Wyjaśnienie
Nub sito ma szansę zabłysnąć!
źródło
APL (Dyalog Unicode) , 8 bajtów SBCS
Wypróbuj online!
źródło
05AB1E , 8 bajtów
Wypróbuj online!
Zawsze wyświetli 1 poprzedni znak nowej linii, który jest stały i nie wskazuje na podział, 10-bajtowa alternatywa, która nie wyświetla poprzedniego znaku nowej linii
Ùvyy¶ì.;}¦
, możesz spróbować tutaj . Według Adama dopuszczalny jest poprzedni lub końcowy znak nowej linii.Po każdej iteracji otrzymujemy:
Który jest:
źródło
ÙSD¶ì.;
. Nie jestem pewien, dlaczego wcześniej o tym nie myśleliśmy: PHaskell , 39 bajtów
Wypróbuj online!
Wstawia symbol nowej linii przed każdym znakiem, który pojawia się po raz pierwszy, w wyniku czego łańcuch oddzielony nową linią jest poprzedzany nową linią. Przygotuj się
lines.
do stworzenia listy.Haskell , 55 bajtów
Wypróbuj online!
Wielokrotnie pobiera prefiks pierwszego znaku plus znaki, które po nim następują.
źródło
lines
.tail.lines
aby usunąć dodatkowy pusty ciąg teraz, gdy o tym myślę.APL (Dyalog) , 9 bajtów
Dzięki, Erik Outgolfer za uratowanie 1 bajtu!
Wypróbuj online!
Wyjaśnienie:
⍳⍨
: Dla każdej postaci uzyskaj indeks jej pierwszego wystąpienia. na przykładmississippi -> 1 2 3 3 2 3 3 2 9 9 2
⍳∘≢
: Zakres od 1 do długości wejścia.∊
: Członkostwo. na przykład1 2 3 4 5 6 7 8 9 10 11∊1 2 3 3 2 3 3 2 9 9 2 -> 1 1 1 0 0 0 0 0 1 0 0
⊢⊂⍨
: Podziel ciąg wejściowy na nowe partycje zaczynające się na1
s w wektorze powyżejźródło
fg
i monadycznyf∘g
zachowują się tak samo)∊
zamiast=
?Japt , 11 bajtów
Przetestuj online!
Wyjaśnienie
To był inspirowany przez Magiczny Octopus Urn „s rozwiązania 05AB1E .
źródło
iRUbY
!JavaScript (ES6), 37 bajtów
Zapisano 7 bajtów: wiodący nowy wiersz został wyraźnie dozwolony (dzięki @Shaggy!)
Pobiera dane wejściowe jako tablicę znaków. Zwraca ciąg oddzielony znakiem nowej linii.
Przypadki testowe
Pokaż fragment kodu
źródło
pieprzenie mózgu, 66 bajtów
Sformatowany:
Wypróbuj online
Wiodącą nową linię na wyjściu (która jest drukowana tylko wtedy, gdy dane wejściowe nie są puste) można usunąć kosztem 5 bajtów, zastępując korpus
x
głównej (najbardziej zewnętrznej) pętli.>,[x]
.źródło
Galaretka , 6 bajtów
Wypróbuj online!
źródło
K4 , 19 bajtów
Rozwiązanie:
Przykłady:
Wyjaśnienie:
8 bajtów jest po prostu do obsługi
""
...źródło
Python 2 ,
8174 bajtówWypróbuj online!
źródło
set
nie zachowuj porządku, kontr-dowód ->s='c'*6+'a'*100+'b'
Python 2 , 47 bajtów
Wypróbuj online!
Zwraca ciąg oddzielony znakiem nowej linii. Ledwo pokonuje wersję programu:
Python 2 , 48 bajtów
Wypróbuj online!
źródło
Perl, 30 bajtów
Obejmuje
+1
dlap
Podaj dane wejściowe bez końcowego znaku nowej linii na STDIN. Wyjście również nie ma końca nowej linii:
Jeśli nie dbają o początkowe i końcowe znaki nowej linii to
25
(+3
dla-p
ponieważ kod zawiera'
) działa również:źródło
${$&}++
. Nie jest tak solidny, ale może wystarczyć na to wyzwanie? Ponadto, istnieje zgoda co do meta,perl -p
która nie wymaga dodatkowego bajtu, wystarczy mieć nagłówek, aPerl with `-p`
nie tylko Perl. Staram się pamiętać, aby zrobić to sam ...1
jest poprawna, w którym to przypadkuv
jest potrzebna. Jeśli chodzi o liczenie, najczęściej podążam za codegolf.meta.stackexchange.com/a/7539/51507, który jest dla mnie najbardziej spójnym meta postem na temat liczenia perla.&~v0
za złapanie pierwszej postaci. Dziękujemy za dołączenie do tej witryny i podzielenie się swoją wieloletnią wiedzą."
zamiast'
z-e
, a następnie możesz policzyć-ep
jako +1 zamiast +3. (Testowane.)JavaScript,
615452 bajtówPobiera dane wejściowe jako tablicę znaków.
Spróbuj
źródło
R ,
9487 bajtówWypróbuj online!
Zwraca (ewentualnie pustą) listę podciągów.
Podziękowania dla Michaela M za oszczędność 7 bajtów!
źródło
function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))
byłby krótszy - i oczywiście nieco brzydszy ...substring
zamiastsubstr
?if(n)
ponieważsubstring
zgłasza błąd przy wprowadzaniu pustego ciągu.substr
zwraca wektor o długości równej jego pierwszemu wejściu, podczas gdysubstring
zwraca jeden o długości równej najdłuższemu ze swoich danych wejściowych.Stax , 8 bajtów
Uruchom i debuguj online
Oto reprezentacja ascii tego samego programu.
Dla każdego znaku dzieli się, gdy indeks bieżącego znaku jest bieżącą pozycją.
źródło
> <> ,
22 1714 bajtów-1 bajt dzięki Emignie
Wypróbuj online!
Drukuje wiodący i końcowy znak nowej linii.
Śledzi, które litery już się pojawiły,
p
wstawiając kopię znaku w odpowiednim miejscu w drugim rzędzie i drukując nowy wiersz, jeśli wartość pobrana z tej pozycji nie wynosiła 1. Kończy się błąd podczas próby drukowania-1
źródło
g/p
! 16 bajtówHaskell, 62 bajty
Wypróbuj online!
źródło
JavaScript (ES6), 68 bajtów
Pobiera dane wejściowe jako listę znaków.
Przypadki testowe:
Pokaż fragment kodu
źródło
[""]
jest akceptowalny w ostatnim przypadku testowym. Ale tak nie jest . :-(PHP, 317 bajtów
Wypróbuj online!
źródło
Czerwony , 79 bajtów
Wypróbuj online!
Nie golfowany:
źródło
SNOBOL4 (CSNOBOL4) ,
1159177 bajtówWypróbuj online!
Drukuje podciągi oddzielone znakami nowej linii.
Wyjaśnienie:
line
S
(forSPLIT
) tak naprawdę nie dzieli, ale zamiast tego wyodrębnia pierwszy znakN
i zapisuje go (.
)Y
. WF
chorobie skacze doEND
. Dopasowanie powinno zakończyć się niepowodzeniem tylko wtedy, gdyN
jest pusty ciąg. Zatem, gdy wejście jest puste, przeskakuje bezpośrednioEND
i nic nie wyprowadza.S = S Y
łączyY
się zS
.SPAN(S)
łapczywie dopasowuje ciąg znaków doS
i przesyła go (.
) doOUTPUT
, setting (.
)N
doREM
chorych znakówN
(jeśli są). Potem skacze z powrotem doS
.źródło
PowerShell, 73 bajty
Stosowanie
źródło
Rubin ,
656258 bajtówWypróbuj online!
Lambda akceptuje ciąg i zwraca tablicę ciągów.
Podejście: do każdego indeksu dołącz znak z tego indeksu
s
do tablicy wyników lub do ostatniego ciągu w tablicy wyników.String#index
zwraca indeks pierwszej instancji argumentu.-2 bajty: Zainicjuj
a
jako argument ikona zamiast we własnej linii.Dzięki, Value Ink !-1 bajt: Użyj
c=s[i]
...c
zamiasts[i]
...s[i]
.Dzięki, Value Ink !-4 bajty: użyj
.times
zamiast.map
źródło
Java 8,
193169155151 bajtów-14 bajtów dzięki @raznagul (za coś oczywistego, że jakoś za mną tęskniłem)
-3 bajtów dzięki @OOBalance (ponownie za coś oczywistego, że jakoś tęskniłem za sobą ..: S)
Wyjaśnienie:
Wypróbuj online.
źródło
if(l<1)
. Jeślil
tak,0
pętla nie powinna być wykonywana tak jak0<0
jestfalse
.i=0
dwa razy. Możesz zapisać 3 bajty, upuszczając drugi:for(;i<l;i++)