Tugas
Tulis sebuah program yang bertuliskan tiga bilangan bulat m , n baik dari STDIN atau sebagai argumen baris perintah, mencetak semua kemiringan yang mungkin dari segi empat dimensi m × n dengan domino 2 × 1 dan 1 × 2 dan akhirnya jumlah tilings yang valid.
Domino dari ubin individu harus diwakili oleh dua garis ( -
) untuk 2 × 1 dan dua batang vertikal ( |
) untuk 1 × 2 kartu domino . Setiap ubin (termasuk yang terakhir) harus diikuti oleh umpan baris.
Untuk tujuan penilaian, Anda juga harus menerima bendera dari STDIN atau sebagai argumen baris perintah yang membuat program Anda hanya mencetak jumlah tilings yang valid, tetapi bukan tilings itu sendiri.
Program Anda mungkin tidak lebih dari 1024 byte. Ini harus bekerja untuk semua input sehingga m × n ≤ 64 .
(Terinspirasi oleh Cetak semua domino miring dari persegi panjang 4x6 .)
Contoh
$ sdt 4 2
----
----
||--
||--
|--|
|--|
--||
--||
||||
||||
5
$ sdt 4 2 scoring
5
Mencetak gol
Skor Anda ditentukan oleh waktu pelaksanaan program Anda untuk input 8 8 dengan flag yang ditetapkan.
Untuk menjadikan ini kode tercepat daripada tantangan komputer tercepat , saya akan menjalankan semua pengiriman di komputer saya sendiri (Intel Core i7-3770, 16 GiB PC3-12800 RAM) untuk menentukan skor resmi.
Silakan tinggalkan instruksi rinci tentang cara menyusun dan / atau menjalankan kode Anda. Jika Anda memerlukan versi spesifik dari kompiler / juru bahasa Anda, buat pernyataan tentang hal itu.
Saya berhak untuk meninggalkan kiriman tanpa catatan jika:
Tidak ada kompiler / juru bahasa gratis (seperti dalam bir) untuk sistem operasi saya (Fedora 21, 64 bit).
Terlepas dari upaya kami, kode Anda tidak berfungsi dan / atau menghasilkan output yang salah di komputer saya.
Kompilasi atau eksekusi memakan waktu lebih dari satu jam.
Kode Anda atau satu-satunya kompiler / juru bahasa yang tersedia berisi panggilan sistem ke
rm -rf ~
atau sesuatu yang sama-sama mencurigakan.
Papan peringkat
Saya telah mencetak ulang semua kiriman, menjalankan kompilasi dan eksekusi dalam satu lingkaran dengan 10.000 iterasi untuk kompilasi dan antara 100 dan 10.000 iterasi untuk eksekusi (tergantung pada kecepatan kode) dan menghitung rata-rata.
Inilah hasilnya:
User Compiler Score Approach
jimmy23013 GCC (-O0) 46.11 ms = 1.46 ms + 44.65 ms O(m*n*2^n) algorithm.
steveverrill GCC (-O0) 51.76 ms = 5.09 ms + 46.67 ms Enumeration over 8 x 4.
jimmy23013 GCC (-O1) 208.99 ms = 150.18 ms + 58.81 ms Enumeration over 8 x 8.
Reto Koradi GCC (-O2) 271.38 ms = 214.85 ms + 56.53 ms Enumeration over 8 x 8.
--
. Jika vertikal, itu dua |
, satu di bawah yang lain.