จำลองการแสดงผล 7 ส่วน


24

งาน

งานคือการแสดงใด ๆ ของรัฐ 128 เป็นไปได้ของ การแสดงผล 7 ส่วน

โปรแกรมของคุณควรจะยอมรับสตริงของ 7 ตัวอักษร ( "บิต") ที่มีทั้งหรือ0 1บิตแรกของอินพุตสอดคล้องกับเซกเมนต์ A ของภาพประกอบต่อไปนี้, วินาทีถึง B, ฯลฯ (ละเว้นdp):

7seg

วิธีที่คุณใช้แสดงผลนั้นขึ้นอยู่กับคุณ - สัญลักษณ์ Unicode หรือ ASCII เดียว, ASCII art , grafically, หรืออะไรก็ตามที่คุณคิดได้ อย่างไรก็ตามแต่ละอินพุตจะต้องมีเอาต์พุตที่แตกต่างกัน หากคุณคิดอะไรแปลก ๆ ฉันแน่ใจว่าคุณสามารถเก็บเกี่ยวผู้โหวตได้ด้วยการแสดงตัวอย่าง

สถานะการแสดงผลที่เป็นไปได้ทั้งหมด 128 สถานะคือ:

รัฐ

กฎระเบียบ

  • Codegolf
  • อย่างที่ฉันพูดเอาท์พุทชนิดใดก็ได้ที่ได้รับอนุญาต แต่มันจะดีถ้าคุณระบุมัน
  • อินพุตสามารถเป็น stdin หรืออาร์กิวเมนต์บรรทัดคำสั่ง

ตัวอย่าง

อินพุต

1101101

เอาท์พุต

ในฐานะ ASCII / Unicode:
2
ASCII ชนิดต่าง ๆ (ฉันไม่ค่อยเก่งเท่านี้)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---

เกี่ยวข้องอย่างใกล้ชิดกับcodegolf.stackexchange.com/questions/997/… ?
DavidC

@DavidCarraher: พวกเขาเกี่ยวข้องใช่ ฉันยังเชื่อมโยงกับตัวเอง อย่างไรก็ตามนี่ยากกว่าเล็กน้อยที่ฉันจะบอกเพราะคุณมี 'หมายเลข' มากกว่า 118 อัน คำตอบส่วนใหญ่ (?) ของคำถามอื่น ๆ จะไม่ทำงานที่นี่หรือจะต้องเขียนใหม่อย่างหนัก นอกจากนี้ที่นี่คุณไม่จำเป็นต้องเข้ารหัสตัวเลขที่แตกต่างกันดังนั้นการเพิ่มประสิทธิภาพอื่น ๆ จึงเป็นไปได้
daniero

คุณถูก. ขอบคุณสำหรับการชี้ให้เห็นว่า
DavidC

เป็นข้อกำหนดที่เราใช้การเข้ารหัสที่คุณให้ไว้หรือไม่ เช่น "1101101" ควรเป็นตัวแทนของ "2" เสมอหรือไม่
เริ่ม

@ardnew: ใช่ ตำแหน่งของบิตในอินพุตควรแมปตามลำดับตัวอักษรของเซ็กเมนต์ A ถึง G ในภาพแรก
daniero

คำตอบ:


5

J (51)

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

เอาท์พุท:

1101101
 ## 
   #
 ## 
#   
 ## 

1
สามารถโกนลงไปได้ 38 ตัวด้วยความพยายามเล็กน้อย: 1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1.
algorithmshark

16

C, 106

ขนาดคือ 74 ตัวอักษรหากอนุญาตให้เปลี่ยนชื่อโปรแกรม "W00WG5WW1GW66WG4WW2GW33WG"

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

วิ่ง:

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

บันทึก:

เลือก 'W' และ 'G' (0x47 และ 0x57) เพื่อให้ค่า & 7 = 7 คือดัชนีดัชนีตัวละคร null ที่สิ้นสุดสตริงการป้อนข้อมูลอย่างปลอดภัย


15

Brainfuck - 224

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

พิมพ์โดยใช้ Exlamation points:

 ! 
! !
 !
! !
 !

ไม่ใช่ที่อ่านได้มากที่สุด แต่ก็ไม่น่ากลัวเกินไป

ประหลาดใจที่การปิดนี้ไม่ได้เป็นสถานที่สุดท้าย


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มีการกำหนดเป็นสตริงที่จะดำเนินการเพื่อเรียก

gs -g7x14 -sn=1101101 lcd.ps

เพื่อรับ

ภาพหมายเลขสอง

ชุดที่สมบูรณ์คือ

ชุดอักขระทั้งหมด


11

Mathematica: 135 129 118, การแสดงภาพ

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

เพิ่มช่องว่าง "เพื่อความชัดเจน"

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข

สำหรับผู้ใช้ไซต์เพื่อนที่มีเล่ห์เหลี่ยม: ไม่ต้องใช้มาสก์ภายนอก:

Image[MorphologicalComponents[ColorNegate@Rasterize@8, CornerNeighbors -> False] /. 
    Thread[Range@7 ->IntegerDigits[#, 2, 7][[{7, 2, 6, 1, 3, 5, 4}]]]] &

รหัสดูเหมือนจะไม่สมบูรณ์ &ผมไม่คิดว่าคุณต้องการโปรแกรมของคุณที่จะยุติด้วย
DavidC

@DavidCarraher มันเป็นฟังก์ชั่น&จึงจบลงด้วย
ดร. เบลิซาเรีย

ใช่ แต่มันไม่ได้ใช้กับอะไร วิธีหนึ่งรับเอาท์พุท
DavidC

2
@belisarius ฉันยังคงไม่ชอบความจริงที่ว่าคุณฝังแหล่งข้อมูลภายนอก
FUZxxl

1
ฉันคิดว่ามันไม่สมเหตุสมผลเลยที่จะลบความคิดเห็นก่อนหน้าของฉันเพราะมันจะทำให้คนอื่นยากที่จะติดตามการสนทนานี้ คุณนำเข้าข้อมูลภายนอกซึ่งเป็นเรื่องตลก แต่ไม่ได้เป็นส่วนหนึ่งของคำตอบกอล์ฟอย่างจริงจัง -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]]

อินพุตตัวอย่าง:

1101101

เอาท์พุท:

 _ 
 _|
|_ 

⍞='1' ใช้อินพุตเป็นอาร์เรย์อักขระและแปลงเป็นอาร์เรย์ตัวเลข

1 2 2 1 2 2 1×⍞='1'แปลงอาเรย์นั้นเป็น: 0for blank, 1for _, 2for|

(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3]กำหนดอาร์เรย์นั้นให้กับตัวแปรxและจัดลำดับใหม่เพื่อแสดงเซ็กเมนต์ 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] ตัดแบ่งช่องว่างส่วน A และช่องว่างอื่นที่อยู่ด้านหน้า

3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] เปลี่ยนรูปร่างเป็นเมทริกซ์ 3x3

1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] แปลงเป็นการจัดทำดัชนีแบบ 1

ในที่สุดก็ใช้สตริง' _|'เพื่อแปลงบ่งบอกถึงตัวละคร


แก้ไข

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

ลบออก 3 ตัวอักษรโดยเชื่อมต่อ a 0ไปยังอาร์เรย์และใช้ตัวบ่งชี้ที่ซ้ำกันเพื่อป้องกันการกำหนดตัวแปร


iff สนับสนุน APL ของคุณผมคิดว่าจากฟังก์ชั่น{เป็น 1 []ถ่านสั้นกว่าการจัดทำดัชนีวงเล็บ
luser droog

9

PHP 66 ไบต์

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

การปรับปรุงเล็กน้อยโดยใช้md5สูตรวิเศษ แต่ต้องเพิ่มอีก 3 ไบต์ไบนารี:
¡, æและÚตัวอักษรที่ 161, 230 และ 218 ตามลำดับ มันควรจะทำงานเหมือนที่ถูกคัดลอกโดยตรงและบันทึกเป็นรูปแบบ ANSI


PHP 73 (70) ไบต์

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

หากคุณอนุญาตให้ฉันมีสามตัวอักษรไบนารีนี้สามารถลดลงถึง70 ไบต์ :

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

โดยที่ƒ, ßและõเป็นตัวอักษร 131, 223 และ 245 ตามลำดับ

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ตัวอย่างการใช้งาน:

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

$ php seven-seg.php 0111011

|_|
 _|

ฉันพยายามที่จะเรียกใช้รหัสของคุณ แต่ฉันได้รับการโหลดของข้อผิดพลาด :( ฉันไม่เข้าใจตรรกะของคุณ แต่ดูเหมือนว่าที่น่าสนใจ.
D34dman

1
@ D34dman ข้อความเดียวที่จะสร้างคือประกาศ (ตัวแปรที่ไม่ได้กำหนด ฯลฯ ) เหล่านี้ก็จะสามารถปิดในphp.ini(โดยเริ่มต้นที่พวกเขาอยู่แล้ว) หรือสำหรับการทดสอบคุณสามารถย่อหน้ารหัสต่อไปนี้สคริปต์:<? error_reporting(E_ALL & ~E_NOTICE); ?>
พรีโม่

! น่ากลัว ฉันเข้าใจแล้ว: D naice!
D34dman

7

JavaScript + jQuery + HTML + CSS ( 210 201)

วิธีการแก้ปัญหานี้จะใช้สไปรท์ CSS และภาพที่ให้ไว้เป็นตัวอย่าง :

HTML (3)

<a>

CSS ( 82 71)

ขอบคุณxemสำหรับ " background: url " trick:

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

JavaScript (125 หลังจากลบบรรทัดใหม่ที่เพิ่มที่นี่เพื่อให้สามารถอ่านได้)

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

การทดสอบออนไลน์: http://jsfiddle.net/zhqJq/3/


1
เฮ้ แต่สิ่งที่เกี่ยวกับ 17.937 ไบต์ของภาพหรือไม่ ;)
โทมัสดับเบิลยู.

@ThomasW ฉันไม่รู้ว่าควรนับด้วยหรือไม่ มาฝากเรื่องนี้กับโอพีเพื่อตัดสินใจกัน
Cristian Lupascu

คุณสามารถใช้<p>แท็กและหลีกเลี่ยงการdisplay:blockใช้ CSS เพื่อประหยัดพื้นที่
Roberto Maldonado

ภาพพื้นหลัง: url ( bit.ly/VesRKL ); => background: url (// bit.ly/VesRKL);
xem

@xem ขอบคุณสำหรับเคล็ดลับ; ฉันแก้ไขคำตอบของฉันแล้ว
Cristian Lupascu

6

R (65 ตัวอักษร):

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

อาศัยการประมาณบางอย่างที่หลวมสำหรับจำนวนเหนือธรรมชาติบางส่วน ...


6

Python 2 - 65

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

ตัวอย่าง:

echo 1101101|python2 7seg.py
0 1 0 
0 0 1 
0 1 0 
1 0 0 
0 1 0

5

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

Hexdump ของโปรแกรมโดยใช้โทเค็นไบนารี:

$ 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

ดาวน์โหลดไฟล์นี้เพื่อทดลองใช้

ใช้โทเค็น ASCII:

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

การforallวนซ้ำครั้งแรกจะวางพิกัดที่จำเป็นทั้งหมดลงบนสแต็ก พิกัดจะถูกเก็บไว้ในสตริงเพื่อลดพื้นที่ที่ต้องการ พิกัดอยู่ในลำดับย้อนกลับนั่นคือ 4 ตัวอักษรสุดท้ายสำหรับกลุ่ม A เราวาดเส้นจาก(0,8)ถึง(4,8)สำหรับส่วนนี้ (ที่จริงแล้วเราต้องเพิ่ม 48 ลงในพิกัดทั้งหมดเนื่องจากforallใส่รหัส ASCII ทั้งหมดลงในสแต็ก)

ครั้งที่สองจะforallวนรอบค่า0s และ1s ทั้งหมดในสตริงอินพุตและเปลี่ยนเป็นค่าสีเทา 0s ถูกวาดขาว (ค่าสีเทา 1) และ1s ถูกวาดสีดำ (ค่าสีเทา 0) จากนั้นเราจะใช้พิกัดที่forallวงแรกทิ้งไว้บนสแต็กเพื่อวาดเส้น

เรียกใช้โปรแกรมโดยใช้ Ghostscript เหมือนกับ Geoff Reedy's:

gs -sn=1101101 lcd.ps

สิ่งนี้แสดง: ตัวอย่างผลลัพธ์


ฉันคิดว่าคุณสามารถแทนที่neg 49 add(ซึ่งเป็นที่น่ากลัวครับ) 1 andด้วย
luser droog

@luserdroog: ตัวดำเนินการที่ยอดเยี่ยมระดับบิตไม่ได้คิดถึงพวกเขา แต่มันจะต้องnot 1 andใช่มั้ย ยังคงบันทึกหนึ่งไบต์ในทั้ง ASCII และไบนารี
โทมัสดับบลิว

ฉันรู้สึกว่าต้องเป็นวิธีที่เรียบร้อยด้วยบิตแมป 1 บิต แต่bitshiftเป็นคำที่ยาวมาก
luser droog

แต่มันเป็นเพียงโทเค็นไบนารีไบท์สองไบต์
โทมัสดับเบิลยู

ใช่. แต่มันก็ยังรู้สึกเหมือนโกงฉันอยู่ดี :) ฉันรู้สึกว่าฉันต้องทำมากที่สุดเท่าที่จะทำได้ด้วยแหล่งข้อมูลที่อ่านได้ก่อนที่จะหันไปใช้เลขฐานสอง
luser droog

4

APL 101 86 73 69

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

อินพุตมาจากหน้าจอผ่าน⍞

1101101

ซึ่งสร้างเมทริกซ์อักขระขนาด 9x5 ประกอบด้วยช่องว่างและ⎕ดังนี้:

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

หมายเลขเจ็ดหลักจะถูกแปลงเป็นเวกเตอร์ของพาร์ติชันเพื่อเลือกพิกัด


หัวของฉันเจ็บ ...
ร็อบ

4

Mathematica 112 103 100 96 88 โดยใช้กราฟ

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

ป้อนคำอธิบายรูปภาพที่นี่

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

กราฟิกทางคณิตศาสตร์


คุณคาดหวังการป้อนข้อมูลแบบใด? ทั้ง[123][[123]] และไม่IntegerDigits[123]ทำงานสำหรับฉัน ฉันได้รับเท่านั้นzโดยไม่มีการเน้น
DavidC

@dude ลอง `HighlightGraph [z = GridGraph @ {3, 2}, เลือก [EdgeList [z] [[{3, 4, 1, 2, 6, 7, 5}]], อักขระ @ #," 1 "] ] & @ "1111111" `` :)
ดร. เบลิซาเรียส

3

Python (107)

สามารถตีกอล์ฟได้มากกว่านี้อย่างแน่นอน

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

เอาท์พุท:

1101101
 .. 
   .
   .
 .. 
.   
.   
 .. 

คำอธิบาย:

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.

3

Python 2.7 (93 ตัวอักษร):

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

คำอธิบาย:

ด้วยอินพุต stdin ให้ใช้โอเปอเรเตอร์ makeshift ชั่วคราวเพื่อให้*เป็นจริงและมีช่องว่างสำหรับเท็จ นำค่าเหล่านั้นและใส่ลงในคำสั่งรูปแบบที่อยู่ในรูปแบบของจอแสดงผล 7 หลัก มีความยาวไม่เกิน 83 อักขระหากจอแสดงผลทำงานเช่นนี้

 a
b c
 d
e f
 g

แต่การสั่งซื้อทำให้อีกต่อไป ใครมีวิธีแก้ไขปัญหานี้บ้าง

ตัวอย่าง:

$ ./7seg.py
111000

 *
  *

  *

$ ./7seg.py


1111111

 *
* *
 *
* *
 *

1
ดี แต่แลมบ์ดานั้นดูเหมือนว่าไม่จำเป็น: print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()]);) ไม่จำเป็นต้องใช้วงเล็บและพื้นที่สำหรับคำสั่งพิมพ์
daniero

ว้าว! ฉันไม่รู้ว่าคุณสามารถใส่บูลีนไว้ในดัชนีได้ ขอบคุณ :-)
Brigand

Np นอกจากนี้>'0'แทน=='1'และinput()(กับ backticks รอบ แต่ที่จะไม่แสดงขึ้นเนื่องจากการจัดรูปแบบที่นี่) raw_input()แทน
daniero

ถ้าคุณต้องการ backticks ในรหัสx = `input()`
Brigand

เย็น. จากนั้นฉันก็เรียนรู้บางสิ่งบางอย่างในวันนี้เช่นกัน :)
daniero

3

ฉันคิดว่าเราต้องการคำตอบที่ไม่สุภาพ ...

Clojure, 159 ตัวอักษร

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

ข้างต้นจะทำงานใน REPL และให้คำตอบที่ถูกต้อง ตัวอย่างเช่น:

1111111
 o 
o o
 o 
o o
 o 

การขว้างหมายเลขนั้นด้วยการดัดแปลงเล็กน้อย:

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

อัตราผลตอบแทน:

 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

อ่านไม่ง่าย แต่อยู่ที่นั่น!


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)

ฉันสามารถทำให้จำนวนตัวละครต่ำลง (101) ถ้าเราใช้ตัวละครเพียงตัวเดียวสำหรับสถานะ "on" แต่มันอ่านง่ายกว่า:

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)

+1 สิ่งนี้น่าประทับใจ ฉันยังคงพยายามที่จะทำวิศวกรรมย้อนกลับ มันสอนบางสิ่งไปแล้ว!
guypursey

2

Postscript 136

ไม่ใช่ผู้ชนะ แต่เป็นวิธีการอื่น

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

คาดว่าสตริงอินพุตจะอยู่ในสแต็ก:

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

คนนี้ยิ่งแย่ลง 294เพื่อสร้างบิตแมป "ไบนารี" ฉันใช้เวลาสักครู่เพื่อให้จำว่าแต่ละแถวมีเบาะถึงไบต์คู่ บิตแมปขนาด 3x5 จึงมีห้าไบต์และมีความสำคัญ 3 msb

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

เอาท์พุทก็น่าเกลียดเหมือนอีกอันหนึ่ง :(

เอาล่ะนี่มันดูดีนะ 190

แก้ไข: มันกลับหัวและถอยหลัง แก้ไขแล้ว

(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

นี่แสดงให้ฉันเห็นลวดลายตลก ๆ ยังมีข้อบกพร่องอยู่ที่ไหนสักแห่ง?
โทมัสดับบลิว

อืมม ใช่. (1111110) ดูไม่เหมือนศูนย์ มันเป็นเพียง bytemap ที่ขยายใหญ่ขึ้น ฉันเดาว่ากล่องมีขนาดใหญ่เกินไป :(
luser droog

ฉันคิดว่ามันเป็นลักษณะของวิธีบิตแมปนี้ ฉันไม่แน่ใจว่าจะทำให้มันไม่น่าเกลียด
luser droog

บางความเห็นแสงที่นี่
luser droog

2

Mathematica 264

การทำให้เอาท์พุตให้ถูกต้องนั้นต้องใช้หลายไบต์ดังนั้นจึงไม่มีซิการ์ แต่นี่คือรหัส verbose (264 ตัวอักษร) ต่อไป

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

ชุดอักขระที่สมบูรณ์:

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

ลักษณะทาง

ตัวเลข:

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

ป้อนคำอธิบายรูปภาพที่นี่


2

PHP - 155 ตัวอักษร

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

มันจะเป็น 150 ตัวอักษรถ้าเราใช้การประกาศอาร์เรย์ประเภท php 5.4 แต่ฉันไม่ได้ติดตั้งไว้ในแล็ปท็อปของฉันดังนั้นจึงไม่สามารถทดสอบได้

ตัวอย่างที่ออกมา

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบาย:

ก่อนอื่นฉันแบ่งการแสดงเซ็กเมนต์ 7 ส่วนออกเป็นห้าแถวและ 3 คอลัมน์ ด้วย havimg แถวที่ 1, 3 และ 5 '-' ในคอลัมน์กลางและเว้นวรรคเป็นอย่างอื่น

แถวที่ 2 และ 4 มีท่อ '|' อักขระในคอลัมน์แรกและคอลัมน์สุดท้าย ตอนนี้การปรากฏตัวของตัวละครเหล่านี้ควรได้รับคำแนะนำจากค่าอินพุต

ฉันสร้างตารางการค้นหาซึ่งโดยทั่วไปเป็นตารางการค้นหาสองตาราง อันแรกสำหรับการคำนวณค่าสำหรับแถวที่ 1, 3 และ 5 และอีกอันที่ออฟเซ็ต 2 (รายการที่ 3) สำหรับการคำนวณแถวที่ 2 และ 4


2

Java - 204 ตัวอักษร

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

ตัวอย่างผลลัพธ์:

 _ 
 _|
|_ 

รูปแบบที่ถูกต้อง:

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

หวังว่าฉันจะหลีกเลี่ยงปัญหานี้ได้ แต่ฉันลองทำอย่างอื่นสองสามอย่าง อาจเป็นวิธีที่ดีกว่าในการทำเช่นนี้ แต่นี่เป็นความพยายามครั้งแรกของฉันที่การตีกอล์ฟ (และ Java เป็นภาษาที่เลวร้ายที่สุดซึ่งเป็นเหตุผลว่าทำไมฉันคิดว่ามันน่าสนใจ) แม้แต่ Brainfuck ก็ยังเอาชนะฉันได้ แต่อย่างน้อยผลลัพธ์ของฉันก็ดูดีกว่า

แก้ไข: สามารถกำจัด "สาธารณะ" ในชั้นเรียนช่วยฉัน 7 ตัวอักษร!

และขอขอบคุณ daniero ที่แสดง printf ให้ฉัน! (บันทึกไว้ 18 ตัวอักษร)

เขียนรูปแบบผลลัพธ์เปลี่ยนตัวอักษรตัวอักษรให้เป็นทศนิยมบันทึกไว้ 12 ตัว


ยินดีต้อนรับสู่ codegolf.se! Java เปิดตัวprintfวิธีการไม่กี่รุ่นกลับซึ่งเป็นพื้นprintlnและformatในหนึ่ง (เช่นฟังก์ชั่น C); สิ่งนี้จะช่วยให้คุณประหยัดอักขระบางตัว
daniero

นี่คือเคล็ดลับอื่น: คุณสามารถรวม "เนื้อหา" ของforลูปและส่วนการอัปเดตเป็นหนึ่งเดียวประหยัดอักขระหนึ่งตัว:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
daniero

1

VBA - 263

มันน่าเกลียด แต่ก็ใช้งานได้ฉันคิดว่า ฉันมีปัญหาในการดูลำดับบิตที่เหมาะสมดังนั้นฉันจึงอนุมานจากคำตอบของผู้อื่น แม้ว่าส่วนนั้นจะไม่ถูกต้องความยาวของรหัสควรยังคงเหมือนเดิม

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

1

VBScript - 178 ตัวอักษร

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

ขอบคุณ! ความผิดพลาดของคนขี้เมาคู่ทำให้ฉันมีตัวละคร 6 ตัว ฉันเกือบจะสามารถลดขนาด VBA นี้ได้แม้จะมีการเรียกที่ยาวอย่างไร้เหตุผลเพื่อรับอาร์กิวเมนต์บรรทัดฟังก์ชัน
Comintern

ยกเว้นว่ารหัสของคุณทำงานได้โดยไม่มีอักขระขึ้นบรรทัดใหม่คุณต้องนับด้วย มีทั้งหมด 178 ตัวอักษรตามที่ฉันคาดไว้
จัดการ

1

CJam - 29

l0N]s7078571876784728737Ab\f=

CJam เป็นภาษาใหม่ฉันกำลังพัฒนาคล้ายกับ GolfScript - http://sf.net/p/cjam นี่คือคำอธิบาย:

lอ่านบรรทัดจากอินพุต
0คือหมายเลข 0
Nคือตัวแปรกำหนดค่าเริ่มต้นให้กับสตริง newline
]รวบรวมองค์ประกอบบนสแต็กเป็นอาร์เรย์
sจะแปลงค่า (อาร์เรย์) เป็นสตริงจึงผนวกศูนย์และขึ้นบรรทัดใหม่ให้กับอินพุตที่กำหนด
7078571876784728737คือ number (หมายเลขเดียวกับที่ฉันใช้ใน python แต่มันเป็นเลขฐานสิบหก)
Aเป็นตัวแปรที่กำหนดค่าล่วงหน้าเป็น 10
bจะทำการแปลงฐานสร้างอาร์เรย์ [7 0 7 8 ... 3 7]
\สลับสองค่าสุดท้ายบนสแต็ก
f=ใช้=โอเปอเรเตอร์ (ที่นี่การเข้าถึงอาร์เรย์ที่ทำดัชนี) บนสตริงอินพุต (บวกศูนย์และขึ้นบรรทัดใหม่) และแต่ละหมายเลข 7, 0, 7, ...
ดัชนี 7 สอดคล้องกับศูนย์ที่ต่อท้ายและ 8 สอดคล้องกับบรรทัดใหม่ที่ต่อท้าย

โซลูชันงูหลามของฉันทำสิ่งเดียวกัน (ยกเว้นการแยกหลักทำได้ผ่านการแปลงสตริง)


ฉันกำลังดูอะไรที่นี่ สนใจที่จะให้คำอธิบายสั้น ๆ ของรหัสหรือไม่
daniero

@daniero ฉันได้เพิ่มคำอธิบาย
aditsu

1

VBA, 188 ตัวอักษร

โปรดทราบว่าต้องมีการพิมพ์อักขระ 188 ตัวหากรวมถึงช่องว่างบังคับเท่านั้น - IDE จะขยายออกเมื่อคุณคัดลอกลงในตัวแก้ไข 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

น่าเศร้าที่ VBScript ไม่มีอาร์เรย์ไบต์ที่พิมพ์ออกมาอย่างรุนแรงหรืออาจจะสั้นกว่านี้มากเมื่อใช้วิธีนี้


1

Javascript (ECMAScript 2016) - 108 ไบต์

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

นี่อาจจะสามารถเล่นกอล์ฟต่อไปได้ แต่ฉันไม่สามารถคิดอะไรได้เลย


ยินดีต้อนรับสู่เว็บไซต์! นั่นเป็นรายการแรกที่ดี :)
daniero

1

JavaScript, 148 ไบต์

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

ลองออนไลน์! (ส่วนท้ายคือ Node.js ที่จะอ่าน.input.tio)

ยอมรับอินพุตของ ABCDEFG ในแฟล็กไบนารีและส่งคืน:

 #
# #
 #
# #
 #

0

SmileBASIC ขนาด 136 ไบต์

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

เอาท์พุทเป็นกราฟิก


0

05AB1E , 4 ไบต์

C₄+ç

ลองออนไลน์หรือตรวจสอบอินพุตที่เป็นไปได้ทั้งหมดตรวจสอบปัจจัยการผลิตที่เป็นไปได้ทั้งหมด

ดูลิงก์ตรวจสอบอินพุตที่เป็นไปได้ทั้งหมดด้านบนเพื่อดูการแมปที่ใช้สำหรับแต่ละอินพุต

คำอธิบาย:

สิ่งนี้ละเมิดกฎที่ระบุ:

วิธีที่คุณใช้แสดงผลนั้นขึ้นอยู่กับคุณ - สัญลักษณ์ Unicode หรือ ASCII เดียว , ASCII art, grafically, หรืออะไรก็ตามที่คุณคิดได้ อย่างไรก็ตามแต่ละอินพุตจะต้องมีเอาต์พุตที่แตกต่างกัน

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)

ทางเลือกมากขึ้นในจิตวิญญาณของความท้าทายโดยใช้รูปแบบผลลัพธ์:

 -
| |
 -
| |
 -

38 ไบต์ :

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

สามารถเล่นกอล์ฟได้แน่นอน ..

ลองมันออนไลน์หรือตรวจสอบปัจจัยการผลิตที่เป็นไปได้ทั้งหมด

คำอธิบาย:

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

ดู 05AB1E นี้เคล็ดลับของฉัน ( ส่วนวิธีการบีบอัดจำนวนเต็มขนาดใหญ่? )จะเข้าใจว่าทำไมเป็น•L7ו1367524


0

PHP 5.6, 65 ไบต์ธรรมดา ASCII

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

หรือโดยไม่ต้องลากตามลำดับ แต่ด้วยความสนุกสนานระดับบิต:

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

เรียกใช้เป็นไพพ์ด้วย-nRหรือลองออนไลน์ลองพวกเขาออนไลน์

รายละเอียด 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
;

รายละเอียด 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

1
ไม่ว่าจะเป็นภาษาใหม่หรือเก่าไม่สำคัญอีกต่อไปนับตั้งแต่ฤดูร้อนปี 2017 ดังนั้นคุณจะไม่ต้องพูดถึงการไม่แข่งขัน
Kevin Cruijssen

@KevinCruijssen ขอบคุณฉันพลาดไป แต่มันก็เป็นความท้าทายที่ดีที่จะรื้อฟื้น PHP เวอร์ชันเก่า บางครั้งมันก็ให้มุมมองที่แตกต่างกันเกี่ยวกับคุณสมบัติล่าสุด: ฉันพบว่าบางครั้งวิธี "เก่า" นั้นมีประสิทธิภาพมากกว่า (ขนาดประสิทธิภาพประสิทธิภาพในการอ่านและบางครั้งทั้งสาม) มากกว่าการใช้เนื้อหาที่เพิ่มลงใน PHP ในภายหลัง แม้ว่าจะไม่ได้ประโยชน์จากการเล่นกอล์ฟในกรณีนี้: วิธีแรกจะต้องใช้ 8 ไบต์พิเศษส่วนที่สอง 5.
Titus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.