Objektif
Diberikan daftar input 6
digit yang berbeda, temukan 3 angka a
, b
dan c
sedemikian rupa sehingga a × b = c
, dengan a
memiliki 2 digit, b
memiliki 1 digit dan c
memiliki 3 digit. Dengan cara yang lebih visual, program Anda harus mengatur 6 digit di dalam kotak gambar ini:
Jika ada lebih dari satu solusi, Anda dapat mengeluarkan salah satu dari mereka.
Memasukkan
6 digit berbeda. Anda dapat menggunakannya dengan cara apa pun yang masuk akal untuk bahasa Anda.
Keluaran
3 angka a
, b
dan c
. Format output relatif bebas, selama 3 angka dipisahkan dan selalu dicetak dalam urutan yang sama (tetapi tidak harus dalam urutan a, b, c
).
Uji Kasus
1, 2, 3, 4, 5, 6 -> 54,3,162
2, 3, 4, 5, 6, 7 -> 57,6,342 or 52,7,364
Mencetak gol
Kode terpendek dalam byte menang.
0,1,2,3,4,5
hasil dalam13,4,052
; tidak ada solusi; atau apakah ada perilaku yang OK?Jawaban:
Brachylog (2), 10 byte
Cobalah online!
Terlalu lambat untuk dijalankan dalam jangka waktu yang wajar (juru bahasa Brachylog menghabiskan waktu lama melakukan perkalian pada string kosong, angka 4 digit, angka negatif, dll. Menggunakan pemecah kendala yang sangat lambat). TIO link menggunakan input dengan hanya 3 digit (program ini dapat menangani input dengan jumlah digit berapa pun). Ini adalah fungsi yang inputnya adalah angka yang berisi semua digit yang diperlukan (mis.
234567
) - kurangnya duplikat dalam input berarti bahwa Anda selalu dapat dengan mudah meletakkannya0
di bagian akhir untuk menghindari angka nol di depan - dan yang hasilnya adalah daftar di memesan[b, a, c]
(misalnya[6, 57, 342]
).Penjelasan
Jadi kemana perginya persyaratan pada kelompok menjadi 2, 1, dan 3 digit? Kita tahu ada 6 digit dalam input, dan grup dalam urutan. Oleh karena itu, satu-satunya ukuran yang mungkin mereka miliki adalah [1, 1, 4], [1, 2, 3], atau [2, 2, 2]. Kasing pertama tidak mungkin (Anda tidak dapat mengalikan dua angka 1 digit untuk menghasilkan angka 4 digit, karena 9 × 9 hanya 81), seperti kasing terakhir (Anda tidak dapat mengalikan dua nomor 2 digit ke angka menghasilkan angka 2 digit, karena bahkan 10 × 10 menghasilkan 100). Jadi, nilai pengembalian
[b, a, c]
harus panjang 1, 2, dan 3 digit dalam urutan itu, demikiana
juga 2 digit,b
adalah 1 digit, danc
3 digit, seperti yang diminta.sumber
JavaScript (ES6),
9088 byteMengambil input sebagai array 6 digit. Mengembalikan string yang menggambarkan solusi yang mungkin (seperti
'54*3==162'
) atau keluar dengan kesalahan 'terlalu banyak rekursi' jika (dan hanya jika) tidak ada solusi.Bagaimana itu bekerja
Ini adalah algoritma deterministik.
Primes
P=2
danQ=3779
dipilih sedemikian rupa sehingga panggilan balik semacam(k = k * P % Q) & 2
dijamin untuk menghasilkan semua 720 kemungkinan permutasi dari array input dari waktu ke waktu. Lebih tepatnya, semua permutasi dicakup setelah 2798 macam - yang harus dalam batas rekursi dari semua browser.Kami menyuntikkan setiap permutasi dalam ekspresi
01*2==345
dengan memetakan digit ke entri yang sesuai dalam array.Kami mengevaluasi ungkapan ini dan melakukan panggilan rekursif sampai benar.
Uji
Tampilkan cuplikan kode
sumber
-
alih-alih==
(dan balikkan?:
) untuk menyimpan byte.Brachylog , 17 byte
Cobalah online!
Penjelasan
sumber
05AB1E ,
1513 byteDisimpan dua byte berkat Emigna !
Menggunakan pengkodean CP-1252 . Cobalah online!
Penjelasan:
sumber
213S
dengan3L
karena pesanan tidak harus2,1,3
sesuai dengan spesifikasi.£
vektor menjumlahkan ... Jika itu cara yang tepat untuk mengatakan itu.Bash + coreutils, 70
Tidak ada cara yang sangat mudah untuk menghasilkan semua permutasi. Alih-alih menghasilkan permutasi secara acak dan menghitung sampai kami menemukan yang baik.
Output dalam bentuk
A*B-C
- yaitu ekspresi yang akan mengevaluasi ke nol ketika kita memiliki permutasi yang benar.Cobalah online .
sumber
CJam , 23 byte
Cobalah online!
sumber
Python 2 , 105 byte
Cobalah online!
Solusi 88 byte dengan output yang lebih fleksibel
Cobalah online!
di mana output akan ['6', '5', '7', '3', '4', '2'] sebagai gantinya '6', '57', '342'
sumber
import
di puncak ...f=
di header. Itu bukan masalah besar.PHP, 110 byte
Itu akan sampai di sana ... pada akhirnya ...
Tidak Disatukan:
sumber
PHP, 77 byte
Mengambil input sebagai string.
sumber
ES6 (Javascript),
85,82, 79 byteMenerima array angka (string), mengembalikan array 3-elemen
[A,B,C]
=>C=A*B
Golf
EDIT:
d
dana
, dan menyingkirkan==
(Terima kasih @Arnauld!)Cobalah !
sumber
Pip , 18 byte
17 byte kode, +1 untuk
-S
bendera.Mengambil input sebagai serangkaian digit melalui argumen baris perintah. Output dalam urutan c, b, a. Cobalah online!
Kode ini menampilkan semua solusi jika ada banyak. Jika diperlukan untuk menghasilkan hanya satu solusi, maka tambahkan tiga byte dan bungkus program
(...0)
.Penjelasan
sumber
Ruby, 60 byte
Mencetak semua solusi sebagai "a * b == c"
Contoh:
sumber
Batch, 305 byte
Mengambil input pada STDIN sebagai string
[1-9]{6}
dan menampilkan semua solusi dalamdd*d-ddd
format. Batch tidak terlalu bagus dalam manipulasi string sehingga menghasilkan permutasi 720 sedikit canggung.sumber