首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DVI连接器销

DVI连接器销
EN

Code Golf用户
提问于 2014-11-17 00:16:16
回答 4查看 2.4K关注 0票数 23

这应该是一个代码高尔夫挑战,在更简单的一端的频谱。但我觉得在这里进行一些微观优化是件好事。

三种基本类型的DVI连接器:DVI-A (模拟),DVI-D (数字)和DVI-I (集成).此外,有单链接和双链接版本的DVI-D和DVI-I连接器.这五个不同的连接器都使用不同的一组引脚。

给定一个AD1D2I1I2作为连接器类型的标识符,打印相应的连接器引脚的ASCII表示:

代码语言:javascript
复制
A:
#   #  # # #       # #
=====  # # #          
#   #  # #         # #

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

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

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

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

( X:行不是输出的一部分,您应该只打印3行。)

您可以编写程序或函数,通过STDIN、ARGV或函数参数输入。输出必须打印到STDOUT,并带有可选的尾行提要。

您可以或不可以在A连接器的第二行中包括尾随空格。不得在任何其他地方使用额外的前导或尾随空格。

这是代码高尔夫,所以最短的答案(以字节为单位)获胜。

EN

回答 4

Code Golf用户

发布于 2014-11-17 06:15:45

Python,168个字符

代码语言:javascript
复制
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

似乎是一种新的方法。我有一根绳子:

代码语言:javascript
复制
G   G  # # # 2 2 H # #
=====  # # # 2 2 H H H
G   G  # # H 2 2 H # #

我根据输入替换GH2

票数 9
EN

Code Golf用户

发布于 2014-11-17 02:55:25

Marbelous,281个字节/字符

小型化:

代码语言:javascript
复制
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

这需要从STDIN获取D1D2I1I2A。在输入中尾随换行符是可选的。输出为STDOUT。

这个程序调用打印连接器部分的子板,要么填充#s,要么根据输入留出空格。

在这里试试这个答案;圆柱板是必需的。

附带评论:

代码语言:javascript
复制
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
EN

Code Golf用户

发布于 2014-11-17 03:17:55

JavScript ES6,186个字节

代码语言:javascript
复制
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'))
代码语言:javascript
复制
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'))
alert(f(prompt()))

代码是快速和肮脏的,但它完成了工作。大多数情况下,#的S和空格都是二进制的,然后是基数36。我正在寻找一个更优雅,希望更短的解决方案。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/41571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档