Masalah ini adalah tentang memisahkan string yang mewakili pengidentifikasi produk menjadi tiga komponen.
- Bagian pertama terdiri dari huruf atas dan bawah dengan panjang sewenang-wenang yang mewakili gudang.
- Bagian kedua adalah digit yang mewakili nomor produk. Bagian ini juga panjangnya sewenang-wenang.
- Bagian terakhir adalah kualifikasi sebagai ukuran dan warna, dan bagian ini berlanjut hingga akhir string. Kualifikasi dijamin dimulai dengan huruf kapital dan terdiri dari karakter alfanumerik.
Setiap bagian harus dicetak dengan jelas dipisahkan. Dijamin setiap bagian tidak kosong.
Pemenangnya adalah orang yang menggunakan paling sedikit byte untuk menyelesaikan masalah ini.
Contoh:
Input: UK7898S14
Output:
UK
7898
S14
Di sini Inggris adalah Inggris, 7898 adalah kode produk, dan S14 adalah ukuran 14.
Contoh 2:
Input: cphDK1234CYELLOWS14QGOOD
Output:
cphDK
1234
CYELLOWS14QGOOD
Di sini cphDK adalah Copenhagen, Denmark, 1234 adalah kode produk, CYELLOWS14QGOOD mewakili warna kuning, ukuran 14, dan kualitas yang baik.
Jawaban:
Perl, 12 byte
11 byte kode + 1 byte untuk
-p
flag.Untuk menjalankannya:
sumber
APL, 18
Bekerja dengan mencari 2 poin pertama di mana ada perubahan dari karakter ke digit atau sebaliknya, dan menggunakannya untuk membagi string.
sumber
Retina ,
2814108 byteDisimpan 4 byte berkat Dom Hastings .
Disimpan 2 byte berkat Martin Ender .
Cobalah online!
sumber
Haskell, 36 byte (tanpa regex)
Ini memberikan hasil dalam format
("UK",("7898","S14"))
. Idenya adalah untuk membagi di digit pertama, dan kemudian membagi sisanya di non-digit pertama. Cobalah di Ideone .sumber
JavaScript,
3836 byteContoh
Tampilkan cuplikan kode
sumber
JavaScript (ES6),
2826 byteDisimpan 2 byte berkat @Grax
Contohnya
Tampilkan cuplikan kode
sumber
s=>s.replace(/\d+/,` $& `)
Gema,
1712 karakter(Trik dari tidak menangani kode negara secara eksplisit tanpa malu-malu meminjam dari Dada 's Perl solusi . Apresiasi harus dinyatakan di sana.)
Contoh dijalankan:
sumber
Python 2, 40 Bytes
Saya tidak tahu banyak Regex, tapi untungnya masalah ini cukup sederhana :) Memisahkan string input menjadi daftar panjang 3 yang berisi setiap bagian.
sumber
05AB1E ,
393716 byteMenyimpan banyak byte berkat Emigna.
Ini menggunakan pengkodean CP-1252.
Cobalah online!
(Ini posting pertama saya di sini!)
sumber
.páà¬
untuk mendapatkan bagian pertama, tetapi tampaknya tidak membantu untuk sisanya pada pandangan pertama.JavaScript (ES6), 36 byte
Contohnya
Tampilkan cuplikan kode
sumber
Java 7,
200185174167 byteTidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
C #,
191177 byteGolf:
Tidak Disatukan:
EDIT1: @Link Ng menyimpan 14 byte.
sumber
PHP, 48 byte
Dengan
$limit
parameternya, dan yang sangat berguna\K
,preg_split()
sangat cocok untuk tantangan ini.sumber
MATLAB,
8173 byteFungsi yang menerima string dan mengembalikan array sel tiga string. Diuji dalam versi R20105b.
Contoh penggunaan:
Penjelasan
Ekspresi reguler
(?<=^\D+)\d+')
cocok dengan sekelompok digit yang diawali oleh non-digit dari awal string; yang terakhir bukan bagian dari pertandingan.Output keempat
regexp
adalah'match'
; dan output ketujuh adalah'split'
, yaitu, dua bagian dari string sebelum dan sesudah pertandingan.sumber
Ruby, 28 byte
Ini mengelilingi cluster digit pertama dengan baris baru.
sumber
jq, 47 karakter
(43 karakter kode + 4 opsi opsi baris perintah.)
(Lagi-lagi kisah lama: cukup anggun di awal, lalu menjadi sangat menyakitkan.)
Contoh dijalankan:
Tes online (Melewati
-r
URL tidak didukung - periksa sendiri Output Raw.)sumber
PHP,
61 59 5655 byteIni menghasilkan kode awal juga:
Edit
Terima kasih kepada @manatwork karena telah menyimpan beberapa byte untuk saya.
Terima kasih kepada @ RomanGräf untuk beberapa byte lainnya yang disimpan
sumber
[\d]
? : o\d
sudah cukup.[a-z]
dengan\D
?[a-z]
,i
bendera juga tidak diperlukan.JavaScript tanpa regex,
848179 bytep=>{for(i=n=o='';i<p.length;){if(n==isNaN(c=p[i++])){o+=' ';n++}o+=c}return o}
sumber
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}
''
karena o, yang hasilnya akan digabungkan. Tetapi sayangnya kode Anda tidak berfungsi untuk saya, dan perlu ditambahkan secara kondisional.p=>{for(i=n=0,o='';i<p.length;){c=p[i++];if(n==c<59){o+=' ';n++}o+=c}return o}
Mathematica, 39 byte
Fungsi anonim. Mengambil string sebagai input, dan mengembalikan daftar string sebagai output.
sumber
Racket 274 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
R,
6352 byteSunting: Menyimpan banyak byte berkat @JDL
Membawa input dari stdin dan mencetak ke stdout:
Contoh output:
sumber
gsub (...,"\\1 \\2 \\3")
lebih efisien?gsub("([A-Za-z]+)([0-9]+)(.+)","\\1 \\2 \\3",scan())
, meskipun argumen pertama mungkin dapat dinyatakan sebagai sesuatu yang lebih kecil dari itu ..."\\1 \\2 \\3"
penggantian bekerja. Juga memperbarui sedikit pola regex dan gunakanignore.case = TRUE
.()
kurung pertama / kedua / ketiga .Jelly , 14 byte
TryItOnline!
Bagaimana?
sumber
C, 107 byte
Telepon dengan:
sumber
Python 2,
1039488 byteSolusi tanpa menggunakan regex
Cukup mengekstrak angka dari tengah lalu mengiris input menggunakan angka sebagai indeks. Membutuhkan tanda kutip di sekitar input tetapi saya tidak melihat di mana pun bahwa tanda kutip tidak diizinkan.
-9 dengan memisahkan a di nomor tengah lalu cetak komponen dengan b di tengah
-6 Terima kasih kepada @Shebang
Uji Kasus
sumber
b!="" -> b>""
danc=a.split(b) -> c,d=a.split(b) ... print c[0],b,c[1] -> print c,b,d
menghemat 5 byte.elif b:
;)C #, 74 byte
Ganti set angka pertama dengan carriage return, set digit, dan carriage return lainnya, seperti yang dilakukan Johan Karlsson untuk JavaScript.
sumber