fundo
Boggle é um jogo de tabuleiro em que os jogadores precisam encontrar palavras em inglês em um tabuleiro 4 por 4 de alfabetos aleatórios. As palavras podem ser construídas selecionando células sequencialmente adjacentes no quadro. ("adjacente" significa horizontal, vertical ou diagonalmente adjacente.) Além disso, a mesma célula não pode ser usada mais de uma vez em uma palavra.
A seguir, é apresentado um quadro de exemplo:
I L A W
B N G E
I U A O
A S R L
Nesta placa, BINGO
, ORANGE
e WEARS
são palavras válidas, mas SURGE
e RUSSIA
não são:
SURGE
: Não existe um par adjacente no tabuleiroRG
.RUSSIA
:S
não pode ser usado duas vezes.
Boggle modificado é uma versão modificada do Boggle, com as seguintes regras:
- O tamanho da placa é
n
-by-n
, onden
pode ser qualquer número inteiro positivo. - Cada célula pode conter qualquer byte entre 0 e 255, inclusive.
- Uma célula pode ser usada mais de uma vez, mas não duas vezes seguidas .
O uso do quadro de exemplo acima, além de BINGO
, ORANGE
e WEARS
, LANGUAGE
torna-se uma sequência válida (já que G
é usada duas vezes, mas não duas vezes seguidas), mas RUSSIA
ainda não é (devido ao SS
par).
Aqui está outro exemplo usando um fragmento de código. A string from itertools import*\n
pode ser encontrada no quadro a seguir, mas não from itertoosl import*
ou from itertools import *
:
f i ' ' s
r t m l
e o o p
\n * t r
Observe que você precisa de dois o
para corresponder à oo
sequência.
Desafio
Escreva uma função ou programa que, considerando uma placa Boggle modificada B
(de qualquer tamanho) e uma string s
, determine se ela s
pode ser encontrada B
.
Restrições
Seu próprio código também deve caber em uma placa Boggle modificada b
. Ou seja, você deve mostrar ao quadrob
em sua submissão junto com seu código, para que sua função / programa seja verdadeiro se for fornecido b
e seu código como entrada.
Pontuação
A pontuação do seu envio é o comprimento lateral da menor placa b
onde você pode ajustar seu código. Os laços são quebrados pelas regras usuais de código-golfe , ou seja, o tamanho do seu código em bytes. A finalização com a pontuação mais baixa (para ambos os critérios) vence.
Por exemplo, from itertools import*\n
tem a pontuação 4 (usando o quadro acima) e o comprimento do código de 23 bytes.
Entrada e saída
Para entrada, você pode tomar qualquer método conveniente para ambos B
es
. Isso inclui uma lista de caracteres e uma lista de códigos, 2D ou achatada ou o que fizer sentido. Além disso, você pode opcionalmente considerar o tamanho da placa como parte da entrada.
Para saída, você pode escolher um dos seguintes:
- Valores verdadeiros e falsos após a convenção de seu idioma ou
- Um valor predefinido para true e false, respectivamente.
Especifique seu método de entrada / saída no seu envio.
+=+=
ou algo assim. O problema é a ==
função de saída ...