(Dies ist meine erste Code-Golf-Frage)
Als ich ein Kind war, haben mein Vater und ich ein Spiel erfunden, bei dem das Nummernschild, das wir auf Autos sehen, bestimmte Punkte auf der Grundlage einiger recht einfacher Regeln enthalten kann:
X Betrag des gleichen Buchstabens oder der gleichen Zahl geben X-1 Punkte, Beispiele:
22 = 1 point
aa = 1 point
5555 = 3 points
Die Zahlen müssen nebeneinander stehen, geben also 3353
nur 1 Punkt, da die 5 die Reihenfolge der 3er durchbricht.
Eine Folge von X-Nummern in aufsteigender oder absteigender Reihenfolge, mindestens 3, ergibt X-Punkte. Beispiele:
123 = 3 points
9753 = 4 points
147 = 3 points
Das Punktesystem funktioniert nur für 1-stellige Zahlen, gibt also 1919
keine Punkte und 14710
nur 3 (147).
Sequenzen können kombiniert werden, um mehr Punkte zu erzielen. Beispiele:
1135 = 4 points (1 point for 11 and 3 points for 135)
34543 = 6 points (3 points for 345 and 3 points for 543)
Es ist jedoch nicht gestattet, eine größere Sequenz in zwei kleinere Sequenzen zu zerlegen, um zusätzliche Punkte zu erhalten. Dies 1234 = 123, 234 (6 points)
ist nicht zulässig.
Ihre Aufgabe ist es, in einer vorgegebenen Reihenfolge die Anzahl der Punkte zu bestimmen, die das Kennzeichen angibt.
In Dänemark sind die Nummernschilder folgendermaßen aufgebaut: CC II III, wobei C ein Zeichen und I eine Ganzzahl ist, und daher spiegeln meine Beispieleingaben diese Struktur wider. Wenn Sie möchten, können Sie die Sequenz an Ihre eigene Struktur anpassen oder, wenn Sie sich wirklich abenteuerlustig fühlen, das Programm die Struktur des Kennzeichens analysieren lassen, damit es auf allen Arten von Kennzeichen auf der ganzen Welt funktioniert. Geben Sie jedoch explizit die Struktur an, die Sie in Ihrer Antwort verwenden möchten.
Sie können die Eingabe nach Belieben vornehmen. Eine Zeichenfolge oder ein Array scheint mir am sinnvollsten zu sein.
Testeingang | Ausgabe:
AA 11 111 | 5
AB 15 436 | 3
OJ 82 645 | 0
UI 65 456 | 6
HH 45 670 | 5
YH 00 244 | 5
AJ 00 754 | 1
Aufgrund der Art und Weise, wie Sie Ihre eigene Struktur auswählen oder sogar alle Strukturen abdecken, sehe ich nicht unbedingt, wie ein Gewinner explizit bestimmt werden kann. Ich nehme an, der Gewinner sind die kürzesten Bytes der Struktur, für die man sich entschieden hat. (Und nehmen Sie keine Eingabe wie CICIC, um es sich einfach zu machen)
BEARBEITEN:
Aufgrund von Kommentaren habe ich ein paar zusätzliche Informationen zu teilen: Eine Folge von aufsteigenden oder absteigenden Zahlen bezieht sich auf eine arithmetische Folge, also X +/- a * 0, X +/- a * 1, ... X +/- a * n usw. So ist beispielsweise 3-5-7 3 + 2 * 0, 3 + 2 * 1, 3 + 2 * 2. Die Sequenz muss jedoch nicht bei 0 beginnen oder mit enden 0.
MEHR BEARBEITEN:
Sie können die Eingabe nach Belieben vornehmen. Sie müssen keine Leerzeichen, Gedankenstriche oder andere Zeichen eingeben, die die Lesbarkeit eines Kennzeichens verbessern. Wenn Sie Bytes sparen können, indem Sie nur Großbuchstaben oder ähnliches akzeptieren, können Sie dies auch tun. Die einzige Voraussetzung ist, dass Ihr Programm eine Zeichenfolge / ein Array / irgendetwas, das sowohl Zeichen als auch Zahlen enthält, aufnehmen und die richtige Anzahl von Punkten gemäß den angegebenen Regeln ausgeben kann.
XX 87 654
. Ich habe mir etwas ausgedacht, das für alle Ihre Testfälle richtig war, aber für diese irgendwie falsch. Ich arbeite daran, es zu beheben.CCIIIII
, keine Leerzeichen), sonst fehlt diesem Problem ein objektives Gewinnkriterium, das wir hier benötigen. So wie es ist, ist "(und nehmen Sie keine Eingabe wie CICIC, um es sich einfach zu machen)" sehr subjektiv. Was ist und ist keine zulässige Struktur?IA99999
(enthält eine abnehmende Folge von Codepunkten, jedoch keine Zahlen).Antworten:
05AB1E ,
25222018 BytesAkzeptiert eine Zeichenfolge aus alphabetischen Kleinbuchstaben und Zahlen ohne Leerzeichen.
Probieren Sie es online! oder als Test Suite
quelle
Schale ,
201615 Bytes-1 Byte dank @Zgarb
Nimmt Eingaben ohne Leerzeichen und in Kleinbuchstaben vor.
Probieren Sie es online!
Erläuterung
quelle
K0
kann¬
hier sein.IA99999
.Python 3 ,
19385 Bytes-3 Bytes dank Lynn
Nimmt die Eingabe als Byte-String mit Kleinbuchstaben als:
b'aa11111'
.Probieren Sie es online!
quelle
C=0!=d==c-l
ist noch kürzer.Java 8, 195 Bytes
Kann definitiv noch mehr golfen werden, indem eine andere Technik verwendet wird, um nach Sequenzen zu suchen.
Erläuterung:
Probieren Sie es hier aus.
quelle
Pyth ,
5150 Bytes (Staffelung)Überprüfen Sie alle Testfälle oder versuchen Sie es hier.
quelle
R ,
153,145, 143 BytesAnonyme Funktion, die einen Zeichenvektor verwendet und eine Ganzzahl zurückgibt.
Erwartete Eingabe
z(c("A", "A", "1", "1", "1", "1", "1"))
Probieren Sie es online!
Ungolfed-Version
quelle
C (gcc) 91 Bytes
Probieren Sie es online!
Idee aus der Python-Antwort von Felipe Nardi Batista gestohlen .
quelle
Pyth ,
4842 BytesDirekter Port von meiner Python-Antwort. Übernimmt die Eingabe als Byte-Zeichenfolge mit Kleinbuchstaben als: b'aa11111 '.
Dies ist mein erstes Mal, dass ich in Pyth programmiere, daher sind alle Tipps willkommen: D
Probieren Sie es hier aus
quelle
JavaScript,
216192186202201 BytesUneingeschränkt
Verlauf bearbeiten:
0000 XXX
Format funktioniert . (-24 Bytes)quelle
0000
gibt 7 Punkte, ist das richtig? (Es wird als eine arithmetische Folge und eine wiederholte Zahlenfolge gleichzeitig gelesen)