In diesem Problem wird eine Zeichenfolge, die eine Produktkennung darstellt, in drei Komponenten unterteilt.
- Der erste Teil besteht aus beliebig langen oberen und unteren Buchstaben, die das Lager darstellen.
- Der zweite Teil besteht aus Ziffern, die die Produktnummer darstellen. Dieser Teil ist ebenfalls von beliebiger Länge.
- Der letzte Teil ist Qualifizierer wie Größe und Farben, und dieser Teil fährt bis zum Ende der Zeichenkette fort. Die Qualifikationsmerkmale beginnen garantiert mit einem Großbuchstaben und bestehen aus alphanumerischen Zeichen.
Jeder Teil sollte klar getrennt gedruckt werden. Es ist garantiert, dass jedes Teil nicht leer ist.
Der Gewinner ist derjenige, der die wenigsten Bytes verwendet, um dieses Problem zu lösen.
Beispiel:
Eingabe: UK7898S14
Ausgabe:
UK
7898
S14
Hier ist Großbritannien, 7898 ist der Produktcode und S14 ist Größe 14.
Beispiel 2:
Eingabe: cphDK1234CYELLOWS14QGOOD
Ausgabe:
cphDK
1234
CYELLOWS14QGOOD
Hier ist cphDK Kopenhagen, Dänemark, 1234 ist der Produktcode, CYELLOWS14QGOOD steht für gelbe Farbe, Größe 14 und gute Qualität.
Antworten:
Perl, 12 Bytes
11 Byte Code + 1 Byte für
-p
Flag.Um es auszuführen:
quelle
APL, 18
Durchsucht die ersten beiden Punkte, an denen ein Wechsel von Zeichen zu Ziffer oder umgekehrt stattfindet, und teilt die Zeichenfolge mit diesen Punkten.
quelle
Retina ,
2814108 Bytes4 Bytes gespart dank Dom Hastings .
2 Bytes gespart dank Martin Ender .
Probieren Sie es online!
quelle
Haskell, 36 Bytes (kein regulärer Ausdruck)
Dies gibt das Ergebnis im Format
("UK",("7898","S14"))
. Die Idee ist, bei der ersten Ziffer zu teilen und dann den Rest bei der ersten Nicht-Ziffer zu teilen. Probieren Sie es auf Ideone .quelle
JavaScript,
3836 BytesBeispiel
Code-Snippet anzeigen
quelle
JavaScript (ES6),
2826 Bytes2 Bytes dank @Grax gespart
Beispiele
Code-Snippet anzeigen
quelle
s=>s.replace(/\d+/,` $& `)
Gema,
1712 Zeichen(Der Trick , den Ländercode nicht explizit Umgang schamlos ausgeliehen von Dada ‚s Perl - Lösung . Appreciation sollte zum Ausdruck gebracht werden.)
Probelauf:
quelle
Python 2, 40 Bytes
Ich kenne nicht viel Regex, aber zum Glück ist dieses Problem einfach genug :) Trennt die Eingabezeichenfolge in eine Liste der Länge 3, die jeden Teil enthält.
quelle
05AB1E ,
393716 BytesDank Emigna wurden viele Bytes gespart.
Es wird die CP-1252-Codierung verwendet.
Probieren Sie es online!
(Dies ist mein erster Beitrag hier!)
quelle
.páà¬
, um den ersten Teil zu bekommen, aber es scheint auf den ersten Blick nicht für den Rest zu helfen.JavaScript (ES6), 36 Byte
Beispiele
Code-Snippet anzeigen
quelle
Java 7,
200185174167 BytesUngolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
C #,
191177 BytesGolf gespielt:
Ungolfed:
EDIT1: @Link Ng sparte 14 Bytes.
quelle
PHP, 48 Bytes
Mit seinen
$limit
Parametern und die phantastisch nützlich\K
,preg_split()
ist für diese Herausforderung perfekt.quelle
MATLAB,
8173 BytesFunktion, die eine Zeichenfolge akzeptiert und ein Zellenarray mit drei Zeichenfolgen zurückgibt. Getestet in Version R20105b.
Beispiel Verwendung:
Erläuterung
Der reguläre Ausdruck
(?<=^\D+)\d+')
entspricht einer Gruppe von Ziffern, denen vom Anfang der Zeichenfolge an keine Ziffern vorangestellt sind. Letztere sind nicht Teil des Spiels.Die vierte Ausgabe von
regexp
ist die'match'
; und die siebte Ausgabe ist die'split'
, dh die zwei Teile der Zeichenkette vor und nach dem Match.quelle
Ruby, 28 Bytes
Dies umgibt den ersten Ziffernblock mit Zeilenumbrüchen.
quelle
47 Zeichen
(43 Zeichen Code + 4 Zeichen Befehlszeilenoptionen.)
(Wieder die alte Geschichte: am Anfang ziemlich elegant, dann wird sie schmerzhaft wortreich.)
Probelauf:
Online-Test (Die Weitergabe
-r
über eine URL wird nicht unterstützt. Prüfen Sie die Raw-Ausgabe selbst.)quelle
PHP,
61 59 5655 BytesDies gibt auch den Anfangscode aus:
Bearbeiten
Vielen Dank an @manatwork für die Speicherung einiger Bytes.
Vielen Dank an @ RomanGräf für die Speicherung einiger weiterer Bytes
quelle
[\d]
? : o\d
ist genug.[a-z]
mit\D
?[a-z]
, wird diei
Flagge auch nicht benötigt.JavaScript ohne Regex,
848179 Bytesp=>{for(i=n=o='';i<p.length;){if(n==isNaN(c=p[i++])){o+=' ';n++}o+=c}return o}
quelle
o=n=i=''
.isNaN(c=p[i++])
.p=>{for(i=n=o=0;i<p.length;){c=p[i++];if(n++==c<59){o+=' '}o+=c}return o}
''
da bleiben das o, mit dem das Ergebnis verkettet wird. Leider funktioniert Ihr Code bei mir nicht. N muss bedingt erhöht werden.p=>{for(i=n=0,o='';i<p.length;){c=p[i++];if(n==c<59){o+=' ';n++}o+=c}return o}
Mathematica, 39 Bytes
Anonyme Funktion. Nimmt eine Zeichenfolge als Eingabe und gibt eine Liste von Zeichenfolgen als Ausgabe zurück.
quelle
Schläger 274 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
R,
6352 BytesBearbeiten: Speichert dank @JDL eine Menge Bytes
Übernimmt die Eingabe von stdin und druckt nach stdout:
Beispielausgabe:
quelle
gsub (...,"\\1 \\2 \\3")
effizienter?gsub("([A-Za-z]+)([0-9]+)(.+)","\\1 \\2 \\3",scan())
, obwohl das erste Argument wahrscheinlich als etwas kleineres ausgedrückt werden kann ..."\\1 \\2 \\3"
Ersatz funktioniert. Auch das Regex-Muster wurde ein wenig aktualisiert und verwendetignore.case = TRUE
.()
Klammerpaar erfasst wurde .Jelly , 14 Bytes
TryItOnline!
Wie?
quelle
C 107 Bytes
Rufen Sie an mit:
quelle
Python 2,
1039488 BytesLösung ohne Verwendung von Regex
Extrahiert einfach die Zahlen aus der Mitte und schneidet die Eingabe mit der Zahl als Index. Erfordert Anführungszeichen um die Eingabe, aber ich habe nirgends festgestellt, dass Anführungszeichen nicht zulässig sind.
-9 durch Teilen von a auf die mittlere Zahl und Drucken der Komponenten mit b in der Mitte
-6 Danke an @Shebang
Testfälle
quelle
b!="" -> b>""
undc=a.split(b) -> c,d=a.split(b) ... print c[0],b,c[1] -> print c,b,d
spart 5 Bytes.elif b:
;)C #, 74 Bytes
Ersetzen Sie die erste Ziffernfolge durch Wagenrücklauf, Ziffernfolge und eine weitere Wagenrücklauffolge, wie es Johan Karlsson für JavaScript getan hat.
quelle