Votre programme doit prendre en entrée une ligne de caractères, comme ceci:
@+.0
Et affichez les caractères triés par ordre d'obscurité, comme ceci:
.+0@
Exigences:
Vous devez utiliser une police à espacement fixe pour détecter l'obscurité.
Vous devez savoir combien de pixels chaque personnage occupe. Vous devez réellement dessiner le caractère et compter les pixels, c’est-à-dire que vous ne pouvez pas coder en dur les quantités de pixels.
- En règle plus concrète: si vous changiez de police, votre programme devrait toujours fonctionner. De plus, votre programme devrait pouvoir changer de police en changeant simplement une variable, une valeur ou une chaîne dans le code.
Si vous utilisez l'antialiasing, vous devez compter les pixels en pourcentage d'un pixel entièrement noir. Par exemple, un
rgb(32, 32, 32)
pixel comptera pour 1/8 d'un pixel complet. Ne tenez pas compte de cette règle si vos personnages ne sont pas anti-aliasés.Après avoir compté les pixels, vous devez trier les caractères en fonction du nombre de pixels et les afficher dans l’ordre.
C'est du code-golf , donc le code le plus court en octets va gagner.
Réponses:
Mathematica,
112 110108 octetsCela peut encore probablement être joué au golf. Suppose que la chaîne est dans la variable s.
Et utilise maintenant une syntaxe correcte pour trier une liste par une autre liste.
Des cas de test chanceux -> "Oh oui, ça marche" -> Facepalm
Merci pour les yeux perçants, David Carraher.
Mise à jour: OCR A remplacé par Menlo car je me suis rendu compte que, sur OSX, le nom de famille de la police OCR A était en réalité OCR A Std. Donc, je triais une police par défaut au lieu de la vraie affaire. Menlo est également monospaced avec le même nombre d'octets, donc pas de gain net ni de perte.
J'ai mis en place une exportation CDF hébergée du bloc-notes afin que vous puissiez voir le code en action si vous le souhaitez. Je ne sais toujours pas comment ajouter une certaine interactivité aux CDF hébergés sur le Web, donc, pour l'instant, ce n'est que statique.
Sortie pour
s = FromCharacterCode /@ Range[33, 135];
avec "Courier"Sortie identique, mais avec FontFamily "Monospace":
Notez que les résultats finaux sont affichés dans la police interne de MM et non dans la police en cours de tri. Par conséquent, vous voyez les différences dans la police choisie reflétées dans le tri. Le lien CDF montre les deux, cependant, pour les complétistes.
Code non golfé:
la source
"" <> (FromCharacterCode /@ Range[33, 135])
StringJoin@SortBy[Characters@"@+.0",ImageData@Binarize@Rasterize@Style[#,FontFamily->"Monospace"]~Total~2&]
Bash + ImageMagick:
164147148 caractèresÉchantillon échantillon:
Des séparateurs sont insérés entre les groupes de gris. Les caractères avec un niveau de gris identique ne sont pas séparés:
la source
sort
QBasic, 259 octets
Je l’ai fait pour le plaisir, c’est donc techniquement non conforme aux règles d’une manière. Il ne prend pas une liste de caractères, mais affiche tous les caractères de 32 à 255 et l’utilise à la place. Si vous voulez vraiment voir une version qui respecte cette règle, merci de me le dire.
Cela échoue également avec un autre détail technique: "En outre, votre programme devrait pouvoir changer de police simplement en modifiant une variable, une valeur ou une chaîne dans le code." Il n'y a pas de moyen facile de faire cela depuis QBasic. Cependant, le programme fonctionnera bien avec n'importe quelle page de codes de votre choix.
Enfin, je pourrais supprimer quelques caractères (principalement des espaces que l'EDI QBasic insère utilement), mais cela ne vaut probablement pas la peine, car cette réponse n'a aucune chance de gagner de toute façon.
la source
Javascript + Canvas et navigateur DOM (
280237235 octets)Version mise à jour avec des suggestions de Fors et une brosse à dents dans les commentaires:
Version plus lisible:
Peut-être peut-être plus joué au golf.
Je suis nouveau sur ce site, je ne suis donc pas sûr de savoir comment l'entrée est lue normalement pour les réponses Javascript. Je suppose que l'entrée est contenue dans une variable nommée
s
. Si cela ne va pas, je mettrai à jour la réponse et le nombre de caractères.JSFiddle de la version mise à jour.
JSFiddle de la première version .
la source
c
ets
sont inutiles (a=document.createElement('canvas').getContext('2d')
ety+=a.getImageData(0,0,30,30).data[i]
), l'élément n'a pas besoin d'être ajouté, l'initialisation de zéroy
peut être combinée avec celle dei
(i=y=0
), la post-incrémentation dei
peut être combinée avec l'ajout dey
(for(...;y+=...[i++]);
) et la police de caractères Monaco est mono-espacé et porte un nom plus court que Courier.prompt()
; mais c'est aussi bien.y=i=0;
et changera.fillText(x,0,20)
poura.fillText(x,y=i=0,20)
.PHP, 298 caractères
J'ai ajouté quelques sauts de ligne pour que vous puissiez le voir dans toute son horreur:
Ce code utilise les polices GD intégrées à PHP. Le deuxième argument de
imagechar()
sélectionne la police (les nombres de 1 à 5 sont valides).Exemple:
Si vous insérez ce qui suit en haut du code indiqué ci-dessus, vous pourrez alors fournir la liste des caractères dans votre navigateur Web.
la source
imagecreatetruecolor
vous pouvez supprimer le premier allocation et utiliser le nom de la fonction directement sur le second, pour -11.[]
au lieu dearray()
. etforeach($a as$v)
fonctionne aussi bienGTB
Ceci a le code pour être le deuxième code le plus dur que j'ai jamais écrit pour une calculatrice. Aucune valeur de pixel codée en dur, elle dessine le texte sur un graphique et effectue une boucle pour compter chaque pixel.
Contribution
Sortie
la source
Java -
468 450444@+.0abcdefghijklmnopqrstuvwxyz
->.irl+jcvtfxyzsuonkheaqpdb0wgm@
Ungolfed:
la source
Postscript, 381
Voici quelque chose de complètement différent, juste pour le plaisir. Comme la plupart des polices sont de toute façon vectorielles, «compter les pixels» est un peu étrange, n'est-ce pas. Calculer la surface des glyphes, tout en étant correct, n’est pas si facile. Une autre solution consiste à numériser un rectangle et à compter les occurrences lorsqu'un point se trouve à l'intérieur d'une forme de glyphe. Postscript dispose d'opérateurs pour ce type de vérification. Certes, la numérisation et les tests d'insiduité ne sont qu'un étrange moyen de compter les pixels.
.
Et voici les résultats pour 3 polices différentes (dont la sélection peut être non commentée, ci-dessus):
la source
Perl (avec GD) (159)
usage:
edit: raccourci à 159 caractères
la source
Java, 584
Wow ... Ce n'était pas une bonne langue pour faire ça.
Usage:
Cette configuration entraîne:
La seule ligne qui nécessite une explication:
Ensuite, cette dernière pièce le rassemble ...
En parcourant tous les points et en additionnant le nombre de points. Cette information de densité est renvoyée au comparateur et est utilisée pour le tri.
la source
R, 195 caractères
Indenté avec commentaires:
Exemple:
La gestion des polices dans les graphes R étant dépendante de la plate-forme, je ne peux pas garantir son fonctionnement sur PC, mais sur Mac (OS X 10.7.5, R 2.14.2).
la source
SmileBASIC,
179176173 octetsUtilise la police actuellement chargée. Les polices peuvent être chargées avec
LOAD"GRPF:filename"
.Code plus lisible:
la source
PHP - 485
Démo:
Code:
la source
Python + freetype-py: 147
la source