Mô phỏng màn hình 7 đoạn


24

Bài tập

Nhiệm vụ là hiển thị bất kỳ trạng thái nào trong số 128 trạng thái có thể có của màn hình 7 đoạn .

Chương trình của bạn nên chấp nhận một chuỗi gồm 7 ký tự ("bit") là 0hoặc 1. Bit đầu tiên của đầu vào tương ứng với đoạn A của hình minh họa sau, đoạn thứ hai đến B, v.v (bỏ qua dp):

7 giây

Cách bạn thể hiện màn hình tùy thuộc vào bạn - một biểu tượng Unicode hoặc ASCII duy nhất, nghệ thuật ASCII , về mặt vật chất hoặc bất cứ điều gì bạn có thể nghĩ ra. Tuy nhiên, mỗi đầu vào phải có đầu ra riêng biệt. Nếu bạn nghĩ ra thứ gì đó lạ mắt, tôi chắc chắn bạn có thể thu hoạch được bằng cách thể hiện một số ví dụ.

Tất cả 128 trạng thái có thể có của màn hình là:

tiểu bang

Quy tắc

  • Cá tuyết
  • Như tôi đã nói, bất kỳ loại đầu ra nào đều được cho phép, nhưng sẽ rất tuyệt nếu bạn chỉ định nó.
  • Đầu vào có thể là stdin hoặc đối số dòng lệnh.

Ví dụ

Đầu vào

1101101

Đầu ra

Như ASCII / Unicode:
2
Các loại nghệ thuật ASCII khác nhau (Tôi không giỏi về điều này)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---


@DavidCarraher: Chúng có liên quan, vâng; Tôi thậm chí liên kết với nó bản thân mình. Tuy nhiên, điều này hơi khó hơn tôi sẽ nói, vì bạn có thêm 118 'số' để tạo. Hầu hết (?) Các câu trả lời cho câu hỏi khác sẽ không hoạt động ở đây, hoặc sẽ phải viết lại rất nhiều. Ngoài ra, ở đây bạn không cần phải mã hóa các số khác nhau, vì vậy các tối ưu hóa khác có thể được thực hiện.
daniero

Bạn nói đúng. Cảm ơn đã chỉ ra rằng.
DavidC

đó là một yêu cầu mà chúng tôi sử dụng mã hóa bạn cung cấp? ví dụ "1101101" phải luôn đại diện cho "2"?
ardew

@ardnew: vâng. Vị trí của các bit trong đầu vào phải ánh xạ theo thứ tự chữ cái của các đoạn từ A đến G trong hình đầu tiên.
daniero

Câu trả lời:


5

J (51)

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

đầu ra:

1101101
 ## 
   #
 ## 
#   
 ## 

1
Điều này có thể được giảm xuống 38 char với một chút nỗ lực : 1 2 1#"1' #'{~5 3$,0,.502 A.".&>1!:1]1.
thuật toán

16

C, 106

Kích thước là 74 ký tự nếu được phép đổi tên chương trình "W00WG5WW1GW66WG4WW2GW33WG"

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

đang chạy:

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

ghi chú:

'W' và 'G' (0x47 và 0x57) được chọn sao cho giá trị & 7 = 7, tức là chúng lập chỉ mục một cách an toàn ký tự null kết thúc chuỗi đầu vào.


15

Brainfuck - 224

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

In bằng các điểm Exlamation:

 ! 
! !
 !
! !
 !

Không phải là dễ đọc nhất, nhưng cũng không quá kinh khủng.

Ngạc nhiên vì gần như thế này là không phải là nơi cuối cùng.


13

Bản tin 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

yêu cầu nđược định nghĩa là chuỗi để xử lý để gọi như

gs -g7x14 -sn=1101101 lcd.ps

để có được

hình ảnh của số hai

bộ hoàn chỉnh là

bộ ký tự hoàn chỉnh


11

Toán học: 135 129 118, hiển thị hình ảnh

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

khoảng trắng được thêm vào "cho rõ ràng"

nhập mô tả hình ảnh ở đây

Chỉnh sửa

Đối với những người dùng trang web kén chọn này: Không sử dụng mặt nạ bên ngoài:

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

Mã dường như không đầy đủ. Tôi không nghĩ rằng bạn muốn chương trình của bạn chấm dứt &.
DavidC

@DavidCarraher Đó là một chức năng , vì vậy nó kết thúc bằng &.
Tiến sĩ belisarius

Có, nhưng nó không được áp dụng cho bất cứ điều gì. Làm thế nào để có được đầu ra?
DavidC

2
@ Belisarius Tôi vẫn không thích việc bạn nhúng các nguồn tài nguyên bên ngoài.
FUZxxl

1
Tôi nghĩ rằng sẽ không có ý nghĩa gì khi xóa bình luận trước đây của tôi vì điều đó sẽ khiến người khác khó theo dõi cuộc thảo luận này hơn nhiều. Bạn nhập dữ liệu bên ngoài như một trò đùa nhưng không phải là một phần của câu trả lời golf nghiêm túc. -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]]

Ví dụ đầu vào:

1101101

Đầu ra:

 _ 
 _|
|_ 

⍞='1' lấy đầu vào là một mảng ký tự và chuyển đổi nó thành một mảng số.

1 2 2 1 2 2 1×⍞='1'chuyển đổi mảng đó thành: 0để trống, 1cho _, 2cho|

(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] gán mảng đó cho biến x và sắp xếp lại để biểu diễn các phân đoạn 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] ghép một khoảng trống, đoạn A và một khoảng trống khác ở phía trước

3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] định hình lại ma trận 3x3

1+3 3⍴0,x[1],0,(x←1 2 2 1 2 2 1×⍞='1')[6 7 2 5 4 3] chuyển đổi sang lập chỉ mục 1

Cuối cùng sử dụng chuỗi ' _|'để chuyển đổi các chỉ dẫn thành các ký tự


Chỉnh sửa

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

Cạo sạch 3 ký tự bằng cách nối a 0để phía trước mảng và sử dụng các chỉ báo trùng lặp, ngăn chặn việc gán biến


Nếu APL của bạn hỗ trợ nó, tôi nghĩ rằng chức năng từ{ là 1-char ngắn hơn so với lập chỉ mục khung [].
luser droog 22/03/2015

9

PHP 66 byte

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

Một cải tiến nhẹ sử dụng một md5công thức kỳ diệu, nhưng cần thêm 3 byte nhị phân:
¡, æ, và Úlà nhân vật 161, 230, và 218 tương ứng. Nó sẽ hoạt động như thể được sao chép trực tiếp và được lưu dưới định dạng ANSI.


PHP 73 (70) byte

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

Nếu bạn cho phép tôi ba ký tự nhị phân, điều này có thể giảm xuống 70 byte :

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

nơi ƒ,ß và lần lượt õlà các ký tự 131, 223 và 245.

Nhận đầu vào dưới dạng đối số dòng lệnh. Sử dụng mẫu:

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

$ php seven-seg.php 0111011

|_|
 _|

Tôi đã cố chạy mã của bạn, nhưng tôi nhận được vô số lỗi :( Tôi không hiểu logic của bạn nhưng có vẻ thú vị.
D34dman

1
@ D34dman Các thông điệp duy nhất nó sẽ tạo ra là các thông báo (các biến không xác định, v.v.). Chúng có thể được tắt trong php.ini(theo mặc định chúng đã có) hoặc để thử nghiệm, bạn có thể thêm mã sau vào tập lệnh:<? error_reporting(E_ALL & ~E_NOTICE); ?>
primo 26/213

tuyệt vời! tôi đã làm cho nó hoạt động: D naice!
D34dman

7

JavaScript + jQuery + HTML + CSS ( 210 201)

Giải pháp này sử dụng các họa tiết CSS và hình ảnh được cung cấp làm ví dụ :

HTML (3)

<a>

CSS ( 82 71)

Cảm ơn đã xem cho thủ thuật " nền: url ":

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

JavaScript (125 sau khi xóa các dòng mới được thêm vào đây để dễ đọc)

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

Kiểm tra trực tuyến: http://jsfiddle.net/zhqJq/3/


1
Này, nhưng còn 17.937 byte của hình ảnh thì sao ?? ;)
Thomas W.

@ThomasW. Tôi không biết liệu điều đó cũng nên được tính. Hãy để điều này cho OP quyết định.
Cristian Lupascu

Bạn có thể sử dụng <p>thẻ và tránh display:blocktrên CSS để tiết kiệm dung lượng
Roberto Maldonado

hình nền: url ( bit.ly/VesRKL ); => nền: url (// bit.ly/VesRKL);
xem

@xem cảm ơn vì tiền boa; Tôi đã chỉnh sửa câu trả lời của mình
Cristian Lupascu

6

R (65 ký tự):

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

Dựa vào một số xấp xỉ lỏng lẻo cho một số liên tục siêu việt ...


6

Con trăn 2 - 65

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

Thí dụ:

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

5

PostScript: nhị phân 53, nhị phân 87 ASCII 52, 86 ASCII

Hexdump của chương trình sử dụng mã thông báo nhị phân:

$ 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ải tập tin này để dùng thử.

Sử dụng mã thông báo ASCII:

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

forallVòng lặp đầu tiên đặt tất cả các tọa độ cần thiết trên ngăn xếp. Các tọa độ được lưu trữ trong một chuỗi để giảm thiểu không gian cần thiết. Các tọa độ theo thứ tự ngược lại, tức là 4 ký tự cuối cùng dành cho phân đoạn A. Chúng tôi vẽ một đường thẳng từ (0,8)đến(4,8) cho phân khúc này (thực tế, chúng tôi phải thêm 48 cho tất cả các tọa độ, vì forallđặt tất cả các mã ASCII trên ngăn xếp).

Các forallvòng lặp thứ hai thông qua tất cả các 0s và 1s trong chuỗi đầu vào và biến chúng thành một giá trị màu xám. 0s được vẽ màu trắng (giá trị xám 1) và 1s được vẽ màu đen (giá trị xám 0). Sau đó, chúng tôi sử dụng tọa độ đầu tiênforall vòng lặp còn lại trên ngăn xếp để vẽ các đường.

Gọi chương trình bằng Ghostscript, giống như Geoff Reedy:

gs -sn=1101101 lcd.ps

Điều này hiển thị: Sản lượng mẫu


Tôi nghĩ bạn có thể thay thế neg 49 add(đó là btw tuyệt vời) với 1 and.
luser droog

@luserdroog: Các nhà khai thác bitwise, tuyệt vời, đã không nghĩ về họ. Nhưng nó not 1 andphải vậy chứ? Vẫn lưu một byte trong cả ASCII và nhị phân.
Thomas W.

Tôi cảm thấy phải có một cách gọn gàng với bitmap 1 bit. nhưng bitshiftlà một từ dài
kẻ lừa đảo người lái xe

Nhưng đó chỉ là mã thông báo nhị phân hai byte
Thomas W.

Vâng. Nhưng nó vẫn cảm thấy như một sự lừa dối với tôi bằng cách nào đó. :) Tôi cảm thấy mình cần phải làm nhiều nhất có thể với nguồn có thể đọc được trước khi dùng đến nhị phân.
luser droog 27/12 '

4

APL 101 86 73 69

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

Đầu vào là từ màn hình thông qua

1101101

Tạo ra ma trận ký tự 9x5 bao gồm các khoảng trắng và như sau:

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

Số bảy chữ số được chuyển đổi thành một vectơ phân vùng để chọn tọa độ.


Đầu tôi đau ...
Cướp

4

Toán học 112 103 100 96 88, sử dụng đồ thị

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

nhập mô tả hình ảnh ở đây

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

Đồ họa toán học


Bạn mong đợi loại đầu vào nào? Không [123]phải ["123"], cũng không IntegerDigits[123]làm việc cho tôi. Tôi chỉ nhận được z, không có nổi bật.
DavidC

@dude Hãy thử `HighlightGraph [z = GridGraph @ {3, 2}, Chọn [EdgeList [z] [[{3, 4, 1, 2, 6, 7, 5}]], Ký tự @ #," 1 "] ] & @ "1111111" `` :)
Tiến sĩ belisarius

3

Con trăn (107)

Chắc chắn nhiều golf hơn.

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

Đầu ra:

1101101
 .. 
   .
   .
 .. 
.   
.   
 .. 

Giải trình:

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 ký tự):

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

Giải trình:

Với đầu vào stdin, sử dụng toán tử tạm thời tạm thời để cung cấp *cho true và khoảng trắng cho false. Lấy các giá trị đó và cắm chúng vào một câu lệnh định dạng theo định dạng của màn hình 7 chữ số. Sẽ có tối đa 83 ký tự nếu màn hình hoạt động như thế này:

 a
b c
 d
e f
 g

nhưng việc đặt hàng làm cho nó dài hơn. Bất cứ ai có một cách xung quanh này?

Thí dụ:

$ ./7seg.py
111000

 *
  *

  *

$ ./7seg.py


1111111

 *
* *
 *
* *
 *

1
Đẹp, nhưng lambda có vẻ không cần thiết : print' {0}\n{5} {1}\n {6}\n{4} {2}\n {3}'.format(*[' *'[i=='1']for i in raw_input()]);) Không cần dấu ngoặc và khoảng trắng cho câu lệnh in.
daniero

Ồ Tôi không biết bạn có thể đưa booleans vào bộ chỉ mục. Cảm ơn :-)
Brigand

Np. Ngoài ra, >'0'thay vì =='1'input()(với backticks xung quanh, nhưng điều đó sẽ không hiển thị vì định dạng ở đây) thay vì raw_input().
daniero

fyi, bạn có thể sử dụng backticks ba lần nếu bạn cần backticks trong mãx = `input()`
Brigand

Mát mẻ. Sau đó tôi cũng đã học được điều gì đó hôm nay :)
daniero

3

Tôi nghĩ rằng chúng tôi cần một câu trả lời lispy ...

Clojure, 159 ký tự

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

Ở trên sẽ chạy trong REPL và cung cấp câu trả lời chính xác. Ví dụ:

1111111
 o 
o o
 o 
o o
 o 

Ném số vào nó với những sửa đổi nhỏ:

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

sản lượng:

 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

Không dễ đọc, nhưng chúng ở đó!


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)

Tôi có thể hạ thấp số ký tự (101) nếu chúng ta chỉ sử dụng một ký tự cho trạng thái "bật", nhưng nó ít dễ đọc hơn:

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 Điều này thật ấn tượng. Tôi vẫn đang cố gắng thiết kế ngược nó. Nó đã dạy tôi một vài điều rồi!
Guypursey

2

Bản tin 136

Không phải người chiến thắng, nhưng một cách tiếp cận khác.

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

Dự kiến ​​chuỗi đầu vào sẽ nằm trên ngăn xếp:

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

Điều này thậm chí còn tồi tệ hơn. 294 để tạo một bitmap "nhị phân". Tôi mất một lúc để nhớ rằng mỗi hàng được đệm thành một byte chẵn. Vì vậy, một bitmap 3x5 là năm byte với 3 bit msb đáng kể.

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

Đầu ra cũng xấu như những cái khác. :

Được rồi đây là một cái nhìn tốt. 190

Chỉnh sửa: Nó lộn ngược và ngược. Đã sửa bây giờ.

(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

Điều này cho tôi thấy một số mô hình hài hước. Vẫn còn một lỗi ở đâu đó?
Thomas W.

hmm vâng (1111110) không giống như số không. Nó chỉ là một bản đồ mở rộng. Tôi đoán hộp là quá đơn giản. :(
luser droog 27/12 '

Tôi nghĩ rằng đó là bản chất của phương pháp bitmap này. Tôi không chắc làm thế nào để nó không xấu.
luser droog

Một số bình luận nhẹ có sẵn ở đây .
kẻ lừa đảo người lái xe

2

Toán học 264

Để đầu ra trông đúng yêu cầu nhiều byte, vì vậy không có điếu xì gà lần này. Nhưng đây là mã verbose (264 chars) nào.

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

Bộ ký tự hoàn chỉnh:

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

đặc tính

Các chữ số:

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

nhập mô tả hình ảnh ở đây


2

PHP - 155 ký tự

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

nó sẽ là 150 ký tự nếu chúng ta sử dụng khai báo mảng kiểu php 5.4, nhưng tôi không cài đặt nó trên máy tính xách tay của mình nên không thể kiểm tra nó.

Mẫu ra đặt.

nhập mô tả hình ảnh ở đây

Giải trình:

Đầu tiên tôi chia màn hình 7 đoạn thành Năm hàng và 3 cột. Với hàng thứ 1, thứ 3 và thứ 5 havimg '-' ở cột giữa và không gian khác.

Hàng thứ 2 và 4 có một ống '|' ký tự trong cột đầu tiên và cuối cùng. Bây giờ sự hiện diện của các ký tự này phải được hướng dẫn bởi các giá trị đầu vào.

Tôi đã tạo một bảng tra cứu, về cơ bản là hai bảng tra cứu. Đầu tiên để tính giá trị cho hàng thứ 1, 3 và 5. Và một số khác ở offset 2 (mục thứ 3) để tính hàng thứ 2 và thứ 4.


2

Java - 204 ký tự

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

Đầu ra mẫu:

 _ 
 _|
|_ 

Định dạng đúng:

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

Thực sự ước tôi có thể tránh điều đó cho vòng lặp, nhưng tôi đã thử một vài thứ khác và tất cả chúng đều dài hơn. Có lẽ có một cách tốt hơn để làm điều này, nhưng đây là nỗ lực đầu tiên của tôi về môn đánh gôn. (Và Java giống như ngôn ngữ tồi tệ nhất đối với nó, đó là lý do tại sao tôi nghĩ nó sẽ thú vị.) Ngay cả Brainfuck cũng đánh bại tôi, nhưng ít nhất đầu ra của tôi trông đẹp hơn.

EDIT: có thể thoát khỏi "công khai" trên lớp, tiết kiệm cho tôi 7 ký tự!

Và cảm ơn, daniero, đã cho tôi xem printf! (Lưu 18 ký tự)

Viết lại định dạng đầu ra, thay đổi ký tự chữ thành số thập phân, lưu 12 ký tự.


Chào mừng bạn đến với codegolf.se! Java đã giới thiệu một printfphương thức một vài phiên bản trở lại, về cơ bản printlnformattrong một (như hàm C); Điều này sẽ giúp bạn tiết kiệm một số nhân vật,
daniero

Đây là một mẹo khác: Bạn có thể kết hợp "cơ thể" của forvòng lặp và phần cập nhật thành một, lưu một ký tự:for(int i=7;i>0;c[--i]=a[0].charAt(i)==49?(i%3==0?95:'|'):32);
daniero

1

VBA - 263

Nó xấu nhưng nó hoạt động, tôi nghĩ. Tôi gặp khó khăn khi xem thứ tự bit thích hợp, vì vậy tôi suy luận từ câu trả lời của người khác. Ngay cả khi đoạn đó sai, độ dài mã vẫn giữ nguyên.

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 ký tự

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

Cảm ơn! Đôi sai lầm xương đầu tốn 6 ký tự. Tôi gần như có thể giảm kích thước của VBA ngay cả với cuộc gọi dài vô lý để lấy đối số dòng hàm.
Comitern

Trừ khi mã của bạn hoạt động mà không có các ký tự dòng mới, bạn cũng phải tính chúng. Điều này có 178 ký tự theo tính của tôi.
manatwork

1

CJam - 29

l0N]s7078571876784728737Ab\f=

CJam là ngôn ngữ mới tôi đang phát triển, tương tự như GolfScript - http://sf.net/p/cjam . Đây là lời giải thích:

lđọc một dòng từ đầu vào
0là số 0
Nlà một biến được khởi tạo trước cho chuỗi dòng mới
]tập hợp các phần tử trên ngăn xếp thành một mảng
schuyển đổi một giá trị (mảng) thành chuỗi, do đó nối thêm một số 0 và một dòng mới vào đầu vào đã cho
7078571876784728737 là một số (cùng số tôi đã sử dụng trong python, nhưng nó ở dạng hex)
Alà một biến được khởi tạo trước thành 10
bchuyển đổi cơ sở, tạo ra mảng [7 0 7 8 ... 3 7]
\hoán đổi hai giá trị cuối cùng trên ngăn xếp
f=áp dụng =toán tử (ở đây, truy cập mảng được lập chỉ mục) trên chuỗi đầu vào (cộng với số 0 và dòng mới) và mỗi số 7, 0, 7, ...
Chỉ số 7 tương ứng với số 0 được nối thêm và 8 tương ứng với dòng mới được nối thêm.

Giải pháp python của tôi thực hiện chính xác điều tương tự (ngoại trừ việc tách chữ số được thực hiện thông qua chuyển đổi chuỗi)


Tôi đang nhìn gì ở đây? Quan tâm để cung cấp một lời giải thích ngắn gọn về mã?
daniero

@daniero Tôi đã thêm một lời giải thích
aditsu

1

VBA, 188 ký tự

Lưu ý rằng người ta phải nhập 188 ký tự nếu chỉ bao gồm khoảng trắng bắt buộc - IDE sẽ mở rộng nó ra khi bạn sao chép nó vào trình soạn thảo 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

Đáng buồn thay, VBScript không có mảng Byte được gõ mạnh hoặc người ta có thể sử dụng phương thức này ngắn hơn nhiều.


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

Điều này thể có thể được đánh gôn hơn nữa, nhưng tôi không thể nghĩ bất cứ điều gì.


Chào mừng đến với trang web! Đó là một mục đầu tiên tốt đẹp :)
daniero

1

JavaScript, 148 byte

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

Hãy thử trực tuyến! (Chân trang là Node.js để đọc .input.tio)

Chấp nhận đầu vào của ABCDEFG trong các cờ nhị phân và trả về:

 #
# #
 #
# #
 #

0

SmileBASIC, 136 byte

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

Đầu ra là đồ họa.


0

05AB1E , 4 byte

C₄+ç

Dùng thử trực tuyến hoặc xác minh tất cả các đầu vào có thể .

Xem xác minh tất cả các đầu vào có thể liên kết ở trên để xem ánh xạ được sử dụng cho mỗi đầu vào.

Giải trình:

Điều này lạm dụng các quy tắc nơi nó nêu:

Cách bạn thể hiện màn hình tùy thuộc vào bạn - một biểu tượng Unicode hoặc ASCII duy nhất , nghệ thuật ASCII, về mặt vật chất hoặc bất cứ điều gì bạn có thể nghĩ ra. Tuy nhiên, mỗi đầu vào phải có đầu ra riêng biệt.

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)

Thay thế nhiều hơn theo tinh thần của thách thức bằng cách sử dụng định dạng đầu ra:

 -
| |
 -
| |
 -

38 byte :

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

Chắc chắn có thể được đánh gôn ..

Hãy thử trực tuyến hoặc xác minh tất cả các đầu vào có thể .

Giải trình:

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

Xem 05AB1E mẹo này của tôi ( phần Làm thế nào để nén các số nguyên lớn? ) Để hiểu tại sao •L7ו1367524.


0

PHP 5.6, 65 byte ASCII đơn giản

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

hoặc, không có ngắt dòng, nhưng với một chút thú vị:

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

Chạy như ống với -nRhoặc thử chúng trực tuyến .

sự cố 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
;

sự cố 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
Cho dù ngôn ngữ là mới hay cũ không còn quan trọng nữa kể từ Mùa hè 2017 . Vì vậy, bạn sẽ không phải đề cập đến việc không cạnh tranh.
Kevin Cruijssen

@KevinCruijssen Cảm ơn tôi đã bỏ lỡ điều đó. Nhưng nó cũng là một thách thức tốt để làm sống lại các phiên bản PHP cũ; đôi khi nó cũng đưa ra một cái nhìn khác về các tính năng gần đây hơn: đôi khi tôi thấy rằng cách "cũ" hiệu quả hơn (về kích thước, hiệu năng, khả năng đọc và đôi khi cả ba) so với việc sử dụng công cụ được thêm vào PHP sau này Mặc dù vậy, không có lợi thế chơi gôn trong trường hợp này: Cách tiếp cận đầu tiên sẽ cần thêm 8 byte, cách thứ hai 5.
Tít
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.