Teka-teki nomor Aristoteles adalah tantangan untuk mengisi masing-masing 19 sel dalam kotak heksagonal dengan bilangan bulat unik antara 1 dan 19 sehingga total sepanjang setiap sumbu adalah 38.
Anda dapat membayangkan papan permainan terlihat seperti ini:
Dan teka-teki, pada dasarnya, adalah solusi untuk rangkaian lima belas persamaan berikut:
((a + b + c) == 38 && (d + e + f + g) == 38 && (h + i + j + k + l) ==
38 && (m + n + o + p) == 38 && (q + r + s) == 38 && (a + d + h) ==
38 && (b + e + i + m) == 38 && (c + f + j + n + q) ==
38 && (g + k + o + r) == 38 && (l + p + s) == 38 && (c + g + l) ==
38 && (b + f + k + p) == 38 && (a + e + j + o + s) ==
38 && (d + i + n + r) == 38 && (h + m + q) == 38)
Di mana setiap variabel adalah nomor unik di set {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
.
Ada beberapa solusi yang mungkin, dan 19!
kemungkinan kombinasi bilangan bulat, sehingga gaya kasar naif tidak praktis.
Aturan:
- Tidak ada hardcoding jawabannya atau mencari jawabannya di tempat lain; kode Anda perlu menemukannya sendiri
- Kecepatan tidak masalah, tetapi Anda harus menunjukkan hasil Anda, jadi kode yang membutuhkan 1000 tahun untuk berjalan tidak akan membantu Anda
- Temukan semua jawabannya
- Perlakukan jawaban yang identik dengan rotasi sebagai identik
- Kurangi 5% dari total byte Anda jika Anda menghasilkan hasilnya di sarang lebah yang menarik
- Bytes paling sedikit menang
code-golf
game
hexagonal-grid
Michael Stern
sumber
sumber
Jawaban:
Haskell
295289Jawaban serupa lainnya, menggunakan aritmatika untuk mendapatkan heks menengah. Tidak seperti solusi lain, saya tidak menguji jumlah tersebut menjadi> 0, menguji bahwa heks yang diurutkan sama dengan kisaran [1..19] sudah cukup. a, c dan h dibatasi sehingga hanya solusi yang diputar / dicerminkan secara unik yang diizinkan. Solusinya muncul setelah beberapa detik, kemudian ada menunggu sekitar satu menit sementara itu memutuskan tidak ada lagi.
Penggunaan dalam ghci:
Diedit untuk mencukur beberapa karakter. 'y 0 t' menghasilkan [1..19].
sumber
x>0
cek Anda , karena saya mengurutkan daftar termasuk negatif daripada menambah array? Di sisi lain, saya harus membatasi rentang (sayay a b
) untuk membuat Haskell tampil, yang membuat saya harus mengeluarkan beberapa biaya. Tetapi pasti ada bahasa lain yang memiliki semacam bawaan yang akan mengalahkan saya bekerja dengan cara yang sama (melihat Anda, Mathematica).Java
(1517 - 75.85) = 1441.15(1429 - 71.45) = 1357.55(1325 - 66.25) = 1258.75Ini sangat menyenangkan.
Mencetak semua solusi unik mirroring dan rotasi, dalam sarang madu yang menyenangkan (karenanya pengurangan 5%)
Runtime: ~ 0,122s (122 milidetik) pada laptop saya yang berumur 4 tahun.
Kode golf ( sunting menyadari saya bodoh mengulangi printf saya, menguranginya menjadi printf tunggal untuk golf maksimum) ( suntingan baru Mengurangi panggilan untuk Mengatur fungsi menjadi fungsi yang lebih kecil pintar, beberapa optimasi mikro lainnya):
Nikmati!
sumber
return;
pernyataan itu.return;
pernyataan arbitrer meningkatkan panjang kode saya sampai 7, akan menjadi gila bagi saya untuk menambahkannya jika jawaban yang benar mencakup semua 12 solusi yang hanya diputar / dicerminkan versi satu sama lain. Meskipun kegilaan tidak dapat dikesampingkan, dalam hal ini, penambahanreturn;
disengaja, dan seperti yang saya jelaskan, berdasarkan dialog pertanyaan dan komentar lengkap , yang harus Anda perhatikan dengan saksama sebelum melemparkan tuduhan. Terima kasih!C, 366 byte (
C ++ 541 450)Kompilasi dengan
gcc -std=c99 -O3
.Mencetak semua solusi unik, rotasi modulo dan mirroring, dalam format
a b c d ...
, satu per baris.Runtime: 0,8 detik di komputer saya.
sumber
Matlab:
333320 karakterIni adalah pendekatan near-brute-force yang cukup bodoh yang tidak menggunakan rekursi. Itu membangun solusi parsial dalam
z
, yang dicetak pada akhirnya. Setiap kolom adalah solusi; elemen terdaftar az dari atas ke bawah. Runtime adalah 1-2 jam.Berlari dari dalam Matlab:
sumber