Diberikan teks persegi panjang sebagai teka-teki pencarian kata dan string pencarian, tentukan apakah teks tersebut berisi string pencarian. String pencarian dapat muncul:
- secara horizontal, vertikal atau diagonal
- maju atau mundur
Anda dapat menulis fungsi atau program dan mengambil dua string sebagai input melalui argumen fungsi, ARGV atau STDIN. Output harus menjadi truthy atau falsy hasil yang baik dapat kembali dari fungsi atau ditulis ke stdout.
Asumsikan bahwa teks tersebut akan berisi karakter ASCII yang dapat dicetak secara acak (kode hex 20 hingga 7E) dan karakter pemisah baris. Huruf peka huruf besar-kecil. Anda dapat mengasumsikan bahwa teks input berbentuk persegi panjang, yaitu semua baris memiliki panjang yang sama. Anda dapat apakah input diakhiri dengan baris baru atau tidak (jika itu penting untuk kiriman Anda).
Ini adalah kode golf, jawaban terpendek (dalam byte) menang.
Contohnya
Menggunakan kisi ini dari artikel Wikipedia tentang pencarian kata sebagai input pertama:
WVERTICALL
ROOAFFLSAB
ACRILIATOA
NDODKONWDC
DRKESOODDK
OEEPZEGLIW
MSIIHOAERA
ALRKRRIRER
KODIDEDRCD
HELWSLEUTH
string pencarian berikut harus menghasilkan hasil yang benar atau salah masing-masing:
Truthy: RANDOM, VERTICAL, HORIZONTAL, WORDSEARCH, WIKIPEDIA, TAIL
Falsy: WordSearch, CODEGOLF, UNICORN
Atau, gunakan teks input ini
Lorem ipsum dolor sit amet consectetu
r adipisicing elit sed do eiusmod tem
por incididunt ut labore et dolore ma
gna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco lab
oris nisi ut aliquip ex ea commodo co
nsequat. Duis aute irure dolor in rep
rehenderit in voluptate velit esse ci
llum dolore eu fugiat nulla pariatur.
Kami mendapatkan hasil pencarian berikut (menggunakan kutipan sekarang, karena ada spasi di beberapa string pencarian):
Truthy: "Lorem", "mine", "uma bop", "tuetdod", "snol,a", "texas", "pii.d v", "vexta"
Falsy: "lorem", "wordsearch", "pii.d v", "mute"
sumber
Jawaban:
CJam,
4637 byteMembaca kotak dari STDIN dan kata sebagai argumen baris perintah. Mencetak bilangan bulat positif untuk kecocokan dan 0 untuk tidak cocok.
Dengan biaya dua byte tambahan, kedua string (kata, linefeed, kisi) dapat dibaca dari STDIN:
Anda dapat mencoba versi ini secara online dengan juru bahasa CJam .
Contoh dijalankan
Latar Belakang
Asumsikan input adalah kisi berikut:
Memisahkan pada linefeeds, kami mendapatkan array berikut:
Itu mencakup kata-kata Timur (kata-kata dari kiri ke kanan).
Sekarang, kita bergabung dengan elemen
A
menggunakan stringlen(A)
linefeeds sebagai pemisah:Kemudian, kami memotong string yang dihasilkan dalam potongan panjang
len(A) + len(A[0]) + 1
:Jika kami "zip" array (transpos baris dan kolom), kami memperoleh:
Itu mencakup kata-kata Tenggara.
Jika kami membuka zip A dan membalikkan urutan baris hasil, kami memperoleh:
Itu mencakup Selatan dan - setelah mengulangi proses untuk diagonal - kata-kata Barat Daya.
Zip dan membalikkan lagi, kami memperoleh:
Itu mencakup Barat dan - setelah mengulangi proses untuk diagonal - kata-kata Barat Laut.
Zip dan membalikkan sekali lagi, kami memperoleh:
Itu mencakup Utara dan - setelah mengulangi proses untuk diagonal - kata-kata Timur Laut.
Bagaimana itu bekerja
Kode tidak seperti yang dijelaskan pada bagian sebelumnya, dengan dua perbedaan kecil:
len(A) + len(A[0])
sebagailen(A + zip(A))
.Akhirnya, ia bergabung dengan semua baris dari semua array yang dihasilkan menggunakan linefeed sebagai pemisah dan mencari kata dalam string yang dihasilkan.
sumber
Jawa: 183
211321Kekuatan kasar dasar. Tidak banyak yang bisa dikatakan, kurasa. Input adalah jarum pertama dan tumpukan jerami kedua. Diasumsikan kisi diakhiri oleh baris baru .
Versi yang sedikit lebih mudah dibaca dengan test case ditunjukkan:
sumber
if(e<1)return 1>0;
bisareturn e<1;
bukan?i=a*9,
danfor(;i-->0;)
kemudianz=i/9;
dani%a!=4&
dan sebagainya?JavaScript (E6) 111
116Brute force mencari setiap karakter di segala arah - bermain golf semampu saya
Uji di konsol FireFox / Firebug
Keluaran
sumber
Python, 175
Tidak terlalu terinspirasi, tapi begini:
Argumen pertama adalah tumpukan jerami, kedua adalah jarum.
sumber
h,n=input()
danprint
. Juga, apakah ini bekerja dengan input non-square? (m = len (n)? Saya akui tidak sepenuhnya memahami apa yang Anda lakukan, jadi saya mungkin sepenuhnya salah!)while i>0
kewhile i:
(karenai
tidak pernah bisa menjadi negatif),if m<1:i=-1
hinggai-=m<1
.if m<1:i=-1
sebagaiif m<1:i-=1
sebagai satu pun dari mereka akan bekerja karena ia adalah settingi
menjadi negatif.Bash + coreutils,
214169 byteMenggunakan 3 fungsi transformasi
r
,t
dand
untuk membalik, mengubah posisi dan pergeseran diagonal, dalam semua kombinasi yang diperlukan.Pembaruan -
r
fungsi sekarang menghasilkan keluaran terbalik dan tidak terbalik untuk golfiness ekstraInput melalui argumen commandline - string pencarian, diikuti oleh blok pencarian kata persegi panjang (baris baru).
Output adalah kode status keluar shell yang benar secara idiomatis - 0 berarti BENAR dan 1 berarti SALAH.
Keluaran:
sumber
T()(tee >(r) $@)
, tapi itu lebih baik. 2. Saya tidak berpikir saya pernah melihat sintaks fungsi itu sebelumnya. 3. Mengingat string non-kosong benar dan string kosong palsu, saya pikir Anda dapat menghilangkan-q
.r()(tee >(rev) $@)
,r<<<"$2"|r >(d) >(r|t) >(r|d)|r|grep "$1"
harus bekerja juga.-q
tetap.C, 163
Tidak ada pengaturan ulang grid, saya cukup mencoba setiap huruf awal di setiap arah, dan berjalan sepanjang sampai saya lari dari grid atau menemukan ketidakcocokan.
Saya mengambil keuntungan dari kenyataan bahwa string C berakhir dalam byte nol. Karena tidak ada nol byte di grid, SELALU akan ada ketidakcocokan. Tetapi jika ketidakcocokan terjadi pada byte nol, kami tahu kami telah menemukan ujung string yang akan dicari, dan merekamnya sebagai kecocokan.
Tidak digabungkan dalam program uji
Keluaran
Perhatikan bahwa fungsi ini akan mengembalikan jumlah total dari string yang dicari dalam kisi. Jadi untuk
OD
itu mengembalikan 6. Jika tidak ada insiden ditemukan itu mengembalikan 0 yang merupakan satu-satunya nilai falsy dalam C. Mengubah key|=d*!n[j]
akan menyimpan satu karakter tetapi kehilangan fungsi ini.sumber
C # -
218197186 bytesFungsi C # yang mengambil 2 string, pertama kata yang dicari, kemudian grid dengan feed baris (
\n
) di antara baris. Segalanya menjadi putus asa sekarang ... begitu susah payah pada kenyataan bahwa edit saya sebelumnya tidak bekerja!Kode golf:
Kurang golf dengan kode tes:
sumber
Haskell - 173
Alih-alih mencari langsung di grid, saya mengubah grid dengan cara yang berbeda dan mencocokkan kata dengan setiap baris dari grid baru.
Sebagai contoh,
Cari kata di setiap baris G1, G2, G4 dan G5, lalu selesai. Perhatikan bahwa G3 tidak digunakan, saya mempostingnya di sini hanya untuk ilustrasi.
Ide serupa diterapkan untuk mencari maju dan mundur: cukup cari kata asli dan kata terbalik.
Jadi sekarang kami telah mencari 8 arah. Inilah kodenya, yang kebenarannya diverifikasi oleh skrip lain .
Fungsi
f
adalah apa yang kita inginkan dan argumennyar
adalah string persegi panjang,w
adalah kata yang dicari.sumber
Python 2 - 246
259275308298297294313322Terima kasih kepada Will atas bantuannya dalam berurusan dengan cetak dan menentukan bergabung.
Berkat kereta api bawah tanah untuk mengingatkan saya pada ruang golf dengan benar; p
Diperbaiki untuk pertandingan yang buruk berkat menggunakan ',' sebagai pembatas.
Tampaknya cara terbaik untuk bermain golf adalah dengan menambahkan banyak scroll horizontal.
Masukan sebagai
spasi kosongbangbaris batas baru dalam tanda kutip: "WVERTICALL \ nROOAFFLSAB \ nACRILIATOA \ nNDODKONWDC \ nDRKESOODDK \ nOEEPZEGLIW \ nMSIIHOAERA \ nALRKRRIRER \ nKODEL" RANDA "sumber
L=len;J=''.join
dll danprint any(s in(v,d,w,r...))
? Saya akan melakukan hal yang sama ketika saya melihat Anda diposting :))
atau]
diikuti oleh spasi, Anda dapat mengambil ruang.APL (Dyalog Classic) , 44 byte
Cobalah online!
sumber
\n
-separasi (yaitu, memiliki⎕TC[2]
sebagai pemisah).J ,
6053 byteCobalah online!
Membutuhkan input pertama untuk tidak mengandung baris baru.
Penjelasan:
Cobalah online!
Kait bermanfaat.
sumber
Jelly , 16 byte
Memecahkan tantangan terkait (mungkin duplikat) dengan 15 dari 16 byte ini sebagai inti dari kode ...
Tautan diad yang menerima daftar karakter di sebelah kiri dan daftar karakter di sebelah kanan yang mengembalikan 1 jika ditemukan dan 0 jika tidak.
Cobalah online!
Bagaimana?
sumber