Latar Belakang
Boggle adalah permainan papan di mana para pemain harus menemukan kata-kata bahasa Inggris pada papan 4-oleh-4 huruf acak. Kata-kata dapat dibangun dengan memilih sel-sel yang berdekatan secara berurutan di papan tulis. ("berdekatan" berarti berdekatan secara horizontal, vertikal atau diagonal.) Juga, sel yang sama tidak dapat digunakan lebih dari sekali dalam satu kata.
Berikut ini adalah contoh papan:
I L A W
B N G E
I U A O
A S R L
Di papan ini BINGO
,, ORANGE
dan WEARS
merupakan kata yang valid, tetapi SURGE
dan RUSSIA
tidak:
SURGE
: Tidak ada pasangan yang berdekatan di papan memilikiRG
.RUSSIA
:S
tidak dapat digunakan dua kali.
Boggle yang Dimodifikasi adalah versi Boggle yang dimodifikasi, dengan aturan berikut:
- Ukuran board
n
-by-n
, di manan
bisa bilangan bulat positif. - Setiap sel dapat berisi satu byte antara 0 dan 255 inklusif.
- Sel dapat digunakan lebih dari sekali, tetapi tidak dua kali berturut-turut .
Menggunakan contoh papan di atas, sebagai tambahan BINGO
, ORANGE
dan WEARS
, LANGUAGE
menjadi string yang valid (karena G
digunakan dua kali, tetapi tidak dua kali berturut-turut) tetapi RUSSIA
masih tidak (karena SS
berpasangan).
Berikut adalah contoh lain menggunakan fragmen kode. String from itertools import*\n
dapat ditemukan di papan berikut, tetapi tidak from itertoosl import*
atau from itertools import *
:
f i ' ' s
r t m l
e o o p
\n * t r
Perhatikan bahwa Anda perlu dua o
untuk mencocokkan oo
urutan.
Tantangan
Tulis fungsi atau program yang, diberi papan Modifikasi Boggle B
(dari berbagai ukuran) dan string s
, menentukan apakah s
dapat ditemukan B
.
Batasan
Kode Anda sendiri juga harus sesuai pada papan Modifikasi Boggle b
. Artinya, Anda harus menunjukkan papan b
di kiriman Anda bersama dengan kode Anda, sehingga fungsi / program Anda menghasilkan true jika diberikan b
dan kode Anda sebagai input.
Mencetak gol
Nilai kiriman Anda adalah panjang sisi papan terkecil di b
mana Anda dapat memasukkan kode Anda. Ikatan rusak oleh aturan kode-golf yang biasa , yaitu panjang kode Anda dalam byte. Pengajuan dengan skor terendah (untuk kedua kriteria) menang.
Misalnya, from itertools import*\n
memiliki skor 4 (menggunakan papan di atas) dan panjang kode 23 byte.
Masukan dan keluaran
Untuk input, Anda dapat mengambil metode praktis apa pun untuk keduanya B
dan s
. Ini termasuk daftar karakter dan daftar kode, 2D atau diratakan atau apa pun yang masuk akal. Selain itu, Anda dapat memilih ukuran papan sebagai bagian dari input.
Untuk hasil, Anda dapat memilih salah satu dari yang berikut:
- Nilai-nilai yang benar dan salah mengikuti konvensi bahasa Anda, atau
- Satu nilai yang telah ditentukan untuk benar dan salah masing-masing.
Silakan tentukan metode input / output Anda dalam kiriman Anda.
sumber
+=+=
atau sesuatu seperti itu. Masalahnya adalah==
fungsi output ...Jawaban:
Python 2, skor 3, 20972 byte
Kode lengkap adalah output dari: Coba online!
Cocok di papan Boggle:
Dekode dan jalankan program ini:
Yang membutuhkan input seperti:
['ILAW','BNGE','IUAO','ASRL'], 'LANGUAGE'
sumber
CJam , skor 2, 9351 byte
Cobalah online! Diharapkan input seperti:
dan cocok di papan Boggle:
Membangun string
l~:Q,:K;{\:Y;\:X;:C,!_{;QY=X=C0==_{;[X(XX)]K,&[Y(YY)]K,&m*[XY]a-C1>:D;{~DF}%:|}&}|}:F;l:R;K,2m*{~RF}%:|~
kemudian mengevaluasinya sebagai kode CJam.sumber
Bersih , skor 12 (175 byte)
(Ini hampir pasti akan kalah oleh esolang dan mungkin bahasa normal juga.)
Ini mendefinisikan fungsi
$ :: Int [Char] {#String} -> Bool
yang memeriksa apakah argumen kedua (kata) dapat ditemukan dalam argumen ketiga (papan) diberikan argumen pertama sebagai lebar.Di papan tempat ini cocok (lihat di bawah),
*
tandai tempat yang tidak digunakan. Ada 16 dari mereka, pada papan ukuran 12 × 12 = 144, berarti 128 digunakan secara efektif (sebuah efisiensi dari 175/128 ≈ 1,37 ). Dimungkinkan untuk mendapatkan program yang sama pada 11 × 11, tetapi ini semua dilakukan dengan tangan dan sangat membosankan; bos saya mungkin tidak akan senang jika saya mencoba mendapatkannya pada 11 × 11.Cobalah online (dengan program itu sendiri sebagai masukan)!
sumber
Java, skor 23,
538507 byteNSFW
Cobalah online!
Disusun dengan JDK 9, tetapi harus bekerja dengan 8.
Saya tidak tahu apa yang harus dilakukan dengan impor dan bidang statis (yang sebenarnya diperlukan), jadi saya memutuskan untuk mengambil seluruh kelas dan menempelkan lambda di penginisialisasi. Lambda
g
kemudian dapat diterapkan pada array 2D dan string, dan kembali1
jika string ada di papan dan0
jika tidak (sebagaiByte
, 3 karakter lebih pendek dariInteger
).Kredit untuk orang ini untuk (dalam kasus saya) lebih pendek dari cara hardcoding untuk mengatasi sel tetangga.
Di suatu tempat dalam proses membuat monstrositas ini, saya diinvestasikan untuk membuatnya bekerja dengan lambdas, menjadi semakin buruk dan semakin buruk sampai ini terjadi. Bahkan tidak mendekati jawaban lain dan mungkin bahkan tidak dekat dengan solusi optimal di Jawa, tapi hei, itu cocok dengan cukup rapi di papan 23x23 (yang tidak optimal, tetapi mungkin lebih dekat daripada program itu sendiri) :
Tentu saja, pada saat itu tidak ada gunanya mencoba membuatnya dengan tangan. Jadi sebagai bonus, inilah fungsi (naif) yang saya gunakan untuk memampatkan kode ke papan:
Ini memetakan inputnya ke spiral implementasi ular tidak bekerja , meninggalkan karakter keluar jika mungkin. Ini agak sederhana sehingga mungkin bisa ditingkatkan dan saya lupa menambahkan memeriksa karakter dalam arah mundur-kanan (pembaruan: Saya menambahkannya dan itu menghasilkan hasil yang salah) , jadi saya mungkin bisa mengurangi satu atau dua karakter tapi saya ragu itu semakin pada 22x22.
Sunting: Dihapus 6 spasi di tempat-tempat yang tidak perlu. Disimpan 13 byte dengan mengganti tanda centang pada indeks array dengan try-catch. Memotong 12 byte dengan memindahkan ukuran papan ke dalam
int
.sumber
Jelly , 2316 bytes, skor 3
Cobalah online!
Naik:
Catatan: ini adalah solusi (agak) sepele. Kredit untuk Lynn untuk ide .
Mengembalikan daftar yang tidak kosong jika
s
dapat ditemukan diB
, dan daftar kosong jika tidak. Footer yang ditambahkan membantu mengklarifikasi hal itu.sumber
s
tidak dapat ditemukan, atau bilangan bulat positif jika dapat ditemukan. Tetapi aturan menyatakan "Satu nilai yang telah ditentukan untuk benar dan salah masing-masing". Atau kosong / tidak kosong untuk konvensi palsu / benar di Jelly?