Wenn Sie eine Zeichenfolge als Eingabe angeben, suchen Sie die längste zusammenhängende Teilzeichenfolge, die mindestens zweimal kein Zeichen enthält. Wenn es mehrere solcher Teilzeichenfolgen gibt, können Sie beide ausgeben. Wenn Sie möchten, können Sie davon ausgehen, dass sich die Eingabe im druckbaren ASCII-Bereich befindet.
Wertung
Die Antworten werden zuerst nach der Länge ihrer längsten nicht wiederholten Teilzeichenfolge und dann nach ihrer Gesamtlänge geordnet. Niedrigere Punktzahlen sind für beide Kriterien besser. Je nach Sprache wird dies wahrscheinlich eine Code-Golf- Herausforderung mit einer Quellenbeschränkung sein.
Trivialität
In einigen Sprachen ist es ziemlich einfach, eine Punktzahl von 1, x (Sprache) oder 2, x (Brain-Flak und andere Tarpits) zu erreichen. In anderen Sprachen ist es jedoch eine Herausforderung, die längste nicht wiederholte Teilzeichenfolge zu minimieren. Es hat mir sehr viel Spaß gemacht, in Haskell eine Punktzahl von 2 zu erreichen. Ich empfehle Ihnen daher, Sprachen zu suchen, in denen diese Aufgabe Spaß macht.
Testfälle
"Good morning, Green orb!" -> "ing, Gre"
"fffffffffff" -> "f"
"oiiiiioiiii" -> "io", "oi"
"1234567890" -> "1234567890"
"11122324455" -> "324"
Bewertung Vorlage
Sie können Ihre Programme mit dem folgenden Snippet bewerten:
quelle
11122324455
Jonathan Allan stellte fest, dass meine erste Revision nicht richtig damit umgegangen war.11122
taucht danach auf324
, wird aber dedupliziert12
.Antworten:
C, Score 2,
747720662 BytesFunktioniert mindestens mit 32-Bit-MinGW (mit deaktivierten Optimierungen). Verwendet kein einziges Schlüsselwort.
Funktioniert offenbar auch auf TIO mit gcc und clang: Probieren Sie es online aus! (Danke @Dennis!)
Rufen Sie an mit:
Ausgabe:
Der Code mit etwas besser lesbarer Formatierung:
Und dies kann verwendet werden, um den richtigen Abstand zu erzeugen, um zur Formatierung mit Punktzahl 2 zu gelangen: Probieren Sie es online aus!
C, Punktzahl 3, 309 Bytes
Probieren Sie es online!
quelle
Haskell , Score 2,
492...307224212209207 BytesProbieren Sie es online!
Hunderte von Bytes dank WW und Ørjan Johansen !
Erläuterung
Die Funktion
(??)
akzeptiert ein Zeichenc
und eine Zeichenfolges
und gibt das längste Präfix zurücks
, das nicht enthalten istc
. Ungolfed und nicht für Partitur optimiert:Die Funktion
ss
verwendet(??)
die längste Präfix der einzigartigen Zeichen einer bestimmten Zeichenfolge zu finden:(##)
ist eine Funktion, die zwei Zeichenketten benötigt und die längere zurückgibt. Der Längenvergleich funktioniert, indem die Zeichenfolgex
so oft wiex
lang (x>>y
) und wiey
lang (y>>x
) wiederholt wird und geprüft wird, welche der resultierenden Zeichenfolgen lexikographisch größer ist.Schließlich
ff
recurses über die Eingabezeichenfolge erzeugt das längste Präfix mitss
rekursiv die längste nicht wiederholenden Teilzeichenkette des Schwanzes der Zeichenfolge und kehrt die längere der beiden bestimmt , mit(##)
:quelle
@
Trick tatsächlich 2 Bytes kostet, wenn ich nur?
zwei Zeichen mache : 207Lua, Punktzahl 3, 274 Bytes
Hinweis: Lua 5.2 oder Lua 5.3 ist erforderlich
Verwendung:
Hauptidee: Verschachteln Sie alles mit Leerzeichen, fügen Sie
" "
(zwei Leerzeichen) ein, um lange Bezeichner zu teilenUngolfed-Code:
Aktuelles Programm (nach Entfernen aller Leerzeichenpaare):
Übrigens, das JS-Snippet zur Berechnung der Punktzahl schlägt in meinem Code fehl.
quelle
Retina 0.8.2 , 37 Bytes, 9 Punkte
Probieren Sie es online! Die direkte Übersetzung dieser Antwort auf Retina 1 spart ein Byte durch Verwenden von
N
anstelle vonO#
. Wenn Sie jedoch die Antwort von Retina 1 auf 28 Bytes reduzieren, steigt die Punktzahl tatsächlich auf 10! Erläuterung:Generieren Sie alle Suffixe der Eingabe.
Übernehmen Sie für jedes Suffix das Präfix bis zum ersten duplizierten Zeichen.
Sortieren Sie die verbleibenden Zeichenfolgen in umgekehrter Reihenfolge der Länge (dh längste zuerst).
Nimm das längste.
quelle
Jelly , Punktzahl 2, 14 Bytes
Vielen Dank an @JonathanAllan für die Bewertung -1, +7 Bytes und für das Bemerken eines Fehlers.
Probieren Sie es online!
Wie es funktioniert
quelle
Sauber , Ergebnis
75, 276 BytesProbieren Sie es online! Vielen Dank an @ Οurous , der mir gezeigt hat, dass es möglich ist, ABC-Maschinencode direkt aus Clean heraus aufzurufen. Dies ermöglicht es, den vorherigen Flaschenhals loszuwerden, der die
import
Mindestpunktzahl auf 7code
festlegt , benötigt jedoch das Schlüsselwort, das die Mindestpunktzahl für diesen Ansatz auf 5 festlegt.Eine ungolfed und nicht score-optimierte Version des obigen Codes finden Sie hier: Probieren Sie es online!
Vorherige Version mit Punktzahl 7,
158154130 BytesProbieren Sie es online!
Mit dem kann
import
die Punktzahl nicht unter 7 fallen. Ohne den Import müsste man Gleichheit auf Strings oder Zeichen implementieren, ohne irgendwelche Bibliotheksfunktionen, diewahrscheinlich nichtmöglich sind, wie in der neuen Version oben zu sehen ist.quelle
A code block with raw ABC instructions, which can be used for primitive functions like integer addition, for linking with C, bypassing the type system... welcome down the rabbit hole!
( von cloogle ) klingt sicherlich einladend. Ich werde es morgen untersuchen, danke für den Vorschlag!-IL
, da gerade nichts importiert wird.Python 3 , Score 4, 155 Bytes
Dies definiert eine Funktion
l
.Vielen Dank an @xnor für den Hinweis, dass Zeichenfolgen der Länge 3 die Punktzahl nicht erhöhen und 32 Byte einsparen.
Probieren Sie es online!
quelle
Brachylog , Score 2, 19 Bytes
Probieren Sie es online!
Nur eine langweilige alte "space everything out" Antwort. Zumindest habe ich gelernt, dass Metapredikate von den Prädikaten beabstandet sein können und immer noch funktionieren (und die (parametrischen) Indizes und die hochgestellten Indizes nicht).
s ᶠ
- Finde alle Teilstrings des angegebenen Stringsl ᵒ
- ordne sie nach ihrer Länge (standardmäßig aufsteigend)≠ ˢ
- Wählen Sie diejenigen aus, die alle unterschiedlichen Elemente habent
- Holen Sie sich den Schwanz (letztes Element) davon - den mit der größten Längequelle
Pyth , 11 Bytes, 4 Punkte
-4 Punkte dank Dennis
Probieren Sie es online!
quelle
Schale , Punktzahl 2, 10 Bytes
Probieren Sie es online!
Erläuterung
Das Programm ist dazu äquivalent:
Die integrierte Funktion
Ë
wertet≠
alle geordneten Argumentpaare ausx
und gibtlength(x)+1
ansonsten zurück, ob jedes Ergebnis wahr ist0
. Wenn wir dies maximieren, finden wir die längste Zeichenfolge, die keine wiederholten Zeichen enthält.In der Einreichung füge ich die Identitätsfunktion einfach
I
zweimal zwischen die einzelnen Funktionen ein. DaIË
ist das gleiche wieË
,I≠
ist das gleiche wie≠
und so weiter, ändert dies nichts an der Semantik. Die einzige Gefahr besteht darin, dass eine Funktion höherer Ordnung entscheiden könnte, eines derI
s als Argument zu verwenden. Glücklicherweise führt dies jedoch zu einem Tippfehler in unserem Programm, sodass dies nicht der Fall ist.quelle
Clojure, 4 Punkte
Oh man das war schmerzhaft!
N
implementiertnext
,R
istreduce
,C
istcount
,J
istconj
(funktioniert nur für Vektoren) undI
istiterate
.apply str
Gibt es zweimal, da andernfalls "aaaa" -Eingaben keine Zeichenfolge, sondern einen Vektor zurückgeben würden[\a]
. Zum Glück musste ichapply
und verwendenassoc
, ich wusste nicht, dass Sie einen Index jenseits des letzten Elements eines Vektors zuordnen können: oquelle
Gelee , Score 5, 10 Bytes
Probieren Sie es online!
quelle
ẆµQQ ⁼ µ Ðf µ Ṫ
(Wahrscheinlich wurden jetzt zu viele Leerzeichen hinzugefügt, aber es ist nur ein Beispiel. Ich überlasse es Ihnen, die Byte-Anzahl im Vergleich zu Leerzeichen zu optimieren.)Python 3 , Punktzahl 4, 317 Bytes
Probieren Sie es online!
Unerwarteter Code:
lambda a
enthält,mbda
was die Note 5 hat, und eine Funktion benötigt,return
die anscheinend nichtexec
bearbeitet werden kann (benötigt also eine Note von mindestens 5 füreturn
), so dass ein vollständiges Programm erforderlich war. Es ist wahrscheinlich möglich, die unerreichte Codegröße ein wenig zu verringern, aber ich kann keine schnelle deutliche Verbesserung feststellen.quelle
Alice , 40 Bytes
(Hinterer Zeilenumbruch)
Probieren Sie es online!
Der Befehlszeiger bewegt sich im Ordnungsmodus diagonal, sodass nur jedes zweite Zeichen ausgeführt wird.
quelle
Perl 6 , Score:
15 108, Länge:46 5562 BytesProbier es aus
Probier es aus
Probier es aus
Erweitert:
quelle
Java 8,
9Punkte(384 B)7 (401 B)Erste Version. Werde von hier runter gehen. Das Ergebnis liegt bei 9"ubstring "
,substring
wird also der erste Teil sein, der ersetzt werden muss." length"
, was ich wahrscheinlich nicht weiter reduzieren kann. Ich bezweifle, dass es möglich ist, die vier Verwendungen von fallen zu lassenlength
. Wenn es möglich ist, kann" eturn"
(6) die Punktzahl als endgültige Verbesserung um 1 senken, aber ich denke, das ist es (außer vielleicht eine kleine Verringerung der Byteanzahl).Probieren Sie es online aus.
quelle
Haskell , Punktzahl 7
-4 danke an Laikoni.
Probieren Sie es online!
quelle
f s=snd$maximum[(0<$i,i)|i<-tails=<<inits s,nub i==i]
Speichert ein Byte und zwei in der Partitur.Mathematica, Partitur
119Ein paar Bytes von der längsten nicht wiederholten Zeichenfolge entfernen, indem der Name der Funktion verdeckt wird:
quelle
Kotlin , Punktzahl:
11109 Bytes, Länge:227246245 BytesDas längste
ubstring
ist 9 ZeichenEs heißt so:
quelle
roupingBy
und{
einfügen?roupingBy
(das sind 9 Zeichen), sonderneachCount
(mit nachgestelltem Leerzeichen).roupingBy
hat ein abschließendes Leerzeichen (sichtbar im Markdown, aber der Renderer scheint es zuPyth , Punktzahl 3 (
1814 Bytes)Probieren Sie es online!
Die längste nicht wiederholende Teilzeichenfolge ist
.:
.quelle
e f {I T .:
.05AB1E , 22 Byte | Prüfungsergebnis: 2
-1 Punktzahl + 7 Bytes dank HeebyJeeby
Probieren Sie es online!
05AB1E , 15 Bytes | Prüfungsergebnis: 3
Probieren Sie es online!
05AB1E , 8 Bytes | Prüfungsergebnis: 8
Probieren Sie es online!
05AB1E kann eigentlich etwas ziemlich Billiges tun ... das Hinzufügen von Whitespace in 05AB1E bewirkt nichts.
Wenn es eine Regel dagegen gibt, kann ich auch
´
7 andere Zeichen verwenden und mögen.quelle