낱말을 읽으십시오


11

이 형식으로 포장하는 것에 대한 이 질문에서 영감을 얻었습니다 .

때때로 나는 완성 된 낱말을보고있는 것처럼, 실마리에 대한 해결책이 실제로 무엇인지 알아 내기 위해 귀찮게 할 수 없습니다.

입력:

  • 2D 문자열 (모든 형식, 줄 바꿈 구분, 2d 목록 등)
  • 빈 사각형은 (공백 문자)로 표시됩니다
  • 다른 모든 사각형은 소문자 알파벳으로 표시됩니다.
  • 입력에 공백이 채워져 사각형을 형성한다고 가정 할 수 있습니다

산출:

  • 발견 된 각 단어
    • 위아래로 단어를 검색해야합니다
    • 단어는 두 글자 이상이어야합니다
    • 중복 단어가있는 경우 단어가 나타날 때마다 출력해야합니다
  • 검증 할 필요가 없습니다.
  • 단어는 어떤 순서로도 출력 될 수 있습니다
  • 엄격한 서식 규칙이 없습니다.

테스트 사례 :

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

답변:


8

Pyth- 11 10 8 7 바이트

@issacg 덕분에 1 바이트를 절약했습니다.

t#cjsCB

여기에서 온라인으로 사용해보십시오 .

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 Wonderful.
Leaky Nun

1
Pyth가 이깁니다. 언제나 그렇듯이
Leaky Nun

1
당신은 제거하여 하나의 바이트를 저장할 수 d있는 차종, j여전히 의해 다진되는 줄 바꿈에 가입c ... )
isaacg

정말 감사합니다
@isaacg

2

CJam, 14 바이트

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

스택의 맨 위에 (패딩 된) 문자열 목록을 예상하고 대신 단어 목록을 남기는 명명되지 않은 블록입니다.

여기에서 테스트하십시오.

설명

_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

자바 스크립트 (ES6), 83 바이트

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

0

Pyth , 18 바이트

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

온라인으로 사용해보십시오!

샘플 입력 :

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

샘플 출력 :

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

작동 방식 :

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

하스켈, 58 바이트

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

사용 예 : f ["pies"," not"," no","wasp"]->["pies", "not", "no", "wasp", "in", "eons", "stop"] .

작동 방식 : 입력의 각 줄과 공백의 입력 줄을 단일 목록 단어로 나눕니다. 일치하는 (_:_:_)문자를 유지하십시오 ( 예 : 두 글자 이상).


0

C ++ 14 209 207 201 바이트

엄청나게 많은 양의 바이트 ...하지만 잘. 행렬, 분할 문자열을 바꿉니다. 쉬운. 조옮김에 대한 기본 기능이 너무 나쁩니다.

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

언 골프 드 :

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

그것을 사용하는 방법 (질문에 따라 패딩을 시행해야합니다) :

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.