Diberikan input berikut:
- Bilangan bulat di
n
manan > 0
. - Sebuah string
s
di manas
tidak kosong dans~=[0-9A-Z]+
(ibukota alpha-numeric saja).
Menggunakan keyboard QWERTY standar yang disederhanakan (seperti yang ditunjukkan di bawah):
1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM
Lakukan operasi berikut:
- Temukan baris asli setiap karakter di keyboard.
- Ganti surat dengan padanan bergeser yang benar untuk
n
berdasarkan posisi aslinya + n.- EG
s="AB"
dann=2
:A
akan menjadiD
danB
akan menjadiM
.
- EG
- Jika
keyboard_row[position + n] > keyboard_row.length
, bungkus kembali ke awal.- EG
s="0P"
dann=2
:0
akan menjadi2
danP
akan menjadiW
.
- EG
Contoh:
f("0PLM",1) = 1QAZ
f("ZXCVB",2) = CVBNM
f("HELLO",3) = LYDDW
f("0PLM",11) = 1QSV
f("0PLM",2130) = 0PHX
Aturan
- Ini adalah kode-golf , kemenangan byte-count terendah.
Ini sedikit lebih sulit daripada yang terlihat pada pandangan pertama.
Jawaban:
Jelly , 13 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 2 , 110 byte
Cobalah online!
Ini menggunakan string yang cukup besar (99 salinan dari setiap baris) dan LCM antara panjang baris (630) untuk menemukan substitusi yang benar menghindari koreksi individu di antara setiap baris.
sumber
Java 8,
159158 byte-1 byte terima kasih kepada @ OlivierGrégoire yang memodifikasi input-array alih-alih mencetak secara langsung.
Penjelasan:
Cobalah online.
sumber
char[]
.Retina , 49 byte
Cobalah online! Mengambil input
n
dans
pada jalur yang terpisah. Penjelasan:Ulangi
n
kali.Geser semua karakter satu tombol ke kanan.
Hapus
n
.sumber
JavaScript (ES6),
10199 byteMengambil input dalam sintaks currying
(s)(n)
. Bekerja dengan array karakter.Uji kasus
Tampilkan cuplikan kode
Bagaimana?
Kami mencari posisi p dari setiap karakter input dalam string S di mana baris keyboard disisipkan: 4 karakter pertama adalah '1QAZ' (kolom pertama keyboard), 4 karakter berikutnya adalah '2WSX' (kolom kedua keyboard) dan sebagainya. Posisi yang tidak digunakan diisi dengan garis bawah dan yang terakhir dibuang begitu saja.
Ini memungkinkan kita untuk dengan mudah mengidentifikasi baris dengan p mod 4 dan menghilangkan kebutuhan untuk pemisah eksplisit antara baris.
Kami maju dengan 4n posisi, menerapkan modulo benar untuk baris ini (40, 40, masing-masing 36 dan 28) dan memilih karakter pengganti ditemukan di posisi baru ini di S .
sumber
Jelly , 18 byte
Cobalah online!
sumber
C,
152149 byteTerima kasih kepada @gastropner karena telah menghemat tiga byte!
Cobalah online!
Belum dibuka:
sumber
for(j=l;j--;)
tetapi aku tidak tahu mengapa tanpa ada perubahan lainnya. Namun, Anda harus sampai 149.Merah , 152 byte
Cobalah online!
Tidak Disatukan:
sumber
Haskell , 99 byte
Cobalah online!
sumber
s#n= ...
bukanf(s,n)= ...
yang hanya contoh notasi yang digunakan untuk contoh.Perl 5 , 94 + 1 (
-p
) = 95 byteCobalah online!
sumber
Japt, 20 byte
Kehabisan pintu untuk makan malam jadi lebih banyak bermain golf dan penjelasan untuk diikuti.
Cobalah
sumber
Perl,
59585756 byteTermasuk
+
untuk-p
Berikan input pada STDIN sebagai 2 baris, pertama string, lalu ulangi
sumber
Perl 5 , 85 byte
84 byte kode +1 untuk
-p
.Cobalah online!
sumber
Bersih ,
144119 byteCobalah online!
Fungsi Lambda dengan tanda tangan
Int ![Char] -> [Char]
sumber
Ruby , 101 byte
Cobalah online!
Sejujurnya saya sedikit kecewa karena saya tidak bisa berbuat lebih baik dengan metode 'pintar'. Yang paling dekat saya adalah di sepanjang garis
untuk keuntungan bersih 7 karakter.
sumber