Bei einer Zeichenfolge, die nur Buchstaben enthält, wird die Länge der längsten Folge aufeinanderfolgender alphabetischer Buchstaben ausgegeben, die das Wort enthält, wobei die Reihenfolge keine Rolle spielt. Ein beispielhafter Algorithmus kann das Wort sortieren, Duplikate entfernen und dann die Länge des längsten Laufs ausgeben.
Testfälle
watch -> 1
stars -> 3
antidisestablishmentarianism -> 3
backdoor -> 4
a -> 1
tutorials -> 4
Zum Beispiel antidisestablishmentarianism
enthält die Buchstaben abdehilmnstr
. Die längsten Abfahrten sind lmn
und rst
, beide Länge 3.
Anmerkungen
Sie können alle Kleinbuchstaben, Großbuchstaben oder gemischten Buchstaben als Eingabe verwenden, die Groß- und Kleinschreibung kann jedoch keine Informationen über das Wort codieren (dh Sie können die ersten n
Zeichen nicht in Großbuchstaben schreiben, wenn n
die Länge der längsten Ausführung erreicht ist).
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
rst
: Eindeutig machen, sortieren und den längsten Durchlauf in Folge erzielen. Können wir Eingaben als Array von Zeichen annehmen?Antworten:
Jelly ,
10 9 8 76 BytesProbieren Sie es online!
9 benutzte Soks Methode :
ṢQẆẇƇØaṪL
Wie?
quelle
APL (Dyalog Classic) ,
109 Bytes-1 Byte dank H.PWiz
Probieren Sie es online!
⍞
gibt einen String ein⎕a
ist das englische Alphabet in Großbuchstaben⎕a∊⍞
ein boolescher Vektor der Länge 26 - welche Buchstaben kommen in der Zeichenfolge vor?⊆⍨
bilden Vektoren aufeinanderfolgender Einsen≢⍉↑
mischen Sie es in eine Matrix, transponieren Sie es und geben Sie seine Höhe zurück. Ermitteln Sie effektiv die Länge des längsten Vektors von 1squelle
⌈/≢¨
->≢⍉↑
R ,
4443 BytesFunktioniert mit einem Array von Kleinbuchstaben. Bearbeiten: Es wurde vom Testen der wahren Werte zum Multiplizieren mit der T / F für ein Byte geändert.
Probieren Sie es online!
Führt eine Lauflängencodierung für Buchstaben aus, die in den angegebenen Zeichen enthalten sind, und gibt dann den Maximalwert für die Wahrheiten zurück.
quelle
Perl 6 , 41 Bytes
Probier es aus
Erweitert:
Gegeben
'stars'
,.ords.sort.squish Z-0..*
würde wiederkommen(97,113,113,113)
quelle
Haskell , 35 Bytes
Probieren Sie es online!
Haskell , 50 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 51 Byte
Der Fall der Eingabezeichenfolge spielt keine Rolle.
Probieren Sie es online!
Wie?
Wir konvertieren zuerst die Eingabezeichenfolge in eine Bitmaske der gefundenen Buchstaben mit:
Die bitweise Verschiebung wird mit einem impliziten Modulo 32 verarbeitet.
Beispiel:
Dann 'reduzieren' wir die Anzahl aufeinanderfolgender Einsen in der Bitmaske, indem wir sie wiederholt mit einer nach links verschobenen Kopie von sich ANDEN, bis alle Bits gelöscht sind:
Die Anzahl aufeinanderfolgender Buchstaben in alphabetischer Reihenfolge ist die Anzahl der Iterationen des obigen Prozesses. Daher die rekursive Funktion:
quelle
Pyth , 9 Bytes
Die Eingabe wird als Zeichenfolge in Kleinbuchstaben angenommen. Versuchen Sie es online aus hier , oder überprüfen alle Testfälle auf einmal hier .
quelle
y
anstelle von verwenden.:
.MATL , 10 Bytes
Die Eingabe erfolgt in Kleinbuchstaben.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Dieser verwendet eine Mischung aus @ Sundars (alt) und @ NGN Ansätze.
Erläuterung
Betrachten Sie die Eingabe
'tutorial'
als Beispiel.quelle
Python 3 , 55 Bytes
Probieren Sie es online!
Python 2 , 58 Bytes
Probieren Sie es online!
Python 2 , 63 Bytes
Probieren Sie es online!
quelle
f=lambda s:s and-~f({*s}&{c+1for c in s})or 0
?05AB1E , 6 Bytes
Dank Adnan 1 Byte gespart : Nehmen Sie die zusammenhängenden Teilzeichenfolgen und sortieren Sie sie nach Länge (→
Œ...é
) stattdessen das integrierte Powerset ( ) zu verwenden.æ
Probieren Sie es online!
Auch 6 Bytes
2 Bytes gespart, wieder dank Adnan :
ASå
stattdessen verwendenêÇ¥Θ
, wodurch auch die Notwendigkeit entfällt, das Maximum am Ende zu erhöhen. Siehe die Revisionshistorie , um die beviours der beiden Methoden zu vergleichen.Probieren Sie es online!
Wie das funktioniert
Ich mag Herausforderungen wie diese, die zu einer Vielzahl unterschiedlicher Ansätze führen.
quelle
êæAÃ`g
und das zweite Programm kann mit Golf gespielt werdenASåγOZ
.ASå
Trick.TSQL (Microsoft SQL Server), 206 Byte
Verwenden Sie zur Eingabe die folgende
DECLARE
Anweisung vor dem Code:Es wird erwartet, dass die Eingabe in Groß- und Kleinschreibung erfolgt (Groß- und Kleinschreibung spielt keine Rolle, gemischte Groß- und Kleinschreibung würde jedoch nicht funktionieren).
Ungolfed:
Erläuterung:
Unterteilt die Zeichenfolge in eine Zeile für jedes Zeichen (angepasst von /programming//a/27623321/1474939 ) in der
CTE
CTE.Findet dann Läufe aufeinanderfolgender Buchstaben durch Konvertieren in den ASCII-Code in der
Runs
CTE.Zuletzt wird der größte Lauf ausgewählt und in der select-Anweisung zurückgemeldet.
quelle
C (gcc) ,
5856 Bytes2 Bytes gespart dank @gastropner
Verwendet den gleichen Ansatz wie meine Node.js-Antwort . Der Fall der Eingabezeichenfolge spielt keine Rolle.
Probieren Sie es online!
Kommentiert
quelle
1<<*s
oder handelt es sich um ein Standardverhalten?1<<32
führt0
und gibt einen Datentyp Größe Warnung.K (ngn / k) , 17 Bytes
Probieren Sie es online!
{
}
ist eine Funktion mit Argumentx
-
gibt es nur, um die Zeichen in Zahlen umzuwandeln (es ist egal, ob sie negativ sind){
}\
Wendet eine Funktion bis zur Konvergenz an, wobei Zwischenergebnisse erhalten bleibenx+1
Addiere 1 zu jeder Zahl inx
^
"without" - die Liste auf der linken Seite ohne Elemente, die in der Liste auf der rechten Seite vorkommenx^x^x+1
bedeutetx
gekreuzt mitx+1
1_
Lassen Sie das erste Element fallen#
Anzahlquelle
#1_{x^x^x+1}\-
?C (gcc) , 100 Bytes
Probieren Sie es online!
Erläuterung
Probieren Sie es online!
quelle
MATL ,
1210 BytesProbieren Sie es online!
Erläuterung:
91:
- Erstellen Sie die Liste der Zahlen von 1 bis 91. 91 ist das Zeichen '[', das nach 'Z' steht. Auf diese Weise wird effektiv die Liste aller Zeichen von '\ x1' bis '[' erstellt. (Wir wollen hauptsächlich solche im Bereich ['A'-1:' Z '+ 1], aber der Rest tut nicht weh und benötigt weniger Bytecount.)w
- Implizite Eingabe, bringe die Eingabe an den Anfang des Stapels (nimm 'TUTORIALS' an)X-
- Differenz einstellen. Dies lässt nur die Zeichen, die nicht in der Eingabezeichenfolge gefunden wurden, in ihrer ursprünglichen Reihenfolge ("stabil"). Stapel:' !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHJKMNPQVWXYZ['
d
- Unterschied zwischen aufeinanderfolgenden Elementen in dieser Liste. Stapel:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 5 1 1 1 1 1]
X>
- Holen Sie sich das Maximum dieser Unterschiede, dh die maximale Anzahl aufeinanderfolgender Alphabete, die in der eingestellten Differenz fehlen.q
- Dekrementieren, um die tatsächliche Zeichenanzahl zu erhaltenÄlter:
12 Bytes
Probieren Sie es online!
quelle
Retina 0.8.2 , 54 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Sortieren Sie die Buchstaben in der Reihenfolge.
Deduplizieren Sie die Buchstaben.
Duplizieren Sie jeden Buchstaben in separaten Zeilen.
Dekrementiere das erste von jedem Paar.
Wenn dies jetzt mit dem vorherigen Zeichen übereinstimmt, fügen Sie sie wieder zusammen.
Zählen Sie die Längen aller Läufe.
Sortieren Sie sie in umgekehrter numerischer Reihenfolge.
Nimm die erste (größte).
quelle
J, 16 Bytes
-7 Bytes dank FrownyFrog
Probieren Sie es online!
Erläuterung
quelle
]
anstelle von verwenden können.~.@/:~
Das Alphabet ist bereits sortiert, sodass Sie die Eingabe nicht sortieren und nur die eindeutigen Elemente behalten müssen. TIO - 18 BytesC (GCC) ,
9892 BytesVielen Dank an Jonathan Frech für die Vorschläge.
Nur Großbuchstaben.
Probieren Sie es online!
quelle
k;
am Ende eigentlich nicht . Das implizite Zurückgeben von gcc ist ein Nebeneffekt der Variablenzuweisung, der anscheinend als letzter Schritt in Ihrer for-Schleife ausgeführt wird.Japt
-h
, 9 BytesCase insenstive, nimmt Eingaben als String oder als Array von Zeichen entgegen.
Probieren Sie es aus oder führen Sie mehrere Tests durch (die zweite Zeile dient als Ersatz für das
-h
Flag, sodass das Flag stattdessen zur Verarbeitung mehrerer Eingaben verwendet werden kann).Erläuterung
quelle
-1
bitte einen Grund für Ihre Frage angeben ?Perl 5, 68 Bytes
Probieren Sie es online aus .
Ungolfed:
quelle
C (GCC) ,
666563 BytesAngenommen, die Eingabe enthält nur Kleinbuchstaben. Zunächst durchläuft es die Zeichenfolge und setzt Bits in einer Ganzzahl, nach der Buchstaben angezeigt werden. Als nächstes wird der längste Streifen von 1 Bit in der ganzen Zahl gezählt.
Bearbeiten:
a
ist global, wird also beim ersten Aufruf auf 0 initialisiert. Die zweite Schleife stellt sicher, dass sie vor der Rückkehr auf 0 zurückgesetzt wird. Daher können wir ein manuelles Zurücksetzen vermeiden.Probieren Sie es online!
quelle
Perl 5, 62 + 2 (
-nF
Flag) = 64 BytesProbieren Sie es online aus .
Perl 5, 68 Bytes
Probieren Sie es online aus .
quelle
-pF
und ein paar Bytes sparen-MList::Util+(max)
, um zu 56 zu gelangen: Probieren Sie es online aus!-MList::Util=max
fügt der Ergebnisbewertung 16 Bytes hinzu.-MList::Util+(max)
-pF
oder ähnlich. codegolf.meta.stackexchange.com/a/14339/9365SQLite 265
Ungolfed:
quelle
Brachylog ,
141312 BytesProbieren Sie es online!
Langsam genug, dass die Eingabe "Antidisestablishmentarianism" auf TIO nicht beendet wird. Relativ viel schneller für +1 Byte:
13 Bytes
Probieren Sie es online!
Verwenden Sie
dos
anstelle von⊇p
: S ist eined
eduplizierteo
Teilzeichenfolges
der Eingabe, anstatt nur einer Permutation einer Teilmenge.quelle
Haskell , 87 Bytes
Probieren Sie es online!
Erwartet Kleinbuchstaben
Erläuterung:
quelle
Python 2 , 95 Bytes
Probieren Sie es online!
quelle
Pyth - 11 Bytes
Die Eingabe muss in Anführungszeichen gesetzt werden. Wenn nicht erlaubt:
Pyth - 12 Bytes
Erläuterung:
quelle
Kotlin , 97 Bytes
Probieren Sie es online!
quelle
Java 8, 77 Bytes
Hafen von Arnauld ‚s C Antwort . Probieren Sie es hier online aus .
Ungolfed:
quelle
> <> 63 Bytes
Liest Kleinbuchstaben von stdin und gibt eine Zahl an stdout aus.
Probieren Sie es online!
quelle