Pin Konektor DVI


23

Ini seharusnya menjadi tantangan kode golf di ujung spektrum yang lebih sederhana. Tapi saya pikir itu bisa bagus untuk mengeluarkan beberapa optimasi mikro di sini.

Ada tiga tipe dasar konektor DVI : DVI-A (analog), DVI-D (digital) dan DVI-I (terintegrasi). Selain itu, ada versi tautan tunggal dan tautan ganda konektor DVI-D dan DVI-I. Masing-masing dari lima konektor yang berbeda menggunakan set pin yang berbeda.

Mengingat salah satu A, D1, D2, I1, I2sebagai pengidentifikasi untuk jenis konektor, mencetak representasi ASCII yang sesuai pin konektor ini:

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

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

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

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

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

( X:Garis-garis bukan bagian dari output, Anda hanya harus mencetak 3 baris.)

Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN, ARGV atau argumen fungsi. Keluaran harus dicetak ke STDOUT, dengan umpan garis tambahan opsional.

Anda mungkin atau mungkin tidak menyertakan spasi tambahan di baris kedua Akonektor. Anda tidak boleh menggunakan spasi tambahan awal atau jejak di tempat lain.

Ini kode golf, jadi jawaban tersingkat (dalam byte) menang.


Bisakah saya meminta input untuk dikelilingi dalam tanda kutip, misalnya "I1"bukan I1?
Claudiu

Apakah spasi tambahan di jalur lain diperbolehkan?
gone_native

1
@Claudiu Tidak, maaf.
Martin Ender

@gone_native Juga tidak, maaf (akan menambahkannya ke posting).
Martin Ender

Jawaban:


3

CJam, 79 70 byte

Terinspirasi dari jawaban nutki . Ini juga memastikan bahwa tidak ada spasi spasi (kecuali untuk baris kedua)

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

Gunakan tautan ini untuk menyalin kode sebagai SE strip karakter yang tidak dapat dicetak.

Ada 5 karakter dalam rentang ASCII yang tidak dapat dicetak tetapi masih dalam satu byte (kode ASCII 255)

Cara kerjanya :

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

Cobalah online di sini


16

Perl - 100 91 (termasuk 1 bendera)

Gunakan ide-ide nutki untuk menggunakan -pdan mengurangi spasi ganda. Juga menghilangkan ruang trailing yang disederhanakan.

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

Input berasal dari stdin dan hanya boleh berisi jenis konektor tanpa baris baru.


Sebelumnya:

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

Membawa argumen baris perintah. Tidak Disatukan:

# 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
Ide cerdik untuk menangani parameter. Anda masih dapat menyimpan 2 byte dengan menambahkan $x=shift|" qb"dan mengganti 3 kejadian ruang ganda dengan bdi templat. Juga mengubah pemrosesan input ke '-p' memberi 7 ekstra (minus bendera): $x=$_|""dan tidak perlu untuk final say.
nutki

@nutki - Terima kasih, saya melewatkan itu!
gone_native

@ MartinBüttner - Semua 3 baris memiliki spasi tambahan, meskipun saya menyadari bahwa saya dapat memperbaiki baris pertama dan ketiga dengan mudah dengan mengubah karakter terakhir pada baris tersebut dari xmenjadi #. Tetapi baris kedua masih memiliki spasi tambahan di semua kasus. Sebab A, ruang meluas melampaui final #dari garis lain (yang saya kira secara teknis diizinkan). Namun untuk I1, I2, dll. kasus, masih ada ruang trailing yang perlu dijaga. Saya pikir saya bisa bermain golf beberapa karakter lebih dari itu.
gone_native

@gone_native oh, Anda benar.
Martin Ender

9

Python, 168 karakter

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

Tampaknya menjadi pendekatan baru. Saya punya string:

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

Aku mengganti G, Hdan 2berdasarkan masukan.


5

J, 153 121 119 karakter

Diperkecil
('='(;/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.<

Pendekatan ketiga: kemas semua  dan #ke dalam bilangan bulat besar sebagai bit. Tambahkan =setelahnya. Namun, masih tidak menggunakan simetri dari banyak varian konektor.

Tidak ditambang
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. <

Minified (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.<

Juga sebagai fungsi. Yang ini menggunakan pengkodean biner panjang variabel, dengan menghitungnya dalam biner dan memisahkan dengan nol. 0 satu dalam satu baris berarti  , 1 satu berarti #, 2 yang berarti =, 3 yang berarti baris baru dan 4 yang memisahkan lima string dari satu sama lain.

Tidak disatukan
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

Marbelous, 281 byte / karakter

Diperkecil:

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

Ini membutuhkan D1, D2, I1, I2atau Adari STDIN. Mengejar baris baru dalam input adalah opsional. Output adalah ke STDOUT.

Program ini memanggil subboard yang mencetak bagian-bagian konektor, baik mengisi #atau meninggalkan ruang tergantung pada input.

Coba jawaban ini di sini ; papan silindris dibutuhkan.

dengan Komentar:

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

Perl 5: 105 (termasuk 1 bendera)

Namun solusi Perl lainnya. Menggunakan stdin untuk parameter.

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

4

GNU sed, 116 byte

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

Keluaran:

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

3

J, 198 194 157 karakter

Diperkecil
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.<

Diimplementasikan sebagai fungsi. Perhatikan bahwa fungsinya adalah kereta api, artinya seseorang harus mengelilinginya dengan tanda kurung atau menugaskannya untuk menggunakannya (mungkin saya harus menghitung parens sebagai bagian dari fungsi, meskipun secara teknis mereka tidak).

Tidak disatukan
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. <

Idenya adalah untuk menyimpan bagian umum dari string secara terpisah dari karakter yang berbeda di antara jenis konektor. S1menyimpan karakter unik, dan S2bertindak sebagai pola dengan xakting sebagai pengganti untuk diisi.


3

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

JavaScript (ES6) 178 186

Sunting Memiliki 7 blok dasar, gunakan basis 7
Dengan cara lurus, gunakan string building dengan replace dan 7 blok bangunan.
Keluaran ke stdout menggunakan peringatan seperti yang diminta oleh OP.
Sekarang saya akan mencoba beberapa optimasi mikro ...

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

Uji dalam konsol FireFox / FireBug - menghapus 'peringatan' untuk menyederhanakan pengujian

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

Keluaran

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

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

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

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

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

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

Uji:

      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: ups, diperbaiki
marinus

2

JavScript ES6, 186 byte

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

Kode ini cepat dan kotor, tetapi menyelesaikan pekerjaan. Sebagian besar, #'s dan spasi dimasukkan ke dalam biner dan kemudian basis 36. Saya mencari solusi yang lebih elegan dan mudah-mudahan lebih pendek.


Ketika saya mengklik Jalankan cuplikan kode, saya tidak melihat apa pun.
AL

Itu mungkin karena menggunakan fungsi panah ECMAScript 6, yang hanya didukung di versi Firefox terbaru.
NinjaBearMonkey

Saya menguji dengan versi terakhir Firefox dan tidak ada yang terjadi. Apakah ada yang harus dilakukan untuk menguji fungsi ini?
AL

1
Oh, itu karena itu hanya fungsi. Saya akan menambahkan cara untuk mengujinya.
NinjaBearMonkey

Anda dapat mengedit kode untuk membuatnya dapat dijalankan sebagai snippet (gunakan blok kode kedua untuk menyimpan kode asli) atau menghapus renderer snippet.
AL

1

Perl 5 - 150 (149 + 1 untuk n)

Golf:

@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

Input dari STDIN, output ke STDOUT. Bekerja dengan mengisi karakter-karakter tertentu dengan #atau tergantung pada input.

Tidak Disatukan:

@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 $_;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.