DVI Konektör Pimleri


23

Bu, spektrumun daha basit ucunda bir kod golf mücadelesi olması gerekiyordu. Ancak burada bazı mikro-optimizasyonları ortaya çıkarmanın iyi olacağını düşündüm.

Üç temel DVI konektörü türü vardır : DVI-A (analog), DVI-D (dijital) ve DVI-I (tümleşik). Ayrıca, DVI-D ve DVI-I konektörlerin tek bağlantılı ve çift bağlantılı versiyonları vardır. Bu beş farklı konektörün her biri farklı bir pin seti kullanır.

Biri önüne alındığında A, D1, D2, I1, I2bağlayıcı türü için bir tanımlayıcı olarak, pinlerine karşılık gelen ASCII gösterimi yazdırmak:

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

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

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

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

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

( X:Satırlar çıktının bir parçası değil, sadece 3 satır yazdırmalısınız.)

STDIN, ARGV veya fonksiyon argümanı ile giriş yaparak bir program veya fonksiyon yazabilirsiniz. Çıktı, isteğe bağlı bir izleyen satır besleme ile STDOUT'a yazdırılmalıdır.

ABağlayıcının ikinci satırına bitişik boşluklar dahil edebilir veya eklemeyebilirsiniz . Başka hiçbir yerde ilave ön veya arka boşluk kullanmamalısınız .

Bu kod golf, yani en kısa cevap (bayt cinsinden) kazanır.


Girişin, örneğin "I1"yerine tırnak işaretleri içine alınmasını isteyebilir miyim I1?
Claudiu

Diğer hatlarda takip eden boşluklara izin veriliyor mu?
gone_native

1
@ Claudiu Hayır, üzgünüm.
Martin Ender

@gone_native Ayrıca hayır, üzgünüm (bunu yazıya ekler).
Martin Ender

Yanıtlar:


3

CJam, 79 70 bayt

Nutki'nin cevabından ilham aldı . Bu, izleyen beyaz boşluk olmadığından da emin olur (ikinci satır hariç)

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

SE, yazdırılamayan karakterleri çıkarırken kopyalamak için bu bağlantıyı kullanın .

Yazdırılamayan ASCII aralığında ancak bir bayt içinde 5 karakter var (ASCII kodu 255)

Nasıl çalışır :

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

Burada çevrimiçi deneyin


16

Perl - 100 91 (1 bayrak dahil)

Nutki'nin -pçift ​​boşluk kullanma ve azaltma fikirlerini kullanır . Ayrıca takip boşluklarının kaldırılması da basitleştirildi.

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

Giriş, stdin'den gelir ve sadece izleyen yeni satır bulunmayan bağlayıcı türünü içermelidir.


Önceki:

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

Bir komut satırı argümanı alır. Ungolfed:

# 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
Parametre kullanımı için ustaca bir fikir. Şablondaki $x=shift|" qb"çift ​​boşlukların 3 oluşumunu ekleyerek ve değiştirerek yine de 2 bayt kaydedebilirsiniz b. Ayrıca giriş işlemini '-p' olarak değiştirmek 7 ekstra verir (eksi bayrağı): $x=$_|""final için gerek yok say.
nutki

@ nutki - Teşekkürler, kaçırdım!
gone_native

MartinBüttner @ - I gelenler hatlarında son kömürü dönüştürerek kolayca birinci ve üçüncü hatları düzeltmek fark olsa da tüm 3 satır, sonunda boşluk xiçin #. Ancak, ikinci satırda hala her durumda sonda boşluklar var. Zira Aboşluk #, diğer çizgilerin sonunun ötesine uzanıyor (sanırım teknik olarak izin veriliyor). Ama için I1, I2vb. durumlarda, halledilmesi gereken hala bir boşluk vardır. Sanırım bundan birkaç karakter daha çıkarabilirim.
gone_native

@gone_native oh, haklısın.
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

Yeni bir yaklaşım gibi görünüyor. Dize sahibim:

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

Ben yerine G, Hve 2girişe göre.


5

J, 153 121 119 karakter

küçültülmüş
('='(;/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.<

Üçüncü bir yaklaşım: hepsini  ve hepsini #bit olarak büyük bir tamsayıya yerleştirin. Sonrasında ekleyin =. Yine de konnektör varyantlarının birçoğunun simetrisinden faydalanmıyor.

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

Küçültülmüş (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.<

Ayrıca bir işlev olarak. Bu, ikili koddakileri ikililere söyleyerek ve sıfırlarla ayırarak değişken uzunluklu bir ikili kodlama kullanır. Art arda 0  tane, 1 tane demektir #, 2 tane demektir =, 3 tane yeni satır demektir ve 4 tanedir 5 dize birbirinden ayrılır.

Ungolfed
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

Mermer, 281 bayt / karakter

minified:

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

Bu alır D1, D2, I1, I2veya ASTDIN'den. Girişteki yeni satırları izlemek isteğe bağlıdır. Çıkış STDOUT içindir.

Bu program, giriş kısımlarına göre #boşluk bırakarak ya da boşluk bırakarak konektör parçalarını basan alt tahtaları çağırır .

Bu cevabı burada deneyin ; silindirik panolara ihtiyaç vardır.

Yorumlar:

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 (1 bayrak dahil)

Yine başka bir Perl çözümü. Parametre için stdin kullanır.

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

4

GNU sed, 116 bayt

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

Çıktı:

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

3

J, 198 194 157 karakter

küçültülmüş
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.<

Bir fonksiyon olarak uygulanır. İşlevin bir tren olduğunu, bunun için kişinin parantez içine alınması veya onu kullanmak için bir isme ataması gerektiği anlamına geldiğini unutmayın (belki de teknik olarak olmasalar bile, parenleri işlevin bir parçası olarak saymalıyım).

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

Fikir, dizenin ortak bölümünü, bağlayıcı türleri arasında farklılık gösteren karakterlerden ayrı olarak saklamaktır. S1benzersiz karakterleri saklar ve doldurulması için yer tutucu S2görevi gören bir desen görevi görür x.


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

Düzenleme 7 taban bloğu olan, taban 7'yi kullanın
.
OP'nin istediği gibi uyarı kullanarak stdout'a çıktı alın.
Şimdi bazı mikro optimizasyonlar deneyeceğim ...

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

Testi In FireFox / Kundakçı konsolu - basitleştirmek testine 'uyarısı' çıkarmadan

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

Çıktı

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

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

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

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

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

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

Ölçek:

      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: boğmaca, sabittir
marinus

2

JavScript ES6, 186 bayt

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

Kod hızlı ve kirli, ancak işi halleder. Çoğunlukla, #boşluklar ikilik ve daha sonra baz 36'ya yerleştirilir. Daha zarif ve umarım daha kısa bir çözüm arıyorum.


Kod pasajını çalıştır'ı tıklattığımda hiçbir şey görmüyorum.
AL

Bunun nedeni muhtemelen yalnızca son Firefox sürümlerinde desteklenen ECMAScript 6 ok işlevlerini kullanmasıdır.
NinjaBearMonkey 19:14

Firefox'un son sürümüyle test ettim ve hiçbir şey olmuyor. Bu işlevi test etmek için yapılacak bir şey var mı?
AL

1
Oh, bu sadece bir işlev. Test etmenin bir yolunu ekleyeceğim.
NinjaBearMonkey 19:14

pasajı çalıştırılabilir duruma getirmek için kodu düzenleyebilirsiniz (orijinal kodu saklamak için ikinci bir kod bloğu kullanın) veya pasaj oluşturucuyu kaldırın.
AL

1

5 - 150 Perl (149 için + 1 n)

golfed:

@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'den giriş, STDOUT'ya çıkış. Girdi ile #veya girişe bağlı olarak belirli karakterleri doldurmak suretiyle çalışır .

Ungolfed:

@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 $_;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.