Un nonogramme est un puzzle logique bidimensionnel qui ressemble à ceci (captures d'écran du jeu Pixelo , mon jeu de nonogramme préféré):
Le but du jeu est de comprendre quelle image ces nombres encodent. Les règles sont simples: un nombre sur une colonne ou une ligne signifie que quelque part dans cette colonne ou cette ligne, de nombreuses cases sont remplies dans une ligne. Par exemple, la ligne du bas de l'image ci-dessus ne doit contenir aucune case, tandis que celle du dessus doit contenir toutes ses cases. La troisième rangée à partir du bas a 8 cases remplies, et elles seront toutes consécutives.
Deux nombres ou plus pour la même colonne ou ligne signifient qu'il y a plusieurs "séries" de cases remplies, avec au moins un espace entre elles, avec ces longueurs. L'ordre est conservé. Par exemple, il y a trois cases remplies dans la colonne de droite de l'image ci-dessus, au moins un espace en dessous, puis une autre case remplie.
Voici ce même puzzle, presque terminé:
(Les X ne sont pas importants, ils sont juste un indice que le joueur se laisse à lui-même pour dire "Cette case n'est certainement pas remplie". Pensez aux drapeaux dans Démineur. Ils n'ont pas de sens pour les règles.)
J'espère que vous pouvez voir que, par exemple, les colonnes du milieu avec des indices qui disent "2 2" ont deux séries de 2 cases remplies.
Votre mission, si vous l'acceptez, est d'écrire un programme ou une fonction qui créera un puzzle comme celui-ci. La taille de la carte vous est donnée sous la forme d'un entier unique (5 <= n <= 50) sur stdin ou comme argument (il n'y a aucune raison pour qu'un casse-tête non graphique doive être carré, mais pour ce défi, il le sera). Après cela, vous recevrez une série de 1 et de 0 représentant respectivement les carrés remplis et non remplis dans l'image. Les premiers n d'entre eux sont la ligne du haut, puis la ligne suivante, etc. Vous retournerez ou imprimerez pour afficher un tableau de 2 * 1 cellules (car elles sont plus belles et cela vous donne de la place pour des indices à 2 chiffres pour une colonne). ), tous vides, avec des indices correspondant aux données d'entrée.
Format de sortie
Échantillon
Contribution:
./nonogram <<< '5 0 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 1 0'
OR
n(5,[0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0])
Image:
Sortie:
1
2 1 2
3 2 1 2 3
+----------
3|
2 2|
1 1 1|
2 2|
3|
Contribution:
./nonogram <<< '15 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1'
Image:
Sortie:
1 1
1 1 3 3 5 5 3 3 1
7 2 3 2 4 2 3 210 2 3 0 4 215
+------------------------------
2|
1|
1|
1|
1|
1 1|
3 3 1 1|
1 5 1 1|
3 5 3|
1 5 1|
1 3 1|
1 1 1 1 1|
1 1 1 1 1 1 1 1|
11 3|
11 3|
Clarifications
- Votre sortie n'a pas besoin d'être un puzzle résoluble. Tous les nonogrammes ne sont pas résolubles, mais ce n'est pas votre problème. Sortez simplement les indices qui correspondent à l'entrée, qu'ils constituent ou non un bon casse-tête.
- Un programme qui prend des arguments sur la ligne de commande est autorisé. C'est un peu indiqué ci-dessus, mais il est possible de se tromper. C'est à cela que servent les clarifications.
- L'impression d'un
0
pour une ligne ou une colonne qui n'a pas de cases remplies est obligatoire. Je ne dis cela avec des mots nulle part, mais c'est dans les exemples de données.
5<=n<=50
est la spécification, donc il ne peut pas y avoir de nombres à 3 chiffres-
qu'il ne devrait?Réponses:
GolfScript, 128 caractères
L'entrée doit être fournie sur STDIN sous forme de nombres séparés par des espaces.
Vous pouvez tester l'exemple ici .
Code commenté:
la source
~](:k/.zip\]{{1,%{,}%.!,+}%}/{' ':^*}%{.{,}%$-1=}:f~:r{^*\+r~)>'|'n}+%\f{.~)\[^]*@+>{^\+-2>}%}+%zip{r)^*\n}%r^*'+''--'k*n](
jouer à 123 caractères: (pour une raison quelconque, lettercount.com dit 125 caractères si vous le copiez, mais je vous assure que c'est 123 caractères). Certaines parties de l'algorithme ont été modifiées, mais la majorité est toujours la même. J'ai également changé certains noms de variable (avoir 9 comme variable est intelligent, mais aussi déroutant), mais vous pouvez les changer si vous le souhaitez.Rubis, 216
255Bien que cela ne produise pas la sortie d'échantillon exacte donnée dans la question, elle suit les spécifications. La seule différence avec les exemples est que j'imprime quelques espaces / sauts de ligne.
Exemple:
Journal des modifications:
chunk
àmap
.[nil]
au lieu d'appelerArray#compact
.la source
length(leading spaces + numbers to the left) == 2*n
etheight(leading newlines + numbers at the top) == n
... aussi longtemps que votre moniteur est assez grand pour les3*n+1 × 2*n+2
personnages, vous ne devriez pas avoir à me disqualifier. :)Rubis, 434
la source
ruby $yourprogram <<< $input
mais j'ai réussiruby_nanograms:7:in '<main>': undefined method '+' for nil:NilClass (NoMethodError)
.ruby nonogram.rb 2 1 0 0 1
pour un 2x20
pour l'avant-dernière colonne du deuxième exemple.+------
ligne ... est également en retrait d'un espace de trop.GolfScript
149147Le code
Modifications:
puts
enregistrer un autre caractèreDémos en ligne
Une version quelque peu annotée du code
la source
Javascript (E6) 314
334 357 410Non golfé
Usage
N(5,[0,1,1,1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0])
N(15,[0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1])
Modifier l'historique
1 Suppression de l'expression rationnelle utilisée pour rechercher les colonnes. Overkill
2 Plus simple est meilleur. Sortie dans une chaîne, pas dans un tableau. Suppression de la fonction d'assistance FILL (F)
3 Encore plus simple. Je ne peux pas faire mieux que ça. Ne peut toujours pas se comparer à Golfscript :(
la source
R, 384 caractères
Avec des indentations et quelques explications:
Usage:
la source
C - 511
C n'a certainement pas été conçu pour formater correctement la sortie. Le nombre de caractères comprend uniquement les espaces / nouvelles lignes nécessaires.
L'entrée provient de STDIN, les nombres sont séparés par des espaces.
la source
Cela fait quelques jours et personne n'a répondu en python, alors voici ma tentative (probablement assez mauvaise):
Python 2.7 -
404397380 octetsJe publierai bientôt une version non golfée, mais pour le moment je pense qu'elle est assez lisible. :)MODIFIER: Lors de l'écriture de la version non golfée, j'ai remarqué quelques améliorations que je pouvais apporter et qui étaient assez importantes! Pour une raison que je ne peux pas expliquer, il a maintenant des nouvelles lignes supplémentaires en haut et des espaces à gauche (même si je ne pense pas avoir changé quoi que ce soit de fonctionnel), mais il répond toujours aux spécifications.
La version non golfée arrive!Non golfé:
Quelques modifications ont été apportées pour des raisons de lisibilité (
g
étant divisées en trois fonctions nommées, des compréhensions de listes complexes transformées enfor
boucles) mais logiquement, cela fonctionne exactement de la même manière.C'est pourquoi il est déroutant que celui-ci n'imprime pas d'espaces supplémentaires et de nouvelles lignes, tandis que celui qui joue au golf le fait. ¯ \ _ (ツ) _ / ¯
la source