Baca teka-teki silang

11

Terinspirasi oleh pertanyaan ini tentang pengemasan ke format ini.

Kadang-kadang saya melihat teka-teki silang yang lengkap dan menjadi seperti saya, saya tidak dapat diganggu untuk mencari tahu apa solusi untuk petunjuk sebenarnya.

Memasukkan:

  • String 2D (format apa pun, baris baru dipisahkan, daftar 2d, dll.)
  • Kotak kosong akan diwakili dengan (karakter spasi)
  • Setiap kotak lainnya akan berada dalam alfabet huruf kecil.
  • Anda dapat mengasumsikan bahwa input akan diisi dengan spasi untuk membentuk persegi panjang

Keluaran:

  • Setiap kata ditemukan
    • Anda harus mencari kata di sepanjang dan di bawah
    • Kata-kata akan setidaknya dua huruf
    • Jika ada kata-kata rangkap, Anda harus menampilkannya untuk setiap kali mereka muncul
  • Anda tidak perlu melakukan validasi apa pun
  • Kata-kata dapat ditampilkan dalam urutan apa pun
  • Tidak ada aturan pemformatan yang ketat

Kasus uji:

word
e e 
step
t d 

word, step, west, reed
---
pies
 not
  no
wasp

pies, not, no, wasp, in, eons, stop
---
igloo
    n
word

igloo, word, on
Biru
sumber

Jawaban:

8

Pyth - 11 10 8 7 byte

disimpan satu byte berkat @issacg.

t#cjsCB

Cobalah online di sini .

t#               Filter by if len > 1
 c               Chop by whitespace by default
  j              Join by newlines
   sCB           Input, implicit and its transpose in one list
Maltysen
sumber
@Maltysen Luar Biasa.
Leaky Nun
1
Pyth menang. Seperti biasa.
Leaky Nun
1
Anda dapat menyimpan satu byte dengan menghapus d, yang membuat jjoin di baris baru, yang masih dipotong olehc ... )
isaacg
@isaacg itu sangat keren, terima kasih
Maltysen
2

CJam, 14 byte

{_z+S*S%{,(},}

Blok tanpa nama yang mengharapkan daftar string (empuk) di atas tumpukan dan meninggalkan daftar kata sebagai gantinya.

Uji di sini.

Penjelasan

_z    e# Duplicate and transpose the grid.
+     e# Append the transpose to the original grid.
S*    e# Join all lines by spaces to ensure that we don't get words 
      e# spanning multiple lines.
S%    e# Split around spaces, discarding empty segments.
{,(}, e# Filter: keep only those strings with length 2 or greater.
Martin Ender
sumber
1

JavaScript (ES6), 83 byte

s=>(s+` `+[...(t=s.split`
`)[0]].map((_,i)=>t.map(t=>t[i]).join``)).match(/\w\w+/g)
Neil
sumber
0

Pyth , 18 byte

Lm:d"\S\S+"1byQyCQ

Cobalah online!

Input sampel:

["pies"," not","  no","wasp"," t  "]

Output sampel:

[['pies'], ['not'], ['no'], ['wasp'], []]
[[], ['in', 'at'], ['eons'], ['stop']]

Bagaimana itu bekerja:

Lm:d"\S\S+"1byQyCQ                                 The "1" here is mode
                    assign('Q',eval_input())       "1" which means show
                    @memoized                      all matches
L                   def y(b):                               v
 m:d"\S\S+"1b           return map(lambda d:regex(d,"\S\S+",1),b)
             yQ     imp_print(y(Q))
               yCQ  imp_print(y(transpose(Q)))
Biarawati Bocor
sumber
0

Haskell, 58 byte

import Data.List
f x=[w|w@(_:_:_)<-words=<<x++transpose x]

Contoh penggunaan: f ["pies"," not"," no","wasp"]-> ["pies", "not", "no", "wasp", "in", "eons", "stop"].

Cara kerjanya: pisahkan setiap baris input dan transposisi pada spasi ke dalam satu daftar kata. Simpan yang cocok (_:_:_), yaitu setidaknya memiliki dua huruf.

nimi
sumber
0

C ++ 14, 209 207 201 byte

Jumlah byte yang sangat tinggi ... tapi oh well. Transpos matriks, perpecahan string. Mudah. Sayang sekali tidak ada fungsi asli untuk transposing

[](vector<string>; m){auto t=m;int C=size(m[0]),j=0;for(;++j<C*C;)t[j%C][j/C]=m[j/C][j%C];for(j=0;++j<C+C;){stringstream Z(j<C?m[j]:t[j-C]);string s;while(getline(Z,s,' '))cout<<(size(s)>1?s+' ':"");}}

Tidak Disatukan:

using S=vector<string>;
[](S m){
  S t=m;
  int C=size(m[0]),j=0;
  for(;j<C*C;++j)t[j%C][j/C]=m[j/C][j%C]; // Transpose
  for(j=0;j<C+C;++j){ // since rectangle matrix, we can iterate like so
    stringstream Z(j<C?m[j]:t[j-C]); // Get string from m or t
    string s;
    while(getline(Z,s,' '))
      cout<<(size(s)>1?s+' ':"");
  }
}

Cara menggunakannya (perhatikan bahwa Anda harus memberlakukan padding seperti yang dinyatakan dalam pertanyaan):

using S = vector<string>;[](S m) { ... }({"pies", " not", "  no", "wasp"});
STDQ
sumber