Diberikan string input yang hanya berisi karakter ASCII alfanumerik dan dimulai dengan huruf, tukar setiap huruf dengan angka yang diikuti.
Sebuah run adalah urutan huruf berturut-turut atau digit. Perhatikan bahwa dalam kasus di mana string input diakhiri dengan serangkaian huruf, proses ini tidak tersentuh.
Contoh walk-through
Misalnya, diberikan string input uV5Pt3I0
:
- Pisahkan huruf dan angka:
uV 5 Pt 3 I 0
- Identifikasi pasangan proses:
(uV 5) (Pt 3) (I 0)
- Tukar pasangan lari:
(5 uV) (3 Pt) (0 I)
- Menggabungkan:
5uV3Pt0I
Contohnya
uV5Pt3I0 -> 5uV3Pt0I
J0i0m8 -> 0J0i8m
abc256 -> 256abc
Hennebont56Fr -> 56HennebontFr
Em5sA55Ve777Rien -> 5Em55sA777VeRien
nOoP -> nOoP
Ini adalah kode-golf sehingga jawaban tersingkat dalam byte menang. Penjelasan didorong.
(a,(b,y))<-span(<':')<$>span(>'9')s
.(a,(b,y):_)<-lex<$>span(>'9')s
: Cobalah online!lex
kerjanya, jadi saya akan menahan diri untuk tidak memasukkannya sekarang. Bagaimanapun, senang mengetahui bahwa ada sesuatu seperti itu di PreludeJavaScript (ES6), 34 byte
Cobalah
sumber
Pyth , 15 byte
Penjelasan
Suite uji .
sumber
Python 2 , 49 byte
Setiap solusi non-regex yang saya coba lebih lama. : P
Cobalah online!
sumber
Japt (v2.0a0), 16 byte
Uji secara online!
Catatan: ini adalah alpha yang tidak stabil, jadi jika tautan ini rusak, Anda dapat menggunakan versi yang sedikit lebih panjang di v1.4.4: Uji secara online!
Penjelasan
sumber
ò
.CJam ,
323028 byteCJam tidak memiliki regex dan tidak "terbagi menjadi angka dan huruf" atau yang lainnya, jadi ini agak menyakitkan.
Cobalah online!
Penjelasan
sumber
Gema , 11 karakter
Contoh dijalankan:
sumber
Java 8, 38 byte
Tidak banyak yang bisa dijelaskan. Menggunakan metode yang sama dengan @Okx jawaban Retina , yang tidak bisa lebih pendek di Jawa.
Coba di sini.
sumber
Japt, 18 byte
Menguji
sumber
Sed, 29 byte
Jalankan dengan -r.
Menggunakan kelompok yang ditangkap dan menggantinya dalam urutan yang berlawanan.
sumber
[A-Za-z]
menjadi[^0-9]
. Namun, Anda harus menghitung bendera sebagai bagian dari kode Anda.sed <command>
dansed -r <command>
, jadi tiga byte.sed -f filename
dansed -rf filename
(atau antarased -e 'command'
dansed -re 'command'
): satu byte.s/([a-z]+)([0-9]+)|([0-9]+)([a-z]+)/\2\1\4\3/gi
pada 48 byte. Kalau tidak, sama saja.Jelly , 12 byte
Cobalah online!
Penjelasan:
sumber
PHP, tanpa regex, 73 byte
Jalankan sebagai pipa dengan
-nR
atau uji secara online .kerusakan
sumber
~
sebagai gantinyaa&
PHP , 45 byte
Cobalah online!
sumber
C #, 71 byte
Sayang ekspresi reguler begitu lama di C #.
Cobalah online!
Versi Lengkap / Terformat:
sumber
Clojure,
10488 bytesOh regex benar-benar berguna ... toh ( TIO ):
partition-by
membagi menjadi berturut-turut berjalan berdasarkan nilai kembali fungsi itu,partition-all
dibagi menjadi partisi 2 (pasangan kita akan bertukar),map reverse
membalikkannya,flatten
menghilangkan struktur daftar bersarang dan akhirnya kita akan menghasilkan string. Jikapartition
digunakan sebagai gantipartition-all
dan kami memiliki jumlah ganjil maka yang terakhir akan dibuang.Asli menggunakan verbose tetapi menyenangkan
(juxt second first)
dan(set"0123456789")
bukannyareverse
dan rentang integer ASCII.sumber
QuadR , 15 byte
Cobalah online!
Penjelasan yang secara terang-terangan dicuri dari Okx :
Ini menggantikan regex
(\D+)(\d+)
dengan\2\1
. Mari kita jabarkan jika Anda tidak tahu apa artinya itu.The
\D
'apa pertandingan yang bukan nomor' berarti.\d
berarti 'cocokkan semua yang merupakan angka'. The+
tanda berarti 'pertandingan ini setidaknya sekali tetapi mencoba untuk mencocokkan sebanyak mungkin'. Kurung menentukan grup. Kelompok pertama adalah(\D+)
dan yang kedua adalah(\d+)
Di baris kedua kita mengatakan bahwa kita ingin meletakkan apa pun yang cocok dengan kelompok kedua, diikuti oleh apa pun yang cocok dengan kelompok pertama. Ini secara efektif menukar menjalankan huruf dan digit.
sumber
PowerShell , 40 byte
Cobalah online!
PowerShell sangat ideal untuk ini, karena mendukung regex search-and-replace out of box. Alat peraga pergi ke @Okx untuk solusi regex.
sumber
Pip , 17 byte
Mengambil input sebagai argumen baris perintah. Cobalah online!
Penjelasan
Ini menggunakan strategi penggantian regex standar, agak golf.
Regex adalah
-C+XL.C+XD
, yang mengevaluasi ke`(?i)([a-z]+)(\d+)`
:Penggantinya adalah
{c.b}
, fungsi panggilan balik yang menggabungkan grup kedua (c
) dan grup pertama (b
). (Argumen pertama ke fungsia
,, berisi seluruh kecocokan.)Ini tiga byte lebih pendek dari yang naif
aR`(\D+)(\d+)``\2\1`
.sumber
brainfuck , 98 byte
Cobalah online!
Penjelasan
Program ini memelihara antrian surat yang belum pernah dihasilkan, dan mengeluarkannya jika perlu.
Kunci dari program ini adalah
>>----[---->+<<<-[>]>]
. Tiga sel di kanan sel input mulai dari nol. Jika input adalah titik kode antara 1 dan 63 inklusif, ini menggerakkan penunjuk satu spasi ke kanan dan menempatkan input dua spasi di sebelah kanan posisi baru ini. Jika tidak, pointer akan memindahkan dua spasi ke kanan, sel satu ruang di sebelah kanan posisi baru menjadi 63, dan 63 yang sama dikurangkan dari sel input. Ini dengan rapi membagi input menjadi huruf (65-122) dan digit (48-57).sumber
Ruby , 31 byte
Cobalah online!
sumber
Mathematica, 129 byte
sumber