Anda telah mengunci sepeda Anda dengan kunci kombinasi 3 digit. Sekarang Anda ingin naik dan perlu membukanya dengan bantuan program berikut.
Memasukkan
Parameter 1
Kombinasi digit dari kunci Anda dalam keadaan terkunci . Itu harus berbeda dari parameter ke-2 (= kombinasi status tidak terkunci ). (Atau sepeda Anda bisa dicuri!)
Kisaran 000..999. Nol terkemuka tidak boleh dihilangkan.
Parameter ke-2
Kombinasi digit dari kunci Anda dalam keadaan tidak terkunci . Nilai ini adalah tujuan Anda.
Kisaran 000..999. Nol terkemuka tidak boleh dihilangkan.
Keluaran
Daftar setiap keadaan kunci kombinasi setelah setiap "rotasi" termasuk keadaan awal (yang selalu menjadi parameter 1) dan langkah terakhir (yang selalu menjadi paramater ke-2).
Algoritma
Anda mulai "memutar" digit pertama satu per satu hingga Anda mencapai digit yang benar dalam keadaan tidak terkunci . Tetapi, karena Anda mengetahui seluruh kode pembuka kunci, Anda memutar digit ke arah yang Anda perlukan jumlah rotasi terkecil untuk mencapai angka dalam keadaan tidak terkunci . Dalam kasus dasi, Anda dapat memilih arah apa pun yang Anda inginkan.
Ketika Anda telah mencapai angka pertama yang benar, Anda memulai prosedur yang sama dengan tanggal 2 dan kemudian dengan tanggal 3.
Urutan digit adalah dipahami sebagai lingkaran:
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
Ini berarti, jumlah rotasi terkecil dari 1 hingga 9 tidak
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
tapi
1 -> 0 -> 9
= 2.
Catatan
- Anda dapat mengandalkan aturan I / O Default
- Anda dapat mengubah urutan parameter.
Contohnya
Contoh 1, benar
Input: 999 001
Output:
999
099
009
000
001
Contoh 2, benar
Input: 000 292
Output:
000
100
200
290
291
292
Contoh 3, output salah
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
Contoh 4, input salah
Input: 1 212 // Wrong because no leading zeros.
Ini adalah kode-golf jawaban tercepat yang menang.
sumber
Jawaban:
Python 2 ,
1131071059995 byteCobalah online!
Mengambil input sebagai daftar bilangan bulat
Disimpan:
sumber
//
Jelly , 15 byte
Cobalah online!
Bagaimana?
sumber
JavaScript (ES6),
73 7270 byteDisimpan 2 byte berkat @tsh
Mengambil input sebagai 2 array digit dalam sintaks curried
(a)(b)
. Mengembalikan string.Cobalah online!
Berkomentar
sumber
d/6&1^d>0||9
->d/5>5/d?9:1
Jelly , 25 byte
Cobalah online!
Program lengkap.
sumber
Python 2 ,
10197 byteCobalah online!
3 byte thx ke Joel .
Mengambil input sebagai daftar int.
sumber
//
sama dengan/
, jadi ada byte tambahan yang didapat.for x,y,i in zip(a,c,[0,1,2])
jika saya ingat ...Jeli , 30 byte
Cobalah online!
Diad kiri mengambil argumen kuncinya sebagai kode pembuka dan kanannya keadaan terkunci saat ini, keduanya sebagai daftar bilangan bulat.
Ini terasa terlalu lama!
sumber
PHP , 114 byte
Cobalah online!
Solusi saya mungkin payah, tapi itu yang terbaik yang bisa saya pikirkan untuk saat ini!
sumber
Arang , 48 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Cetak posisi awal.
Ubah string posisi awal menjadi array angka numerik untuk keperluan perhitungan.
Lingkari setiap digit secara bergantian.
Hitung jumlah rotasi yang diperlukan untuk membuka kunci angka itu. Ini adalah nomor dari
-5
ke4
mana-5
berarti 5 rotasi ke bawah dan4
sarana 4 rotasi ke atas.Ulangi setiap rotasi.
Perbarui digit sesuai dengan tanda rotasi.
Keluarkan digit sebagai string pada baris baru.
sumber
T-SQL 2008, 170 byte
Saya menambahkan beberapa linebreak agar dapat dibaca
Cobalah online
sumber
C # (Visual C # Interactive Compiler) , 101 byte
Cobalah online!
sumber
J , 36 byte
Cobalah online!
Akan menambah penjelasan besok.
sumber
MATLAB,
10089 bytePendekatan yang berbeda (menggunakan ekspansi implisit untuk membuat matriks pengurangan) mengurangi 11 byte:
[Solusi 100 byte asli]
Keduanya dipanggil dengan melewatkan input sebagai array 3 elemen, mis
f([9 1 1], [2 3 2])
sumber
Java (JDK) , 139 byte
Cobalah online!
Algoritma yang sama seperti semua orang, digulir berbeda karena Java
System.out.println
cukup mahal!sumber
C (dentang) , 125 byte
Cobalah online!
sumber
Kotlin , 162 byte
Cobalah online!
sumber