Démineur est un jeu de logique que l'on trouve sur la plupart des OS. Le but du jeu est de déterminer où se trouvent les mines sur une grille, étant donné les nombres indiquant le nombre de mines autour de cet endroit.
Étant donné une taille de grille et un ensemble de mines, générez la grille de démineur pour cet ensemble de mines.
Entrée: deux entiers indiquant la taille de la grille et un nombre indéfini indiquant les positions de la mine. Les positions seront données comme (position de colonne, position de ligne) et les index commenceront à la ligne 1.
Sortie: La grille du démineur. S'il n'y a pas de mines autour d'un bloc, imprimez un x
. Pour chaque nouvelle ligne, imprimez une nouvelle ligne. Veuillez afficher toutes les mines sous forme d'astérisque *
. Ne laissez aucun espace entre les valeurs de la ligne lors de l'impression.
Cas de test:
Entrée "5 5 1 3 3 5 2 4":
xxxxx
11xxx
*21xx
2*21x
12*1x
Entrée "3 4 3 1 1 4 2 3 3 2":
x2*
13*
2*2
*21
Le code le plus court gagne.
la source
5 5 1
- dire ne sera jamais adopté?Réponses:
GolfScript
122 98 94 93 91 88 87 85 82 81 8071Démos en ligne:
Cas de test 1: lien
Cas de test 2: lien
la source
!!{a}{b}if
utilise un caractère de plus que nécessaire.'*'
peut être remplacé par,42
car vous le placez dans un tableau, puis vous stringifiez le tableau. De même, vous pouvez utiliser des codes ASCII pour les autres caractères de sortie et enregistrer un caractère avecor
pour gérer le cas spécial.!!{a}{b}if
c'était vraiment stupide. :) C'est drôle quelles erreurs de haut niveau vous pouvez faire tout en vous concentrant sur les détails. Je ne peux pas comprendre ce que vous vouliez dire en utilisantor
.,,
avoir un chiffre. Vous voulez le convertir dans la chaîne correspondante (ou code ASCII) à moins que ce ne soit 0, auquel cas vous voulez x. Les codes ASCII pour les chiffres sont séquentiels et vont de 48.x
est ASCII 120, qui est 72 + 48. Vous pouvez donc faire72or 48+
et enregistrer un caractère sur l'approche basée sur les chaînes..48 120if+
, mais votreor
astuce est de deux caractères plus courte.J,
1241161121018786858483827976757268 caractèresJ'ai trouvé ce que je cherchais - un moyen de me débarrasser des espaces (
1":
) - et finalement je suis compétitif. Maintenant, je dois juste comprendre le problème de l'ensemble vide de mines.Prend l'entrée du clavier.
Éditer
La nouvelle version utilise un effet secondaire de
1":
- les nombres supérieurs à 9 sont remplacés par*
.la source
0
, nonx
; 2. Échoue si l'ensemble de mines est vide (ex:10 10
- devrait imprimer un tableau 10x10 vide, mais revient|length error
)x
ne représentait qu'un espace. Je n'ai pas remarqué que cela avait changé. Hmm, je n'ai jamais pensé que l'ensemble des mines serait vide ... Je vais devoir y travailler.Mathematica - 247 caractères
Exemples:
Production:
ChessboardDistance
calcule la distance entre chaque cellule d'une mine, où 1 correspond à "à côté d'une mine". LeCount
1 donne le nombre de cellules. Ensuite, les mines (*) sont insérées dans le tableau.la source
Mathematica ,
140139137Écrire cela sous une forme plus lisible:
la source
ListCorrelate[BoxMatrix@1, %, 2, 0]
fonctionne sa magie.ListCorrelate
superpose efficacement le noyau (BoxMatrix@1
) à chaque position dans la grille, multiplie et donne la somme. (envoyez-moi un ping dans mma chat si vous souhaitez une illustration) - Votre commentaire me rappelle que celaListConvolve
devrait fonctionner ici aussi car c'est une sorte d'image miroir deListCorrelate
et mon noyau est symétrique. Cela me sauvera un personnage. :-)2
dans##2
. Je vais le réparer maintenant. ps: Comment avez-vous remarqué cela après si longtemps?VBA - 298 caractères
Ignorer les erreurs avec
On Error Resume Next
m'a sauvé certains caractères, mais ce n'est toujours pas aussi bon que certaines des autres réponses. : - /la source
Python,
192182 182180 caractèresJe pourrais en enregistrer si l'entrée était séparée par des virgules. Ensuite, la première ligne serait
d=input()
et la longueur 171 caractères.Il serait également utile que les coordonnées de la mine soient basées sur 0 plutôt que sur 1. Cela m'a coûté 8 caractères à surmonter.
Version non golfée:
la source
Scala, 280 caractères
la source
C ++ - 454 caractères
C'est pire que ma réponse VBA, ce qui signifie probablement que je ne sais pas ce que je fais en C ++. Cependant, j'essaie de construire sur ce que je sais de C ++, alors le voici. Si quelqu'un a des suggestions d'amélioration, je serais reconnaissant de les entendre!
la source
return 0
. Et vous pouvez#include<cstdio>
,#include<cstdlib>
. Vous pouvez même supprimer ces deux inclus!. De plus,using name.....
c'est trop long, vous pouvez utiliser à lastd::cin, std::cout, std::string
place.std::
appels qui auraient valu la peine (je pense qu'un autre l'string
aurait fait ). Merci aussi pour les informations sur les#include
lignes. Je ne suis pas un expert en C ++. ;-)C # (691 caractères)
Version sans golf:
la source
K, 175
.
la source
ECMAScript 2019 (Javascript moderne) - 116 octets
version non golfée
cette solution n'adhère pas strictement au format d'entrée / sortie mais montre un algorithme succinct.
exemple: https://gist.github.com/missinglink/ee02084cfb523665e8c9d34c24f01537
la source
brainfuck ,
1001896 octetsEssayez-le en ligne! ou essayez l'ancienne version avec entrée entière
Un jour de programmation et trois jours de correction de bugs ^^
Cela utilise quelques parties de mon code Game Of Life. Au lieu de compter les cellules vivantes, cela compte les bombes. Étant donné que l'entrée en tant que points de code est autorisée par les règles générales, celle-ci les utilise à la place d'entiers "lisibles".
la source
C'est le début d'une solution Brainfuck. Il devrait être assez lisible avec des commentaires d'indentation et de pile (
@
indique le pointeur de pile):Elle est cependant loin d'être achevée et je commence à douter que mon approche soit optimale. Jusqu'à présent, il ne considère que les deux premiers caractères d'entrée et imprime un tableau de X. Par exemple, "43" vous donnerait:
J'aimerais voir si quelqu'un d'autre a ce qu'il faut et est capable de résoudre ce problème dans Brainfuck.
la source