Ler palavras cruzadas


11

Inspirado por esta pergunta sobre a embalagem neste formato.

Ocasionalmente, vejo palavras cruzadas completas e, como sou, não me incomodo em descobrir quais eram as soluções para as pistas.

Entrada:

  • Uma string 2D (qualquer formato, nova linha separada, lista 2d etc.)
  • Quadrados em branco serão representados com um (caractere de espaço)
  • Todos os outros quadrados estarão no alfabeto minúsculo.
  • Você pode assumir que a entrada será preenchida com espaços para formar um retângulo

Resultado:

  • Cada palavra encontrada
    • Você deve procurar palavras ao longo e para baixo
    • As palavras terão pelo menos duas letras
    • Se houver palavras duplicadas, você deverá produzi-las sempre que aparecerem
  • Você não precisa fazer nenhuma validação
  • As palavras podem ser exibidas em qualquer ordem
  • Nenhuma regra estrita de formatação

Casos de teste:

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

Respostas:


8

Pitão - 11 10 8 7 bytes

economizou um bytes graças a @issacg.

t#cjsCB

Experimente online aqui .

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.
gotejante Nun

1
Pyth vence. Como sempre.
gotejante Nun

1
Você pode salvar um byte, removendo o dque faz jjuntar-se em novas linhas, que ainda são picados porc ... )
isaacg

@isaacg Isso é muito legal, graças
Maltysen

2

CJam, 14 bytes

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

Um bloco sem nome que espera uma lista de cadeias (preenchidas) no topo da pilha e deixa uma lista de palavras.

Teste aqui.

Explicação

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

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

0

Pitão , 18 bytes

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

Experimente online!

Entrada de amostra:

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

Saída de amostra:

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

Como funciona:

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 bytes

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

Exemplo de uso: f ["pies"," not"," no","wasp"]-> ["pies", "not", "no", "wasp", "in", "eons", "stop"].

Como funciona: divida cada uma das linhas da entrada e sua transposição em espaços em uma única lista de palavras. Mantenha aqueles que correspondem (_:_:_), ou seja, tenha pelo menos duas letras.


0

C ++ 14, 209 207 201 bytes

Quantidade ridiculamente alta de bytes ... mas tudo bem. Matriz de transposição, string dividida. Fácil. Pena que nenhuma função nativa para transposição

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

Ungolfed:

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

Como usá-lo (observe que você deve aplicar o preenchimento conforme a pergunta):

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.