DVI 커넥터 핀


23

이것은 스펙트럼의 더 간단한 끝에서 코드 골프 도전으로 간주됩니다. 그러나 나는 약간의 미세 최적화를 이끌어내는 것이 좋을 것이라고 생각했습니다.

가 있습니다 DVI 커넥터의 세 가지 기본 유형 DVI-A (아날로그), DVI-D (디지털) 및 DVI-I는 (통합 된). 또한 단일 링크 및 이중 링크 버전의 DVI-D 및 DVI-I 커넥터가 있습니다. 이 5 가지 커넥터 각각은 서로 다른 핀 세트를 사용합니다.

중 하나가 주어지면 A, D1, D2, I1, I2커넥터의 유형에 대한 식별자로서, 커넥터의 핀의 대응하는 ASCII 표현 인쇄 :

A:
#   #  # # #       # #
=====  # # #          
#   #  # #         # #

D1:
       # # #     # # #
=====  # # #     # # #
       # # #     # # #

D2:
       # # # # # # # #
=====  # # # # # # # #
       # # # # # # # #

I1:
#   #  # # #     # # #
=====  # # #     # # #
#   #  # # #     # # #

I2:
#   #  # # # # # # # #
=====  # # # # # # # #
#   #  # # # # # # # #

( X:라인은 출력의 일부가 아니므로 3 라인 만 인쇄해야합니다.)

STDIN, ARGV 또는 함수 인수를 통해 입력을 받아 프로그램이나 함수를 작성할 수 있습니다. 선택 사항 인 후행 줄 바꿈을 사용하여 출력을 STDOUT으로 인쇄해야합니다.

A커넥터 의 두 번째 줄에 후행 공백을 포함하거나 포함하지 않을 수 있습니다 . 다른 곳에서는 추가 선행 또는 후행 공백을 사용해서는 안됩니다 .

이것은 코드 골프이므로 가장 짧은 대답 (바이트)이 이깁니다.


입력을 따옴표로 묶어야 합니까 ( 예 : "I1"대신) I1?
Claudiu

다른 줄의 후행 공백이 허용됩니까?
gone_native

1
@Claudiu 아니요, 죄송합니다.
Martin Ender

@gone_native 또한 아니요, 죄송합니다 (게시물에 추가).
Martin Ender

답변:


3

CJam, 79 70 바이트

nutki의 답변 에서 영감을 얻었습니다 . 또한 후행 공백이 없는지 확인합니다 (두 번째 행 제외).

"VF­wGC}*D"176b6b" DG1A="f=r'1+2<"  "aer{_s" ="&\"# "?}%s23/Wf<N*

SE가 인쇄 할 수없는 문자를 제거 할 때이 링크 를 사용 하여 코드를 복사하십시오.

인쇄 할 수없는 ASCII 범위에는 5 자 문자가 있지만 바이트 내에 있습니다 (ASCII 코드 255).

작동 방식 :

"VF­wGC}*D"176b6b" DG1A="f=              "This effectively results into this string:"
                                        "D  D GGG11AGG=====  GGG11AAAD  D GGA11AGG";
r'1+2<                                  "Read the input, convert A to A1";
      "  "er                            "Replace the occurrences of above two characters"
                                        "with double space '  '";
            {_s" ="&\"# "?}%s           "Convert every non = and space character to '# '";
                             23/        "Divide the string into parts of 23 characters";
                                Wf<     "String last character from above parts";
                                   N*   "Join with new line";

여기에서 온라인으로 사용해보십시오


16

-100 91 (1 플래그 포함)

-p이중 공간 사용 및 축소에 대한 nutki의 아이디어를 사용 합니다. 또한 후행 공백 제거가 간단 해졌습니다.

#!perl -p
$x=$_|" qb";$_="dbd xxxqqqax#
=====bxxxqqqaaa!dbd xxaqqqax#";s/[$x]/  /g;s/\w/# /g;s/ !/
/

입력은 stdin에서 가져오고 마지막 줄 바꿈이없는 커넥터 유형 만 포함해야합니다.


너무 이른:

$x=shift|" q";$_="d  d xxxqqqaxx
=====  xxxqqqaaa
d  d xxaqqqaxx";s/[$x]/  /g;s/\w/# /g;s/ $//mg;say

명령 줄 인수를받습니다. 언 골프 드 :

# Read argument, transform A->aq, I1->iq, I2->is, D1->dq, D2->ds
$x=shift|" q";

# String compacted
$_ = "d  d xxxqqqaxx
=====  xxxqqqaaa
d  d xxaqqqaxx";

# Clear any pins with matching char in input
s/[$x]/  /g;
# Convert rest to '#'
s/\w/# /g;
# Eliminate trailing spaces
s/ $//mg;
say

2
매개 변수를 처리하기위한 독창적 인 아이디어. 템플리트에서 $x=shift|" qb"3 개의 이중 공백을 추가 하고 대체 하여 2 바이트를 계속 절약 할 수 있습니다 b. 또한 입력 처리를 '-p'로 변경하면 7이 추가됩니다 (플래그 빼기) : $x=$_|""final 필요 없음 say.
nutki

@nutki-고마워요!
gone_native

MartinBüttner @ - 난에서 그 라인의 마지막 문자를 변환함으로써 용이하게 첫 번째와 세 번째 라인을 수정 실현할 수 있지만 모든 3 선, 후행 공백 한 x#. 그러나 두 번째 줄에는 여전히 후행 공백이 있습니다. 의 경우 A공간은 #다른 줄 의 마지막 부분을 넘어서 확장 됩니다 (기술적으로 허용되는 것으로 가정). 그러나이에 대한 I1, I2등. 경우에 따라 처리해야 할 후행 공간이 여전히 있습니다. 나는 그것을 밖으로 몇 문자 더 골프 수 있다고 생각합니다.
gone_native

@gone_native 아, 맞아.
Martin Ender

9

파이썬, 168 자

t=raw_input()*2
Q="G   G  # # # 2 2 H # #\n=====  # # # 2 2 H H H\nG   G  # # H 2 2 H # #"
for A,B,N in('G0A','H0D','212'):Q=Q.replace(A,' #'[t[int(B)]in'I'+N])
print Q

새로운 접근법으로 보입니다. 문자열이 있습니다.

G   G  # # # 2 2 H # #
=====  # # # 2 2 H H H
G   G  # # H 2 2 H # #

나는 대체 G, H2입력을 기반으로.


5

J, 153121119

축소
('='(;/1,.i.5)}"_1' #'{~5 3 22$#:128#.32x-~3 u:'dt*`J%Q5"xjuH%Jv2uJ!H5 t*`J%@5Jp*uH%Jv2p*!H dp"')echo@{~I1`I2`D1`D2 i.<

세 번째 접근 방식은 모든 팩  의와 #비트로 큰 정수에의. =이후에를 추가하십시오 . 그래도 여전히 많은 커넥터 변형의 대칭을 사용하지 않습니다.

축소되지 않은
n =. 128 #. 32x -~ 3 u: 'dt*`J%Q5"xjuH%Jv2uJ!H5 t*`J%@5Jp*uH%Jv2p*!H dp"'
f =. ('=' (;/1,.i.5)}"_1 ' #' {~ 5 3 22 $ #: n) echo@{~ I1`I2`D1`D2 i. <

축소 (153)
[:echo@>({&(' #=',LF)&.:>;._2#;._1#:96#.32x-~3 u:' (0%dziqrDwbh5Ds6[gEl)_xkBS6?61m$1ne/v(]!&yW?_{K.S^X#Yn_d%O71KqXEw=I;meH>@eG2|2/gcR0'){~D1`D2`I1`I2 i.<

또한 기능으로. 이것은 바이너리 길이를 계산하고 0으로 분리하여 가변 길이 바이너리 코딩을 사용합니다. 행에있는 0  개는 1 개, 1 개는 #2 개 , 의미 =는 3 개는 개행을 의미하고 4 개는 5 개의 문자열을 서로 분리합니다.

언 골프
s =. ' (0%dziqrDwbh5Ds6[gEl)_xkBS6?61m$1ne/v(]!&yW?_{K.S^X#Yn_d%O71KqXEw=I;meH>@eG2|2/gcR0'
f =. [: echo@> ({&(' #=',LF)&.:>;._2 #;._1 #: 96 #. 32x -~ 3 u:s) {~ D1`D2`I1`I2 i. <

4

놀라운 281 바이트 / 문자

축소 :

00
]]
GG]]
IIJJJJ
:G
}0
++
>>
>X{0
/\{<{>
:H
}0
-Z
>E-2
-C//
{0
:I
23232003002023}023
LLMMMMNNRROOMMRRLL
0003
0300
NNNN
:J
}0}1
HH-2
KKKK
:K
}1}0
}1}0}0
PPPPQQ
:L
}020
}0202020
:M
20}020}020}0
:N
}0
}020
+W20
:O
3D3D3D3D3D}0
:P
}023}1230A
LLMMNNMM
:Q
2023}0230A
OOMMNNMM
:R
}0
\/0A

이 걸립니다 D1, D2, I1, I2또는 ASTDIN에서. 입력의 후행 줄 바꿈은 선택 사항입니다. 출력은 STDOUT입니다.

이 프로그램은 #입력에 따라 공백을 남기거나 커넥터를 인쇄하는 서브 보드를 호출합니다 .

이 답변을 여기에서 시도하십시오 . 원통형 보드가 필요합니다.

의견 :

00 .. ..
]] .. .. # get A/D/I
Gt ]] .. # pass into Gt; call PA if A or PrDI if D/I
PA Pr DI

# If 'A' is passed, a marble is emitted down
# Otherwise, marbles are sent left/right
# The value of the marble outputted is (I+1)/2, which creates a difference of 3
#   between D and I, the difference between a space and a #
:Gt
}0 .. ..
++ .. ..
>> .. ..
>X {0 ..
/\ {< {>

# Returns 0 if '1' is passed, and 3 if '2' is passed
:Ff
}0 ..
-Z ..
>E -2
-C //
{0 ..

# Prints connector A 
# Calls made: P1(23) P2(23) P2(20) P3(03) LF(00) P4(20) P2(23) LF(}0) P1(23)
#   P3(03) P3(00) P3(00) P3(03)
:PA
23 23 20 03 00 20 23 }0 23
P1 P2 P2 P3 LF P4 P2 LF P1
00 03 .. .. .. .. .. .. ..
03 00 .. .. .. .. .. .. ..
P3 P3 .. .. .. .. .. .. ..

# Prints connectors D0/D1/I0/I1
# }0 is either '1' or '2'
# }1 is either 32 or 35 (for D or I)
:PrDI
}0 }1
Ff -2
Li DI

# Helper for PrDI
# Calls made: L1(}1, }0) L2(}0) L1(}1, }0)
:LiDI
}1 }0 ..
}1 }0 }0
L1 L1 L2

# Prints '#   # ' (}0 = 0x23) or '      ' (}0 = 0x20)
:P1
}0 20 .. ..
}0 20 20 20

# Prints ' # # #' (}0 = 0x23) or '      ' (}0 = 0x20)
:P2
20 }0 20 }0 20 }0

# Prints ' # #' (}0 = 0x03) or '    ' (}0 = 0x00)
:P3
}0 ..
}0 20
+W 20

# Prints '===== ', }0 must be 0x20
:P4
3D 3D 3D 3D 3D }0

# Prints the top/bottom line of D/I connectors + newline
# Calls made: P1(}0) P2(23) P3(}1) P2(23) 
:L1
}0 23 }1 23 0A
P1 P2 P3 P2 ..

# Prints the middle line of D/I connectors + newline
# Calls made: P4(20) P2(23) P3(}0) P2(23)
:L2
20 23 }0 23 0A
P4 P2 P3 P2 ..

# Emits a newline (0x0A) regardless of input
:LF
}0 ..
\/ 0A

4

펄 5 : 105 (1 플래그 포함)

또 다른 Perl 솔루션. 매개 변수에 stdin을 사용합니다.

#!perl -p
@x=map$_?'#':$",!/D/,-/2/,!/A/,1,0;$_='040 33311233
=====433311222
040 33211233';s/\d/$x[$&] /g;s/ $//mg

4

GNU sed, 116 바이트

s/.*/&:#   #  33322433\n=====  33322444\n#   #  33422433/
/A/s/[42]/  /g
/1/s/2/  /g
/D/s/#/ /g
s/[2-4]/ #/g
s/.*://

산출:

$ echo "A
D1
D2
I1
I2"|sed -f dvi.sed
#   #   # # #       # #
=====   # # #          
#   #   # #         # #
        # # #     # # #
=====   # # #     # # #
        # # #     # # #
        # # # # # # # #
=====   # # # # # # # #
        # # # # # # # #
#   #   # # #     # # #
=====   # # #     # # #
#   #   # # #     # # #
#   #   # # # # # # # #
=====   # # # # # # # #
#   #   # # # # # # # #
$ 

3

J, 198194157 문자

축소
3 22 echo@$'x   x  # # # x x x # #=====  # # # x x x x xx   x  # # x x x x # #'('x'I.@:=])}~(5 16$(#' #'$~#)"."0'4123212128262126290901824'){~D1`D2`I1`I2 i.<

함수로 구현되었습니다. 함수는 기차입니다. 즉, 괄호로 묶거나 이름을 지정해야 사용할 수 있습니다 (기술적으로는 아니지만 스패너를 함수의 일부로 계산해야 할 수도 있음).

언 골프
S1 =. (#' #'$~#)"."0'4123212128262126290901824'
S2 =. 'x   x  # # # x x x # #=====  # # # x x x x xx   x  # # x x x x # #'
f  =. 3 22 echo@$ S2 ('x'I.@:=])}~ (5 16$S1) {~ D1`D2`I1`I2 i. <

아이디어는 커넥터 유형간에 다른 문자와 별도로 문자열의 공통 부분을 저장하는 것입니다. S1고유 한 문자를 저장하고 를 채울 자리 표시 자 S2역할을하는 패턴으로 x작동합니다.


3

파이썬 - 167 166 164 161 159

C=raw_input()
a=["#   # "," "*6]["D"in C]
r=" #"
b="A"in C
i=3-b
d=(r*[i,5][C[1:]>"1"]).rjust(10)
t=r*3
print a+t+d+"\n===== "+t+d*~-len(C)+"\n"+a+r*i+"  "*b+d

3

자바 스크립트 (ES6) 178 186

편집 기본 블록 7 개를 사용하고 기본 7을
사용하십시오. 대체와 함께 7 개의 빌딩 블록을 사용하여 문자열 빌딩을 사용하십시오.
OP의 요청에 따라 경고를 사용하여 표준 출력으로 출력합니다.
이제 미세 최적화를 시도해 보겠습니다.

F=t=>alert(
  {A:21349062249,D1:538695058296,D2:534740169498,I1:151139015296,I2:147184126498}[t]
  .toString(7).replace(/./g,c=>'\n0#   # 0===== 0 # # #0 # #0      0    '.split(0)[c])
)

FireFox / FireBug 콘솔에서 테스트 - '경고'를 제거하여 테스트 단순화

;['A','D1','D2','I1','I2'].forEach(i=>console.log(F(i)))

산출

#   #  # # #       # #
=====  # # #
#   #  # #         # #

       # # #     # # #
=====  # # #     # # #
       # # #     # # #

       # # # # # # # #
=====  # # # # # # # #
       # # # # # # # #

#   #  # # #     # # #
=====  # # #     # # #
#   #  # # #     # # #

#   #  # # # # # # # #
=====  # # # # # # # #
#   #  # # # # # # # #

2

APL (115)

V←3 22⍴''⋄V[2;⍳5]←'='⋄V[⍳3;(2=⍴I)/(6+2×⍳8)~14 16/⍨'1'∊I]←V[⍳2;12]←V[⍳3;8 10]←V[R/1 3;1 5 20 22/⍨R←∨/'AI'∊I←⍞]←'#'⋄V

테스트:

      V←3 22⍴''⋄V[2;⍳5]←'='⋄V[⍳3;(2=⍴I)/(6+2×⍳8)~14 16/⍨'1'∊I]←V[⍳2;12]←V[⍳3;8 10]←V[R/1 3;1 5 20 22/⍨R←∨/'AI'∊I←⍞]←'#'⋄V
A
#   #  # # #       # #
=====  # # #          
#   #  # #         # #
      V←3 22⍴''⋄V[2;⍳5]←'='⋄V[⍳3;(2=⍴I)/(6+2×⍳8)~14 16/⍨'1'∊I]←V[⍳2;12]←V[⍳3;8 10]←V[R/1 3;1 5 20 22/⍨R←∨/'AI'∊I←⍞]←'#'⋄V
D1
       # # #     # # #
=====  # # #     # # #
       # # #     # # #
      V←3 22⍴''⋄V[2;⍳5]←'='⋄V[⍳3;(2=⍴I)/(6+2×⍳8)~14 16/⍨'1'∊I]←V[⍳2;12]←V[⍳3;8 10]←V[R/1 3;1 5 20 22/⍨R←∨/'AI'∊I←⍞]←'#'⋄V
D2
       # # # # # # # #
=====  # # # # # # # #
       # # # # # # # #
      V←3 22⍴''⋄V[2;⍳5]←'='⋄V[⍳3;(2=⍴I)/(6+2×⍳8)~14 16/⍨'1'∊I]←V[⍳2;12]←V[⍳3;8 10]←V[R/1 3;1 5 20 22/⍨R←∨/'AI'∊I←⍞]←'#'⋄V
I1
#   #  # # #     # # #
=====  # # #     # # #
#   #  # # #     # # #
      V←3 22⍴''⋄V[2;⍳5]←'='⋄V[⍳3;(2=⍴I)/(6+2×⍳8)~14 16/⍨'1'∊I]←V[⍳2;12]←V[⍳3;8 10]←V[R/1 3;1 5 20 22/⍨R←∨/'AI'∊I←⍞]←'#'⋄V
I2
#   #  # # # # # # # #
=====  # # # # # # # #
#   #  # # # # # # # #

@ MartinBüttner : 으악, 고정
marinus

2

JavScript ES6, 186 바이트

f=c=>(b=(c[0]=='D'?'      ':'#   # '))+(e=(g=r=>parseInt(r,36).toString(2).replace(/./g,n=>' '+[' ','#'][n]))((o=c[1])?(o-1?73:'6f'):'6b'))+'\n===== '+(o?e:' # # #')+'\n'+b+(o?e:g('5f'))

코드가 빠르고 더러워졌지만 작업이 완료되었습니다. 대부분 #의 공간과 공백은 이진법으로 된 다음 36 진법으로 표현됩니다. 더 우아하고 희망적으로 더 짧은 솔루션을 찾고 있습니다.


코드 스 니펫 실행을 클릭하면 아무 것도 표시되지 않습니다.
AL

아마도 최신 Firefox 버전에서만 지원되는 ECMAScript 6 화살표 기능을 사용하기 때문일 수 있습니다.
NinjaBearMonkey

Firefox의 최신 버전으로 테스트했지만 아무 일도 일어나지 않습니다. 이 기능을 테스트하기 위해해야 ​​할 일이 있습니까?
AL

1
아, 그건 단지 기능 일뿐입니다. 테스트하는 방법을 추가하겠습니다.
NinjaBearMonkey

스 니펫으로 실행 가능하도록 코드를 편집하거나 (두 번째 코드 블록을 사용하여 원본 코드 유지) 스 니펫 렌더러를 제거 할 수 있습니다.
AL

1

펄 5-150 (149 + 1 n)

골프 :

@b=split//;$_='0   0 ###112##
===== ###11222
0   0 ##2112##';
@c=(@b[0]eq D,@b[1]ne 2,@b[0]eq A);@d=('#',$");s/([#12])/ \1/g;s/(\d)/$d[$c[$1]]/ge;say

STDIN에서 입력하고 STDOUT으로 출력합니다. 입력 으로 #또는 입력에 따라 특정 문자를 채워서 작동 합니다.

언 골프 드 :

@b=split//; # char array from input
$_='0   0 ###112##
===== ###11222
0   0 ##2112##';

@c=(@b[0] eq 'D',@b[1] ne '2',@b[0] eq 'A');
@d=('#',' ');

s/([#12])/ \1/g; # add spaces
s/(\d)/$d[$c[$1]]/ge; # replace numbers with appropriate character
say $_;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.