Contexte
Boggle est un jeu de plateau où les joueurs doivent trouver des mots anglais sur un tableau 4 par 4 d'alphabets aléatoires. Les mots peuvent être construits en sélectionnant des cellules adjacentes séquentielles sur la carte. ("adjacent" signifie horizontalement, verticalement ou diagonalement adjacent.) De plus, la même cellule ne peut pas être utilisée plus d'une fois dans un mot.
Voici un exemple de tableau:
I L A W
B N G E
I U A O
A S R L
Sur ce plateau, BINGO
, ORANGE
et WEARS
sont des mots valides, mais SURGE
et RUSSIA
ne sont pas:
SURGE
: Il n'y a pas de paire adjacente sur la carteRG
.RUSSIA
:S
ne peut pas être utilisé deux fois.
Boggle modifié est une version modifiée de Boggle, avec les règles suivantes:
- La taille de la carte est
n
-par-n
, oùn
peut être n'importe quel entier positif. - Chaque cellule peut contenir n'importe quel octet compris entre 0 et 255 inclus.
- Une cellule peut être utilisée plusieurs fois, mais pas deux fois de suite .
L'utilisation de l'exemple de carte ci-dessus, en plus de BINGO
, ORANGE
et WEARS
, LANGUAGE
devient une chaîne valide (car G
est utilisée deux fois, mais pas deux fois de suite) mais ne l' RUSSIA
est toujours pas (en raison de la SS
paire).
Voici un autre exemple utilisant un fragment de code. La chaîne from itertools import*\n
peut être trouvée sur le tableau suivant, mais pas from itertoosl import*
ou from itertools import *
:
f i ' ' s
r t m l
e o o p
\n * t r
Notez que vous avez besoin de deux o
pour correspondre à la oo
séquence.
Défi
Écrivez une fonction ou un programme qui, étant donné une carte Boggle modifiée B
(de n'importe quelle taille) et une chaîne s
, détermine si elle s
peut être trouvée B
.
Restrictions
Votre code lui-même devrait également tenir sur une carte Boggle modifiée b
. Autrement dit, vous devez montrer le tableau b
dans votre soumission avec votre code, afin que votre fonction / programme affiche vrai s'il est donné b
et votre code en entrée.
Notation
Le score de votre soumission est la longueur du côté du plus petit tableau b
où vous pouvez adapter votre code. Les égalités sont rompues par les règles habituelles du code-golf , c'est-à-dire la longueur de votre code en octets. La soumission avec le score le plus bas (pour les deux critères) gagne.
Par exemple, from itertools import*\n
a le score de 4 (en utilisant le tableau ci-dessus) et une longueur de code de 23 octets.
Entrée et sortie
Pour la saisie, vous pouvez utiliser n'importe quelle méthode pratique pour B
et s
. Cela comprend une liste de caractères et une liste de codes de caractères, 2D ou aplatis ou tout ce qui a du sens. En outre, vous pouvez éventuellement prendre la taille de la carte comme partie de l'entrée.
Pour la sortie, vous pouvez choisir l'une des options suivantes:
- Valeurs vraies et fausses suivant la convention de votre langue, ou
- Une valeur prédéfinie pour vrai et faux respectivement.
Veuillez spécifier votre méthode d'entrée / sortie dans votre soumission.
la source
+=+=
ou quelque chose comme ça. Le problème est la==
fonction de sortie ...Réponses:
Python 2, score 3, 20972 octets
Le code complet est la sortie de: Essayez-le en ligne!
Convient au tableau Boggle:
Décode et exécute ce programme:
Ce qui prend une entrée comme:
['ILAW','BNGE','IUAO','ASRL'], 'LANGUAGE'
la source
CJam , score 2, 9351 octets
Essayez-le en ligne! Attend une entrée comme:
et s'adapte sur la planche Boggle:
Construit la chaîne
l~:Q,:K;{\:Y;\:X;:C,!_{;QY=X=C0==_{;[X(XX)]K,&[Y(YY)]K,&m*[XY]a-C1>:D;{~DF}%:|}&}|}:F;l:R;K,2m*{~RF}%:|~
puis l'évalue en tant que code CJam.la source
Clean , score 12 (175 octets)
(Cela va presque certainement être dépassé par un esolang et probablement des langues normales également.)
Ceci définit une fonction
$ :: Int [Char] {#String} -> Bool
qui vérifie si le deuxième argument (le mot) peut être trouvé dans le troisième argument (le tableau) étant donné le premier argument comme largeur.Dans la planche sur laquelle cela tient (voir ci-dessous),
*
marque les endroits inutilisés. Il y en a 16, sur une planche de taille 12 × 12 = 144, ce qui signifie que 128 sont utilisés efficacement (une efficacité de 175/128 ≈ 1,37 ). Il peut être possible d'obtenir le même programme en 11 × 11, mais tout cela est fait à la main et très fastidieux; mon patron ne serait probablement pas content si j'essayais de l'obtenir en 11 × 11.Essayez-le en ligne (avec le programme lui-même en entrée)!
la source
Java, score 23,
538507 octetsNSFW
Essayez-le en ligne!
Compilé avec JDK 9, mais devrait fonctionner avec 8.
Je ne savais pas quoi faire avec les importations et le champ statique (ce qui est en fait nécessaire), j'ai donc décidé de prendre toute la classe et de coller les lambdas dans un initialiseur. Le lambda
g
peut ensuite être appliqué sur un tableau 2D et une chaîne, et retourne1
si la chaîne est dans la carte et0
sinon (en tant queByte
, 3 caractères plus court queInteger
).Crédit à ce gars pour un (dans mon cas) plus courte que hardcoding façon d'aborder les cellules voisines.
Quelque part dans les progrès de la fabrication de cette monstruosité, j'ai investi pour la faire fonctionner avec des lambdas, elle est devenue de plus en plus pire jusqu'à ce que cela se produise. Il ne se rapproche même pas des autres réponses et il n'est probablement même pas proche de la solution optimale en Java, mais bon, il s'intègre assez bien sur une carte 23x23 (ce qui n'est pas optimal, mais peut-être plus proche que le programme lui-même) :
Bien sûr, à ce moment-là, il était inutile d'essayer de le faire à la main. Donc en bonus, voici la fonction (naïve) que j'ai utilisée pour compresser le code sur la carte:
Il mappe ses entrées sur une spirale que l'implémentation de serpent n'a pas fonctionné , en laissant les caractères si possible. C'est assez simple, donc je pourrais probablement être amélioré et j'ai oublié d'ajouter la vérification des caractères dans le sens arrière-droit (mise à jour: je l'ai ajouté et cela a produit des résultats incorrects) , donc je pourrais probablement raser un ou deux caractères mais je doute sur un 22x22.
Edit: Suppression de 6 espaces à des endroits où ils n'avaient pas besoin d'être. Enregistré 13 octets en remplaçant une vérification des indices de tableau par un try-catch. Réduit 12 octets en déplaçant la taille de la carte dans un fichier
int
.la source
Gelée , 2316 octets, score 3
Essayez-le en ligne!
Planche:
Remarque: il s'agit d'une solution (quelque peu) triviale. Nous remercions Lynn pour cette idée .
Renvoie une liste non vide si elle
s
peut être trouvée dansB
, et une liste vide sinon. Le pied de page ajouté permet de clarifier cela.la source
s
ne pouvait pas être trouvé, ou un entier positif s'il pouvait être trouvé. Mais les règles indiquent "une valeur prédéfinie pour vrai et faux respectivement". Ou sont vides / non vides pour une convention fausse / vraie dans Jelly?