Emulieren Sie eine 7-Segment-Anzeige

24

Aufgabe

Die Aufgabe besteht darin, einen der 128 möglichen Zustände einer 7-Segment-Anzeige anzuzeigen .

Ihr Programm sollte eine Zeichenfolge von 7 Zeichen ("Bits") akzeptieren, die entweder 0oder sind 1. Das erste Eingabebit entspricht dem Segment A der folgenden Abbildung, das zweite dem Segment B usw. (ignorieren dp):

7seg

Wie Sie die Anzeige darstellen, bleibt Ihnen überlassen - ein einzelnes Unicode- oder ASCII-Symbol, ASCII- Grafiken, Grafiken oder was auch immer Sie sich ausdenken können. Jeder Eingang muss jedoch einen eigenen Ausgang haben. Wenn Sie sich etwas Besonderes einfallen lassen, können Sie mit einigen Beispielen sicher positive Stimmen einbringen.

Alle 128 möglichen Zustände der Anzeige sind:

Zustände

Regeln

  • Codegolf
  • Wie gesagt, jede Art von Ausgabe ist erlaubt, aber es wäre schön, wenn Sie es spezifizieren würden.
  • Die Eingabe kann stdin oder ein Befehlszeilenargument sein.

Beispiele

Eingang

1101101

Ausgabe

Als ASCII / Unicode:
2
Verschiedene Arten von ASCII-Kunst (das kann ich nicht so gut)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---
daniero
quelle
@ DavidCarraher: Sie sind verwandt, ja; Ich habe es sogar selbst verlinkt. Dies ist jedoch etwas schwieriger, da Sie 118 weitere 'Zahlen' generieren müssen. Die meisten (?) Antworten auf die andere Frage würden hier nicht funktionieren oder müssten stark umgeschrieben werden. Außerdem müssen Sie hier nicht die verschiedenen Zahlen codieren, sodass andere Optimierungen möglich sein sollten.
Daniero
Du hast Recht. Vielen Dank für den Hinweis.
DavidC
Ist es eine Anforderung, dass wir die von Ihnen bereitgestellte Kodierung verwenden? zB "1101101" sollte immer "2" darstellen?
Neu 21.12.12
@ardnew: ja. Die Position der eingegebenen Bits sollte der alphabetischen Reihenfolge der Segmente A bis G im ersten Bild entsprechen.
Daniero

Antworten:

5

J (51)

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

Ausgabe:

1101101
 ## 
   #
 ## 
#   
 ## 
Marinus
quelle
1
Dies kann mit einer wenig Mühe bis zu 38 Zeichen rasiert werden: 1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1.
Algorithmushai
16

C 106

Die Größe beträgt 74 Zeichen, wenn das Programm "W00WG5WW1GW66WG4WW2GW33WG" umbenannt werden darf.

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

Laufen:

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

Anmerkungen:

'W' und 'G' (0x47 und 0x57) werden so gewählt, dass der Wert & 7 = 7 ist, dh sie indizieren sicher das Nullzeichen, das die Eingabezeichenfolge abschließt.

Baby-Kaninchen
quelle
15

Brainfuck - 224

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

Ausdrucke mit Prüfpunkten:

 ! 
! !
 !
! !
 !

Nicht die am besten lesbare, aber auch nicht zu schrecklich.

Erstaunt, wie nahe dies daran ist, nicht der letzte Platz zu sein.

captncraig
quelle
13

Nachschrift 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

muss nals Zeichenfolge definiert werden, damit sie verarbeitet werden kann

gs -g7x14 -sn=1101101 lcd.ps

bekommen

Bild der Nummer zwei

das komplette Set ist

vollständiger Zeichensatz

Geoff Reedy
quelle
11

Mathematica: 135 129 118, Bildanzeige

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

Leerzeichen hinzugefügt "für Klarheit"

Bildbeschreibung hier eingeben

Bearbeiten

Für jene wählerischen Mitbenutzer: Ohne eine externe Maske zu verwenden:

Image[MorphologicalComponents[ColorNegate@Rasterize@8, CornerNeighbors -> False] /. 
    Thread[Range@7 ->IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &
Dr. belisarius
quelle
Der Code scheint unvollständig zu sein. Ich glaube nicht, dass Sie wollten, dass Ihr Programm endet &.
DavidC
@DavidCarraher Es ist eine Funktion , mit der es endet &.
Dr. Belisarius
Ja, aber es wird auf nichts angewendet. Wie erhält man eine Ausgabe?
DavidC
2
@belisarius Es gefällt mir immer noch nicht, dass Sie externe Ressourcen einbetten.
FUZxxl
1
Ich denke, dass es keinen Sinn macht, meinen vorherigen Kommentar zu entfernen, da dies es für andere sehr viel schwieriger machen würde, dieser Diskussion zu folgen. Sie importieren externe Daten, die witzig sind, aber nicht Teil einer seriösen Code-Golf-Antwort sind. -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]]

Beispiel Eingabe:

1101101

Ausgabe:

 _ 
 _|
|_ 

⍞='1' Nimmt die Eingabe als Zeichenarray und konvertiert sie in ein numerisches Array.

1 2 2 1 2 2 1×⍞='1'konvertiert dieses Array in: 0for blank, 1for _, 2for|

(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]Weisen Sie dieses Array der Variablen zu xund ordnen Sie es neu an, um die Segmente F, G, B, E, D, C darzustellen

0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] Verkettet ein Leerzeichen, Segment A und ein anderes Leerzeichen nach vorne

3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] Umformen in eine 3x3-Matrix

1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] Konvertiert in 1-basierte Indizierung

Verwendet schließlich die Zeichenfolge ' _|', um Angaben in Zeichen umzuwandeln


Bearbeiten

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

Sparen Sie 3 Zeichen aus, indem Sie ein verketten, 0um das Array voranzustellen, und indem Sie doppelte Angaben verwenden, um eine variable Zuweisung zu verhindern

TwiNight
quelle
Wenn Ihre APL dies unterstützt, ist die from- Funktion meines Erachtens {um 1 Zeichen kürzer als die Indizierung von Klammern [].
Luser Droog
9

PHP 66 Bytes

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

Eine leichte Verbesserung eine Verwendung md5Zauberformel, erfordert aber zusätzlichen binären 3 Bytes
¡, æund Úgibt Zeichen 161, 230 und 218 jeweils. Es sollte so funktionieren, wie es ist, wenn es direkt kopiert und als ANSI-Format gespeichert wird.


PHP 73 (70) Bytes

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

Wenn Sie mir drei Binärzeichen erlauben, kann dies auf 70 Byte reduziert werden :

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

Dabei ƒsind ß, und õdie Zeichen 131, 223 bzw. 245.

Erhält Eingaben als Befehlszeilenargument. Beispielnutzung:

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

$ php seven-seg.php 0111011

|_|
 _|
primo
quelle
Ich habe versucht, Ihren Code auszuführen, aber
erhalte
1
@ D34dman Die einzigen Meldungen, die erzeugt werden, sind Hinweise (undefinierte Variablen usw.). Diese können entweder in php.ini(standardmäßig sind sie bereits deaktiviert) oder zum Testen dem Skript den folgenden Code voranstellen:<? error_reporting(E_ALL & ~E_NOTICE); ?>
primo
genial! Ich habe es zum Laufen gebracht: D naice!
D34dman
7

JavaScript + jQuery + HTML + CSS ( 210 201)

Diese Lösung verwendet CSS-Sprites und das bereitgestellte Bild als Beispiel :

HTML (3)

<a>

CSS ( 82 71)

Danke an xem für den " background: url " Trick:

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

JavaScript (125 nach Entfernen der hier zur besseren Lesbarkeit hinzugefügten Zeilenumbrüche)

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');

Online-Test: http://jsfiddle.net/zhqJq/3/

Cristian Lupascu
quelle
1
Hey, aber was ist mit den 17.937 Bytes des Bildes? ;)
Thomas W.
@ThomasW. Ich weiß nicht, ob das mitgerechnet werden soll. Überlassen wir dies dem OP, um zu entscheiden.
Cristian Lupascu
Sie könnten <p>Tag verwenden und display:blockauf CSS vermeiden , um Platz zu sparen
Roberto Maldonado
Hintergrundbild: url ( bit.ly/VesRKL ); => background: url (// bit.ly/VesRKL);
Xem
@xem danke für den Tipp; Ich habe meine Antwort bearbeitet
Cristian Lupascu
6

R (65 Zeichen):

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

Verlässt sich auf einige lose Näherungen für einige transzendentale Näherungen ...

Patrick Caldon
quelle
6

Python 2 - 65

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

Beispiel:

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

PostScript: 53 binär, 87 ASCII 52 binär, 86 ASCII

Hexdump des Programms mit Binärtoken:

$ 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

Laden Sie diese Datei herunter , um sie auszuprobieren.

Verwenden von ASCII-Token:

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

Die erste forallSchleife legt alle erforderlichen Koordinaten auf den Stapel. Die Koordinaten werden in einer Zeichenfolge gespeichert, um den erforderlichen Platz zu minimieren. Die Koordinaten sind in umgekehrter Reihenfolge, dh die letzten 4 Zeichen sind für Segment A. Wir zeichnen eine Linie von (0,8)bis (4,8)für dieses Segment (tatsächlich müssen wir zu allen Koordinaten 48 addieren, da forallalle ASCII-Codes auf den Stapel gelegt werden).

Die Sekunde foralldurchläuft alle 0s und 1s in der Eingabezeichenfolge und wandelt sie in einen Grauwert um. 0s sind weiß gezeichnet (Grauwert 1) und 1s sind schwarz gezeichnet (Grauwert 0). Dann verwenden wir die Koordinaten, die die erste forallSchleife auf dem Stapel gelassen hat, um die Linien zu zeichnen.

Rufen Sie das Programm mit Ghostscript auf, genau wie Geoff Reedy's:

gs -sn=1101101 lcd.ps

Dies zeigt an: Beispielausgabe

Thomas W.
quelle
Ich denke, Sie können ersetzen neg 49 add(was übrigens super ist) mit 1 and.
Luser Droog
@luserdroog: Geniale, bitweise Operatoren haben nicht an sie gedacht. Aber es muss doch sein not 1 and, oder? Speichert weiterhin ein Byte sowohl in ASCII als auch in Binär.
Thomas W.
Ich habe das Gefühl, dass es mit einer 1-Bit-Bitmap eine gute Möglichkeit geben muss. aber bitshiftist so ein langes Wort.
Luser Droog
Aber es ist nur ein Zwei-Byte-Binärtoken
Thomas W.
Ja. Aber irgendwie fühlt es sich für mich immer noch wie ein Betrüger an. :) Ich glaube, ich muss so viel wie möglich mit lesbaren Quellen machen, bevor ich auf Binärdateien zurückgreifen kann.
Luser Droog
4

APL 101 86 73 69

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

Die Eingabe erfolgt vom Bildschirm über ⍞

1101101

Womit eine 9x5-Zeichenmatrix aus Leerzeichen und ⎕ wie folgt erstellt wird:

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

Die siebenstellige Zahl wird in einen Partitionsvektor umgewandelt, um die ⎕-Koordinaten auszuwählen.

Graham
quelle
Mein Kopf tut weh ...
Rob
4

Mathematica 112 103 100 96 88 unter Verwendung von Diagrammen

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

Bildbeschreibung hier eingeben

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)]

Mathematica-Grafiken

Dr. belisarius
quelle
Welche Art von Input erwarten Sie? Weder [123]noch ["123"], noch IntegerDigits[123]für mich arbeiten. Ich bekomme nur z, ohne Hervorhebung.
DavidC
@dude Try `HighlightGraph [z = GridGraph @ {3, 2}, Wähle [EdgeList [z] [[{3, 4, 1, 2, 6, 7, 5}]], Characters @ #," 1 "] ] & @ "1111111" `` :)
Dr. belisarius
3

Python (107)

Auf jeden Fall mehr Golf.

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))

Ausgabe:

1101101
 .. 
   .
   .
 .. 
.   
.   
 .. 

Erläuterung:

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
quelle
3

Python 2.7 (93 Zeichen):

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

Erläuterung:

Verwenden Sie bei der Eingabe stdin einen provisorischen ternären Operator, um *true und ein Leerzeichen für false anzugeben. Nehmen Sie diese Werte und fügen Sie sie in eine Formatanweisung ein, die das Format der 7-stelligen Anzeige hat. Es wären höchstens 83 Zeichen, wenn die Anzeige wie folgt funktionieren würde:

 a
b c
 d
e f
 g

aber die Bestellung macht es länger. Hat jemand einen Weg, dies zu umgehen?

Beispiel:

$ ./7seg.py
111000

 *
  *

  *

$ ./7seg.py


1111111

 *
* *
 *
* *
 *
Räuber
quelle
1
Schön, aber das Lambda scheint unnötig zu sein print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()]):;) Auch für die print-Anweisung werden keine Klammern und kein Platz benötigt.
Daniero
Wow! Ich wusste nicht, dass Sie Boolesche Werte in Indexer aufnehmen können. Danke :-)
Brigand
Np. Auch >'0'anstelle von =='1'und input()(mit Backticks herum, aber das wird wegen der Formatierung hier nicht angezeigt) statt raw_input().
Daniero
Zu Ihrer Information, Sie können dreifache Backticks verwenden, wenn Sie Backticks im Code benötigenx = `input()`
Brigand
Cool. Dann habe ich heute auch was gelernt :)
daniero
3

Ich dachte, wir brauchen eine lispy Antwort ...

Clojure, 159 Zeichen

(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])))" ")))))))

Das Obige wird in der REPL ausgeführt und liefert die richtige Antwort. Beispielsweise:

1111111
 o 
o o
 o 
o o
 o 

Wirf mit kleinen Modifikationen Zahlen drauf:

(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))

ergibt:

 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

Nicht leicht zu lesen, aber sie sind da!

Joanis
quelle
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)

Ich kann die Zeichenanzahl verringern (101), wenn wir nur ein Zeichen für den Status "Ein" verwenden, dies ist jedoch weniger lesbar:

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
quelle
+1 Das ist beeindruckend. Ich versuche immer noch, es zurückzuentwickeln. Es hat mir schon ein paar Dinge beigebracht!
Guypursey
2

Nachschrift 136

Kein Gewinner, aber ein anderer Ansatz.

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

Erwartet, dass sich die Eingabezeichenfolge auf dem Stapel befindet:

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

Das ist noch schlimmer. 294 , um eine "binäre" Bitmap zu erstellen. Ich habe eine Weile gebraucht, um mich daran zu erinnern, dass jede Zeile mit einem geraden Byte aufgefüllt ist. Eine 3x5-Bitmap besteht also aus fünf Bytes, wobei die 3 msb-Bits signifikant sind.

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

Die Ausgabe ist genauso hässlich wie die andere. :(

Okay, hier ist einer, der gut aussieht. 190

Edit: Es war verkehrt herum und rückwärts. Jetzt behoben.

(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
quelle
Dies zeigt mir einige lustige Muster. Gibt es noch irgendwo einen Bug?
Thomas W.
hmm. Ja. (1111110) sieht nicht wie eine Null aus. Es ist nur eine vergrößerte Bytemap. Ich denke, Boxen ist zu stark vereinfacht. :(
luser droog
Ich denke, das liegt in der Natur dieses Bitmap-Ansatzes. Ich bin nicht sicher, wie ich es nicht hässlich machen soll.
Luser Droog
Einige leichte Kommentare finden Sie hier .
Luser Droog
2

Mathematica 264

Damit die Ausgabe richtig aussieht, sind viele Bytes erforderlich, also diesmal keine Zigarre. Aber hier ist trotzdem der ausführliche Code (264 Zeichen).

{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]

Der komplette Zeichensatz:

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

characteris

Die Ziffern:

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

Bildbeschreibung hier eingeben

DavidC
quelle
2

PHP - 155 Zeichen

<?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]];

Es wäre 150 Zeichen, wenn wir PHP 5.4 Typ Array Deklaration verwenden, aber ich habe das nicht auf meinem Laptop installiert, also konnte ich es nicht testen.

Probe heraus setzt.

Bildbeschreibung hier eingeben

Erläuterung:

Zuerst habe ich die 7-Segment-Anzeige in fünf Zeilen und drei Spalten unterteilt. Mit der ersten, dritten und fünften Zeile in der mittleren Spalte mit einem '-' und ansonsten mit einem Leerzeichen.

Die 2. und 4. Reihe hat eine Pipe '|' Zeichen in der ersten und letzten Spalte. Jetzt sollte das Vorhandensein dieser Zeichen von den Eingabewerten geleitet werden.

Ich habe eine Nachschlagetabelle erstellt, bei der es sich im Grunde um zwei Nachschlagetabellen handelt. Erste zur Berechnung der Werte für die 1., 3. und 5. Reihe. Und noch eine bei Offset 2 (3. Position) zur Berechnung der 2. und 4. Zeile.

D34dman
quelle
2

Java - 204 Zeichen

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]);}}

Beispielausgabe:

 _ 
 _|
|_ 

Richtig formatiert:

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]);
    }
}

Ich wünschte wirklich, ich könnte das für die Schleife vermeiden, aber ich habe ein paar andere Dinge ausprobiert und sie waren alle länger. Es gibt wahrscheinlich einen besseren Weg, dies zu tun, aber dies ist mein erster Versuch, Code Golf zu spielen. (Und Java ist die schlechteste Sprache dafür, weshalb ich es interessant fand.) Selbst Brainfuck hat mich geschlagen, aber zumindest sieht meine Ausgabe besser aus.

BEARBEITEN: kann "öffentlich" auf Klasse loswerden, spart mir 7 Zeichen!

Und danke, daniero, dass du mir printf gezeigt hast! (18 Zeichen gespeichert)

Das Ausgabeformat wurde umgeschrieben, Zeichenliterale in Dezimalzahlen geändert und 12 Zeichen gespeichert.

Codeknacker
quelle
Willkommen bei codegolf.se! Java hat vor ein printfpaar Versionen eine Methode eingeführt , die im Grunde genommen printlnund formatin einer ist (wie die C-Funktion). Dies
erspart
Hier ist ein weiterer Trick: Sie können den "Körper" der forSchleife und den Update-Teil zu einem zusammenfassen und ein Zeichen speichern:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
daniero
1

VBA - 263

Es ist hässlich, aber es funktioniert, denke ich. Ich habe Probleme beim Anzeigen der richtigen Bitreihenfolge, daher kann ich auf die Antworten anderer zurückgreifen. Auch wenn dieses Teil falsch ist, sollte die Codelänge gleich bleiben.

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
quelle
1

VBScript - 178 Zeichen

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
Komintern
quelle
Vielen Dank! Paar Bonehead Fehler kosten mich 6 Zeichen. Ich kann dies sogar mit dem absurd langen Aufruf, um das Funktionszeilenargument zu erhalten, fast auf die Größe des VBAs bringen.
Comintern
Sofern Ihr Code ohne die Zeilenumbrüche nicht funktioniert, müssen Sie diese auch zählen. Dies hat 178 Zeichen nach meiner Zählung.
Manatwork
1

CJam - 29

l0N]s7078571876784728737Ab\f=

CJam ist eine neue Sprache, die ich entwickle, ähnlich wie GolfScript - http://sf.net/p/cjam . Hier ist die Erklärung:

lliest eine von der Eingangsleitung
0die Zahl 0
Neine Variable an das Neuen - Zeile - String vorinitialisiert ist
]Raffungen die Elemente auf dem Stapel in ein Array
swandelt einen Wert (das Array) zu bespannen, wodurch Anfügen eine Null und eine neue Zeile zu der gegebenen Eingabe
7078571876784728737ist ein number (die gleiche Zahl, die ich in Python verwendet habe, die aber
Ahexadezimal angegeben wurde ) ist eine Variable, die vorinitialisiert wurde, um eine Basisumwandlung durchzuführen. Dabei wird
bdas Array [7 0 7 8 ... 3 7] erstellt,
\das die letzten beiden Werte auf dem Stapel vertauscht
f=Wendet den =Operator (hier indizierter Array-Zugriff) auf die Eingabezeichenfolge (plus Null und Zeilenvorschub) und jede Zahl 7, 0, 7, ... an.
Der Index 7 entspricht der angehängten Null und 8 entspricht der angehängten Zeilenvorschub.

Meine Python-Lösung macht genau das Gleiche (außer, dass die Zifferntrennung über die String-Konvertierung erfolgt)

aditsu
quelle
Was schaue ich hier an? Möchtest du eine kurze Erklärung des Codes anbieten?
Daniero
@daniero Ich habe eine Erklärung hinzugefügt
aditsu
1

VBA, 188 Zeichen

Beachten Sie, dass die muss man sich geben 188 Zeichen , wenn nur obligatorisch Leerzeichen einschließlich - die IDE erweitert es aus , wenn Sie es in den VBA - Editor kopieren.

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

Leider hat VBScript kein stark typisiertes Byte-Array, oder dieses könnte mit dieser Methode viel kürzer sein.

Komintern
quelle
1

Javascript (ECMAScript 2016) - 108 Byte

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

Dies wahrscheinlich weiter golfed werden, aber ich kann nichts denken.

M Dirr
quelle
Willkommen auf der Seite! Das ist ein schöner erster Eintrag :)
Daniero
1

JavaScript, 148 Bytes

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")

Probieren Sie es online! (Footer ist Node.js zu lesen .input.tio)

Akzeptiert die Eingabe von ABCDEFG in binären Flags und gibt Folgendes zurück:

 #
# #
 #
# #
 #
facepalm42
quelle
0

SmileBASIC, 136 Bytes

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

Die Ausgabe erfolgt grafisch.

12Me21
quelle
0

05AB1E , 4 Bytes

C₄+ç

Probieren Sie es online aus oder überprüfen Sie alle möglichen Eingaben .

Zeigen Sie den Link zum Überprüfen aller möglichen Eingaben oben an, um die Zuordnung zu sehen, die für jede Eingabe verwendet wird.

Erläuterung:

Dies missbraucht die Regeln, wo es heißt:

Wie Sie die Anzeige darstellen, bleibt Ihnen überlassen - ein einzelnes Unicode- oder ASCII-Symbol , ASCII- Grafiken , Grafiken oder was auch immer Sie sich ausdenken können. Allerdings muss jeder Eingang seiner ganz eigenen Ausgang.

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 mehr im Geiste der Herausforderung mit dem Ausgabeformat:

 -
| |
 -
| |
 -

38 Bytes :

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

Kann auf jeden Fall Golf gespielt werden ..

Probieren Sie es online aus oder überprüfen Sie alle möglichen Eingaben .

Erläuterung:

Σ       }          # 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 -"

Sehen Sie sich meinen Tipp 05AB1E ( Abschnitt Wie komprimiere ich große ganze Zahlen? ) An, um zu verstehen, warum dies so •L7וist 1367524.

Kevin Cruijssen
quelle
0

PHP 5.6, 65 Bytes einfaches ASCII

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

oder, ohne abschließenden Zeilenumbruch, aber mit ein bisschen Spaß:

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

Laufen Sie als Pipe mit -nRoder probieren Sie sie online aus .

Aufschlüsselung 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
;

Aufschlüsselung 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
quelle
1
Ob die Sprache neu oder alt ist, spielt seit dem Sommer 2017 keine Rolle mehr . Sie brauchen also nicht zu erwähnen, dass Sie nicht an Wettbewerben teilnehmen.
Kevin Cruijssen
@ KevinCruijssen Danke, das habe ich verpasst. Es ist aber auch eine schöne Herausforderung, alte PHP-Versionen wiederzubeleben. Es gibt auch manchmal eine andere Sicht auf neuere Funktionen: Ich stellte gelegentlich fest, dass der "alte" Weg effizienter ist (in Bezug auf Größe, Leistung, Lesbarkeit und manchmal alle drei) als die Verwendung von Dingen, die später zu PHP hinzugefügt wurden In diesem Fall jedoch kein Golfvorteil: Der erste Ansatz würde 8 zusätzliche Bytes erfordern, der zweite 5.
Titus