Démineur est un jeu de puzzle où les mines sont cachées autour d'un tableau de tuiles indéfinissables dans le but d'identifier l'emplacement de toutes les mines. Cliquer sur une mine perd la partie, mais cliquer sur n'importe quelle autre tuile révèlera un nombre compris entre 0 et 8, ce qui signifie combien de mines l'entourent directement.
Étant donné un nombre, vous devez afficher une combinaison aléatoire * possible de tuiles vides et de mines qui l'entourent. Cela devrait être sous la forme d'un tableau 3x3. La tuile centrale doit être le nombre de mines prises en entrée.
* Doit avoir une chance non nulle pour que toutes les combinaisons se produisent.
Exemples
_ = blank square
X = mine
0
___
_0_
___
1
_X_
_1_
___
1
___
_1_
X__
___
_1_
__X
4
_X_
X4X
_X_
4
X_X
_4_
X_X
4
___
X4X
X_X
8
XXX
X8X
XXX
Contribution
- Le nombre de mines entourant la tuile centrale (0-8)
Sortie
- Toute forme de sortie raisonnable qui affiche le tableau de tuiles 3x3
Autres règles
- Chaque combinaison n'a pas à avoir une chance égale de se produire. Il doit simplement y avoir une chance non nulle que chaque combinaison se produise lors de l'exécution de votre programme.
- 2 personnages peuvent être choisis pour la mine et la tuile vide.
- C'est le golf de code, le programme avec le moins d'octets gagne.
code-golf
random
minesweeper
aoemica
la source
la source
1
et0
?Réponses:
Gelée , 9 octets
Essayez-le en ligne!
vide = le
1
mien =
0
Notez que
1
et0
sont des entiers.Autre remarque: elle est quelque peu similaire à la réponse de 10 octets de Jonathan Allan, mais elle n'est pas du tout influencée par elle, et le mécanisme, si vous y prêtez attention, est en fait plus différent qu'à première vue.
la source
APL (Dyalog Unicode) ,
2815 octets-13 octets grâce à ngn!
Explication:
{...}
Une fonction directe (D-Fn),⍵
est son bon argument.8?8
traiter 8 nombres aléatoires de la liste 1 à 8:⍵≥
l'argument est-il supérieur ou égal à chacun d'eux ?:⍵,
ajouter l'argument à la liste booléenne:5⌽
faites pivoter la liste de 5 positions vers la gauche, de sorte que l'argument soit au centre:3 3⍴
remodeler la liste en une matrice 3x3:Essayez-le en ligne!
J , 15 octets
Beaucoup d'octets aussi grâce à ngn!
Essayez-le en ligne!
la source
(8↑1⍴⍨⍵)[8?8]
->⍵>8?8
(en supposant⎕io←0
)3 3⍴1↓,⍵,2 4⍴
->3 3⍴5⌽⍵,
JavaScript (ES6), 67 octets
Version plus courte suggérée par @tsh
Les emplacements vides le sont
0
, les mines le sont1
.Essayez-le en ligne!
Version d'essai et d'erreur d'origine, 78 octets
Les emplacements vides le sont
_
, les mines le sont7
.Essayez-le en ligne!
Commenté
la source
Gelée ,
1310 octetsLa liste de listes renvoyée a l'entier affiché au centre entouré de 0 et de 1 représentant respectivement les mines et les blancs.
Essayez-le en ligne! (le pied de page imprime assez bien le tableau)
Comment?
la source
ŒH
fonctionne également à la place des4
.Pyth,
1614 octetsEnregistré 2 octets grâce à isaacg.
Utilise des espaces pour des endroits sûrs et des citations pour les mines.
Essayez-le ici
Explication
la source
.[d8
au lieu de>8+*8d
Oracle 18 SQL, 230 octets
Pas une langue de golf mais ...
La valeur d'entrée est dans un tableau
n
avec une colonnen
:Essayez-le en ligne - connectez-vous sur https://livesql.oracle.com et collez-le dans une feuille de calcul.
Sortie:
Pour obtenir toutes les combinaisons possibles (183 octets):
Sortie:
la source
Japt, 13 octets
L'essayer
Explication
la source
QBasic 1.1 ,
206186 octets-20 grâce à DLosc (nouvelle astuce de golf publiée).
Vide =
0
mine =
1
Notez que
0
et1
sont des entiers, mais j'utilise quand même STDOUT, donc ...La sortie apparaît comme ceci:
Où AH vaut 0/1 et x est l'entrée.
la source
Fusain , 19 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Utilise
0
une mine,1
un espace vide. Explication:Peek
renvoie un tableau de chaînes, quiSum
concatène simplement, c'est pourquoi nous devons d'abord convertir en entier. (Sum(Sum(PeekAll()))
fonctionne également.)Sum
renvoieNone
pour un tableau vide (première boucle), donc la seule comparaison sûre estNot(Equals(...))
.Random
revient toujours0
, bien que sa documentation dise le contraire.Solution alternative, était de 19 octets, maintenant 17 octets après un correctif de charbon de bois:
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Utilise
0
une mine,1
un espace vide. Explication:Imprimez l'entrée d'origine.
Imprimez
9
vers la gauche. Cela ramène le curseur sur l'entrée d'origine et force également au moins une itération de la boucle while (sinon une entrée de8
ne ferait rien).Répétez pendant que la différence entre la somme de tous les chiffres sur le canevas et 8 est différente de zéro:
Remplacez au hasard chacun des caractères environnants par
0
ou1
.la source
R ,
67 63 6259 octetsEssayez-le en ligne!
Utilise
1
et0
. Construisez unn* 1 +(8-n)* 0
vecteur, mélangez-le, ajoutezn
, construisez la matrice plus grande illustrée ci-dessous (oùa...i
se trouvent les éléments du vecteur d'origine) et extrayez la sous-matrice appropriée affichée en majuscules:la source
matrix((c(sample(rep(1:0,c(n<-scan(),8-n))),n))[c(1:4,9:5)],3)
Python 2 , 93 octets
Essayez-le en ligne!
0
pour vide;1
pour une mine; etn
pour soi-même.la source
iter
est intelligente!Attaché , 51 octets
Essayez-le en ligne!
Explication
Semblable à la réponse J / APL de Galen , la technique de base consiste à générer un tableau de 1 et de 0 avec le nombre correct de mines, en insérant l'entrée en l'ajoutant à la fin, en faisant tourner le tableau de sorte que l'entrée se trouve au centre, puis remodelage en une matrice 3x3.
Partie 1: générer le tableau binaire
Il existe de nombreuses façons de procéder, mais je suis principalement tombé sur deux types: la force brute et la sélection.
La méthode de force brute principale ressemble à ceci:
Cela génère des tableaux aléatoires de 8 chiffres binaires (
Random[8&2]
) alors que leurs sommes ne sont pas égales à l'entrée{Sum@_/=_2}&_
. C'est un peu verbeux, car les parties soulignées suivantes du code sont là "juste pour le faire fonctionner":Et j'ai rejeté l'idée.
La sélection est plus intéressante. Le concept principal est d'utiliser la fonction
BaseBelow[b, n]
intégrée, qui génère une liste de tous lesb
entiers de base de largeurn
(sous forme de tableaux de chiffres), de0
àb^n-1
. Par exemple,BaseBelow[3, 2]
génère tous les entiers ternaires de largeur 2:Nous utilisons spécifiquement
BaseBelow[2, 8]
pour tous les entiers binaires de largeur 8. Ils représentent tous les champs de mines possibles de toutes longueurs. C'est le premier pas.La deuxième étape consiste à sélectionner tous ces tableaux avec seulement
N
1s, oùN
est l'entrée. Ma première idée a été de traduire cette déclaration en anglais directement dans Attache:Cependant, non seulement cela s'est avéré être 1 octet de plus que l'approche susmentionnée, mais c'est également très répétitif - et ce n'est même pas encore aléatoire! Bien sûr, je pourrais probablement économiser 1 octet en réorganisant la façon d'
BaseBelow
appeler, mais cela ne vaut tout simplement pas la peine d'utiliser l'approche.J'ai donc décidé de tuer deux oiseaux avec une pierre et d'utiliser une
Shuffle
approche basée. Ce qui suit donne tous les champs de mines valides de longueurN
dans un ordre aléatoire:Ensuite, il suffit de sélectionner le premier. Mais je peux faire mieux - ce serait sûrement mieux de simplement
Sample
filtrer le tableau? Cette approche se présente comme suit:J'ai dû revenir sur le
BaseBelow&8!2
golf car la\
priorité est trop élevée. Sinon satisfait, j'ai procédé à la découpe d'un octet:(J'ai découvert une autre façon d'appeler succinctement une fonction dyadique ici:
x&f@y
est une expression de haute priorité qui s'évaluef[x, y]
.)Cependant, malgré cela, je me suis souvenu que, tout le long, un alias pour
2&BaseBelow
exister:BinBelow
. J'ai donc utilisé ça:Cela génère le champ de mines souhaité. Je suis convaincu que c'est presque optimal.
Partie 2: Formation du tableau
Comme dit précédemment, la technique de formage que j'ai utilisée est similaire à la réponse J / APL, donc je n'entrerai pas dans trop de détails. Supposons que
MINEFIELD
le résultat de la dernière section. La fonction devient alors:MINEFIELD'_
concatène le champ de mines avec l'entrée d'origine_
, nous donnant quelque chose comme ceci:Ensuite,
Rotate[MINEFIELD'_,4]
tourne cette liste4
fois vers la gauche, en plaçant le centre:La dernière étape consiste
[3,3]&
à remodeler la liste en une matrice 3x3:la source
Java 10,
165157141 octetsLes tuiles vides sont
_
(tout caractère avec une valeur unicode supérieure à 58 est très bien) et les mines le sont0
.Essayez-le en ligne.
Explication:
la source
PowerShell , 77 octets
Essayez-le en ligne!
la source
PHP ,
135134123117 117122121 octetsFaire une boucle sur str pour imprimer à la place économise 1 octet
str_split et imploser pour insérer le nombre central économise 11 octets
Plus besoin d'attribuer la chaîne à $ s en économisant 6 octets. Sinon, la chaîne est mélangée après chaque écho ...
Supprimer un espace après l'écho enregistre 1 octet
Remplacer "\ n" par un saut de ligne ctual économise 1 octet
Essayez-le en ligne!
la source
Alice , 24 octets
Essayez-le en ligne!
Les emplacements vides le sont
9
et les mines le sont0
.J'ai aussi fait un programme de 27 octets avec
1
pour les mines et0
pour les slots vides:Essayez-le en ligne!
la source
PowerShell ,
9186 octets-5 octets grâce à mazzy
Essayez-le en ligne!
Mélange une chaîne générée allant de
________
àXXXXXXXX
(en remplaçant à partir de la gauche). Il le découpe ensuite plusieurs fois, en l'insérant$n
au milieu, pour créer la chaîne de sortie. Cette dernière partie peut probablement être grandement optimisée car chaque index coûte un minimum de 5 octets.la source
Ruby , 59 octets
Renvoie une liste de chaînes (une pour chaque ligne).
Essayez-le en ligne!
la source
C (gcc) , 81 octets
Essayez-le en ligne!
la source
Perl 5
-pa
,105101 octetsEssayez-le en ligne!
la source
05AB1E , 12 octets
Utilisé
0
pour les mines, les espaces pour les carrés vides. Génère une liste de lignes, qui est assez imprimée dans les TIO ci-dessous en se joignant au délimiteur de nouvelle ligne (»
).Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires à la fois .
Explication:
Alternative de 12 octets :
Utilise
1
pour les mines,0
pour les carrés vides. Produit une matrice de chiffres, qui est assez imprimée dans les TIO ci-dessous en joignant chaque ligne, puis ces lignes avec un délimiteur de nouvelle ligne (J»
).Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires à la fois .
Explication:
la source