Herausforderung
Mark ist ein Student, der seine N
Noten verkettet in einer einzigen Zeile erhält .
Die Herausforderung besteht darin, seine Marken zu trennen, in dem Wissen, dass jede Marke nur 0
oder 1
oder 2
oder 3
oder 4
oder 5
oder 6
oder 7
oder 8
oder 9
oder sein kann 10
.
Eingang
N
natürliche Zahl und eine Zeile.
Ausgabe
Eine Reihe von natürlichen Zahlen.
Beispiel
N, One line------------------> Set of marks
3, '843'---------------------> [8, 4, 3]
1, '0'-----------------------> [0]
2, '1010'--------------------> [10,10]
3, '1010'--------------------> [1,0,10] or [10,1,0]
4, '1010'--------------------> [1,0,1,0]
9, '23104441070'-------------> [2, 3, 10, 4, 4, 4, 10, 7, 0]
12,'499102102121103'---------> [4, 9, 9, 10, 2, 10, 2, 1, 2, 1, 10, 3]
5, '71061'-------------------> [7, 1, 0, 6, 1]
11,'476565010684'------------> [4, 7, 6, 5, 6, 5, 0, 10, 6, 8, 4]
4, '1306'--------------------> [1, 3, 0, 6]
9, '51026221084'-------------> [5, 10, 2, 6, 2, 2, 10, 8, 4]
14,'851089085685524'---------> [8, 5, 10, 8, 9, 0, 8, 5, 6, 8, 5, 5, 2, 4]
11,'110840867780'------------> [1, 10, 8, 4, 0, 8, 6, 7, 7, 8, 0]
9, '4359893510'--------------> [4, 3, 5, 9, 8, 9, 3, 5, 10]
7, '99153710'----------------> [9, 9, 1, 5, 3, 7, 10]
14,'886171092313495'---------> [8, 8, 6, 1, 7, 10, 9, 2, 3, 1, 3, 4, 9, 5]
2, '44'----------------------> [4, 4]
4, '9386'--------------------> [9, 3, 8, 6]
Regeln
- Wenn mehrere Ausgänge möglich sind, geben Sie nur einen Ausgang an.
- Nur die Wertmarke
10
steht auf zwei Dezimalstellen, andere auf einer Dezimalstelle. - Die Ein- und Ausgabe kann in jedem beliebigen Format erfolgen
- Keine Notwendigkeit, ungültige Eingaben zu verarbeiten
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
code-golf
string
array-manipulation
mdahmoune
quelle
quelle
n, 'string'
Paare aus dem kopierten Beispieltextblock abgerufen habe:spl = [item.split('-')[0] for item in text.split('\n')]
Antworten:
Brachylog ,
2321 Bytes-2 Bytes dank Fatalize
Probieren Sie es online!
Der Eingang ist ein Paar
[Line, N]
.Dies ist mein erstes Brachylog-Programm, daher gibt es wahrscheinlich viel Raum für Verbesserungen.
Es ist sehr langsam, wenn die Länge der Linie> 7 ist.
Erläuterung:
(*)
ịṫ?
prüft, dass keine führenden Nullen vorhanden sind. Es konvertiert die Zeichenfolge in eine Ganzzahl und dann zurück in eine Zeichenfolge und vergleicht sie mit der ursprünglichen Zeichenfolge.quelle
ị
und für den führenden Null - Check:h~c.{ℕ≤10}ᵛ&t~l
. Dies ist wahrscheinlich langsamer, da die Dekonkatenation von Ganzzahlen auch für unbekannte Ganzzahlen durch Einschränkungen funktionieren muss, was sie ineffizient macht.h
undt
, um das erste / letzte Element zu erhalten, effizienter ist als die Verwendung∋
für beide (was in den meisten Programmen nicht einmal funktioniert).Perl 6 , 25 Bytes
Probieren Sie es online!
Anonymer Codeblock, der eine Zahl und eine Zeichenfolge akzeptiert und als Match-Objekt zurückgibt.
Erläuterung:
quelle
Python 3 , 47 Bytes
Probieren Sie es online!
Nimmt die "eine Zeile" als Bytestring mit unformatierten Bytes
\x00 - \x09
. Wenn es nicht akzeptabel ist:Python 3 , 56 Bytes
Probieren Sie es online!
Nimmt "eine Zeile" als Bytestring.
quelle
V ,
17, 12 BytesProbieren Sie es online!
Ich war mit 17 Bytes zufrieden, aber als 05AB1E mit 13 einherging, konnte ich eine Herausforderung nicht unbeantwortet lassen. : D
Hexdump:
Alternative Lösung:
Leider ersetzt dies
10
mit1 0
quelle
Ruby , 57 Bytes
Probieren Sie es online!
Dies mag sich als nicht die golferischste Herangehensweise herausstellen, aber es scheint eine unterhaltsame Idee zu sein, vorübergehend
10
ein Hex zu ersetzenA
, was im Übrigen auch eine gute Note ist (wenn wir das AF-Bewertungssystem berücksichtigen :)).quelle
Haskell , 68 Bytes
Probieren Sie es online!
Nehmen Sie sich gierig 10 Sekunden Zeit, solange mehr Ziffern als Zeichen übrig sind.
quelle
JavaScript,
5752 BytesProbieren Sie es online
quelle
Python 3 ,
71 6859 Bytesdank ovs nochmal 9 bytes runter.
Probieren Sie es online!
Ich habe ursprünglich versucht,
str.partition()
rekursiv zu verwenden , aber die Verwendungreplace
hat mich nicht allzu lange danach ins Gesicht geschlagen. Kann jemand dies verbessern?Hier ist auch ein TIO-Link, den ich verwendet habe, um die Testfälle in etwas kopierbareres / einfügbareres zu verwandeln
quelle
: [c
und'x' else
und10 for
<number>e
,<letter><number>
,f'
.lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.Haskell , 98 Bytes
Probieren Sie es online aus oder testen Sie alle!
Erläuterung
Die Funktion
s
führt alle möglichen Teilungen durch, zum Beispiel:"1010"
wird[[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
, notieren Sie, wie die längsten Teilungen am Anfang enden (weil1:0:y
vorher kommt10:y
).In diesem Sinne können wir alle diese Werte nehmen und die
y
s herausfiltern,y == take n y
wodurch auch Teilungen erhalten bleiben, die kürzer als erforderlich sind. Zum Beispiel mit lassen4
wir die Liste gleich[[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
.Jetzt können wir nur das erste Element in dieser Liste erhalten, da die Eingaben immer gültig sind (z. B.
5!"1010"
würde auch geben[1,0,1,0]
, aber wir müssen nicht damit umgehen).Hinweis: Ich habe irgendwie falsch gezählt. Hat
y==take n y
die gleiche Länge wielength y==n
: Squelle
Perl 5
-plF
, 39 BytesProbieren Sie es online!
quelle
Sauber , 128 Bytes
Probieren Sie es online!
quelle
05AB1E , 13 Bytes
Probieren Sie es online! oder als Test Suite
Erläuterung
quelle
JavaScript (Babel Node) ,
70 6959 BytesÜbernimmt die Eingabe als
(n)(line)
.Probieren Sie es online!
Kommentiert
JavaScript (ES6),
6459 Bytes5 Bytes dank @ guest271314 gespeichert
Übernimmt die Eingabe als
(n)(line)
.Probieren Sie es online!
Kommentiert
quelle
s.match()
gibt ein Array von Strings zurück, aber a"10"
kann[1,0]
in der Callback-Funktion von in (2 Integer) aufgeteilt werdenflatMap()
.eval(`[${s}]`.replace('1,0',10))
Java (OpenJDK 8) , 78 Byte
Ein netter Einzeiler mit der Streams-API.
Probieren Sie es online!
Wie es funktioniert
quelle
R , 63 Bytes
n
Ersetzen Sie die nächsten 10, die Sie für ein":"
(das ASCII-Zeichen nach 9) erreichen, während die Länge der Zeichenfolge größer als ist . Teilen Sie dann die Zeichen in Zahlen auf, indem Sie den ASCII-Wert jedes Zeichens in der Zeichenfolge verwenden.Probieren Sie es online!
quelle
Rot , 91 Bytes
Probieren Sie es online!
quelle
Jelly , 18 Bytes
Probieren Sie es online!
quelle