Ada permainan otak yang disebut Enumerate (yang saya buat, berdasarkan Takuzu ). Tantangan Anda adalah memainkan game ini.
Tugas
Pecahkan game 4x4 Enumerate / Takuzu.
- Terima kisi start melalui STDIN atau baris perintah.
- Keluarkan grid yang dipecahkan melalui STDOUT atau menulis ke file.
Aturan
Gim ditandai dengan papan 4x4, terdiri dari sel merah dan ungu.
Harus ada jumlah sel merah dan ungu yang sama di setiap baris dan kolom (masing-masing 2 merah dan 2 ungu).
Tidak boleh ada baris atau kolom yang identik.
Memasukkan
Grid mulai akan diberikan sebagai string 16 karakter / byte yang terdiri dari hanya 0
, 1
dan 2
. Berikut ini sebuah contoh:
0001100002001200
1
mewakili sel merah dan 2
mewakili sel ungu. Semua papan input akan dapat dipecahkan.
Catatan: Jika bahasa Anda tidak mendukung input string literal , Anda dapat mengambil input sebagai array bilangan bulat. Harap sebutkan dalam jawaban Anda bahwa inilah masalahnya. Jadi tidak ada kebingungan, beginilah kata array seharusnya:
[0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 0, 0, 1, 2, 0, 0]
Array bersarang tidak diizinkan.
Keluaran
Papan yang dipecahkan harus berupa output dalam format yang sama seperti di atas; string 16 karakter / byte, hanya terdiri dari 1
dan 2
. Berikut ini solusi untuk input di atas:
2121112222111212
Sekali lagi, 1
mewakili sel merah dan 2
mewakili sel ungu.
Bonus
Sebuah bonus -25 byte ditawarkan untuk setiap jawaban yang output papan dipecahkan sebagai jaringan ASCII. Berikut adalah contoh papan yang disebutkan sebelumnya.
2|1|2|1
-+-+-+-
1|1|2|2
-+-+-+-
2|2|1|1
-+-+-+-
1|2|1|2
Sebuah -50 byte bonus yang ditawarkan untuk setiap jawaban yang output papan diselesaikan dalam warna. Ini bisa menjadi output sebagai gambar atau teks berwarna.
Jika teks berwarna dipilih, hasilnya akan terlihat seperti ini:
2121
1122
2211
1212
Namun, jika gambar adalah metode output yang dipilih, file yang dihasilkan harus 20x20 piksel, di mana setiap sel adalah blok piksel 5x5 berwarna. Berikut ini sebuah contoh:
Berikut adalah kode warna:
Red - #a73cba OR (167, 60, 186)
Purple - #f94a32 OR (249, 74, 50)
Sampel
In: 0020010100000100
Out: 1221212112122112
In: 0010000200121000
Out: 2211112221121221
In: 1000100102000000
Out: 1122122122112112
0
,1
dan2
? Bagaimana dengan array dua dimensi?Jawaban:
CJam (skor 13)
Dengan bonus teks berwarna, hanya karakter yang dapat dicetak: 64 karakter - 50 = 14
Ini dapat ditingkatkan dengan satu char menggunakan karakter non-printable:
27c'[@
menjadi"^["\
mana^
mewakili karakter 27, memberikan skor 13. versi xxd:Solusi langsung tanpa bonus: 42 karakter
Demo online
Dengan bonus grid: 59 karakter - 25 = 34
Demo online
Dengan output gambar, 83 karakter - 50 = 33. Output dalam format netpbm.
Demo online
sumber
CJam, 74-50 = 24 byte (keluaran warna)
Saya tidak berpikir ini golf yang sangat baik, tetapi berhasil! Coba di sini. Peringatan: lambat .
l:~:L;
membaca sebaris input keL
. Kemudian,5Zb
adalah[1 2]
, dan kami mengambil kekuatan Cartesian ke- 16 (Gm*
) dari daftar ini, untuk mendapatkan semua solusi yang mungkin[[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2] ...]
. Filter{ },
berisi logika Takuzu.Saya menambahkan bonus warna keluaran kode ANSI:
Ini tidak berfungsi di situs web, tentu saja. Ada
ESC
byte yang tidak bisa dicetak dalam string"["
.sumber
5Zb
Ruby, 196 byte
repeated_permutation
, mengapa namamu begitu panjang? -_-Ini hanya melewati semua solusi yang mungkin sampai salah satu dari mereka cocok dengan pola input.
sumber
C (fungsi) (dengan built-in gcc), 283
Ini sepertinya tantangan yang menarik untuk ditangani di C. Cukup yakin itu bisa bermain golf lebih banyak, tapi ini awalnya:
Input diteruskan sebagai string berfungsi
f()
. Output ke STDOUT.Cobalah online.
sumber
JavaScript (ES6), 263
300Mengingat kendala, jumlah solusi yang mungkin tampak sangat kecil: 72
Seluruh papan dapat dilihat sebagai angka 16 bit.
Nilai yang diizinkan untuk baris (masking 1111): 0011, 0101, 0110 dan nilai terbalik 1100, 1010, 1001
Sama untuk untuk kolom, hanya dengan bit masking dan intermixed yang berbeda (masking 1000100010001): 0 ... 0 ... 1 ... 1, 0 ... 1 ... 0 ... 1, 0 ... 1 ... 1 ... 0 dan nilai terbalik
Perhatikan bahwa pengaturan bit baris dan kolom berbeda, jadi untuk memeriksa uiniqueness Anda dapat menambahkan baris dan kolom ke set dan memverifikasi bahwa ukuran set adalah == 8.
Kode untuk menyebutkan semua kemungkinan solusi dalam kisi 4x4
Uji
sumber
0x10000
dapat diganti dengan65536
.C, Skor
278257(
328307 byte - 50 byte untuk output berwarna, atau 291 byte tanpa bonus warna)Ini adalah metode brute-force yang mencetak grid yang cocok pertama. Ini benar-benar bekerja pada grid diputar 180 derajat untuk menyederhanakan beberapa loop, dan menggunakan tabel pencarian (59799) untuk mencari tahu baris mana yang valid. Secara internal semua kisi hanya angka 16-bit. Dibutuhkan input string tunggal dari argumennya.
Karena kode pelarian yang digunakan untuk pewarnaan, Anda mungkin ingin mengatur ulang gaya terminal Anda setelah menjalankan ini (jalankan
printf "\x1b[0m"
)Kerusakan:
Jadi, apa 59799?
Hanya ada 16 kemungkinan status untuk setiap baris / kolom (ini adalah angka biner 4-bit). Di luar itu, opsi yang valid adalah:
Mengambil nilai-nilai itu sebagai indeks bit, kita bisa membuat topeng:
Tapi di sini kita ingin tahu baris yang tidak valid :
sumber