Ada banyak teka - teki dengan kecocokan yang melibatkan menambah, menghapus, atau memindahkan sejumlah kecocokan untuk membuat angka atau bentuk baru. Ini seperti itu dengan jam digital.
Diberi waktu yang valid pada jam digital 12 jam, mengeluarkan angka yang mengharuskan pemindahan garis paling sedikit untuk membuatnya sehingga setiap angka yang terlihat pada jam menjadi angka itu. Jika lebih dari satu digit adalah minimum, hasilkan semuanya. Jika tidak mungkin untuk membuat setiap digit sama, output -1
atau nilai falsy selain 0 (Anda akan mendapatkan banyak dari ini).
Digit jam terlihat seperti ini:
|
|
_
_|
|_
_
_|
_|
|_|
|
_
|_
_|
_
|_
|_|
_
|
|
_
|_|
|_|
_
|_|
_|
_
| |
|_|
Kasus uji:
Memasukkan: 123
Tampilan Jam:
_ _
| : _| _|
| : |_ _|
Keluaran: 4
Penjelasan: Tampilan untuk 1:23
membutuhkan total 12 garis harus ditarik. Oleh karena itu, agar setiap digit sama, setiap digit harus memiliki 4 baris. Satu-satunya digit yang memiliki 4 baris adalah 4
. Karena itu, jawabannya harus 4
.
Memasukkan: 1212
Tampilan Jam:
_ _
| _| : | _|
| |_ : | |_
Keluaran: -1
Penjelasan: Tampilan untuk 12:12
membutuhkan 14 baris. 14 dibagi 4 bukanlah bilangan bulat, oleh karena itu tidak mungkin setiap digit sama.
Memasukkan: 654
Tampilan Jam:
_ _
|_ : |_ |_|
|_| : _| |
Keluaran: 5
Penjelasan: Jumlah total baris adalah 15. 15 dibagi 3 adalah 5, sehingga setiap digit harus memiliki 5 baris. Satu-satunya angka yang memiliki 5 garis 2
, 3
dan 5
. Jawabannya adalah 5
karena hanya membutuhkan 2 gerakan untuk membuat setiap digit 5. Cukup pindahkan garis di kiri bawah 6 ke bawah 4, maka Anda harus:
_ _
|_ : |_ |_|
_| : _| _|
Kemudian, seperti yang Anda lihat, yang perlu Anda lakukan adalah memindahkan garis di kanan atas digit yang semula 4 ke atas, dan Anda dapatkan 5:55
. Untuk membuat setiap digit a 2
atau 3
membutuhkan lebih dari 2 gerakan.
Memasukkan: 609
Tampilan Jam:
_ _ _
|_ : | | |_|
|_| : |_| _|
Output: 609
( 6,0,9
atau [6,0,9]
juga ok).
Penjelasan: 6
,, 0
dan 9
satu-satunya digit yang memiliki 6 garis. Karena itu, mereka juga satu-satunya solusi yang mungkin. Tidak sulit untuk melihat bahwa perlu dua langkah untuk menjadikan semua ini satu-satunya digit. Karena itu, Anda mengeluarkan ketiga digit tersebut.
Catatan:
- Meskipun waktu input harus valid, waktu output tidak (mis.
999
Sebagai output OK.) - Saya sangat fleksibel dengan input. Anda dapat meminta angka 0. Anda dapat menggunakan angka dengan titik desimal. Anda bisa menggunakan string. Anda bisa menggunakan array. Anda dapat memiliki parameter untuk setiap digit.
Jawaban:
Julia,
160157154Ini adalah fungsi lambda. Tetapkan ke variabel untuk memanggilnya. Menerima vektor bilangan bulat dalam rentang
0-9
panjang berapa pun dan mengembalikan vektor hasil (mungkin kosong).Uji kasus
Penjelasan
Hitung tujuh segmen dan wakili sebagai bit vektor.
Contoh:
1
(segmen 2 + 5 diaktifkan) menjadi36
(bit 2 + 5 diatur).Berikut adalah representasi untuk digit
0-9
.Kita dapat menggunakan digit sebagai indeks untuk mendapatkan representasi bit vektor.
+1
karena pengindeksan 1 berbasis di julia.Fungsi
c=count_ones;
menghitung jumlah 1-bit dalam bilangan bulat. Kami menetapkan alias karena kami lebih sering membutuhkannya.Program lengkapnya, agak tidak digubah:
Sekarang, dua baris terakhir secara terperinci:
mean(map(c,m))
menghitung jumlah rata-rata garis per digit input.n=map(a->...,l)
loop representasi vektor semua digit.Jika jumlah baris digit kami saat
a
ini tidak sama dengan jumlah rata-rata input, kembalilahinf
.Jika tidak, kembalikan jumlah Jarak Hamming antara digit kami saat ini dan semua input.
Kami sekarang memiliki vektor
n
panjang yang10
mewakili angka-angka0-9
yang memberi kami jumlah total penambahan / penghapusan yang harus kami lakukan untuk mengubah semua digit input ke angka itu, atauinf
, jika transformasi seperti itu tidak mungkin dilakukan tanpa mengubah jumlah garis.Akhirnya, keluarkan lokasi (berbasis-0) dari semua minimum yang tidak
inf
.sumber