Émuler un affichage à 7 segments

24

Tâche

La tâche consiste à afficher l'un des 128 états possibles d'un affichage à 7 segments .

Votre programme doit accepter une chaîne de 7 caractères ("bits") qui sont soit 0ou 1. Le premier bit d'entrée correspond au segment A de l'illustration suivante, le second à B, etc. (ignorer dp):

7seg

La façon dont vous représentez l'affichage dépend de vous - un seul symbole Unicode ou ASCII, de l'art ASCII , grafiquement, ou tout ce que vous pouvez trouver. Cependant, chaque entrée doit avoir sa propre sortie distincte. Si vous trouvez quelque chose de fantaisiste, je suis sûr que vous pouvez récolter des votes positifs en montrant quelques exemples.

Les 128 états possibles de l'affichage sont:

États

Règles

  • Codegolf
  • Comme je l'ai dit, tout type de sortie est autorisé, mais ce serait bien si vous le spécifiiez.
  • L'entrée peut être un argument stdin ou de ligne de commande.

Exemples

Contribution

1101101

Sortie

En ASCII / Unicode:
2
Différents types d'art ASCII (je ne suis pas trop bon dans ce domaine)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---
daniero
la source
Étroitement lié à codegolf.stackexchange.com/questions/997/… ?
DavidC
@DavidCarraher: Ils sont liés, oui; Je l'ai même lié moi-même. Cependant, c'est un peu plus difficile, je dirais, car vous avez 118 autres «nombres» à générer. La plupart (?) Des réponses à l'autre question ne fonctionneraient pas ici, ou devraient être fortement réécrites. De plus, ici, vous n'avez pas besoin de coder les différents nombres, donc d'autres optimisations devraient être possibles.
daniero
Vous avez raison. Merci d'avoir fait remarquer cela.
DavidC
est-il obligatoire que nous utilisions l'encodage que vous avez fourni? Par exemple, "1101101" devrait toujours représenter "2"?
ardnew
@ardnew: oui. La position des bits en entrée doit correspondre à l'ordre alphabétique des segments A à G dans la première image.
daniero

Réponses:

5

J (51)

1 2 1#"1[5 3$' #'{~,|:>0;(88707#:~7#7){>".&.>1!:1[1

sortie:

1101101
 ## 
   #
 ## 
#   
 ## 
marinus
la source
1
Cela peut être rasés jusqu'à 38 ombles avec un peu d' effort: 1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1.
algorithmshark
16

C, 106

La taille est de 74 caractères si elle est autorisée à renommer le programme "W00WG5WW1GW66WG4WW2GW33WG"

main(int i,char**s){
    for(s[0]="W00WG5WW1GW66WG4WW2GW33WG";i=*s[0]++;putchar(s[1][i&7]-49?i==71?10:32:42));
}

fonctionnement:

./a.out 1101101
 ** 
   *
 ** 
*   
 ** 

Remarques:

'W' et 'G' (0x47 et 0x57) sont choisis de telle sorte que la valeur & 7 = 7, c'est-à-dire qu'ils indexent en toute sécurité le caractère nul qui termine la chaîne d'entrée.

bébé-lapin
la source
15

Brainfuck - 224

++++++++++[>+>+++<<-]
>>++>,>,>,>,>,>,>,
<<<<<<<.
>[<+.->-]<<.
>>
>>>>>[<<<<<+<+>>>>>>-]<<<<<<.>[<->-]<.>>[<<+.->>-]<<<.>.
>>>>>>>[<<<<<<<+.->>>>>>>-]<<<<<<<<.
>>>>>>[<<<<+<+>>>>>-]<<<<<.>[<->-]<.
>>>[<<<+.->>>-]<<<<.>.
>>>>[<<<<+.>]

Imprime à l'aide de points d'exclamation:

 ! 
! !
 !
! !
 !

Pas le plus lisible, mais pas trop horrible non plus.

Surpris de voir à quel point cela est proche de ne pas être la dernière place.

captncraig
la source
13

Postscript 121 107

1 12 moveto{}5 0{0 -5 rmoveto}0 5 0 5 -5 0 0 -5 0 -5 5 0
n{49 eq{rlineto}{rmoveto}ifelse exec}forall stroke

nécessite nd'être défini comme la chaîne à traiter, alors appelez comme

gs -g7x14 -sn=1101101 lcd.ps

obtenir

image du numéro deux

l'ensemble complet est

ensemble complet de caractères

Geoff Reedy
la source
11

Mathematica: 135 129 118, affichage d'image

Image[MorphologicalComponents@Import@"http://goo.gl/j3elE" /. 
      Thread[Range@7 -> IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &

espaces ajoutés "pour plus de clarté"

entrez la description de l'image ici

modifier

Pour les utilisateurs difficiles du site: sans utiliser de masque externe:

Image[MorphologicalComponents[ColorNegate@Rasterize@8, CornerNeighbors -> False] /. 
    Thread[Range@7 ->IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &
Dr. belisarius
la source
Le code semble incomplet. Je ne pense pas que vous vouliez que votre programme se termine avec &.
DavidC
@DavidCarraher C'est une fonction , donc ça se termine par &.
Dr belisarius
Oui, mais cela ne s'applique à rien. Comment obtient-on une sortie?
DavidC
2
@belisarius Je n'aime toujours pas le fait que vous intégriez des ressources externes.
FUZxxl
1
Je pense que cela n'a aucun sens de supprimer mon commentaire précédent car cela rendrait beaucoup plus difficile pour quelqu'un d'autre de suivre cette discussion. Vous importez des données externes qui sont drôles comme une blague mais qui ne font pas partie d'une réponse sérieuse au golf. -1
FUZxxl
10

APL, 58 55

' _|'[1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]]

Exemple d'entrée:

1101101

Sortie:

 _ 
 _|
|_ 

⍞='1' prend l'entrée comme un tableau de caractères et le convertit en un tableau numérique.

1 2 2 1 2 2 1×⍞='1'convertit ce tableau en: 0for blank, 1for _, 2for|

(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]affecter ce tableau à une variable xet réorganiser pour représenter les segments F, G, B, E, D, C

0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] concatène un blanc, un segment A et un autre blanc à l'avant

3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] remodeler en une matrice 3x3

1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] convertit en indexation 1

Utilise enfin la chaîne ' _|'pour convertir les indices en caractères


modifier

' _|'[1+3 3⍴(0,1 2 2 1 2 2 1×⍞='1')[1 2 1 7 8 3 6 5 4]]

Réduit 3 caractères en concaténant un 0à l'avant du tableau et en utilisant des indices en double, empêchant une affectation de variable

TwiNight
la source
Si votre APL le prend en charge, je pense que la fonction from{ est 1 caractère plus courte que l'indexation des crochets [].
luser droog
9

PHP 66 octets

<?for(;11>$i;)echo++$i&3?$argv[1][md5(¡æyÚ.$i)%8]?$i&1?~ƒ:_:~ß:~õ;

Une légère amélioration en utilisant une md5formule magique, mais nécessite 3 octets binaires supplémentaires:
¡, æ, et Úsont des caractères 161, 230, et 218 respectivement. Il doit fonctionner tel quel s'il est copié directement et enregistré au format ANSI.


PHP 73 (70) octets

<?for($s=327638584;3<$s;)echo++$i&3?$argv[1][7&$s/=8]?$i&1?'|':_:' ':'
';

Si vous me permettez trois caractères binaires, cela peut être réduit à 70 octets :

<?for($s=327638584;3<$s;)echo++$i&3?$argv[1][7&$s/=8]?$i&1?~ƒ:_:~ß:~õ;

ƒ, ßet õsont respectivement les caractères 131, 223 et 245.

Reçoit l'entrée comme argument de ligne de commande. Exemple d'utilisation:

$ php seven-seg.php 1101101
 _
 _|
|_

$ php seven-seg.php 0111011

|_|
 _|
primo
la source
j'ai essayé d'exécuter votre code, mais je reçois beaucoup d'erreurs :( je ne comprends pas votre logique mais semble intéressant.
D34dman
1
@ D34dman Les seuls messages qu'il produira sont des notifications (variables non définies, etc.). Ceux-ci peuvent être désactivés php.ini(par défaut, ils le sont déjà), ou pour les tests, vous pouvez ajouter le code suivant au script:<? error_reporting(E_ALL & ~E_NOTICE); ?>
primo
impressionnant! je l'ai fait fonctionner: D naice!
D34dman
7

JavaScript + jQuery + HTML + CSS ( 210 201)

Cette solution utilise des sprites CSS et l'image fournie à titre d'exemple :

HTML (3)

<a>

CSS ( 82 71)

Merci à xem pour le " background: url ":

a{background:url(//bit.ly/VesRKL);width:13px;height:23px;display:block}

JavaScript (125 après la suppression des nouvelles lignes ajoutées ici pour plus de lisibilité)

i=prompt();
x=-parseInt(i.substr(0,3),2)*23;
y=-parseInt(i.substr(3),2)*13.75;
$('a').css('background-position',y+'px '+x+'px');

Test en ligne: http://jsfiddle.net/zhqJq/3/

Cristian Lupascu
la source
1
Hé, mais qu'en est-il des 17,937 octets de l'image ?? ;)
Thomas W.
@ThomasW. Je ne sais pas si cela devrait également être pris en compte. Laissons cela au PO pour décider.
Cristian Lupascu
Vous pouvez utiliser le <p>tag et éviter display:blocksur CSS pour économiser de l'espace
Roberto Maldonado
image d'arrière-plan: url ( bit.ly/VesRKL ); => arrière-plan: url (// bit.ly/VesRKL);
2014 à 21h28
@xem merci pour l'astuce; J'ai édité ma réponse
Cristian Lupascu
6

R (65 caractères):

plot((3^(1i*1.5:-4.5)*(1:7!=7)),col=strsplit(readline(),'')[[1]])

S'appuie sur quelques approximations lâches pour certains nombres transcendantaux ...

Patrick Caldon
la source
6

Python 2-65

s=raw_input()+'0\n'
for i in`0x623C239E38D2EAA1`:print s[int(i)],

Exemple:

echo 1101101|python2 7seg.py
0 1 0 
0 0 1 
0 1 0 
1 0 0 
0 1 0
aditsu
la source
5

PostScript: 53 binaires, 87 ASCII 52 binaires, 86 ASCII

Hexdump du programme utilisant des jetons binaires:

$ hexdump -C lcd_binary.ps 
00000000  28 34 34 30 34 30 38 30  34 30 34 30 30 30 30 34  |(440408040400004|
00000010  30 34 30 34 34 34 34 34  38 34 38 30 38 29 7b 7d  |0404444484808){}|
00000020  92 49 6e 7b 92 70 31 92  04 92 96 92 6b 92 63 92  |.In{.p1.....k.c.|
00000030  a7 7d 92 49                                       |.}.I|
00000034

Téléchargez ce fichier pour l'essayer.

Utilisation de jetons ASCII:

(4404080404000040404444484808){}forall
n{not 1 and setgray moveto lineto stroke}forall

La première forallboucle place toutes les coordonnées requises sur la pile. Les coordonnées sont stockées dans une chaîne pour minimiser l'espace requis. Les coordonnées sont dans l'ordre inverse, c'est-à-dire que les 4 derniers caractères sont pour le segment A. On trace une ligne de (0,8)à(4,8) pour ce segment (en fait, nous devons ajouter 48 à toutes les coordonnées, car forallmet tous les codes ASCII sur la pile).

Le second forallparcourt tous les 0s et 1s de la chaîne d'entrée et les transforme en valeur grise. 0s sont dessinés en blanc (valeur de gris 1) et 1s sont dessinés en noir (valeur de gris 0). Ensuite, nous utilisons les coordonnées que le premierforall boucle a laissées sur la pile pour tracer les lignes.

Appelez le programme en utilisant Ghostscript, tout comme Geoff Reedy:

gs -sn=1101101 lcd.ps

Cela affiche: Exemple de sortie

Thomas W.
la source
Je pense que vous pouvez remplacer neg 49 add(ce qui est génial btw) par 1 and.
luser droog
@luserdroog: les opérateurs brillants au niveau du bit n'y ont pas pensé. Mais ça doit être ça not 1 and, non? Enregistre toujours un octet à la fois en ASCII et en binaire.
Thomas W.
Je pense qu'il doit y avoir un bon moyen avec un bitmap 1 bit. mais bitshiftc'est un si long mot.
luser droog
Mais ce n'est qu'un jeton binaire de deux octets
Thomas W.
Ouais. Mais cela me semble toujours être une triche . :) Je sens que je dois en faire autant que possible avec une source lisible avant de recourir au binaire.
luser droog
4

APL 101 86 73 69

m←45⍴' '⋄m[¯40+⎕av⍳(⍎∊3/' ',¨⍕⍞)/')*+16;EJOQRSAFK-27=>?']←'⎕'⋄9 5⍴m

L'entrée se fait depuis l'écran via ⍞

1101101

Ce qui produit une matrice de 9x5 caractères composée de blancs et de ⎕ comme suit:

 ⎕⎕⎕
     ⎕
     ⎕
     ⎕
 ⎕⎕⎕
⎕
⎕
⎕
 ⎕⎕⎕

Le nombre à sept chiffres est converti en un vecteur de partition pour sélectionner les coordonnées ⎕.

Graham
la source
Ma tête me fait mal ...
Rob
4

Mathematica 112 103 100 96 88, en utilisant les graphiques

HighlightGraph[z=GridGraph@{3,2},Pick[EdgeList[z][[{3,4,1,2,6,7,5}]],Characters@#,"1"]]&

entrez la description de l'image ici

Using it to show a calculator display

l = {7-> 7, 1-> 6, 0-> 63, 8-> 127, 9-> 111,3 -> 79, 5-> 109,  2-> 91, 4-> 102, 6-> 125}; 
GraphicsRow[
  HighlightGraph[z = GridGraph[{3,2}, EdgeStyle-> {White}, GraphHighlightStyle-> {"Thick"}], 
    EdgeList[z][[{3, 4, 1, 2, 6, 7, 5}]][[IntegerDigits[#, 2, 7] Range@7]]] & /@
            (IntegerDigits[8736302] /. l)]

Graphiques Mathematica

Dr. belisarius
la source
À quel type d’entrée vous attendez-vous? Ni [123]ni ["123"], ni IntegerDigits[123]travailler pour moi. Je reçois seulement z, sans mise en évidence.
DavidC
@dude Essayez `HighlightGraph [z = GridGraph @ {3, 2}, choisissez [EdgeList [z] [[{3, 4, 1, 2, 6, 7, 5}]], Characters @ #," 1 "] ] & @ "1111111" `` :)
Dr belisarius
3

Python (107)

Certainement plus golfable.

a=map(int,raw_input())
for i in(0,6,3):print' .. '*a[i]+('\n'+' .'[a[5-i/6]]+'  '+' .'[a[1+i/6]])*(2*(i!=3))

Sortie:

1101101
 .. 
   .
   .
 .. 
.   
.   
 .. 

Explication:

a is a list of booleans extracted from the input.
When you multiply a string with a number, it will return the string repeated (number) times.
If that number happens to be zero, it returns an empty string.
i is iterated through 0 (pos A), 6 (pos G), and 3 (pos D).
' .. ' will print either section A, G, or D, depending on the value of i.
([string here])*(2*(i!=3)) will print [string here] twice only if i!=3.
Breaking down [string here]:
 - '\n' will print a newline for each repetition.
 - '  ' is the null space between horizontal sections.
 - ' .'[(bool)] will return either ' ' if (bool) is 0, and '.' if (bool) is 1.
 - 5-i/6 will return 5 if i=0 and 4 if i=6. a[5] is section F and a[4] is section E.
 - 1+i/6 will return 1 if i=0 and 2 if i=6. a[1] is section B and a[2] is section C.
beary605
la source
3

Python 2.7 (93 caractères):

print (' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}').format(*map(lambda x:int(x)and'*'or' ',raw_input()))

Explication:

Avec l'entrée stdin, utilisez un opérateur ternaire de fortune pour donner *vrai et un espace pour faux. Prenez ces valeurs et branchez-les dans une déclaration de format au format de l'affichage à 7 chiffres. Ce serait au plus 83 caractères si l'affichage fonctionnait comme ceci:

 a
b c
 d
e f
 g

mais la commande le rend plus long. Quelqu'un a un moyen de contourner cela?

Exemple:

$ ./7seg.py
111000

 *
  *

  *

$ ./7seg.py


1111111

 *
* *
 *
* *
 *
Brigand
la source
1
Bien, mais ce lambda semble inutile:; print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()])) Pas besoin non plus de crochets et d'espace pour l'instruction print.
daniero
Hou la la! Je ne savais pas qu'on pouvait mettre des booléens dans des indexeurs. Merci :-)
Brigand
Np. Aussi, >'0'au lieu de =='1'et input()(avec des crochets autour, mais cela n'apparaîtra pas à cause du formatage ici) au lieu de raw_input().
daniero
fyi, vous pouvez utiliser des backticks triples si vous avez besoin de backticks dans le codex = `input()`
Brigand
Cool. J'ai aussi appris quelque chose aujourd'hui :)
daniero
3

Je pensais que nous avions besoin d'une réponse nette ...

Clojure, 159 caractères

(print(apply str(flatten(interpose\newline(partition 3(map(fn[x](if(= x\1)\o" "))(str" "(apply str(interpose" "(map(vec(read-line))[0 5 1 6 4 2 3])))" ")))))))

Ce qui précède s'exécutera dans le REPL et fournira la bonne réponse. Par exemple:

1111111
 o 
o o
 o 
o o
 o 

Lancer des chiffres avec de petites modifications:

(doseq [i ["1111110" "0110000" "1101101" "1111001" "0110011" "1011011" "1011111" "1110000" "1111111" "1111011"]]
(println (apply str(flatten(interpose\newline(partition 3(map(fn[x](if(= x\1)\o" "))(str" "(apply str(interpose" "(map(vec i)[0 5 1 6 4 2 3])))" "))))))) 
(println))

rendements:

 o 
o o

o o
 o 


  o

  o


 o 
  o
 o 
o  
 o 

 o 
  o
 o 
  o
 o 


o o
 o 
  o


 o 
o  
 o 
  o
 o 

 o 
o  
 o 
o o
 o 

 o 
  o

  o


 o 
o o
 o 
o o
 o 

 o 
o o
 o 
  o
 o 

nil

Pas facile à lire, mais ils sont là!

Joanis
la source
3

Javascript 123

s=prompt(i=o='');for(m=' 0516423';i++<15;i%3==0?o+='\n':1)o+=' ─│'[~i%2&(A=+s[+m[~~(i/2)]])+(A&+'110'[i%3])];console.log(o)

Je peux réduire le nombre de caractères (101) si nous n'utilisons qu'un seul caractère pour l'état "on", mais il est moins lisible:

s=prompt(i=o='');for(m=' 0516423';i++<15;i%3==0?o+='\n':1)o+=' ■'[~i%2&s[+m[~~(i/2)]]];console.log(o)
Shmiddty
la source
+1 C'est impressionnant. J'essaie toujours de faire de la rétro-ingénierie. Ça m'a déjà appris quelques choses!
guypursey
2

Post-scriptum 136

Pas gagnant, mais une approche différente.

15 string exch{1 and 255 mul}forall
[7 3 9 13 11 5 1]{count 1 sub index 3 1 roll exch put}forall
3 5 8[.02 0 0 .05 0 0]{}image showpage

Attend que la chaîne d'entrée soit sur la pile:

$ echo '(1101101)'|cat - 7seg.ps |gs -sDEVICE=png16 -sOutputFile=6c.png -

Celui-ci est encore pire. 294 pour créer un bitmap "binaire". J'ai mis un certain temps à me souvenir que chaque ligne est complétée par un octet pair. Ainsi, un bitmap 3x5 fait cinq octets, les bits de 3 ms étant significatifs.

2#1101101
(12345)exch
2 copy 64 and 0 exch put %A
2 copy 2 and 6 bitshift 2 index 32 and or 1 exch put %F B
2 copy 1 and 6 bitshift 2 exch put %G
2 copy 4 and 5 bitshift 2 index 16 and 1 bitshift or 3 exch put %E C
2 copy 8 and 3 bitshift 4 exch put
pop
3 5 1[.02 0 0 .02 0 0]{}image showpage

La sortie est tout aussi moche que l'autre. :(

D'accord, voici celui qui a l'air bien. 190

Edit: C'était à l'envers et à l'envers. Fixé maintenant.

(1101101)
{neg 49 add 255 mul
1 string dup 0 4 3 roll put}forall
(\377){@/g/f/e/d/c/b/a}{exch def}forall
@ a a @
b @ @ f
b @ @ f
@ g g @
c @ @ e
c @ @ e
@ d d @
4 7 8[.01 0 0 .01 0 0]{}image showpage
luser droog
la source
Cela me montre des motifs amusants. Y a-t-il encore un bug quelque part?
Thomas W.
hmm. Ouais. (1111110) ne ressemble pas à un zéro. C'est juste un plan de travail agrandi. Je suppose que les boîtes sont trop simplifiées. :(
luser droog
c'est un peu dans la nature de cette approche bitmap, je pense. Je ne sais pas comment le rendre pas moche.
luser droog
Quelques commentaires légers disponibles ici .
luser droog
2

Mathematica 264

Pour obtenir une sortie correcte, il fallait de nombreux octets, donc pas de cigare cette fois. Mais voici le code détaillé (264 caractères) de toute façon.

{a, b, c, d, e, g} = {{-1, 5}, {1, 5}, {1, 3}, {1, 1}, {-1, 1}, {-1, 3}};
f@n_ := Graphics[{Yellow, Thickness[.1], CapForm["Round"],
   Line /@ {{g, c}, {g, a}, {g, e}, {e, d}, {d, c}, {c, b}, {b, a}}[[Flatten@
   Position[IntegerDigits[n, 2, 7], 1]]]}, 
   Background -> Blue, PlotRange -> {{-1, 1}, {1, 5}}, PlotRangePadding -> 1]

L'ensemble complet de caractères:

GraphicsGrid[Partition[Table[f[p], {p, 0, 128}], 16]]

characteris

Les chiffres:

{f[63], f[6], f[91], f[79], f[102], f[109], f[125], f[7], f[127], f[111]}

enter image description here

DavidC
la source
2

PHP - 155 caractères

<?php
$y=array("   \n"," - \n","   \n","  |\n","|  \n","| |\n"); $x = $argv[1]; echo $y[$x[0]].$y[2*$x[6]+$x[2]+2].$y[$x[7]].$y[2*$x[5]+$x[3]+2].$y[$x[4]];

ce serait 150 caractères si nous utilisons la déclaration de tableau de type php 5.4, mais je ne l'ai pas installé sur mon ordinateur portable, je ne pouvais donc pas le tester.

Échantillon de sorties.

enter image description here

Explication:

J'ai d'abord divisé l'affichage à 7 segments en cinq lignes et 3 colonnes. Avec la 1ère, la 3ème et la 5ème ligne, havimg '-' dans la colonne du milieu, et espace sinon.

Les 2e et 4e rangées ont un tuyau '|' dans la première et la dernière colonne. Maintenant, la présence de ces caractères doit être guidée par les valeurs d'entrée.

J'ai créé une table de recherche, qui est essentiellement deux tables de recherche. Premier pour le calcul des valeurs pour les 1ère, 3ème et 5ème rangées. Et un autre au décalage 2 (3e élément) pour le calcul des lignes 2e et 4e.

D34dman
la source
2

Java - 204 caractères

class A{public static void main(String[]a){char[]c=new char[7];for(int i=0;i<7;i++)c[i]=a[0].charAt(i)==49?i%3==0?95:'|'):32;System.out.printf(" %c %n%c%c%c%n%c%c%c",c[0],c[5],c[6],c[1],c[4],c[3],c[2]);}}

Exemple de sortie:

 _ 
 _|
|_ 

Formaté correctement:

class A {
    public static void main(String[] a) {
        char[] c = new char[7];
        for (int i = 0; i < 7; i++)
            c[i] = a[0].charAt(i) == 49 ? (i % 3 == 0 ? 95 : '|') : 32;
        System.out.printf(" %c %n%c%c%c%n%c%c%c", c[0], c[5], c[6], c[1], c[4], c[3], c[2]);
    }
}

J'aimerais vraiment pouvoir éviter cela pour la boucle, mais j'ai essayé quelques autres choses et elles étaient toutes plus longues. Il y a probablement une meilleure façon de le faire, mais c'est ma première tentative de code golf. (Et Java est comme le pire langage pour cela, c'est pourquoi j'ai pensé que ce serait intéressant.) Même Brainfuck m'a fait battre, mais au moins ma sortie est plus belle.

EDIT: peut se débarrasser de "public" en classe, me sauve 7 caractères!

Et merci, daniero, de m'avoir montré printf! (18 caractères enregistrés)

Réécriture du format de sortie, modification des littéraux de caractères en décimal, 12 caractères enregistrés.

décrypteur
la source
Bienvenue sur codegolf.se! Java a introduit une printfméthode de quelques versions en arrière, qui est essentiellement printlnet formaten une seule (comme la fonction C); Cela vous fera économiser quelques personnages,
daniero
Voici une autre astuce: vous pouvez combiner le "corps" de la forboucle et la partie mise à jour en un seul, en sauvegardant un caractère:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
daniero
1

VBA - 263

C'est moche mais ça marche, je pense. J'ai du mal à visualiser l'ordre des bits approprié, donc je déduis des réponses des autres. Même si cette pièce est incorrecte, la longueur du code doit rester la même.

Sub d(b)
Dim c(1 To 7)
For a=1 To 7
c(a)=Mid(b,a,1)
Next
x=" - "
y="|"
z=" "
w="   "
v=vbCr
MsgBox IIf(c(1)=1,x,w) & v & IIf(c(6)=1,y,z) & z & IIf(c(2)=1,y,z) & v & IIf(c(7)=1,x,w) & v & IIf(c(5)=1,y,z) & z & IIf(c(3)=1,y,z) & v & IIf(c(4)=1,x,w)End Sub
Gaffi
la source
1

VBScript - 178 caractères

m=Split("2 7 11 10 9 5 6")
s=" _ "&vbCr&"|_|"&vbCr&"|_|"
For x=1 To 7
If Mid(WScript.Arguments.Item(0),x,1)=0 Then r=m(x-1):s=Left(s,r-1)&" "&Right(s,Len(s)-r)
Next
MsgBox s
Comintern
la source
Merci! Les erreurs de couple bonehead m'ont coûté 6 caractères. Je peux presque obtenir cela à la taille du VBA même avec l'appel absurdement long pour obtenir l'argument de la ligne de fonction.
Comintern
À moins que votre code ne fonctionne sans les caractères de nouvelle ligne, vous devez également les compter. Cela compte 178 caractères selon mon décompte.
manatwork
1

CJam - 29

l0N]s7078571876784728737Ab\f=

CJam est un nouveau langage que je développe, similaire à GolfScript - http://sf.net/p/cjam . Voici l'explication:

llit une ligne à partir de l'entrée
0est le numéro 0
Nest une variable préinitialisée à la chaîne de nouvelle ligne
]rassemble les éléments de la pile en un tableau
sconvertit une valeur (le tableau) en chaîne, ajoutant ainsi un zéro et une nouvelle ligne à l'entrée donnée
7078571876784728737est un nombre (le même nombre que j'ai utilisé en python, mais il était en hexadécimal là-bas)
Aest une variable préinitialisée à 10
beffectue une conversion de base, générant le tableau [7 0 7 8 ... 3 7]
\échange les deux dernières valeurs de la pile
f=applique l' =opérateur (ici, l'accès au tableau indexé) sur la chaîne d'entrée (plus zéro et la nouvelle ligne) et chaque numéro 7, 0, 7, ...
L'index 7 correspond au zéro ajouté et 8 correspond à la nouvelle ligne ajoutée.

Ma solution python fait exactement la même chose (sauf que la séparation des chiffres se fait via la conversion de chaîne)

aditsu
la source
Qu'est-ce que je regarde ici? Voulez-vous offrir une brève explication du code?
daniero
@daniero J'ai ajouté une explication
aditsu
1

VBA, 188 caractères

Notez que celui-ci doit taper 188 caractères si seulement y compris les espaces obligatoires - l'EDI le développe lorsque vous le copiez dans l'éditeur VBA.

Sub f(i)
Dim c() As Byte
m=Split("1 6 10 9 8 4 5")
c=StrConv(" _  |_| |_|",128)
c(3)=10
c(7)=10
For x=1 To 7
If Mid(i,x,1) = 0 Then c(m(x-1))=32
Next
MsgBox StrConv(c,64)
End Sub

Malheureusement, VBScript n'a pas de tableau d'octets fortement typé, ou celui-ci pourrait être beaucoup plus court en utilisant cette méthode.

Comintern
la source
1

Javascript (ECMAScript 2016) - 108 octets

console.log(([a,b,c,d,e,f,g]=[...prompt()].map((x,i)=>+x?'_||'[i%3]:' '),` ${a}
${f}${g}${b}
${e}${d}${c}`))

Cela peut probablement être joué plus loin, mais je ne pense à rien.

M Dirr
la source
Bienvenue sur le site! C'est une belle première entrée :)
daniero
1

JavaScript, 148 octets

e=>(e[0]==1?" #\n":"\n")+(e[5]==1?"#":" ")+(e[1]==1?" #\n":"\n")+(e[6]==1?" #\n":"\n")+(e[4]==1?"#":" ")+(e[2]==1?" #\n":"\n")+(e[3]==1?" #\n":"\n")

Essayez-le en ligne! (Le pied de page est Node.js à lire.input.tio )

Accepte l'entrée d'ABCDEFG dans les drapeaux binaires et retourne:

 #
# #
 #
# #
 #
facepalm42
la source
0

SmileBASIC, 136 octets

DIM A[7,2]COPY A,@L@L?DATA.,1,1,3,4,3,6,1,4,0,1,0,3,1INPUT X$FOR I=0TO 6M=I MOD 3GBOX A[I,1],A[I,0],A[I,1]+!M,A[I,0]+!!M,-VAL(X$[I])NEXT

La sortie est graphique.

12Me21
la source
0

05AB1E , 4 octets

C₄+ç

Essayez-le en ligne ou vérifiez toutes les entrées possibles .

Voir le lien Vérifier toutes les entrées possibles ci-dessus pour voir le mappage utilisé pour chaque entrée.

Explication:

Cela abuse des règles où il stipule:

La façon dont vous représentez l'affichage dépend de vous - un seul symbole Unicode ou ASCII , de l'art ASCII, grafiquement, ou tout ce que vous pouvez trouver. Cependant, chaque entrée doit avoir sa propre sortie distincte.

C       # Convert the (implicit) input from binary to integer
 ₄+     # Increase it by 1000
   ç    # Convert it to a unicode character with this value (and output implicitly)

Alternative plus dans l'esprit du challenge en utilisant le format de sortie:

 -
| |
 -
| |
 -

38 octets :

Σ•L7וNè}εi" -| | "14∍2ôNèëðº]J24S5∍£»

Peut certainement être joué au golf ..

Essayez-le en ligne ou vérifiez toutes les entrées possibles .

Explication:

Σ       }          # Sort the (implicit) input-digits by:
 L7וNè           #  The digit at the same index in the compressed integer 1367524
                   #   i.e. "1101101" → ["1","0","1","1","1","0","1"]
ε                  # Then map each digit to:
 i                 #  If it's a 1:
  " -| | "         #   Push string " -| | "
          14      #   Lengthen it to size 14: " -| |  -| |  -"
             2ô    #   Split it into parts of 2: [" -","| ","| "," -","| ","| "," -"]
               Nè  #   Index into it
 ë                 #  Else (it's a 0):
  ðº               #   Push "  " (two spaces) instead
    ]              # Close both the if-else and map
                   #  i.e. ["1","0","1","1","1","0","1"]
                   #   → [" -","  ","| "," -","| ","  "," -"]
J                  # Join everything together to a single string
                   #  i.e. [" -","  ","| "," -","| ","  "," -"] → " -  |  -|    -"
 24S               # Push [2,4]
    5             # Lengthened to size 5: [2,4,2,4,2]
      £            # Split the string into parts of that size
                   #  i.e. " -  |  -|    -" → [" -","  | "," -","|   "," -"]
       »           # Join by newlines (and output implicitly)
                   #  i.e. [" -","  | "," -","|   "," -"] → " -\n  | \n -\n|   \n -"

Voir cette astuce de mes 05AB1E ( section Comment compresser les grands entiers? ) Pour comprendre pourquoi •L7וest 1367524.

Kevin Cruijssen
la source
0

PHP 5.6, 65 octets ASCII ordinaire

for(;$p++<9;)echo$argn[_707561432[$p]]?"||_"[$p%3]:" ","\n"[$p%3];

ou, sans saut de ligne de fin, mais avec un peu de plaisir au niveau du bit:

for(;$p++<11;)echo$argn[_70785618432[$p]]?L|Sx[$p&1]:a^kAAA[$p&3];

Exécuter en tant que tuyau avec -nRou essayez-les en ligne .

panne 1

for(;$p++<9;)echo           # loop through positions
    $argn[_707561432[$p]]   # map position to input bit
        ?"||_"[$p%3]            # if set: underscore in 2nd column, pipe symbol else
        :" "                    # else space
    ,"\n"[$p%3]             # add newline every 3 columns
;

ventilation 2

for(;$p++<11;)echo          # loop through positions
    $argn[_70785618432[$p]] # map position to input bit (bit 8 for EOL, never set)
        ?L|Sx[$p&1]             # if set: underscore in the middle, pipe symbol else
        :a^kAAA[$p&3]           # else: newline in 4th column, space else
Titus
la source
1
Que la langue soit nouvelle ou ancienne n'a plus d'importance depuis l'été 2017 . Vous n'aurez donc pas à mentionner la non-compétition.
Kevin Cruijssen
@KevinCruijssen Merci, j'ai raté ça. Mais c'est aussi un beau défi de faire revivre les anciennes versions de PHP; cela donne aussi parfois un point de vue différent sur les fonctionnalités plus récentes: j'ai trouvé, à l'occasion, que l '"ancienne" méthode est plus efficace (en taille, en performances, en lisibilité et parfois les trois) qu'en utilisant des choses qui ont été ajoutées à PHP plus tard Aucun avantage au golf dans ce cas, cependant: la première approche nécessiterait 8 octets supplémentaires, la seconde 5.
Titus