Dalam tantangan ini, tugas Anda adalah menguraikan string. Untungnya, algoritma ini cukup sederhana: membaca dari kiri ke kanan, setiap digit yang dijumpai N (0 hingga 9) harus diganti dengan karakter yang merupakan posisi N +1 sebelum itu.
Contoh
String input "Prog2am0in6"
akan diterjemahkan dengan cara ini:
Oleh karena itu, output yang diharapkan adalah "Programming"
.
Klarifikasi dan aturan
- String input akan berisi karakter ASCII dalam kisaran 32 - 126 secara eksklusif. Anda dapat berasumsi bahwa itu tidak akan pernah kosong.
- String yang diuraikan asli dijamin tidak mengandung digit apa pun.
- Setelah karakter diterjemahkan, karakter tersebut dapat direferensikan oleh digit berikutnya. Misalnya,
"alp2c1"
harus diterjemahkan sebagai"alpaca"
. - Referensi tidak akan pernah membungkus string: hanya karakter sebelumnya yang dapat direferensikan.
- Anda dapat menulis program lengkap atau fungsi, yang mencetak atau menampilkan hasilnya.
- Ini adalah kode golf, jadi jawaban tersingkat dalam byte menang.
- Celah standar dilarang.
Uji kasus
Input : abcd
Output: abcd
Input : a000
Output: aaaa
Input : ban111
Output: banana
Input : Hel0o W2r5d!
Output: Hello World!
Input : this 222a19e52
Output: this is a test
Input : golfin5 3s24o0d4f3r3y3u
Output: golfing is good for you
Input : Prog2am0in6 Puz0les7&1Cod74G4lf
Output: Programming Puzzles & Code Golf
Input : Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Output: Replicants are like any other machine. They're either a benefit or a hazard.
1bbab
input yang valid (dengan output yang diharapkanabbab
)? Dengan kata lain, dapatkah rujukan membungkus tali?1bbab
tidak valid. Saya telah menambahkan klarifikasi tentang itu.Jawaban:
Jelly ,
97 byteCobalah online!
Bagaimana itu bekerja
sumber
Java 7,
8180 byteCobalah online!
Disimpan 1 byte berkat Anders Tornblad . Karakter pertama tidak boleh berupa angka sehingga tidak perlu diperiksa artinya kita dapat melakukan pra-penambahan sebelum memeriksa kondisi terminasi kita.
sumber
for(int i=0;++i<a.length;){
saja, menghemat satu char.Haskell, 55 byte
Contoh penggunaan:
reverse.foldl(#)[] $ "Prog2am0in6 Puz0les7&1Cod74G4lf"
->"Programming Puzzles & Code Golf"
. Cobalah online!Kurangi string menjadi salinan terbalik dengan nomor yang diganti oleh karakter yang sesuai. "terbalik", karena dengan cara ini kami memiliki akses yang mudah ke string sejauh ini saat mengindeks angka. Balikkan lagi.
sumber
C, 46 byte
Cobalah online!
C,
524948 byteBerkat @ l4m2 untuk menghemat satu byte!
Mengedit string input secara langsung.
Cobalah online!
Alternatif versi 50-byte:
Versi rekursif, 48 byte:
sumber
05AB1E , 11 byte
Cobalah online!
Penjelasan
sumber
JavaScript (ES6),
5953 byteDisimpan 7 byte berkat fəˈnɛtɪk.
sumber
o-m-1
dapat diganti dengano+~m
.f=
bagian, jadi ini adalah 54 byte, bukan 52.Retina , 37 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Penjelasan
Ganti setiap digit d dengan d
«
s, diikuti oleh satu»
. Kita membutuhkan yang terakhir a) untuk dapat mengenali posisi di mana d = 0 dan b) sebagai pemisah antara digit yang berdekatan.Berulang kali (
+
) cocokkan dengan regex pada baris pertama dari kanan ke kiri (r
) dan kemudian ganti pertandingan paling kiri (1
) dengan substitusi pada baris kedua.Regex itu sendiri cocok dengan salah satu digit kami yang sekarang belum diketahui dan menghitung jumlah
«
s dalam grup 2. Tampilan di belakang kemudian cocok dengan karakter d(?<-2>.)*
sebelum menangkap karakter yang dirujuk ke dalam grup 1. String«
s dan»
kemudian diganti dengan karakter yang diambil .sumber
MATL ,
21191716 byteCobalah di MATL Online!
Penjelasan
sumber
$y
di versi baru!U
hanya bekerja untuk digit. Sayangnya'e'U
hasilexp(1)
jika tidak saya bisa menyingkirkan4Y2
barangJavaScript (ES6), 51 byte
a
digunakan untuk menyimpan digit yang diganti untuk menangani digit yang mengacu pada digit lainnya.sumber
Perl 5 , 34 byte
33 byte kode +
-p
bendera.Cobalah online!
s/\d/.../e
ganti digit pertama dengan...
dievaluasi sebagai kode Perl. (dengan...
beradasubstr$_,-$&-1+pos,1
dalam kasus itu.substr$_,-$&-1+pos,1
mengembalikan substring dari$_
panjang1
pada indeks-$&-1+pos
, di mana$&
nomor hanya cocok, danpos
merupakan indeks dari awal pertandingan. Kita hanya perluredo
jika penggantian berhasil untuk mengganti setiap digit. (dan hasilnya dicetak secara implisit karena-p
bendera).Pendekatan lama, 47 byte:
44 byte kode +
-F
bendera.Cobalah online!
Sebenarnya cukup lurus ke depan.
-F
flag membagi input pada setiap karakter menjadi@F
.map{...}@F
iterasi melalui@F
(mis. setiap karakter input). Jika karakter jika digit (/\d/
), maka kami menggantinya dengan karakter di indeks$i-$_-1
. Ini$i
adalah variabel indeks saat ini (yang kami pertahankan dengan menambah setiap karakter yang terlihat).sumber
JavaScript ES6,
6159 byteTerima kasih @ Lukas telah bermain golf 8 byte
Cobalah online!
sumber
x.split``
bisa juga[...x]
,[0-9]
bisa\d
, bersama-sama menghemat 6Bx=>[...x].map((p,i,a)=>+p+1?a[i-1-p]:p).join``
untuk 46 bytex=>[...x].map((p,i,a)=>a[i]=1+p>9?a[i-1-p]:p).join``
05AB1E ,
2717 byteCobalah online!
sumber
CJam, 13 byte
Demo online.
Solusi ini menggunakan built-in "copy n -th item pada stack" operator CJam
$
untuk mengimplementasikan decoding. Dimulai dengan membaca input (denganq
) dan kemudian mengulangi karakter dari string input dan membuangnya ke stack (with{}/
). Namun, di dalam loop body itu juga menduplikasi masing-masing karakter setelah diletakkan di stack (with_
) dan memeriksa apakah itu digit dengan melihat posisinya dengan#
di dalam string"0123456789"
, mudah direpresentasikan sebagaiA,s
.Hasil pencarian ini adalah nilai numerik digit atau, jika karakter bukan digit, -1. The
)
Operator kemudian menambahkan nilai dengan satu, dan$
menggantikannya dengan saat ini karakter di banyak posisi di bawah bagian atas tumpukan. Akhirnya,\;
cukup hapus salinan karakter input saat ini yang kami buat_
dari tumpukan, karena tidak lagi diperlukan.sumber
Befunge-98 ,
4543 byteCobalah online!
Ide:
Saya tidak bisa mendapatkan versi ini lebih pendek, tetapi yang ini adalah 44 byte:
Kupikir aku akan membaginya karena trik rapi dengan
s
- tetapi menyimpan counter di tumpukan mengarah ke perbaikan 1 charsumber
Python 2 , 59 byte
Cobalah online!
sumber
Python 2,
7571 byteCobalah secara Online!
Sunting: Diperbaiki untuk nilai ascii antara 32-47 ; Diperbaiki untuk decoding ganda (mis. "Alp2c1" ke "alpaca")
sumber
'Prog2am0in6 Puz0les7&1Cod74G4lf'
cetakan program AndaProgramming Puzzles &7Code1Golf
! Saya mencoba dengan kedua tautan TIO yang dibagikan!PHP 7.1
6759 byteMengambil input dari STDIN; jalankan sebagai pipa dengan
-nR
atau coba online ._&$c=$s[$i++]
loop through string (_&$c
akan menghasilkan sesuatu yang tidak"0"
; jadi satu-satunya karakter yang dapat memecah loop adalah string kosong = akhir input)$c^"0"
matikan bit 5 dan 6 dalam kode ascii<"\n"
periksa apakah hasilnya <chr (10)Terima kasih @Christoph untuk menghemat 12%
sumber
$s=$argn
...?)for(;_&$c=$argn[$i++];)$t.=($c^"0")<"\n"?$t[~+$c]:$c;echo$t;
Vim makro / penekanan tombol, 49 byte
^M
mewakili karakter kembali (0x0A, 1 byte).Penjelasan
sumber
APL (Dyalog Classic) ,
2523 byte-2 byte terima kasih kepada @FrownyFrog
Cobalah online!
menggunakan
⎕io←1
(di
⍵
bawah ini merupakan nilai tengah dalam evaluasi)⎕d
adalah string'0123456789'
⎕d⍳⍵
menemukan (1 - berdasarkan dalam hal ini) indeks⍵
karakter di⎕d
; untuk non-digit indeksnya adalah 1111|⍵
adalah modulo - 11s menjadi 0s≢⍵
adalah panjangnya⍵
⍳≢⍵
adalah1 2 ...
sampai≢⍵
jadi,
(⍳≢⍵)-11|⎕d⍳⍵
beri kami vektor i dari indeks di mana kita harus mencari untuk mendapatkan karakter yang dihasilkan; namun beberapa indeks tersebut mungkin mengarahkan ke indeks lain (lebih kecil). Untuk menghitung penutupan transitif (yaitu indeks efektif), kami mengindeks vektor ke dalam dirinya sendiri (⊂⌷⊢
, kereta setara dengan(⊂i)⌷i
ataui[i]
) dan ulangi sampai stabil (⍣≡
dikenal sebagai operator titik tetap ).akhirnya kami mengindeks ke string asli:
(...)⊃¨⊂
sumber
Python 2 ,
8380 byteCobalah online!
sumber
Japt , 24 byte
Cobalah online!
Penjelasan:
sumber
Ruby,
5646 byteCobalah online!
sumber
Python 2 , 58 byte
Ini pada dasarnya adalah port jawaban Jelly saya, ditambah digit cek dari @ xnor's Python answer.
Cobalah online!
sumber
Röda , 51 byte
Cobalah online!
sumber
JavaScript ES6, 54 byte
sumber
f=
.> <> (Ikan), 108 byte (= 9 x 12 kotak)
Coba di sini untuk melihat ikan berenang di sekitar.
sumber
8086 kode mesin, 35 byte
sumber
OK, 39 byte
Cobalah online!
sumber
Japt v2.0a0, 16 byte
Cobalah
Penjelasan
sumber
J , 20 byte
Cobalah online
Penghargaan untuk ngn untuk inspirasi.
22 byte
Ini adalah port jawaban Jelly.
Dalam kedua solusi, versi yang menggunakan TIO menginterpretasikan tunggal
.
sebagai angka 0, sehingga tes terakhir gagal. Versi yang lebih lama (≤7) tampaknya berfungsi dengan benar.Cobalah online!
sumber