Tout le monde connaît l'ancien jeu de dragueur de mines fourni avec Windows XP. Il s'agit d'une simple grille avec une matrice de cellules 9x9 contenant soit un nombre (indiquant le nombre de mines adjacentes), soit une mine.
Le défi est de générer une grille aléatoire 9x9 avec 10 bombes avec n'importe quelle valeur de départ entière (jusqu'à ce que soit le plus grand int de votre machine / langage) avec des points brownie si vous implémentez le PRNG vous-même
exemple de sortie: les cellules contiennent les chiffres 0-8 ou * pour les mines
*101*1000
110111000
123210000
1***10000
123210011
00000002*
00000114*
000112*3*
0001*2121
Le code le plus court en octets gagne .. règles standard etc, etc.
code-golf
random
minesweeper
Aaron
la source
la source
Réponses:
Dyalog APL, 40 octets
⎕rl←1⋄(1,¨a)⍕¨{⍉3+/0,⍵,0}⍣2⊢a←9 9⍴9≥?⍨81
(suppose
⎕io←0
)l'
1
en⎕rl←1
est la grainede droite à gauche:
?⍨81
est identique à81?81
- une permutation aléatoire9≥
résulte en un masque de bits contenant dix 1 à des positions aléatoires, le reste est 0a←9 9⍴
remodeler en un carré de 9 par 9 et l'appeler "a"{ }⍣2
procédez comme suit deux fois:⍉3+/0,⍵,0
fenêtre glissante somme de 3 colonnes (supposons 0 à l'extérieur), puis transposition(1,¨a)⍕¨
est format (convertir en chaîne) chacun. L'argument de gauche pour⍕
spécifie le nombre total de caractères et de caractères fractionnaires dans le résultat. S'il⍕
ne peut pas formater selon cette spécification, il génère un*
- une heureuse coïncidence pour ce problème.a
sera 1 là où se trouvent les mines - il est impossible d'essayer d'intégrer une partie entière et fractionnée en un seul caractère, donc celles-ci apparaîtront comme l'*
art.la source
⎕io←0
hypothèse? Je ne connais pas Dyalog APL ...⎕io
("l' origine de l'index ") sur 0 les rend basés sur 0 et modifie certaines primitives en conséquence, par exemple le⍳3
sera0 1 2
, non1 2 3
. Cela peut être fait par programme (⎕io←0
) ou à partir des préférences de l'interface graphique. Avoir ce choix est une erreur vieille de 50 ans qui divise encore la petite communauté APL d'aujourd'hui.MATLAB,
9493 octetsExemple d'exécution (la première ligne après le code est l'entrée saisie par l'utilisateur):
Explication
prend un entier et l'utilise comme graine. (Cela fonctionne dans les versions MATLAB modernes. Les anciennes versions peuvent nécessiter une syntaxe différente.)
assigne logique
0
, oufalse
(obtenu en niant logiquement1
) à l'entrée(9,9)
d'une matricex
. Les autres entrées sont également automatiquement initialisées en logique0
.ayants
1
(autoomatically coulés à logique1
outrue
) à10
des81
entrées dex
, choisis de manière aléatoire sans remplacement. Ces entrées sont celles qui contiennent des bombes.est une abréviation de
conv2(+x,ones(3),'same')
. Il convole la matricex
(qui doit être convertie endouble
, utilisant+
) avec un voisinage 3 × 3 contenant1
. Cela compte le nombre de bombes adjacentes à chaque entrée. Pour les entrées qui contiennent une bombe, elle inclut cette bombe, mais la valeur y sera remplacée plus tard.ajoute 48 à la valeur, pour convertir le nombre en code ASCII. La concaténation avec la matrice vide convertit ces codes ASCII en caractères.
attribue 42 (code ASCII pour
'*'
) aux positions des bombes. Ces positions sont données parx
, qui est ici utilisé comme index logique.affiche le résultat.
la source
Javascript (ES6), 204 ou 198 octets
PRNG personnalisé (204 octets)
Ce code utilise un générateur linéaire congruentiel avec multiplicateur
22695477
et incrément1
(c'est l'implémentation Borland C / C ++).En raison de la faible efficacité du PRNG pendant sa phase de préchauffage, j'ai dû placer une bombe par ligne (au lieu de 10 au début ou 10 à la fin de la matrice non mélangée). Donc, il n'y a que 9 bombes. Je peux essayer de résoudre ce problème plus tard.
De plus, il doit y avoir un moyen plus simple / plus court de traiter le chèque «hors carte»,
(x=p%9-(n+=p)%9)*x-64
mais je ne peux pas le comprendre pour le moment.Utilisation de Math.random () (198 octets)
Celui-ci comprend 10 mines comme demandé.
Démo
la source
'**********'+'0'
est égal à'**********'+0
; qui enregistre deux octets sur la version 198 octets.'0'
est censé se répéter et0.repeat()
ne fonctionnera pas....('**********'+0).repeat(71)
. Pardon.Python 2,
269266264 octetsEssayez-le sur ideone.com
Enregistré 2 octets grâce à Aaron.
Très probablement encore jouable au golf.
Explication
random
est importé pour être utiliséseed
pour amorcer le PRNG etsample
pour sélectionner au hasard dix emplacements de bombes.m
est une matrice 9 x 9 qui sauve la carte. Pour chacun des emplacements des bombes, l'entrée correspondante dansm
est définie sur-9
et toutes les entrées voisines sont incrémentées. De cette façonm
, on obtient le nombre de bombes adjacentes pour les cellules non bombes et un nombre négatif pour les cellules bombes. Les finalesprint
imprime la planche tout en parcourant toutes les lignesl
dansm
et toutes les cellulesc
dansl
.la source
sample()
for a in z:
bloc (uniquement python 2.x)R, 187 octets
Essayez-le sur Ideone
Explication:
set.seed()
prendre une graine cst.x
est l'indice d'une matrice 11 * 11y
est l'indice de la matrice 9 * 9 dans la matrice 11 * 11z
est l'indice de la bombex=x*0
initialiser la valeur de la matriceLa boucle ajoute 1 à x en cas de bombe adjacente.
la source
JavaScript ES6, 244 octets
la source
`
caractère.Rubis ,
181194183 + 1 = 184 octetsJ'ai oublié de mettre la graine, whoops. Utilise le
-n
drapeau.Essayez-le en ligne!
la source
Python 2 , 172 octets
Essayez-le en ligne!
la source