Tulis sebuah program untuk menghasilkan file yang berisi kisi silang yang dapat dicetak pengguna dan kerjakan puzzle.
Memasukkan
Nama file yang mewakili file kotak silang dan secara opsional nama file kedua yang mewakili file penomoran silang. Input harus diterima dengan cara konvensional untuk lingkungan pemrograman Anda: argumen baris perintah, input standar, formulir web, dll.
Anda dapat mengasumsikan bahwa teka - teki silang telah divalidasi , dan jika menggunakan file penomoran yang sesuai dengan kisi yang disediakan .
Format file kisi: Baris pertama terdiri dari dua konstanta integer yang dipisahkan spasi-putih M dan N. Berikut adalah garis M yang masing-masing terdiri dari N karakter (ditambah baris baru) dipilih [#A-Z ]
. Karakter-karakter ini diinterpretasikan sedemikian rupa sehingga '#'
mengindikasikan kotak yang diblokir, ' '
kotak terbuka dalam teka-teki tanpa isi yang diketahui dan huruf apa pun berupa kotak terbuka yang berisi huruf itu.
Format file penomoran Baris yang dimulai dengan '#' diabaikan dan dapat digunakan untuk komentar. Semua jalur lain mengandung tab terpisah triplet i
, m
, n
di mana i
merupakan nomor yang akan dicetak di grid, dan m
dan n
mewakili baris dan kolom dari alun-alun di mana ia harus dicetak. Jumlah baris dan kolom dimulai dari 1.
Keluaran
Outputnya akan berupa file yang dapat dicetak pengguna dan menggunakan teka-teki silang. ASCII, postscript, pdf, png, dan format wajar lainnya akan diterima, tetapi semua harus mematuhi aturan-aturan ini:
- Harus ada aturan di seluruh teka-teki dan di antara setiap pasang kotak.
- Kotak yang diblokir harus diisi dengan gelap.
- Dalam kotak permainan yang mewakili awal dari petunjuk bernomor (melintasi atau bawah) harus disediakan dengan nomor di sudut kiri atas kotak, sambil membiarkan sebagian besar kotak kosong untuk permainan untuk menulis. Perhatikan bahwa kotak khas diterbitkan di surat kabar akan memiliki puluhan petunjuk dan mungkin memiliki lebih dari 100.
Outputnya akan dari grid sendiri, tanpa daftar petunjuk.
Output harus dikirim ke tujuan konvensional (file yang namanya berasal dari nama file input, diproduksi sebagai halaman web, dll.)
Kasus cobaan
Diberikan input dari
5 5
# ##
#
#
#
## #
sudut awal dari output ASCII yang dapat diterima mungkin terlihat seperti ini
+-----+-----+-----+---
|#####|1 |2 |###
|#####| | |###
|#####| | |###
+-----+-----+-----+---
|#####|3 | |4
|#####| | |
|#####| | |
+-----+-----+-----+---
|6 | |#####|
| | |#####|
Mereka yang menggunakan format grafis harus mengambil inspirasi dari sumber cetak yang biasa.
Skema penomoran
Kisi bernomor yang benar memiliki properti berikut:
- Penomoran dimulai pada 1.
- Tidak ada kolom atau rentang kotak terbuka yang tidak dinomori.
- Angka akan ditemui dalam penghitungan urutan dengan memindai dari baris atas ke bawah mengambil setiap baris dari kiri ke kanan.
Ke samping
Ini adalah yang ketiga dari beberapa tantangan terkait silang. Saya berencana untuk menggunakan serangkaian file-format yang konsisten di seluruh dan untuk membangun seperangkat utilitas terkait silang yang terhormat dalam prosesnya.
Tantangan sebelumnya dalam seri ini:
sumber
Jawaban:
Python, 379 karakter
sumber
next(f)
bukanf.readline()
. Anda tidak perlu di.readlines()
sana sama sekali.Nota bene
905 797 677 675 629 608 330 320308Program ini ditulis sebagai "protokol prolog" sehingga Anda hanya membuatnya bersama-sama dengan file grid dan nomor (dalam urutan itu, dipisahkan oleh garis kosong) dan pipa seluruh kekacauan ke ghostscript atau Distiller atau printer PS. Tambahkan ke versi referensi di bawah ini adalah teka-teki NYT (Dari 5 November 2011) dengan angka dan satu jawaban saya cukup yakin (Sabtu sulit!).
Revisi baru menggunakan dua prosedur ini untuk menjalankan nama sistem yang dikodekan biner dari string.
Lekukan dan (agak) berkomentar.
File data.
Seharusnya terlihat oke dari printer, tetapi di layar itu butuh sedikit bantuan. Prosedur 19-karakter dan 9 karakter untuk menjalankannya pada semua titik ruang pengguna, membantu membuat garis-garis dengan jarak yang sama terlihat lebih rata. Jadi 308 + 19 + 9 = 337, digunakan untuk menghasilkan gambar ini.
Catatan tambahan 608
Versi sebelumnya ini (dari revisi 8 ) menggunakan pendekatan yang sama sekali berbeda, menggunakan kembali kode jalur utama sebagai "leksikon" dari mana token yang lebih panjang dapat diindeks menggunakan string.
Itu ditulis menggunakan versi komentar ini yang menggambarkan pengkodean leksikon. Token pertama
30
adalah komentarspace
karena itu( )*
adalah sinonim untuk30
. Tidak terlalu bermanfaat untuk30
, tetapi untuk token yang lebih lama ini adalah kemenangan besar (sampai kemungkinan pengkodean yang lebih dalam ditemukan).sumber
C (output ke SVG), 553 karakter
Saya tahu, kodenya sangat besar, tetapi masalah ini hanya menyerukan jawaban SVG.
Ketika menjalankannya mendapat dua nama file pada dua baris input standar yang terpisah; pertama file grid, lalu file angka.
Logika yang satu ini sebenarnya cukup sederhana. Format SVG memungkinkannya untuk membuat semua elemen dalam urutan apa pun (alih-alih dari atas ke bawah seperti dengan solusi keluaran ASCII). Ukurannya hampir seluruhnya disebabkan oleh boilerplate SVG.
Namun gambar yang dihasilkan tampak hebat!
Diedit untuk menambahkan: Ini versi yang lebih pendek (517 karakter) yang menghasilkan resolusi tertentu. Ini memungkinkan kode untuk menggunakan lebih banyak pengaturan default, tetapi dengan biaya (menurut saya) yang mahal, SVG tidak lagi secara otomatis mengubah ukuran di browser web Anda.
sumber
Haskell, 328 karakter
sumber
C, 375 karakter
Dua nama file input dimasukkan pada input standar, masing-masing pada baris terpisah. Grid diberikan dalam ASCII pada output standar. Ya, ini UI yang buruk, tetapi karakter biaya apa pun yang lebih baik. Saya mengambil untuk memohon seperti:
Program harus menangani dengan benar hal-hal seperti baris komentar dalam file penomoran.
sumber
*r++-=b[i++]==35
(g
diinisialisasi ke nol).for(j=3*(f<r);j--;puts("|"))
menghematif
.n&&j>1
->j/2*n
Scala 463, format output: html
Output sampel
sumber
Nota bene
(435)(434)Batalkan golf dengan data:
sumber
stopped
. ... Aku akan membiarkan karunia terbuka selama sehari atau lebih untuk menarik perhatian.Catatan tambahan, bukan kombatan.
Terinspirasi (lagi-lagi) oleh pertanyaan terkait Anda pada SO , saya telah membuat versi referensi di Postscript menggunakan file-IO. Ini juga menciptakan font lebar tetap yang diturunkan sehingga data kisi dilewatkan begitu saja
show
.adalah kotak kosong dan
#
kotak diisi. Karakter ascii lainnya digambar sebagai mesin terbang Times-Roman kecil yang dikelilingi oleh sebuah kotak.Program ini memanfaatkan fitur ghostscript yang mungkin tidak ada di semua penerjemah Postscript. Jika ghostscript dipanggil dengan
--
opsi, itu meneruskan argumen baris perintah ke program postscript dalam array string bernama / ARGUMENTS. Jadi, Anda perlu menjalankan program seperti inigs -- xw-io.ps grid-file number-file
.sumber