Kunci kombinasi N-digit biasa terdiri dari N disc yang berputar. Setiap disk memiliki angka 0-9 yang ditulis secara berurutan, dan Anda perlu mengubahnya ke kata sandi yang benar untuk membukanya. Tentunya, jika Anda tidak tahu kata sandinya, Anda harus mencoba paling banyak 10 N kali sebelum membukanya. Itu tidak menarik.
Jadi mari kita pertimbangkan varian kunci kombinasi, beri nama kunci pengungkap jarak.
Dalam setiap upaya yang gagal untuk membuka kunci pengungkapan jarak, itu akan merespon jumlah minimum gerakan untuk membuka kunci.
Satu gerakan didefinisikan sebagai rotasi oleh satu posisi, misalnya diperlukan 1 gerakan dari 890
ke 899
, dan 9 gerakan dari 137
ke 952
.
Tantangan
Mengingat kunci pengungkap jarak dengan kata sandi tidak dikenal, coba buka kunci dengan jumlah upaya minimal (bukan gerakan), sambil menjaga program agar tidak terlalu lama.
Aturan & Penilaian
- Anda harus menulis program lengkap yang input dari stdin dan output ke stdout. Program harus melakukan input / output sebagai berikut:
Start
Input an integer N (number of digits) from stdin
Do
Output a line containing decimal string of length N (your attempt) to stdout
Input an integer K (response of the lock) from stdin
While K not equal 0
End
Program Anda harus menangani hingga N = 200, dan harus berjalan kurang dari 5 detik pada input apa pun.
Nol terdepan dalam output tidak boleh diabaikan.
Ini adalah 5 testdata untuk setiap panjang, sehingga jumlah total testdata adalah 1000. Testdata dihasilkan secara acak.
Skor akhir akan menjadi (jumlah total tebakan di semua testdata) * ln (panjang kode dalam byte + 50). Skor terendah menang. (Dalam log alami)
Saya akan mencetak skor program untuk Anda. Jika Anda ingin tahu bagaimana saya akan menilai program Anda, atau Anda ingin membuat skor sendiri, lihat suntingan sebelumnya pada posting ini .
Tantangan ini akan berakhir pada 2017/12/07 14:00 UTC. Saya akan memposting solusi saya kemudian.
Contoh Menjalankan
Baris dimulai dengan >
mewakili input, dan lainnya mewakili output program.
Anda dapat memiliki kata sandi di pikiran Anda dan berinteraksi dengan program Anda untuk mengujinya.
> 3 # 3-digit lock. The hidden password is 746
000 # 1st guess (by program)
> 11 # response to the 1st guess
555 # 2nd guess
> 4 # ...
755
> 2
735
> 2
744
> 2
746 # finally the correct answer! The program attempts 6 times.
> 0 # this is not necessary
Program Sampel
EDIT: Mungkin format input / output di atas tidak jelas. Berikut ini contoh program dengan Python.
Python, 369 byte, jumlah upaya = 1005973, skor = 6073935
import sys
N = int(input()) # get the lock size
ans = ''
for i in range(N): # for each digit
lst = []
for j in range(10): # try all numbers
print('0' * i + str(j) + '0' * (N - i - 1)) # make a guess
result = int(input()) # receive the response
lst.append(result)
ans += str(lst.index(min(lst)))
print(ans) # output the final answer
Terima kasih kepada Jonah karena menyederhanakan tantangan.
162751*ln(388+50)=989887
.