Les identicons sont des représentations visuelles de valeurs de hachage, souvent réalisées à partir d'arrangements symétriques de formes géométriques. Votre avatar Stack Exchange par défaut est un identicon. Ce défi consiste à créer des "wordenticons" , de simples versions d'identicons textuelles qui s'appliquent aux chaînes de lettres minuscules, c'est-à-dire des mots.
Défi
Ecrivez un programme ou une fonction qui prend une chaîne S et affiche son wordenticon. Il est garanti que S ne contient pas de vide et ne contient que des lettres minuscules en anglais, az. Vous pouvez éventuellement supposer que S a une nouvelle ligne.
Le wordenticon de S sera une grille carrée de texte avec des côtés 2*length(S)
composés d'espaces (
), de barres verticales ( |
) et de barres horizontales ( ―
).
Pour générer le mot-symbole de S, formez une grille carrée où chaque colonne correspond à une lettre de S (ordre de lecture normal de gauche à droite) et chaque ligne correspond à une lettre de S (ordre de lecture normal de haut en bas). )
Par exemple, si S est food
notre grille initiale ressemble à
food
f....
o....
o....
d....
où .
est juste un espace réservé.
Pour chaque point vide (chaque .
) de la grille:
- Si la lettre de la colonne vient avant la lettre de la ligne par ordre alphabétique, remplacez-la
.
par|
. - Si la lettre de la colonne vient après la lettre de la ligne par ordre alphabétique, remplacez-la
.
par―
. - Si les lettres des colonnes et des lignes sont identiques, remplacez-les
.
par
Voici l' food
exemple après chacune de ces étapes:
Ajout
|
de:food f...| o|..| o|..| d....
Ajout
―
de:food f.――| o|..| o|..| d―――.
Ajout
food f ――| o| | o| | d―――
Pour compléter le wordenticon, supprimez la ligne et la colonne superflues contenant les mots
――|
| |
| |
―――
puis refléter la chose entière horizontalement
――||――
| || |
| || |
――― ―――
et enfin le refléter verticalement
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
résultant en la 2*length(S)
grille de texte de longueur de côté qui est le wordenticon final.
Exemples
Voici quelques exemples de wordenticon supplémentaires. Notez que des mots différents peuvent avoir des libellés identiques et que certains peuvent être entièrement constitués d'espaces (malheureusement, Markdown ne veut pas rendre ceux-ci).
food
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
mood
――||――
| || |
| || |
――― ―――
――― ―――
| || |
| || |
――||――
foof
―― ――
| || |
| || |
―― ――
―― ――
| || |
| || |
―― ――
fool
――――――
| || |
| || |
|―― ――|
|―― ――|
| || |
| || |
――――――
a [2*2 grid of spaces]
to
||
― ―
― ―
||
it
――
| |
| |
――
tt [4*4 grid of spaces]
abc
――――
| ―― |
|| ||
|| ||
| ―― |
――――
and
――――
| || |
|― ―|
|― ―|
| || |
――――
but
――――
| || |
|― ―|
|― ―|
| || |
――――
you
||||
― ―― ―
―| |―
―| |―
― ―― ―
||||
bob
― ―
| || |
― ―
― ―
| || |
― ―
cat
|――|
― ―― ―
|| ||
|| ||
― ―― ―
|――|
cart
|――――|
― ―――― ―
|| ―― ||
||| |||
||| |||
|| ―― ||
― ―――― ―
|――――|
todo
||||||
― | | ―
―― ―― ――
― | | ―
― | | ―
―― ―― ――
― | | ―
||||||
mice
||||||
― |||| ―
―― ―― ――
――| |――
――| |――
―― ―― ――
― |||| ―
||||||
zyxw
||||||
― |||| ―
―― || ――
――― ―――
――― ―――
―― || ――
― |||| ―
||||||
banana
|―|―||―|―|
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|| | || | ||
― ― ― ― ― ―
|―|―||―|―|
codegolf
――――――――――――――
| ||| |||| ||| |
|― ―――――――――― ―|
|―| ―――――――― |―|
|―|| ――||―― ||―|
| ||| |||| ||| |
|―|||― || ―|||―|
|―||――― ―――||―|
|―||――― ―――||―|
|―|||― || ―|||―|
| ||| |||| ||| |
|―|| ――||―― ||―|
|―| ―――――――― |―|
|― ―――――――――― ―|
| ||| |||| ||| |
――――――――――――――
programming
―||―||||||||||||―||―
| || |||||||||||| || |
―― |―||||||||||||―| ――
――― ―|―――― ――――|― ―――
| || |||||||||||| || |
――――― ―――――――――― ―――――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
―――|―|―― ―||― ――|―|―――
―――|―|||| || ||||―|―――
――― ―|―――― ――――|― ―――
――― ―|―――― ――――|― ―――
―――|―|||| || ||||―|―――
―――|―|―― ―||― ――|―|―――
―――|―| |―||―| |―|―――
―――|―| |―||―| |―|―――
――――― ―――――――――― ―――――
| || |||||||||||| || |
――― ―|―――― ――――|― ―――
―― |―||||||||||||―| ――
| || |||||||||||| || |
―||―||||||||||||―||―
abcdefghijklm
――――――――――――――――――――――――
| ―――――――――――――――――――――― |
|| ―――――――――――――――――――― ||
||| ―――――――――――――――――― |||
|||| ―――――――――――――――― ||||
||||| ―――――――――――――― |||||
|||||| ―――――――――――― ||||||
||||||| ―――――――――― |||||||
|||||||| ―――――――― ||||||||
||||||||| ―――――― |||||||||
|||||||||| ―――― ||||||||||
||||||||||| ―― |||||||||||
|||||||||||| ||||||||||||
|||||||||||| ||||||||||||
||||||||||| ―― |||||||||||
|||||||||| ―――― ||||||||||
||||||||| ―――――― |||||||||
|||||||| ―――――――― ||||||||
||||||| ―――――――――― |||||||
|||||| ―――――――――――― ||||||
||||| ―――――――――――――― |||||
|||| ―――――――――――――――― ||||
||| ―――――――――――――――――― |||
|| ―――――――――――――――――――― ||
| ―――――――――――――――――――――― |
――――――――――――――――――――――――
Notation
C'est code-golf , le code le plus court en octets gagne. Tiebreaker va à la réponse précédente.
Remarques
- Toute instance de barre horizontale (
―
) dans votre code peut être comptée pour 1 octet au lieu des 3 octets UTF-8 qu’elle occupe réellement. (Jusqu'à dix instances.) - Si vous le souhaitez, vous pouvez utiliser des tirets ordinaires (
-
) à la place des barres horizontales (―
). - La suppression ou l'ajout d'espaces de fin dans les lignes d'un wordenticon n'est pas autorisée (même si la forme reste inchangée). Il devrait s'agir d'un
2*length(S)
carré de texte de longueur de côté exacte . - Le wordenticon en sortie peut éventuellement avoir une seule nouvelle ligne.
programming
,and
etcodegolf
mais vous avez oubliépuzzles
...Réponses:
MATL,
2015 octetsEssayez-le sur MATL Online
Explication
la source
Java,
329305264259192 octetsGrâce à:
StringBuilder
parString
.Golfé:
Ungolfed:
Certainement amusant. La première tentative a été une fonction qui a été
O(n)
remplacée par une forme plus simple après une frustration excessive.Et pour tester:
la source
\u2015
. L'utilisation de la barre horizontale (ou simplement d'un tiret) dans le code brut convient.String
au lieu deStringBuilder
la réponse, la réponse pourrait être beaucoup plus courte ... (même si cela peut prendre beaucoup plus de mémoire)int
s sur la même ligne:int i,j,l=m.length();for(i=0;i<l;i++){...
Haskell, 93 octets
Exemple d'utilisation:
Comment ça marche (note:
(f <*> g) x
est défini commef x (g x)
):Version alternative: la fonction "trouver un remplacement"
((("- |"!!).fromEnum).).compare
peut également être écritea#b|a<b='-'|a>b='|'|1<2=' '
et appelée via(#)
pour le même nombre d'octets.la source
Gelée , 16 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES6), 94 octets
L'utilisation d'un tiret, car j'exécute généralement le shell SpiderMonkey JS sous Windows et Unicode ne fonctionne pas si je le fais.
la source
[...s,s].reverse()
+1Pyth,
3130Suite de tests
Malheureusement, je ne peux pas laisser tomber le
Q
s à cause de plusieurs bifurcates. Joli algorithme de base jusqu'à présent, compte traite la barre horizontale comme 1 octet.la source
Haskell, 66 octets
la source
JavaScript ES6,
138126123 octetsla majeure partie du code est le reflet / retournement
la source
J,
2620 octets6 octets grâce à @Zgarb .
Réponse précédente de 26 octets
Utilise le même algorithme que la réponse de Dennis.
Usage:
(
>>
signifiant entrée (STDIN),<<
signifiant sortie (STDOUT))la source
' |-'{~3*@-/~@u:[,|.
Mathematica,
124110104102 octetsFonction anonyme. Le caractère Unicode est U + F3C7 pour
\[Transpose]
.la source
Javascript
146142132130124 octetsSuite de tests:
Merci pour @HelkaHomba, pour avoir aidé à supprimer au moins 50 octets, et à @Downgoat pour 3 octets!
la source
En fait, 53 octets
Encore une fois, les faibles capacités de traitement des cordes d’Actually sont sa kryptonite. Il est toujours plus court que Java, alors ça me convient, ce qui est bien.
Essayez-le en ligne!
Explication:
Le code peut être séparé en 3 parties distinctes: le code de traduction, le code de traitement et le code en miroir. Par souci de lisibilité, je vais expliquer chaque section séparément.
Code de traduction (commence par la chaîne d'entrée
s
, sur la pile):Code de traitement (commence par une liste de
n**2
caractères, correspondant au coin inférieur droit):Code en miroir (commence par une
n**2+n
chaîne de longueur, avec des périodes agissant comme des lignes nouvelles)la source
> <> , 109 octets
L'entrée se fait via STDIN. Essayez-le en ligne!
Explication:
L'entrée a été lue et mise en miroir sur la première ligne. Pour les entrées
abcd
, cela laissedcbaabcd
sur la pile. Chaque moitié est ensuite reflétée pour donnerabcddcba
(ligne 2). Ensuite, chaque élément est dupliqué et laissé tour à tour sur sa propre pile (lignes 3 et 4). Après ce processus, la pile de piles ressemble un peu à ceci:Pour chaque pile, tour à tour, la valeur de la ligne (le bas de la pile) est comparée à la valeur de la colonne (le haut de la pile). Le caractère approprié est sélectionné
- |
et écrit dans STDOUT. Les valeurs de colonne sont ensuite pivotées afin que la colonne suivante se trouve en haut de la pile (ligne 6).Une fois que toutes les colonnes ont été considérées, la valeur de la ligne est supprimée, une nouvelle ligne est imprimée et les valeurs des colonnes sont placées dans la pile précédente (ligne 7) pour que le processus de sortie puisse redémarrer.
La
]
commande, en plus de sortir de la pile de piles, vide la pile actuelle si c'est la seule qui reste. La condition de fin du programme est si la pile est vide, toutes les lignes ayant été traitées (ligne 5).la source
C #,
169150 octetsmerci FryAmTheEggman
ungolfed:
plus de conseils de golf appréciés
la source
t+=c==k?" ":c>k?"|":"-";
devrait marcher. Je n'ai pas beaucoup joué au C #, mais il est tout à fait possible que l'utilisation defor
boucles régulières soit plus courte.Reverse()
etToArray()
font partie deSystem.Linq
sorte qu'une instruction using est requise.C #
166143 octets,Explication:
Tester:
la source
IEnumerable<char>
vous pouvez économiser des octets en utilisant.Reverse()
directement la chaîne en sautant.ToCharArray()
var a = new[] { '-', ' ', '|' };
àvar a = "- |";
parce que vous pouvez utiliser l' indexation sur les chaînesCJam, 20 octets
Testez-le ici.
Utilise l'approche évidente consistant à calculer un produit externe et à utiliser différence et sgn pour calculer le caractère dans chaque cellule.
la source
Clojure, 171 octets
ungolfed:
la source
J,
7570 octets5 octets sauvés grâce à Dennis.
Je vais travailler à le convertir en un verbe tacite plus tard.
la source
Octave, 39 octets
Crée une fonction anonyme pouvant être exécutée avec
ans('string')
.Démo
Explication
Cette solution combine la chaîne d'entrée (
x
) et l'inverse (flip(x)
) à l'aide de[x, flip(x)]
. L'inverse est affecté ày
raccourcir la réponse,[x, y = flip(x)]
. Nous créons alors un vecteur de colonne de la même chose en combinantx
ety
et en prenant la transposition:[x,y]'
. Ensuite, nous prenons la différence qui sera automatiquement diffusée pour créer un tableau 2D de différences entre les représentations ASCII des lettres dans les chaînes. Nous les utilisonssign
pour-1
, soit ,0
ou1
puis2
pour ajouter des valeurs valides d'index basées sur 1. Nous les utilisons ensuite pour indexer dans la chaîne initiale'| -'
.la source
Julia, 70 octets
C'est ma première tentative de code golf et je n'ai jamais utilisé Julia auparavant, alors dites-moi ce que vous pensez:
Essayez-le en ligne!
Ungolfed:
Je pense que cela pourrait probablement être raccourci. Ce code stocke les caractères du wordicon dans une matrice:
Malheureusement, je n'ai pas réussi à produire le résultat souhaité à l'aide de la matrice.
la source
Jolf, 42 octets
À peine joué au golf. J'oublie probablement une matrice intégrée à celle de Jolf.
Essayez-le ici! Ce code utilise une fonction de flèche (
Ψ
) pour la carte matricielle.la source
Javascript, 303 octets
Ungolfed
Pas de fantaisie ecma 2015 ici
la source
var x = 1
, faites-lex = 1
. En code golf, personne ne se soucie d’adhérer aux meilleures pratiques. :)Python 2, 126 octets
Ceci est essentiellement un port de ma solution actuelle .
Essayez-le en ligne
Explication:
la source
Python 3.5,
250223175 octets:Essayez-le en ligne! (Idéone) (Les deux derniers cas de test pas dans la sortie car ce ne sont que des lignes vierges. Mon programme les traite cependant, ce qui confirme le fait qu'il y a 10 entrées en entrée, mais que seulement 8 sorties apparaissent.)
Ungolfed suivi d'une explication:
p=[[' ―'[O(i)<O(g)],'|'][O(i)>O(g)]for i in o for g in o]
Créez une liste,
p
où un|
est ajouté si la valeur de point Unicode de la lettre de colonne est inférieure à la valeur de la lettre de ligne, un–
est ajouté si la valeur de point Unicode de la lettre de colonne est supérieure à la valeur de la lettre de ligne, ousi les deux les valeurs sont égales.
u='\n'.join([''.join(p[i:G+i]+p[i:G+i][::-1])for i in range(0,len(p),G)])
Créez une chaîne jointe newline
u
, à partir de liste,p
en la divisant en segments de chaîne jointe comprenant chacun un nombre de caractères de longueur en entrée, à la fois en avant et en arrière, ce qui donne une longueur de 2 fois le nombre de caractères saisis dans l'entrée. Ceci est la moitié supérieure de votre wordenticon. Ainsi, dans le cas de votre entréefood
, ceci renverrait:print(u+'\n'+u[::-1])
Enfin, la sortie est
u
suivie d’un retour à la ligne, puisu
inversée pour refléter verticalement la première moitié de la seconde moitié. Ceci est votre wordenticon complété, qui pour le cas de testfood
serait finalement:la source
R , 101 octets
101 octets depuis que j'utilise
―
(ce qui, à mon avis, est meilleur que-
).Essayez-le en ligne!
J'ai été surpris qu'il n'y ait pas eu de réponse R auparavant, car nous pouvons exploiter la symétrie et les matrices de R pour obtenir une réponse assez compétitive, bien que ce soit un
string
problème.Explication non golfée:
la source
C (gcc) , 202 octets
Essayez-le en ligne!
Fonctionne en boucle à travers chaque caractère, puis en mettant à jour le caractère résultant (et ses réflexions).
la source
05AB1E (ancien) ,
202221 octets+2 octets comme correctif pour les entrées à un seul caractère.
-1 octet en utilisant des tirets ordinaires à la
-
place de―
, puisque nous pouvons alors utiliser à la… |-
place de"… |―"
(puisque… |―
agirait incorrectement comme une chaîne de dictionnaire)Utilise la version héritée de 05AB1E, car elle se joint implicitement à de nouvelles lignes lors de la mise en miroir, ce qui nécessite un explicite supplémentaire
»
dans la nouvelle version.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source