插座-插头兼容性


19

带电子设备旅行总是很有趣,尤其是当您需要适配器充电时。您面临的挑战是通过检查给定的插头是否与给定的插座兼容来使旅行计划变得更加容易。

挑战

给定插头类型和插座类型,返回一个值,该值指示它们是否可以一起工作。

相容性表

Socket  Accepted plugs  |  Plug  Accepting Sockets
A       A               |  A     A, B
B       A, B            |  B     B
C       C               |  C     C, D, E, F, H, J, K, L, N, O
D       C, D, E, F      |  D     D
E       C, E, F         |  E     D, E, F, H, K, O
F       C, E, F         |  F     D, E, F, H, K, O
G       G               |  G     G
H       C, E, F, H      |  H     H
I       I               |  I     I
J       C, J            |  J     J
K       C, E, F, K      |  K     K
L       C, L            |  L     L
M       M               |  M     M
N       C, N            |  N     N
O       C, E, F, O      |  O     O

表格显示相同的信息,只是转置。

供参考

输入项

  • 输入将以两个大写或两个小写字母(您选择)的形式给出。

  • 输入始终为/[A-O]/(或/[a-o]/),无需处理无效的输入。

  • 您可以按任何顺序接受两个输入(请指定哪个)。

  • 输入可以采用任何合理的格式(字符串,stdin,数组等)。

  • 如果将两个输入都放在一个字符串中,则它们之间的字符不得超过一个字符,并且周围不能有任何字符

  • 良好的输入:"G,K""EF""a b"['l', 'o']

  • 坏输入:"K l""f(O)(I)"[1,5]

输出量

  • 输出可以以任何合理的格式返回。

  • 输出必须是truthy/ falsy或2个常数值之一

  • 好的输出:false/ any positive number1/ 2'T'/'F'

  • 错误的输出:an even number/ an odd number1/more than 1

例子

使用格式socketplug=> true/ false

A, A => true
I, K => false
O, C => true
C, O => false
E, F => true
F, E => true

不允许出现标准漏洞

这是因此每种语言中字节数最少的答案都会获胜。


我国只使用C和F,我也看到过J ...但是为什么有那么多???
AlexRacer

1
@AlexRacer在这里,有一些阅读资料,还有奇怪的剃须刀插头,意大利超宽插头和其他一些插头。Europlug是masterplug tho。
Asone Tuhid

Answers:




6

Python 3中72个字节 73字节 70个字节

lambda p,s:s in{"A":"AB","C":y+"CJLN","E":y,"F":y}.get(p,p)
y="DEFHKO"

在线尝试!

编辑:感谢Chas Brown减少了脂肪!


发现导致C的错字,C返回false。
machina.widmo

真好!q=可以省略,因为该函数是匿名的。另外,还有一个额外的空间。70个字节 在线尝试。
Chas Brown

谢谢!由于某种原因,我认为lambda会捕获y,这就是为什么我最初以这种方式编写它的原因。
machina.widmo

欢迎来到PPCG,也不错!
user202729

@ user202729:以前没看过;很高兴知道的秘诀。
Chas Brown

4

C(gcc)(x86体系结构),76 60字节

非常感谢Arnauld所做的更改!

参数以(插头,插座)顺序给出。

c[15]={6,0,56696,0,35184,35184};f(a,b){a=a==b|c[a-65]>>b&1;}

在线尝试!


使用您在此处提供的有关x86体系结构的参考:这样做可以节省3个字节1<<~-b
Arnauld

通过除去d和三元运算符可以得到66个字节
Arnauld

通过将位掩码加倍获得62个字节。现在击败了果冻和视网膜之外的所有语言!\ o /
Arnauld

1
通过将ab进行比较即可获得60个字节
Arnauld

建议L"\6\0\xdd78\0襰襰"而不是{6,0,56696,0,35184,35184}
ceilingcat '18

3

Haskell,67个字节

p#s=p==s||or[elem s b|a:b<-words"AB CDEFHJKLNO EDFHKO FDEHKO",a==p]

函数的参数#是两个字符,第一个是插头,第二个是插座。

在线尝试!




2

PHP,81字节

<?list(,$s,$p)=$argv;$A=AB;$C=$E=$F=DEFHKO;$C.=JLN;echo+($p==$s||strpos($$p,$s));

要运行它:

php -n -d error_reporting=0 <filename> <socket> <plug>

例:

php -n -d error_reporting=0 socket_plug_compatibility.php F E

在线尝试!

笔记:

  • 为了节省一些字节,我使用了没有单引号或双引号的字符串作为字符串包装器。因此,该error_reporting=0选项用于不输出警告。
  • 输入仅适用于大写字母。
  • 输出1表示兼容性,0表示不兼容性。

怎么样?

每个插头都与自己的插座兼容。有四个特殊的插头(A,C,E,F),它们也与另外几个插座兼容。定义了四个带有特殊插头名称的字符串变量,以保存其额外兼容插座的列表。

检查输入插头和插座是否相同,或者该插座在该插头的兼容插座列表中。后面的检查是在PHP的variable variables的帮助下完成


2

的Javascript ES6,66 65 64个字符

p=>s=>p==s|{A:1,C:14172,E:8788,F:8780}[p]&(1<<parseInt(s,36)-11)

采用大写字母变成p了插头s的插座,退货falsy( 0)或truthy( ,,1 ,..., )值。248192

测试:

f=p=>s=>p==s|{B:1,C:14172,E:8788,F:8780}[p]&(1<<parseInt(s,36)-11)

console.log(`A, A => true
I, K => false
O, C => true
C, O => false
E, F => true
F, E => true`
.split`
`.map(x=>x.match(/(.), (.) => (\w+)/))
.every(([m,p,s,res])=>!!f(s)(p)==eval(res)))



@AsoneTuhid,谢谢你,更新了。但是您的链接很奇怪并且无法打开。
Qwertiy

是TIO。为我打开。
Asone Tuhid

@AsoneTuhid,ERR_CONNECTION_RESET
Qwertiy

您是否尝试移除https?其他TIO链接有效吗?我在mac(chrome和safari)和android上进行了尝试,效果很好...
Asone Tuhid

2

R132129113字节

function(S,P,`!`=utf8ToInt)"[<-"(diag(15),cbind(rep(!"",!"	"),!"
"),1)[-64+!P,-64+!S]

在线尝试!

构建以下矩阵,m[S,P]如果为TRUE,则提取=> 1,否则为0。

       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
 [1,]    1    1    0    0    0    0    0    0    0     0     0     0     0     0     0 
 [2,]    0    1    0    0    0    0    0    0    0     0     0     0     0    0     0
 [3,]    0    0    1    1    1    1    0    1    0     1     1     1     0    1     1
 [4,]    0    0    0    1    0    0    0    0    0     0     0     0     0    0     0
 [5,]    0    0    0    1    1    1    0    1    0     0     1     0     0    0     1
 [6,]    0    0    0    1    1    1    0    1    0     0     1     0     0    0     1
 [7,]    0    0    0    0    0    0    1    0    0     0     0     0     0    0     0
 [8,]    0    0    0    0    0    0    0    1    0     0     0     0     0    0     0
 [9,]    0    0    0    0    0    0    0    0    1     0     0     0     0    0     0
[10,]    0    0    0    0    0    0    0    0    0     1     0     0     0    0     0
[11,]    0    0    0    0    0    0    0    0    0     0     1     0     0    0     0
[12,]    0    0    0    0    0    0    0    0    0     0     0     1     0    0     0
[13,]    0    0    0    0    0    0    0    0    0     0     0     0     1    0     0
[14,]    0    0    0    0    0    0    0    0    0     0     0     0     0    1     0
[15,]    0    0    0    0    0    0    0    0    0     0     0     0     0    0     1

使用压缩索引intToUtf8并将其替换为可节省3个字节!。有关更清晰的版本,请参见历史记录。

@Giuseppe节省了16个字节!


你需要t=rep
朱塞佩

@Giuseppe看起来我不喜欢!
JayCe


@Giuseppe现在看起来完全像是一种神秘的语言。
JayCe

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.