Ten problem dotyczy rozdzielenia łańcucha reprezentującego identyfikator produktu na trzy składniki.
- Pierwsza część składa się z górnej i dolnej litery o dowolnej długości, która reprezentuje magazyn.
- Druga część to cyfry reprezentujące numer produktu. Ta część ma również dowolną długość.
- Ostatnia część kwalifikuje się jako rozmiar i kolory, a ta część trwa do końca łańcucha. Kwalifikatory zaczynają się od dużej litery i składają się ze znaków alfanumerycznych.
Każda część powinna być wydrukowana wyraźnie oddzielona. Gwarantujemy, że każda część nie jest pusta.
Zwycięzcą jest ten, który używa najmniej bajtów do rozwiązania tego problemu.
Przykład: Dane
wejściowe: UK7898S14 Dane
wyjściowe:
UK
7898
S14
Tutaj Wielka Brytania to Wielka Brytania, 7898 to kod produktu, a S14 to rozmiar 14.
Przykład 2: Dane
wejściowe: cphDK1234CYELLOWS14QGOOD Dane
wyjściowe:
cphDK
1234
CYELLOWS14QGOOD
Tutaj cphDK to Kopenhaga, Dania, 1234 to kod produktu, CYELLOWS14QGOOD reprezentuje żółty kolor, rozmiar 14 i dobrą jakość.
Odpowiedzi:
Perl, 12 bajtów
11 bajtów kodu + 1 bajt na
-p
flagę.Aby uruchomić:
źródło
APL, 18
Działa poprzez przeszukanie pierwszych 2 punktów, w których następuje zmiana znaku na cyfrę lub odwrotnie, i użycie ich do podzielenia łańcucha.
źródło
Siatkówka ,
2814108 bajtówZaoszczędź 4 bajty dzięki Dom Hastings .
Zaoszczędzono 2 bajty dzięki Martinowi Enderowi .
Wypróbuj online!
źródło
Haskell, 36 bajtów (bez wyrażenia regularnego)
To daje wynik w formacie
("UK",("7898","S14"))
. Chodzi o podzielenie na pierwszą cyfrę, a następnie podzielenie reszty na pierwszą cyfrę. Wypróbuj na Ideone .źródło
JavaScript,
3836 bajtówPrzykład
Pokaż fragment kodu
źródło
JavaScript (ES6),
2826 bajtówZaoszczędź 2 bajty dzięki @Grax
Przykłady
Pokaż fragment kodu
źródło
s=>s.replace(/\d+/,` $& `)
Gema,
1712 znaków(Trick nie obchodzenia się z kodu kraju wyraźnie bezwstydnie pożyczoną od Dada „s Perl rozwiązanie . Wrażenia powinny być wyrażone tam).
Przykładowy przebieg:
źródło
Python 2, 40 bajtów
Nie znam dużo Regex, ale na szczęście ten problem jest dość prosty :) Dzieli łańcuch wejściowy na listę długości 3, która zawiera każdą część.
źródło
05AB1E ,
393716 bajtówZaoszczędził wiele bajtów dzięki Emignie.
Wykorzystuje kodowanie CP-1252.
Wypróbuj online!
(To mój pierwszy post tutaj!)
źródło
.páà¬
żeby zdobyć pierwszą część, ale na pierwszy rzut oka nie wydaje się to pomocne.JavaScript (ES6), 36 bajtów
Przykłady
Pokaż fragment kodu
źródło
Java 7,
200185174167 bajtówKod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
C #,
191177 bajtówGra w golfa:
Nie golfowany:
EDYCJA 1: @ Link Ng zapisał 14 bajtów.
źródło
PHP, 48 bajtów
Dzięki
$limit
parametru, a fantastycznie użyteczny\K
,preg_split()
jest idealnym miejscem na to wyzwanie.źródło
MATLAB,
8173 bajtówFunkcja, która akceptuje ciąg znaków i zwraca tablicę komórek złożoną z trzech ciągów znaków. Testowany w wersji R20105b.
Przykładowe zastosowanie:
Wyjaśnienie
Wyrażenie regularne
(?<=^\D+)\d+')
pasuje do grupy cyfr poprzedzonych cyframi od początku łańcucha; te ostatnie nie są częścią meczu.Czwarte wyjście
regexp
to'match'
; a siódmym wyjściem są'split'
dwie części ciągu przed i po dopasowaniu.źródło
Rubinowy, 28 bajtów
To otacza pierwszy zestaw cyfr z nowymi liniami.
źródło
jq, 47 znaków
(43-znakowy kod + 4-znakowe opcje wiersza poleceń).
(Znów stara historia: na początku dość elegancka, a potem boleśnie gadatliwa).
Przykładowy przebieg:
Test on-line (Przekazanie
-r
adresu URL nie jest obsługiwane - sprawdź sam wynik wyjściowy).źródło
PHP,
61 59 5655 bajtówTo również generuje kod początkowy:
Edytować
Dzięki @manatwork za zapisanie dla mnie kilku bajtów.
Dzięki @ RomanGräf za kolejne kilka zapisanych bajtów
źródło
[\d]
? : o\d
wystarczy.[a-z]
z\D
?[a-z]
,i
flaga też nie jest potrzebna.JavaScript without regex,
848179 bytesp=>{for(i=n=o='';i<p.length;){if(n==isNaN(c=p[i++])){o+=' ';n++}o+=c}return o}
źródło
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}
''
because the o, to which the result will be concatenated. But sadly your code is not working for me, n needs to be incremented conditionally.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
Anonymous function. Takes a string as input, and returns a list of strings as output.
źródło
Racket 274 bytes
Ungolfed:
Testing:
Output:
źródło
R,
6352 bytesEdit: Saved a bunch of bytes thanks to @JDL
Takes input from stdin and prints to stdout:
Example output:
źródło
gsub (...,"\\1 \\2 \\3")
be more efficient?gsub("([A-Za-z]+)([0-9]+)(.+)","\\1 \\2 \\3",scan())
, though the first argument can probably be expressed as something smaller than that..."\\1 \\2 \\3"
replacement works though. Also updated the regex pattern a bit and useignore.case = TRUE
.()
brackets.Jelly, 14 bytes
TryItOnline!
How?
źródło
C, 107 bytes
Call with:
źródło
Python 2,
1039488 bytesSolution without using regex
Simply extracts the numbers from the middle then slices the input using the number as an index. Requires quotes around the input but I didn't see anywhere that quotes are disallowed.
-9 by splitting a on the middle number then print the components with b in the middle
-6 Thanks to @Shebang
Test Cases
źródło
b!="" -> b>""
andc=a.split(b) -> c,d=a.split(b) ... print c[0],b,c[1] -> print c,b,d
saves 5 bytes.elif b:
;)C#, 74 bytes
Replace 1st set of digits with carriage return, set of digits, and another carriage return, as Johan Karlsson did for JavaScript.
źródło