7 세그먼트 디스플레이 에뮬레이션


24

태스크

이 작업은 7- 세그먼트 디스플레이 의 128 가지 가능한 상태 중 하나를 표시하는 것 입니다.

프로그램은 0또는 의 7 자 ( "비트") 문자열을 허용해야합니다 1. 입력의 첫 번째 비트는 다음 그림의 세그먼트 A에 해당하고 두 번째는 B에 해당합니다 (무시 dp).

7 세그

단일 유니 코드 또는 ASCII 기호, ASCII 아트 , 그래프 또는 기타 모든 것을 표시하는 방법은 사용자에게 달려 있습니다. 그러나 각 입력에는 고유 한 출력이 있어야합니다. 당신이 멋진 무언가를 생각해 내면 나는 당신이 몇 가지 예를 보여줌으로써 공감대를 수확 할 수 있다고 확신합니다.

디스플레이의 가능한 모든 128 가지 상태는 다음과 같습니다.

주

규칙

  • 코드 골프
  • 내가 말했듯이 모든 종류의 출력이 허용되지만 지정하면 좋을 것입니다.
  • 입력은 stdin 또는 명령 행 인수 일 수 있습니다.

입력

1101101

산출

ASCII / 유니 코드로 :
2
다른 종류의 ASCII 예술 (나는 이것에 너무 좋지 않다)
 _   ╺┓  ╒╗   ---
 _|  ┏┛  ╔╝     |
|_   ┗╸  ╚╛   ---
              |
              ---


@DavidCarraher : 관련이 있습니다. 예; 나는 그것을 직접 연결했다. 그러나 118 개의 더 많은 '숫자'를 생성 할 수 있기 때문에이 방법이 약간 더 어렵습니다. 다른 질문에 대한 대부분의 답변은 여기에서 작동하지 않거나 크게 다시 작성해야합니다. 또한 다른 숫자를 인코딩 할 필요가 없으므로 다른 최적화가 가능합니다.
daniero dec

당신이 올바른지. 지적 해 주셔서 감사합니다.
DavidC

제공 한 인코딩을 사용해야합니까? 예를 들어 "1101101"은 항상 "2"를 나타내야합니까?
ardnew

@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

프로그램 "W00WG5WW1GW66WG4WW2GW33WG"의 이름을 바꿀 수있는 경우 크기는 74 자입니다.

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이되도록 선택됩니다. 즉, 입력 문자열을 종료하는 널 문자를 안전하게 색인화합니다.


15

브레인 씨발-224

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

느낌표를 사용하여 인쇄합니다.

 ! 
! !
 !
! !
 !

가장 읽기 쉽지는 않지만 너무 끔찍한 것도 아닙니다.

이것이 마지막 장소가 아닌지에 놀랐습니다.


13

추신 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

티카 : 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 함수 이므로로 끝납니다 &.
Dr. belisarius

예, 그러나 아무것도 적용되지 않습니다. 어떻게 출력을 얻습니까?
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'해당 배열을 0공백, 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]]

a 0를 배열 앞에 연결하고 중복 인덱스를 사용하여 3 개의 문자 를 제거하여 변수 할당을 방지


APL이 지원하는 경우 from 함수 {는 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); ?>
primo

대단해! 나는 그것을 작동시켰다 : D naice!
D34dman

7

JavaScript + jQuery + HTML + CSS ( 210 201)

이 솔루션은 CSS 스프라이트와 이미지를 예로 사용합니다 .

HTML (3)

<a>

CSS ( 82 71)

" background : url "트릭에 대한 xem 덕분에 :

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 바이트는 어떻습니까? ;)
Thomas W.

@ThomasW. 나는 그것이 또한 계산되어야하는지 모른다. 이것을 결정하기 위해 이것을 OP에 남겨 두자.
Cristian Lupascu

공간 절약을 <p>위해 태그를 사용 하고 display:blockCSS를 피할 수 있습니다.
Roberto Maldonado

background-image : url ( 비트 .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

파이썬 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

포스트 스크립트 : 53 바이너리, 87 ASCII 52 바이너리, 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)대한 것입니다.이 세그먼트 에 대한 행을 그립니다 (실제로 forall모든 ASCII 코드를 스택에 넣기 때문에 모든 좌표에 48을 추가해야 함 ).

두 번째 는 입력 문자열에서 forall모든 0s와 1s를 반복 하여 회색 값으로 바꿉니다. 0s는 흰색 (회색 값 1)으로, 1s는 검은 색 (회색 값 0)으로 그려집니다. 그런 다음 forall스택에 첫 번째 루프가 남긴 좌표를 사용 하여 선을 그립니다.

Geoff Reedy와 마찬가지로 Ghostscript를 사용하여 프로그램을 호출하십시오.

gs -sn=1101101 lcd.ps

다음이 표시됩니다. 샘플 출력


나는 당신 neg 49 add이 (굉장한 btw입니다)로 바꿀 수 있다고 생각합니다 1 and.
luser droog

@luserdroog : 훌륭하고 비트 연산자는 생각하지 않았습니다. 하지만 not 1 and그렇습니다. 여전히 ASCII와 이진 모두에서 1 바이트를 저장합니다.
Thomas W.

나는 1 비트 비트 맵으로 깔끔한 방법이 있어야한다고 생각합니다. 그러나 bitshift긴 말입니다.
luser droog

그러나 이것은 2 바이트 바이너리 토큰 일뿐입니다
Thomas W.

네. 그러나 그것은 여전히 어쨌든 내게 속임수 처럼 느껴집니다 . :) 나는 바이너리에 의지하기 전에 읽을 수있는 소스로 가능한 한 많이해야한다고 생각합니다.
luser droog

4

APL 101 86 73 69

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

⍞를 통해 화면에서 입력

1101101

다음과 같이 공백과 ⎕으로 구성된 9x5 문자 행렬을 생성합니다.

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

7 자리 숫자는 파티션 벡터로 변환되어 ⎕ 좌표를 선택합니다.


머리가 아프다.
Rob

4

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

Mathematica 그래픽


어떤 종류의 입력을 기대하십니까? 나도 [123]"[123"]도 IntegerDigits[123]나에게도 도움이 되지 않는다 . z강조 표시하지 않고 만 얻습니다 .
DavidC

@dude`HighlightGraph [z = GridGraph @ {3, 2}, Pick [EdgeList [z] [[{3, 4, 1, 2, 6, 7, 5}]], Characters @ #, "1"] 시도 ] & @ "1111111"``:)
belisarius 박사

3

파이썬 (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 입력의 경우 임시 3 항 연산자를 사용 *하여 true를, false를위한 공간을 제공하십시오. 해당 값을 가져 와서 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 jan

와우! 부 울러를 인덱서에 넣을 수 있다는 것을 몰랐습니다. 감사합니다 :-)
Brigand

Np. 또한, >'0'대신 =='1'input()대신 (주변 역 따옴표로하지만, 그 때문에 여기 포맷으로 표시되지 않습니다) raw_input().
daniero jan

참고로, 코드에 백틱이 필요한 경우 3 중 백틱을 사용할 수 있습니다x = `input()`
Brigand

시원한. 그럼 오늘도 배웠
어요

3

나는 우리가 lispy 답변이 필요하다고 생각했습니다 ...

클로저, 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

자바 스크립트 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)

"on"상태에 하나의 문자 만 사용하면 문자 수를 낮출 수 있습니다 (101).

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

포스트 스크립트 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 비트 맵은 5 바이트이며 3msb 비트는 중요합니다.

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

이것은 나에게 재미있는 패턴을 보여줍니다. 여전히 어딘가에 버그가 있습니까?
Thomas W.

흠. 네. (1111110)은 0처럼 보이지 않습니다. 확대 된 바이트 맵일뿐입니다. 상자가 지나치게 단순화 된 것 같습니다. :(
luser droog

이 비트 맵 방식의 특성상 일종의 생각입니다. 그것을 못 생기게하는 방법을 모르겠습니다.
luser droog

여기에 약간의 가벼운 논평이 있습니다 .
luser droog

2

매스 매 티카 264

출력을 올바르게 표시하려면 많은 바이트가 필요하므로 이번에는 시가가 필요하지 않습니다. 그러나 어쨌든 자세한 (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]];

PHP 5.4 유형 배열 선언을 사용하면 150 자이지만 랩톱에 설치하지 않았으므로 테스트 할 수 없었습니다.

샘플을 넣습니다.

여기에 이미지 설명을 입력하십시오

설명:

먼저 7 세그먼트 디스플레이를 5 개의 행과 3 개의 열로 나누었습니다. 1 열, 3 열 및 5 열의 가운데 열에는 '-'가 있고 그렇지 않으면 공백이 있습니다.

두 번째와 네 번째 행에는 파이프 '|'가 있습니다. 첫 번째와 마지막 열의 문자. 이제이 문자들의 존재는 입력 값에 의해 안내되어야합니다.

기본적으로 두 개의 조회 테이블 인 조회 테이블을 작성했습니다. 첫 번째, 세 번째 및 다섯 번째 행의 값을 계산하기위한 첫 번째 것. 그리고 2 번째와 4 번째 행을 계산하기 위해 오프셋 2 (3 번째 항목)에있는 다른 하나.


2

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

for 루프를 피할 수 있기를 정말로 원하지만 다른 몇 가지를 시도했지만 모두 더 길었습니다. 이 작업을 수행하는 더 좋은 방법이있을 수 있지만 이것이 코드 골프에 대한 첫 번째 시도입니다. (그리고 Java는 최악의 언어와 같기 때문에 이것이 흥미로울 것이라고 생각했습니다.) Brainfuck조차도 나를 이겼지 만 적어도 내 출력은 더 좋아 보입니다.

편집 : 수업에서 "공개"를 제거 할 수 있습니다, 7 문자를 저장합니다!

printf를 보여 주셔서 감사합니다. (18 문자 절약)

출력 형식을 다시 작성하고 문자 리터럴을 10 진수로 변경하고 12자를 저장했습니다.


codegolf.se에 오신 것을 환영합니다! 자바는 도입 printf기본적 몇 버전 백업 방법 printlnformat하나의 (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자가 있습니다.
manatwork

1

CJam-29

l0N]s7078571876784728737Ab\f=

CJam은 GolfScript- http: //sf.net/p/cjam과 비슷한 새로운 언어 입니다. 설명은 다음과 같습니다.

l입력에서 줄을 읽습니다.
0숫자 0
N은 줄 바꿈 문자열에 사전 초기화 된 변수입니다
]스택의 요소를 배열
s로 모으고 값 (배열)을 문자열로 변환하여 0과 줄 바꿈을 주어진 입력
7078571876784728737에 추가합니다. 숫자 (파이썬에서 사용한 것과 같은 숫자이지만 16 진수)
A는 10으로 사전 초기화 된 변수
b이며 기본 변환을 수행하여 배열을 생성합니다 [7 0 7 8 ... 3 7]
\스택의 마지막 두 값을 바꿉니다. 입력 문자열에 연산자 (여기서 색인 배열 액세스)를
f=적용하고 =(제로와 줄 바꾸기 포함) 각각의 숫자 7, 0, 7, ...
색인 7은 추가 된 0에, 8은 추가 된 줄 바꿈에 해당합니다.

내 파이썬 솔루션은 정확히 똑같은 일을합니다 (문자 분리는 문자열 변환을 통해 수행됩니다 제외)


여기서 무엇을보고 있습니까? 코드에 대한 간단한 설명을 제공 하시겠습니까?
daniero

@daniero 설명을 추가했습니다
aditsu

1

VBA, 188 자

참고 하나는해야한다는 것을 입력 의무적으로 공백을 포함하면 188 문자 - 당신이 VBA 편집기로 복사 할 때 IDE가 그것을 확장합니다.

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

자바 스크립트 (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

자바 스크립트, 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")

온라인으로 사용해보십시오! (Footer is Node.js to read .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₄+ç

온라인으로 시도 하거나 가능한 모든 입력을 확인하십시오 .

(가) 참조 가능한 모든 입력이 확인 각 입력에 사용되는 매핑을 볼 수 위의 링크.

설명:

이것은 다음과 같은 규칙을 남용합니다.

디스플레이를 표현하는 방법 은 단일 유니 코드 또는 ASCII 기호 , ASCII 아트, 그래프 또는 기타 모든 것을 표시 할 수 있습니다. 그러나 각 입력에는 고유 한 출력이 있어야합니다.

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.