Écrivez le programme le plus court qui prendra en entrée une chaîne de chiffres (d' au moins 20 longueurs) et affichez la sortie en utilisant les numéros de style d'horloge numérique standard. Par exemple pour l'entrée 81, une solution avec sortie ascii donnerait:
_
|_| |
|_| |
La sortie graphique est également acceptable, si cela aide.
Réponses:
APL (Dyalog) (45)
La chaîne
ા8धगɯેࣃଏ૽
,, sont les caractères unicode2750 56 2343 2327 623 2759 2777 2243 2831 2813
(cependant, vous devriez pouvoir simplement les copier et les coller). Ils codent les chiffres. Le programme lit une ligne sur le clavier.Explication:
1+⍎¨⍞
: lire une ligne du clavier, analyser chaque caractère sous forme de chiffre, puis ajouter 1 à chaque numéro (les tableaux APL sont basés sur 1 par défaut).⎕UCS'ા8धगɯેࣃଏ૽'[
...]
: Sélectionnez les caractères appartenant aux chiffres des nombres que vous avez saisis et recherchez les valeurs Unicode.{
...}¨
: pour chacune de ces valeurs, faites:1+⍵⊤⍨9⍴3
: obtenez les 9 premiers chiffres de base 3 à partir de la valeur exprimée en base 3 et ajoutez 1 (car les tableaux sont basés sur 1).' _|'[
...]
: sélectionnez un espace, une ligne horizontale ou une ligne verticale en fonction de ces chiffres3 3⍴
: format sous forme de boîte 3 x 3.la source
Funciton
Pas vraiment un langage adapté au golf ... mais malgré tout, j'ai essayé de garder la taille du code aussi petite que possible - un défi assez différent de celui des langues "habituelles". Il s'agit de 1555 caractères ou 3110 octets (s'il est codé en UTF-16; UTF-8 est plus grand).
Voici une capture d'écran du programme en cours d'exécution. Ça marche vraiment :)
Étant donné que cela semble moche dans StackExchange en raison de l'espacement de ligne supplémentaire, envisagez d'exécuter le code suivant dans la console JavaScript de votre navigateur pour résoudre ce problème:
$('pre').css('line-height',1)
Il pourrait probablement être plus petit si je n'avais pas fait d'erreur à cause de laquelle la sortie était en arrière; J'ai corrigé cela en ajoutant une fonction supplémentaire pour inverser l'entrée. Sinon, je devrais probablement tout réécrire.
J'ai également fait une autre erreur (en échangeant les opérandes en deux appels à
‼
) qui a rendu nécessaire la déclaration de la‡
fonction supplémentaire , mais celle-ci est si petite qu'elle tient dans la fonction principale et n'ajoute donc aucun caractère!la source
wxpython, plusieurs caractères
Tester
ps: pas une entrée sérieuse, mais il semble que la sortie graphique soit également acceptable, donc je viens de l'essayer :-)
la source
Golfscript - 66 caractères
xxd
: (utiliserxxd -r
pour revenir)Cela suit la plupart des autres réponses en ce sens qu'il n'y a pas d'espaces entre les nombres et que les espaces de fin sont conservés. Un espace entre les nombres peut facilement être ajouté avec
1+
avant{"_ |"=}%
. Emballé dans un numéro de base 3, puis en tant que base 243 dans une chaîne.la source
J,
90,7868 caractères[ mise à jour: en utilisant le codage unicode (1 octet):
fonctionne comme avant:]
La clé réside dans le codage des chiffres sous forme d'entiers en base 3. Zéro, par exemple, est:
ou
' _ | ||_|'
, qui devient 010202212 3 = 2750.la source
http://codegolf.stackexchange.com/q/1000
)Mathematica
205 209 198179Usage
la source
JavaScript (145)
148145Étant donné que JavaScript n'a pas vraiment d'entrée / sortie standard, cela est écrit comme une fonction qui prend une chaîne et renvoie la sortie sous forme de chaîne.
Espacées:
Voici comment cela fonctionne:
Les trois premiers bits correspondent à la première ligne, etc.
Dans chaque groupe de trois bits, le premier spécifie si le premier caractère est
|
ou espace, le second si c'est_
ou espace, et le troisième à nouveau|
ou espace.Ces trois bits sont récupérés sous la forme
c&1
,c&2
etc&4
, qui sont ensuite utilisés comme index dans la chaîneb
.À chaque itération,
i%L
est la «coordonnée x», c'est-à-dire le chiffre dans l'entréen
À chaque itération,
i/L
est la «coordonnée y», c'est-à-dire la ligne, mais nous devons|0
en faire un entierEnfin, les espaces entre les chiffres et les sauts de ligne entre les lignes sont également récupérés par indexation dans
b
, en réutilisant le caractère espace et la position 3 autrement inutilisée dans cette chaîne! :)la source
Rubis, 142
attend l'entrée dans la variable
x
. exemples:la source
Golfscript - 97 caractères
la source
Windows PowerShell, 127
Étant donné que les chaînes contiennent des caractères désagréables à écrire, un hexdump pour votre commodité:
la source
gForth,
186175 caractèresNouvelle version:
Cela dérange en fait de quitter (+3 caractères) aussi :). Voici la version la plus lisible, elle fait un peu de compression pour réduire la taille de la LUT de 1/3, mais le code résultant est plus complexe, donc ce n'est pas beaucoup d'économies:
Ancienne version:
Cela laisse la pile déséquilibrée et ne prend pas la peine de quitter l'interpréteur. Voici une version plus claire et plus lisible
la source
Caractères C # 369
Je pourrais facilement découper quelques caractères. Il s'agissait davantage d'abuser de LINQ :)
Plus de version d'espaces blancs:
la source
using
s (409). Ensuite, il y a un espace blanc inutile qui peut être supprimé (402). La tâche indique que les espaces entre les chiffres doivent être omis (399).g
n'est utilisé qu'une seule fois, vous pouvez donc enregistrer 7 caractères en l'intégrant.b
n'est également utilisé qu'une seule fois, vous pouvez donc l'inclure également. En outre, vous pouvez enregistrer un grand nombre de caractères si vous modifiez le tableau d'entiers en"{H=mNgwI\x7fo"
, ou même plus court si vous passez\x7f
au caractère réel # 127 (qui n'est pas imprimable, mais autorisé). Le>>
fonctionnera toujours car il y a une conversion implicite dechar
àint
..ToCharArray()
et le.ToArray()
sont redondants, vous pouvez simplement les supprimer :)Solution Java:
585570 caractèresJe ne pense pas que je vais essayer de jouer au golf à Java ...
la source
Python,
218180176b=map(int,raw_input());a=map(int,bin(914290166014670372457936330)[2:]);c=' |_';p=lambda k:''.join(c[a[9*n+k]]+c[2*a[9*n+1+k]]+c[a[9*n+2+k]]for n in b)+'\n';print p(6)+p(0)+p(3)
Avec des sauts de ligne:
la source
Bash, 11 caractères
Oui je sais, je triche.
Vous devez avoir installé des toilettes.
la source
figlet
fonctionnerait également.Java, 2095
EXEMPLE D'E / S
la source
D: 295 caractères
Plus lisiblement:
la source
Ocaml, 268
Version lisible
la source
Perl (
182180)lit de STDIN.
la source
Ghostscript
(270)(248)(214)Edit: Plus de substitutions. Suppression de l'espace entre les chiffres.
Edit: Encore plus de substitutions. La boucle principale ressemble maintenant à ce qu'elle fait!
Utilise la fonction de traitement des arguments de ghostscript: invoquer avec
gs -dNODISPLAY -- digit.ps 012 345 6789
.la source
Delphi || 453 (568 avec format)
Pas même assez près pour gagner mais c'était amusant à faire ^. ^
Avec format
fin.
la source
PHP,
140136133131129 129128 octetsJe pourrais économiser
57 de plus avec ascii étendu: un pour"| _"
et le saut de ligne, trois pour~"z/]{4lno~|"
(la négation au niveau du bit transformerait tout en caractères ascii étendus = pas de caractères spéciaux, et PHP n'a pas besoin de guillemets), deux pour-1
(c'est seulement là pour garder la carte en ascii standard). Mais pour la lisibilité et la compatibilité, je reste avec ascii standard.le bitmap
_
,|_|
, en|_|
tant que bits-6-
,024
,135
(nombre de bits et 2 est égal à 0 pour les LED verticales)[123,48,94,124,53,109,111,112,127,125]
"z/]{4lno~|"
~"z/]{4lno~|"
(permet un raccourci ternaire dans la sélection des caractères)le gabarit
7
pour les espaces ->767
,024
,135
701
,623
,745
(rend$p=0
obsolète)547326107
(lire la carte de droite à gauche; permet le bouclage arithmétique)5473261070
(permet de combiner décalage avec test en tête de boucle)753754680
(deux octets plus court: un chiffre et le préfixe)panne
la source
ord(~"z/]{4lno~|v.J=NF"[hexdec($c)])-1
Java 8, 280 octets
Explication:
Essayez-le ici.
En tant que fonction, ce serait plutôt 218 octets .
la source
Python, 227 caractères
Simple et direct.
la source
Perl, 145 caractères
Non golfé:
la source
Python 3.4.3 -
1514858 octetsLa tentation de résoudre ce problème était trop grande pour ne pas s'inscrire et répondre = P
Je suis un peu nouveau sur Python, j'ai donc formaté mon programme de manière agréable et soignée (ou du moins je l'ai fait). Les améliorations sont grandement appréciées!
Edit: noms de variables raccourcis, utilisés; pour raccourcir, un seul espace à la fin des numéros de sortie, des variables définies à la fois.
Les nouvelles lignes font 2 octets (CRLF) et j'ai utilisé des tabulations au lieu de 4 espaces.
la source
SmileBASIC, 216 octets
Utiliser des graphiques au lieu du texte, car il est probablement plus court.
Explication:
la source
C ++,
230229225223218207204198 198 octetsLit depuis stdin et sort vers stdout.
Explication:
la source
Powershell, 114 octets
Script de test:
Sortie:
Idée principale:
Chaque numéro de style d'horloge numérique standard contient 3 lignes. De plus, la première ligne ne contient que 2 options. Un total de 6 options. Par conséquent, 7 bits suffisent pour coder chaque chiffre.
Ainsi, la chaîne
f-SR5Z^mvr
code tous les segments pour tous les numéros de style d'horloge numérique standard.Remarque: L'ordre du a
line str
été spécialement sélectionné pour que tous les codes soient dans l'intervalle32..126
.la source