Pertimbangkan standar teka-teki silang 15x15 berikut.
Kita dapat mewakili ini dalam seni ASCII dengan menggunakan #
untuk blok dan (spasi) untuk kotak putih.
# #
# #
#
# #
### ## ##
## #
# #
# ##
## ## ###
# #
#
# #
# #
Diberi kisi silang dalam format seni ASCII di atas, tentukan berapa banyak kata yang dipegangnya. (Kisi-kisi di atas memiliki 78 kata. Itu adalah teka-teki New York Times Senin lalu .)
Kata adalah sekelompok dua atau lebih ruang berturut-turut yang berjalan secara vertikal atau horizontal. Sebuah kata dimulai dan diakhiri dengan salah satu blok atau tepi kisi dan selalu berjalan dari atas ke bawah atau kiri ke kanan, tidak pernah diagonal atau mundur. Perhatikan bahwa kata-kata dapat menjangkau seluruh lebar puzzle, seperti pada baris keenam dari puzzle di atas. Sebuah kata tidak harus terhubung dengan kata lain.
Detail
- Input akan selalu berupa kotak yang berisi karakter
#
atau(spasi), dengan baris yang dipisahkan oleh baris baru (
\n
). Anda dapat mengasumsikan bahwa kisi tersebut terbuat dari 2 karakter ASCII yang dapat dicetak dan bukan#
dan.
- Anda dapat mengasumsikan ada baris tambahan opsional. Karakter spasi tambahan tidak dihitung, karena memengaruhi jumlah kata.
- Grid tidak akan selalu simetris, dan mungkin semua spasi atau semua blok.
- Program Anda secara teoritis harus dapat bekerja pada kisi-kisi ukuran apa pun, tetapi untuk tantangan ini tidak akan pernah lebih besar dari 21 × 21.
- Anda dapat menggunakan kisi itu sendiri sebagai input atau nama file yang berisi kisi.
- Ambil input dari stdin atau argumen baris perintah dan output ke stdout.
- Jika Anda lebih suka, Anda dapat menggunakan fungsi bernama daripada program, mengambil grid sebagai argumen string dan menghasilkan integer atau string melalui stdout atau fungsi kembali.
Uji kasus
Memasukkan:
# # #
Keluaran:
7
(Ada empat ruang sebelum masing-masing#
. Hasilnya akan sama jika setiap tanda nomor dihapus, tetapi Markdown menghapus spasi dari garis yang kosong.)Memasukkan:
## # ##
Output:
0
(Kata-kata satu huruf tidak masuk hitungan.)Memasukkan:
###### # # #### # ## # # ## # #### #
Keluaran:
4
Input: ( Teka-teki Minggu NY Times 10 Mei )
# ## # # # # # # # ### ## # # ## # # # ## # ## # ## # # ### ## # ## ## # ## ### # # ## # ## # ## # # # ## # # ## ### # # # # # # # ## #
Keluaran:
140
Mencetak gol
Kode terpendek dalam byte menang. Tiebreaker adalah posting tertua.
py -3 slip.py regex.txt input.txt
danpy -3 slip.py regex.txt input.txt no
, yaitu tiga byte (termasuk spasi sebelumnyan
)Haskell, 81 byte
Menggunakan spasi
sebagai karakter blok dan karakter lainnya (bukan spasi) sebagai sel kosong.
Cara kerjanya: membagi input menjadi daftar kata di spasi. Ambil a
1
untuk setiap kata dengan sewa 2 karakter dan jumlah1
itu. Terapkan prosedur yang sama pada transposisi (pisah pada\n
) dari input. Tambahkan kedua hasil.sumber
JavaScript ( ES6 ) 87
121 147Buat transposisi string input dan tambahkan ke input, lalu hitung string 2 ruang atau lebih.
Jalankan cuplikan di Firefox untuk menguji.
Kredit @IsmaelMiguel, solusi untuk ES5 (122 byte):
sumber
F=z=>{for(r=z.split(/\n/),i=0;i<r[j=0][L='length'];i++)for(z+='#';j<r[L];)z+=r[j++][i];return~-z.split(/ +/)[L]}
? Panjangnya 113 byte. Regex Anda diganti dengan/ +/
(2 spasi),j=0
ditambahkan dalamfor
loop 'parent' dan alih-alih menggunakan sintaksobj.length
, saya mengubah untuk menggunakanL='length'; ... obj[L]
, yang diulang 3 kali.F=z=>
, saya harus menggunakanvar F=(z,i,L,j,r)=>
). Saya mengujinya di IE11 dan berhasil!/\n/
dengan string template dengan baris baru yang nyata di antara. Itu menghemat 1 byte karena Anda tidak perlu menulis urutan melarikan diri.Pyth,
151413 byteSaya menggunakan
sebagai pemisah dan
#
mengisi karakter alih-alih makna yang berlawanan dari OP. Cobalah online: PeragaanAlih-alih
#
sebagai karakter isi ini menerima juga surat. Jadi Anda benar-benar dapat mengambil teka-teki silang yang terselesaikan, dan itu akan mencetak jumlah kata. Dan jika Anda menghapusl
perintah, itu bahkan mencetak semua kata. Uji di sini: Teka-teki Sunday NY Times 10 MeiPenjelasan
sumber