Teilen Sie eine druckbare ASCII-Zeichenfolge in eine Liste nicht leerer Zeichenfolgen mit einer neuen Unterzeichenfolge auf, die jedes Mal beginnt, wenn ein Zeichen auftritt, das zuvor nicht im selben Fall gesehen wurde.
Beispiele
"mississippi" → ["m","i","ssissi","ppi"]
"P P & C G" → ["P"," P ","& ","C ","G"]
"AAA" → ["AAA"]
"Adam" → ["A","d","a","m"]
"" → []
Anekdote : Das Ergebnis wird zwischen 0 und 95 Elemente haben. Die 95 - ten Unterkette notwendigerweise bis zum Ende fortgesetzt werden, da zu diesem Zeitpunkt alle druckbaren ASCII - Zeichen eine Unterkette begonnen haben, so dass jedes zusätzliche Zeichen vor aufgetreten sind und somit kein neues Unterkette beginnen führen kann.
"
und'
scheint eine gute Idee zu sein.""
→[""]
akzeptabel?[""]
, ungültig zu sein, nicht übereinstimmt. Seufzer.Antworten:
Gelee , 4 Bytes
Probieren Sie es online!
Erläuterung
Die interne Darstellung der Strings, die der TIO-Link anzeigt, unterscheidet sich geringfügig.
quelle
Netzhaut , 9 Bytes
Probieren Sie es online!
Erläuterung
Passen Sie jedes Zeichen an (
.
), verwerfen Sie wiederholte Übereinstimmungen (q
), verwerfen Sie die erste Übereinstimmung (1,
) und fügen Sie einen Zeilenvorschub vor jeder Übereinstimmung ein¶$&
.quelle
05AB1E , 11 Bytes
Probieren Sie es online!
Erläuterung
quelle
¸«
kannª
in der neuen Version von 05AB1E sein.C
756563 BytesDanke an @Digital Trauma für das Speichern von 10 Bytes und danke an @gastropner und @ l4m2 für das Speichern von jeweils einem Byte!
Druckt eine führende Newline.
Probieren Sie es online!
Ohne führende Newline (71 Bytes):
Probieren Sie es online!
quelle
{0}
=>{}
?Perl 6 ,
58 5240 BytesVersuch es
Versuch es
Probieren Sie es aus
(Eingabe ist eine Liste von Zeichen und Ausgabe ist eine Liste von Listen von Zeichen)
Erweitert:
Die Ausgabe von
classify
istUnd
.sort
verwandelt es einfach in:».value
Entfernt die Schlüsselquelle
HashMap
vs. a verfolgt,LinkedHashMap
wobei die Reihenfolge auf der Reihenfolge von Speicher vs.J , 7 Bytes
Probieren Sie es online!
Erläuterung
Nubsiebs Chance zu glänzen!
quelle
APL (Dyalog Unicode) , 8 Byte SBCS
Probieren Sie es online!
quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Wird immer 1 vorangestellte Newline ausgegeben, was konstant ist und keinen Split anzeigt. Die 10-Byte-Alternative, die keine vorangestellte Newline ausgibt, ist
Ùvyy¶ì.;}¦
. Sie können dies hier versuchen . Laut Adam ist eine vorangestellte oder nachfolgende Zeile akzeptabel.Nach jeder Iteration erhalten wir:
Welches ist:
quelle
ÙSD¶ì.;
. IchHaskell , 39 Bytes
Probieren Sie es online!
Fügt vor jedem Zeichen, das zum ersten Mal angezeigt wird, ein Zeilenumbruchsymbol ein. Dies führt zu einer durch Zeilenumbrüche getrennten Zeichenfolge mit einem führenden Zeilenumbruch. Bereiten Sie vor
lines.
, um eine Liste zu erstellen.Haskell , 55 Bytes
Probieren Sie es online!
Nimmt wiederholt das Präfix des ersten Zeichens und die darauf folgenden nicht eindeutigen Zeichen.
quelle
lines
.tail.lines
die zusätzliche leere Zeichenfolge jetzt entfernen, wenn ich darüber nachdenke.APL (Dyalog) , 9 Bytes
Danke, Erik der Outgolfer, für das Speichern von 1 Byte!
Probieren Sie es online!
Erläuterung:
⍳⍨
: Ruft für jedes Zeichen den Index seines ersten Auftretens ab. z.Bmississippi -> 1 2 3 3 2 3 3 2 9 9 2
⍳∘≢
: Der Bereich von 1 bis zur Länge der Eingabe.∊
: Mitgliedschaft. z.B1 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
⊢⊂⍨
: Partitionieren Sie die Eingabezeichenfolge mit neuen Partitionen, die bei1
s im obigen Vektor beginnenquelle
fg
und monadischf∘g
verhalten sich gleich)∊
statt=
?Japt , 11 Bytes
Online testen!
Erläuterung
Dies wurde inspiriert durch Magie Octopus Urn ‚s 05AB1E Lösung .
quelle
iRUbY
!JavaScript (ES6), 37 Byte
7 Bytes gespart: ein führender Zeilenumbruch wurde ausdrücklich erlaubt (Danke @Shaggy!)
Nimmt die Eingabe als Array von Zeichen. Gibt eine durch Zeilenumbrüche getrennte Zeichenfolge aus.
Testfälle
Code-Snippet anzeigen
quelle
Brainfuck, 66 Bytes
Formatiert:
Probieren Sie es online aus
Die führende neue Zeile in der Ausgabe (die nur gedruckt wird, wenn die Eingabe nicht leer ist) kann auf Kosten von 5 Byte entfernt werden, indem
x
der Hauptteil der (äußersten) Schleife durch ersetzt wird.>,[x]
.quelle
Gelee , 6 Bytes
Probieren Sie es online!
quelle
K4 , 19 Bytes
Lösung:
Beispiele:
Erläuterung:
8 Bytes ist nur zu handhaben
""
...quelle
Python 2 ,
8174 BytesProbieren Sie es online!
quelle
set
halten Sie nicht die Ordnung, Gegenbeweis ->s='c'*6+'a'*100+'b'
Python 2 , 47 Bytes
Probieren Sie es online!
Gibt eine durch Zeilenumbrüche getrennte Zeichenfolge aus. Schlägt kaum die Programmversion:
Python 2 , 48 Bytes
Probieren Sie es online!
quelle
Perl, 30 Bytes
Enthält
+1
fürp
Geben Sie in STDIN eine Eingabe ohne Zeilenumbruch ein. Die Ausgabe erfolgt auch ohne Zeilenumbruch:
Wenn Sie kümmern sich nicht um führende und neue Zeilen dieses Hinter
25
(+3
für ,-p
da der Code enthält'
) auch funktioniert:quelle
${$&}++
. Es ist nicht so robust, könnte aber für diese Herausforderung ausreichen? Es gab auch einen Konsens über Meta,perl -p
der kein zusätzliches Byte benötigt,Perl with `-p`
sondern nur den Header anstelle von Perl. Ich versuche mich daran zu erinnern, dass ich das selbst mache ...1
gültig ist. In diesem Fallv
wird die benötigt. In Bezug auf das Zählen folge ich meistens codegolf.meta.stackexchange.com/a/7539/51507, was für mich der beständigste Meta-Post zum Zählen von Perl ist.&~v0
zum Erfassen des ersten Zeichens. Vielen Dank, dass Sie dieser Website beigetreten sind und Ihr langjähriges Fachwissen geteilt haben."
anstelle von'
with verwendet wird-e
, und dann können Sie das-ep
als +1 statt +3 zählen. (Getestet.)JavaScript,
615452 BytesNimmt die Eingabe als Array von Zeichen.
Versuch es
quelle
R ,
9487 BytesProbieren Sie es online!
Gibt eine (möglicherweise leere) Liste von Teilzeichenfolgen zurück.
Vielen Dank an Michael M für das Speichern von 7 Bytes!
quelle
function(s,n=nchar(s),g=substring)g(s,d<-which(!duplicated(g(s,1:n,1:n))),c(d[-1]-1,n))
wäre kürzer - und natürlich ein bisschen hässlicher ...substring
stattsubstr
?if(n)
dasubstring
wirft ein Fehler bei leerer Zeichenketteneingabe auf.substr
gibt einen Längenvektor zurück, der der ersten Eingabe entspricht, währendsubstring
der Längenvektor der längsten Eingabe entspricht.Stax , 8 Bytes
Online ausführen und debuggen
Die ASCII-Darstellung des gleichen Programms ist dies.
Für jedes Zeichen wird geteilt, wenn der Index des aktuellen Zeichens die aktuelle Position ist.
quelle
> <> ,
22 1714 Bytes-1 Byte danke an Emigna
Probieren Sie es online!
Gibt eine führende und eine nachfolgende Zeile aus.
Es verfolgt, welche Buchstaben bereits aufgetaucht sind, indem
p
eine Kopie des Zeichens an der entsprechenden Stelle in der zweiten Zeile eingefügt und eine neue Zeile gedruckt wird, wenn der von dieser Position abgerufene Wert nicht 1 war-1
quelle
g/p
! 16 BytesHaskell, 62 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 68 Byte
Übernimmt die Eingabe als Liste von Zeichen.
Testfälle:
Code-Snippet anzeigen
quelle
[""]
für den letzten Testfall akzeptabel sei. Ist es aber nicht . :-(PHP, 317 Bytes
Probieren Sie es online!
quelle
Rot , 79 Bytes
Probieren Sie es online!
Ungolfed:
quelle
SNOBOL4 (CSNOBOL4) ,
1159177 BytesProbieren Sie es online!
Druckt die durch Zeilenumbrüche getrennten Teilzeichenfolgen.
Erläuterung:
line
S
(forSPLIT
) wird eigentlich nicht geteilt, sondern extrahiert das erste Zeichen vonN
und speichert es (.
) inY
. AufF
ailure springt es zuEND
. Die Übereinstimmung sollte nur dann fehlschlagen, wennN
die Zeichenfolge leer ist. Wenn die Eingabe leer ist, springt sie direkt zuEND
und gibt nichts aus.S = S Y
verkettetY
aufS
.SPAN(S)
Stimmt gierig mit einer Reihe von Zeichen in übereinS
und sendet sie (.
) anOUTPUT
, wobei (.
)N
auf dieREM
wichtigsten Zeichen vonN
(falls vorhanden) gesetzt wird. Dann springt es zurück zuS
.quelle
PowerShell, 73 Byte
Verwendungszweck
quelle
Ruby ,
656258 BytesProbieren Sie es online!
Ein Lambda, das eine Zeichenfolge akzeptiert und ein Array von Zeichenfolgen zurückgibt.
Vorgehensweise: Hängen Sie für jeden Index entweder das Zeichen an diesem Index
s
an das Ergebnisarray oder an die letzte Zeichenfolge im Ergebnisarray an.String#index
Gibt den Index der ersten Instanz des Arguments zurück.-2 Bytes: Initialisierung
a
als Splat-Argument statt in einer eigenen Zeile. Vielen Dank, Value Ink !-1 Byte: Verwenden Sie
c=s[i]
...c
statts[i]
...s[i]
. Vielen Dank, Value Ink !-4 Bytes: Verwenden Sie
.times
anstelle von.map
quelle
Java 8,
193169155151 Bytes-14 Bytes dank @raznagul (für etwas Offensichtliches habe ich mich irgendwie verpasst ..)
-3 Bytes dank @OOBalance (wieder für etwas Offensichtliches habe ich mich irgendwie verpasst ..: S)
Erläuterung:
Probieren Sie es online aus.
quelle
if(l<1)
. Wennl
ist, sollte0
die Schleife sowieso nicht wie sie0<0
ist ausgeführt werdenfalse
.i=0
zweimal. Sie können 3 Bytes sparen, indem Sie das zweitefor(;i<l;i++)