Đọc một ô chữ


11

Lấy cảm hứng từ câu hỏi này về việc đóng gói vào định dạng này.

Thỉnh thoảng tôi thấy một ô chữ hoàn thành và giống như tôi, tôi không thể bận tâm tìm hiểu các giải pháp cho các manh mối thực sự là gì.

Đầu vào:

  • Chuỗi 2D (bất kỳ định dạng, phân tách dòng mới, danh sách 2d, v.v.)
  • Hình vuông trống sẽ được thể hiện bằng một (ký tự không gian)
  • Mỗi hình vuông khác sẽ nằm trong bảng chữ cái viết thường.
  • Bạn có thể cho rằng đầu vào sẽ được đệm bằng khoảng trắng để tạo thành hình chữ nhật

Đầu ra:

  • Mỗi từ được tìm thấy
    • Bạn phải tìm kiếm các từ dọc và xuống
    • Các từ sẽ dài ít nhất hai chữ cái
    • Nếu có các từ trùng lặp, bạn phải xuất chúng cho mỗi lần chúng xuất hiện
  • Bạn không phải thực hiện bất kỳ xác nhận
  • Các từ có thể được xuất ra theo thứ tự bất kỳ
  • Không có quy tắc định dạng nghiêm ngặt

Các trường hợp thử nghiệm:

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

Câu trả lời:


8

Pyth - 11 10 8 7 byte

đã lưu một byte nhờ @issacg.

t#cjsCB

Hãy thử trực tuyến tại đây .

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 Tuyệt vời.
— Leaky Nun

1
Pyth thắng. Như mọi khi.
— Leaky Nun

1
Bạn có thể lưu một byte bằng cách loại bỏ d, điều này làm cho việc jtham gia vào các dòng mới, vẫn bị cắt nhỏ bởic ... )
— isaacg

@isaacg Thật tuyệt, cảm ơn
— Maltysen

2

CJam, 14 byte

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

Một khối không tên dự kiến ​​một danh sách các chuỗi (đệm) trên đầu ngăn xếp và để lại một danh sách các từ thay thế.

Kiểm tra nó ở đây.

Giải trình

_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.

1

JavaScript (ES6), 83 byte

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

0

Bình thường , 18 byte

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

Hãy thử trực tuyến!

Đầu vào mẫu:

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

Đầu ra mẫu:

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

Làm thế nào nó hoạt động:

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)))

0

Haskell, 58 byte

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

Ví dụ sử dụng: f ["pies"," not"," no","wasp"]-> ["pies", "not", "no", "wasp", "in", "eons", "stop"].

Cách thức hoạt động: chia từng dòng của đầu vào và chuyển vị của nó tại khoảng trắng thành một từ danh sách duy nhất. Giữ những cái phù hợp (_:_:_), tức là có ít nhất hai chữ cái.


0

C ++ 14, 209 207 201 byte

Số lượng byte rất cao ... nhưng ồ. Ma trận chuyển vị, tách chuỗi. Dễ dàng. Quá tệ, không có chức năng riêng để chuyển vị

[](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+' ':"");}}

Ung dung:

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+' ':"");
  }
}

Cách sử dụng (lưu ý bạn phải thực thi phần đệm như trạng thái câu hỏi):

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.