Art volé De quelle taille est le chiffre?
Les chiffres à 7 segments peuvent être représentés en ASCII à l'aide de _|
caractères. Voici les chiffres 0-9
:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Votre travail consiste à analyser l'art en nombres normaux.
Remarques sur les chiffres
- Chaque chiffre a une largeur différente.
1
a une largeur de1
3
et7
sont2
larges245689
et0
sont tous3
larges
Entre chaque chiffre se trouve également un caractère de remplissage. Voici l'ensemble complet de caractères:
// <- devrait être un espace, mais le formatage SE l'a gâché | | ------------- _ _ | | _ ------------- _ _ | _ | ------------- | _ | | ------------- _ | _ _ | ------------- _ | _ | _ | ------------- _ | | ------------- _ | _ | | _ | ------------- _ | _ | _ | ------------- _ | | | _ |
Contribution
L'entrée peut être soit à partir de la console, soit sous forme d'argument de chaîne vers une fonction.
Production
La sortie est soit placée dans la console, soit renvoyée par la fonction.
Exemples:
_ _ _
| | | |_
| | | |_|
1776
_ _ _
_| | | | |_
|_ |_| | |_|
2016
_ _
| |_| |_| |_
| _| | _|
1945
_ _ _ _ _ _
| | | | | | | | | | | | |
| |_| |_| |_| |_| |_| |_|
1000000
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
0123456789
C'est le golf par code donc le nombre d'octets le plus court gagne!
Réponses:
Pyth,
3330 octetsVoici l'idée: une fois que nous avons transposé l'entrée et divisé en chiffres, nous pouvons trier les chaînes de chiffres individuelles et les affecter à leurs valeurs.
Essayez-le ici .
la source
Rubis, 184 octets
Explication
Ceci est mon premier code-golf. Merci pour le plaisir!
la source
Pyth, 39 octets
Cela semble fonctionner? Essayez-le en ligne .
la source
Japt, 119 octets
Try it here!
Oh bon sang, celui-ci est vraiment long. Je ne pense pas avoir fini de jouer au golf.
Explication
Préparation
Nous prenons l'entrée et convertissons tout
|_
en1
. Ensuite, nous transposons, supprimons les espaces de fin et divisons le long de doubles retours à la ligne.Traduction
Nous mappons sur le tableau résultant et trouvons l'index où le formulaire apparaît dans un tableau de référence. Voici un diagramme pour vous aider:
Après cela, nous joignons le tableau de nombres et sortons!
REMARQUE : vous vous demandez peut-être pourquoi nous devons changer chaque personnage artistique en une série de 1. C'est parce qu'il semble y avoir un bug (ou quelque chose comme ça) qui ne me permet pas de stocker les personnages tels quels
|_
.la source
_
bug, mais je ne sais pas ce qui l'a provoqué."\n\n"
peut être remplacé parR²
, et"\\||_"
par"%||_"
. Je pense que vous pouvez aussi sauver quelques octets par codant pour la longue chaîne dans la base 4 (changer chacune des 4 caractères disinctive à0
,1
,2
ou3
, rembourrage à une longueur d'un multiple de 4, puis en cours d' exécutionr"...."_n4 d}
au - dessus), mais pour une raison , Je ne l'ai pas encore fait fonctionner.Python2,
299261244 octetsJ'ai vraiment aimé ce défi, bon travail!
Explication
La fonction
s
prend les trois lignes en entrée, elle essaie de trouver une séparation des chiffres (tous les caractères sont des espaces). Lorsqu'une telle séparation est trouvée, elle appelles
avec le reste des trois lignes et ajoute la valeur renvoyée par l'appel aux trois lignes qui composent le chiffre. S'il n'y a pas de séparation, cela signifie qu'il n'y a qu'un seul chiffre.La fonction
p
est le point d'entrée et prend donc une chaîne qui représente les chiffres. Les chiffres sont stockés comme un "hachage" calculé avecsum(ord(c)**i for i,c in enumerate("".join(n)))%108
pour économiser de l'espace (grâce à d'autres réponses!).Exemple
Autres versions
261 octets (py3):
249 octets, celui-ci transpose les lignes (py2):
la source
JavaScript (ES6), 169 octets
Commence par se diviser en trois lignes, remapper chaque colonne en une valeur, puis créer une identité unique pour chaque colonne à partir de ces valeurs. Il se divise ensuite par
0
(l'identité de l'espace entre les colonnes), et mappe finalement chaque identité à ses valeurs numériques, qu'il concatène et génère.la source
join
édité une chaîne afin de pouvoir la diviser. Je pense que vous pourriez aussi le faire en Python?Python 3,
281254 octetsmodifier
J'ai juste regardé le code de l'autre réponse python et j'ai remarqué qu'une grande partie du code est similaire. Cela a été conclu indépendamment.
(ajout de nouvelles lignes pour "lisibilité")
Non golfé:
Tests:
Comment ça marche
(Remarque: j'explique le programme non golfé ici car il est plus lisible et il a exactement le même code, à l'exception que la
digit
fonction est intégrée dans un lambda)La fonction principale est
parse
. Il divise d'abord l'entrée en lignes et crée lenumbers
tableau.C'est ma partie préférée (car il a fallu si longtemps pour comprendre). Ici, nous avons
zip
les lignes afin que nous puissions essentiellement traverser verticalement l'entrée. Lorsque la ligne contient des caractères, nous l'ajoutons au dernier numéro dunumbers
tableau. S'il ne contient aucun caractère, nous ajoutons un nouveau numéro au tableau.Vraiment simple,
numbers
est mappé avec ladigit
fonction et est converti en chaîne.C'est (assez) simple.
fingerprint
est la représentation sous forme de chaîne des chiffres créés ci-dessus moins les 2 premiers caractères (c'était la plus petite empreinte digitale que j'ai pu trouver). Nous retournons l'index de la première correspondance.la source
Haskell,
270207 octetsNe soyez pas trop dur, c'est mon tout premier programme haskell;) Je suis presque certain que cela peut être approfondi, mais je ne sais pas comment étant donné ma connaissance limitée de la langue.
Non golfé:
Un grand merci à @nimi pour les conseils!
la source
import Data.List
dans votre nombre d'octets. Bonne nouvelle: a) si vous l'avezData.Lists
installé, vous pouvez l'importer à la place et le remplacera
parsplitOn
:...map c$splitOn[" "]$transpose...
et...f<-splitOn",""|_...
. b)intercalate "" n
estconcat n
ouid=<<n
. c) remplacerres
par un nom à une seule lettre. d) profil d'emploi garde au lieu delet ... in
:c n|e<-drop 2$id=<<n,Just r<-elemIndex ... ]=(show r)!!0
.=<<
ça fait? Ni les documents hoogle ni la signature de type ne me sont très utiles.=<<
dans le contexte de la listeconcatMap
, c'est-à-dire qu'il mappe la fonction donnée sur la liste et combine les résultats en une seule liste.>>=
fait de même mais avec les arguments retournés.id =<< n
(oun >>= id
) mappe la fonction d'identité sur la liste (des listes), c'est-à-dire ne fait rien avec les sous-listes et les concatène. C'est donc la même chose queconcat
.