Anda memiliki kotak dengan nomor satu digit di setiap sudut:
1|2
---
3|4
Jika kita menggabungkan angka di sepanjang baris kiri ke kanan, kita mendapatkan 12 dan 34. Jika kita menggabungkan angka di sepanjang kolom dari atas ke bawah, kita mendapatkan 13 dan 24. Jika kita menambahkan semua angka-angka ini, kita mendapatkan 12 + 34 + 13 + 24 = 83.
Tantangan
Tulis program untuk mencetak semua kotak seperti itu di mana jumlah yang dihitung seperti di atas sama dengan 100.
Dengan asumsi setiap sudut berisi angka digit tunggal antara 1 dan 9, ada 9 kombinasi: 1157, 1247, 1337, 1427, 1517, 2138, 2228, 2318, dan 3119. (Perhatikan bahwa ada 25 kombinasi jika kita memasukkan 0, tetapi kami bukan untuk tantangan ini.)
Perhatikan bahwa contoh 1234 tidak berfungsi karena 12 + 34 + 13 + 24 tidak sama dengan 100.
Memasukkan
Tidak ada
Keluaran
Kotak jawaban dalam format berikut:
A|B
---
C|D
Output harus dicetak ke STDOUT atau alternatif terdekat.
Aturan
- AB + CD + AC + BD = 100
- Setiap sudut hanya akan berisi bilangan bulat positif 1-9.
- 0 dikecualikan.
- Angka dapat digunakan lebih dari satu kali.
- Anda perlu menggambar kotak, seperti di atas. (
A|B\n---\nC|D\n
) - Anda perlu menampilkan semua jawaban yang valid.
- Baris tambahan tambahan baru baik-baik saja.
- kode-golf , jadi kode terpendek dalam byte menang.
- Celah dan T&C standar berlaku.
Ini adalah pengiriman pertama saya jadi tolong beri tahu saya jika saya perlu mengklarifikasi sesuatu.
Jawaban:
Pyth,
423834 byteJejak baris baru dalam kode itu penting. Alasan utama saya kompetitif karena saya menggunakan vektor produk titik
[1, 1, 5, 7]
dan[20, 11, 11, 2]
dan membandingkannya dengan 100.sumber
"|"
->\|
,\n
-> (linefeed literal) dan Anda tidak perlu kutipan terakhir.Ruby, 71
Karena hardcoding tidak dianulir (dan dalam kasus apa pun sulit untuk menarik garis) inilah jawaban sebagian hardcoded.
Penjelasan
Rumus untuk solusi adalah sebagai berikut:
Dengan argumen aritmatika modular, kita melihat bahwa A dan D harus berbeda dengan jumlah konstan, sehingga
(A*20+D*2)%11
konstan. Faktanya D = A + 6. Thei
Loop iterates melalui tiga kemungkinan nilai A.Nilai B dapat berupa apa saja dari 1 hingga
7-i*2
dan total B dan C harus14-A-D
. Jadi kami memperoleh ungkapan berikut, yang dicetak. Ruby memungkinkan baris baru literal dalam string terlampir''
sumber
Jawa,
202200198Mencoba untuk pertama kalinya: D
EDIT: menyimpan 2 byte dengan perhitungan sedikit lebih kecil ditemukan di komentar lain.
sumber
Batch - 187 byte
Paksaan.
Un-golfed itu sedikit kurang menjijikkan:
sumber
CJam, 40 byte
Pendekatan untuk menemukan kombinasi berbeda dari @ Pengoptimal, tetapi kode untuk mencetaknya sama.
Cobalah online di penerjemah CJam .
Bagaimana itu bekerja
sumber
Haskell,
107131 byteVersi kedua dari program Haskell pertama saya!
Kali ini dengan tampilan sesuai persyaratan, tanpa malu-malu
dicuridiadaptasi dari nimi (well, saya melakukan riset tetapi sepertinya tidak ada cara yang efisien untuk menampilkan karakter di Haskell sehingga putStr $ unlines sulit untuk dihindari).Dan ... terlepas dari faktorisasi rumus pada akhirnya, itu masih dapat dibaca =)
sumber
Haskell,
125121 bytePemakaian:
>>
in"abcd">>[[1..9]]
membuat daftar dengan 4 (panjang parameter 1) salinan elemen kedua, yaitu[[1..9],[1..9],[1..9],[1..9]]
.mapM id
membuat daftar semua kombinasi daripadanya, yaitu[0,0,0,0]
untuk[9,9,9,9]
. Simpan yang meringkas100
dan membangun string dengan kotak itu. Cetak semua kotak.Terima kasih @Mauris untuk 1 byte dan membuat saya meninjau posting saya untuk menemukan 3 lagi.
sumber
mapM id
menghemat byte vssequence
.Python 2,
145129 BytesSaat ini saya bermain-main dengan beberapa metode penghitungan yang harus lebih pendek dari apa yang diuraikan, tetapi saya akan memposting apa yang saya miliki sekarang.
sumber
CJam,
4342 bytePenjelasan untuk diikuti .. hari ini EOD
Cobalah online di sini
sumber
Python 3, 159
Cepat dan kotor.
sumber
R, 165 byte
Ini akan jauh lebih singkat jika saya memilih untuk meng-hard-output dengan beberapa cara. Seperti beberapa solusi lain, ini mengambil keuntungan dari identitas 20 x 1 + 11 ( x 2 + x 3 ) + 2 x 4 = 100.
Penjelasan + tidak dikumpulkan:
Anda mungkin bertanya-tanya mengapa pernyataan terakhir adalah tugas. Ternyata,
cat
fungsi, yang menyatukan dan mencetak, mengembalikan nilaiNULL
. Ketika Anda memanggilcat
dari dalam fungsi sepertiapply
, output akan diikuti olehNULL
, yang tidak diinginkan. Ada dua cara untuk mengatasi hal ini: tetapkan ke variabel atau masukkaninvisible
. Di sini saya memilih yang pertama karena jauh lebih pendek.Anda dapat mencobanya secara online .
sumber
Jawa, 450
Usaha pertamaku (ungolfed) pertamaku terlihat seperti ini:
sumber
20*a + 11*(b + c) + 2*d == 100
.PowerShell, 98
formula steveverrill yang disesuaikan
sumber