En griffonnant sur du papier quadrillé l'autre jour, j'ai trouvé la police à espace négatif ci-dessus pour les chiffres. Au cas où vous ne l'auriez pas encore repéré, les espaces entre les formes ci-dessus donnent le nombre d'or de 1,618033988749 . Dans ce défi, votre tâche consiste à prendre un nombre en entrée et à le rendre exactement comme le montre l'exemple ci-dessus.
Voici comment ceux-ci sont créés. Toutes les lignes seront sur une grille régulière, de sorte que les chiffres individuels sont constitués d'un petit nombre de cellules de grille. Voici les formes des 10 chiffres (nous ignorerons le point décimal pour ce défi):
Oui, le 7 diffère de l'exemple du nombre d'or en haut. J'ai un peu gâché ça. Nous irons avec celui-ci.
Notez que chaque chiffre mesure cinq cellules de haut et trois cellules de large. Pour rendre un nombre, vous pouvez imaginer placer tous ses chiffres l'un à côté de l'autre, de sorte qu'il y ait exactement une colonne vide entre chaque paire de chiffres. Par exemple, en prenant 319
comme entrée, nous écririons:
Notez que nous ajoutons une colonne vide de début et de fin. Maintenant, nous inversons les cellules:
La sortie doit alors être les limites des polygones résultants:
Bien sûr, vous pouvez générer le résultat de toute autre manière, tant que la sortie rendue est identique.
Contribution
- Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction, sous forme de chaîne ou de liste de chiffres. (Vous ne pouvez pas prendre un nombre car cela ne vous permettrait pas de prendre en charge les zéros non significatifs.)
- Vous pouvez supposer qu'il n'y aura plus de 16 chiffres dans l'entrée.
Sortie
- La sortie peut être affichée à l'écran ou écrite dans un fichier dans un format d'image commun.
- Vous pouvez utiliser des graphiques raster et vectoriels.
- Dans les deux cas, le rapport d'aspect des cellules de la grille sous-jacente doit être 1 (c'est-à-dire que les cellules doivent être des carrés).
- Dans le cas de graphiques raster, chaque cellule doit couvrir au moins 20 x 20 pixels.
- Les lignes ne doivent pas dépasser 10% de la taille des cellules. Je suis prêt à donner un ou deux pixels de latitude en raison de l'aliasing ici.
- Les lignes et l'arrière-plan peuvent être deux couleurs clairement distinctes, mais les formes créées par les lignes ne doivent pas être remplies (c'est-à-dire que l'intérieur doit également être la couleur d'arrière-plan).
- Il ne doit y avoir aucun espace dans chaque boucle fermée.
- Bien sûr, le résultat entier doit être visible.
Cas de test
Voici 10 entrées, qui couvrent ensemble toutes les paires possibles de chiffres adjacents, ainsi que tous les chiffres avant et arrière possibles:
07299361548
19887620534
21456837709
39284106657
49085527316
59178604432
69471338025
79581224630
89674235011
97518264003
Et voici les résultats attendus pour ceux-ci:
Assurez-vous que votre code fonctionne également lorsqu'il est donné un seul chiffre (je ne veux pas inclure les résultats attendus ici, car ils devraient être évidents, et la section de cas de test est assez gonflée telle quelle).
la source
Réponses:
BBC BASIC, 182 caractères ASCII (taille de fichier à jetons 175 octets)
Téléchargez l'interprète sur http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Scoring: Lorsque le programme ci-dessus est collé dans l'éditeur et exécuté, l'éditeur étendra les mots clés abrégés en mots clés complets à l'écran, bien qu'ils ne soient en réalité que 1 octet après la tokenisation. (Exemple
I.
=INPUT
espace de stockage 1 octet.)Explication
Je vais simplement expliquer ce que fait la ligne VDU: elle dessine une boîte en inversant la couleur actuelle des pixels à l'écran. Cela signifie que (avec un peu de soin avec les coins), il est possible de simplement dessiner une cellule à côté de l'autre, et le bord intermédiaire s'annulera et disparaîtra en raison d'un double dessin.
Un examen attentif révèlera que les coins supérieur droit et inférieur gauche d'une cellule sont dessinés mais que les coins supérieur gauche et inférieur droit sont manquants ("arrondis") pour que cela fonctionne.
Une fois la cellule dessinée, le curseur graphique est déplacé de 32 pixels vers le haut pour que la cellule suivante soit dessinée.
Le reste du programme est une décompression bitmap ASCII assez simple. Les dimensions de la cellule sont de 64x64 unités pour le golf / la compatibilité avec la façon dont le bitmap est décompressé.
q
contrôle la taille de la cellule tracée: 64x64 unités pour une cellule présente, 0x0 pour une cellule absente.Code non golfé
Sortie
Les
MOVE
s sont simplement obtenir la sortie à des hauteurs appropriées sur l'écran. BBC basic utilise 2 unités = 1 pixel dans ce mode, donc les cellules sont en fait 32x32 pixels.la source
Octave,
233 225 216213 octetsVoici le premier cas de test (à partir d'une capture d'écran redimensionnée, il correspond à mon moniteur =):
L'entrée peut être de longueur arbitraire, comme par exemple
'07299361548'
la source
Javascript ES6, 506 octets
Ungolfed:
Suppose qu'il y a un
<body>
pour ajouter le canevas, testé dans Firefox 46.Exemple d'exécution (affectation d'une fonction anonyme à f):
rendements:
la source
Html + JavaScript ES6, 352
Testez l'exécution de l'extrait ci-dessous
Moins golfé
la source
Java, 768 octets
Ungolfed
Remarques
L'entrée est une seule chaîne comme argument. Comment utiliser:
javac G.java
,java G 80085
Je commence avec une toile noire, puis j'ajoute les nombres en tant que positifs blancs. Je crée une copie de l'image puis retourne chaque pixel noir qui a 4 voisins noirs sur l'image d'origine.
Les sorties
Quelques chiffres simples:
la source
R, trop d'octets pour le golf (
1530+1115)lol à l'écriture sur le disque, puis à la lecture du disque, modifiez le remplissage noir.
la source
Python 3,
326325 octetsla source
range(3)
n'en vaut jamais la peine.C #, 768
773 776octetsPrend le nombre comme argument de ligne de commande. Génère une image BMP agréable, propre et sans alias avec le numéro comme nom.
Original avant de jouer au golf:
la source
Mathematica 328 octets
Explication
Quatre bits seront utilisés dans chacune des 5 lignes de cellules pour chaque chiffre d'entrée.
"75557262277174771717557117471774757711117575775717"
représente 0 à 9 sous forme de bitmaps.Les 5 premiers chiffres du grand entier ci-dessus, à savoir
75557
indiquent comment chaque ligne du tableau pour zéro doit être affichée.7
représentera{0,1,1,1}
, c'est-à-dire un globule blanc, suivi, à sa droite, de 3 globules noirs; l'interligne0
est un espace vide pour séparer les chiffres affichés.5
correspond à{0,1,0,1}
, c'est à dire des cellules blanches, noires, blanches, noires.Ce qui suit produit une liste de règles de remplacement:
Notez que quand
3
est entré, il sera remplacé par71717
Cette représentation est exprimée en binaire:Son inverse noir-blanc est trouvé en échangeant simplement le
1
s et le0
s.Voyons à quoi
p
etq
ressemblons lorsqu'ils sont affichés parArrayPlot
:Cela rejoint simplement les tableaux de zéros et de uns pour chaque chiffre avant de rendre le grand tableau via
ArrayPlot
.*
est définij
comme l'espace vertical final après le dernier chiffre.la source