Soquete - Compatibilidade de plugue

19

Viajar com eletrônicos é sempre divertido, especialmente quando você precisa de um adaptador para carregá-los. Seu desafio é facilitar um pouco o planejamento de uma viagem, verificando se um determinado plugue será compatível com um soquete.

Desafio

Dado um tipo de plug e um tipo de soquete, retorne um valor que indica se eles trabalharão juntos ou não.

Tabela de compatibilidade

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

As tabelas mostram as mesmas informações, apenas transpostas.

Para referência .

Entrada

  • A entrada será dada como duas letras maiúsculas ou duas minúsculas (você escolhe).

  • As entradas sempre serão /[A-O]/(ou /[a-o]/), não há necessidade de lidar com entradas inválidas.

  • Você pode aceitar as duas entradas em qualquer ordem (especifique qual).

  • A entrada pode ser obtida em qualquer formato razoável (string, stdin, array, ...).

  • Se você pegar as duas entradas em uma única sequência, elas podem ser separadas por não mais que um caractere e não deve haver nada ao seu redor

  • Boas entradas: "G,K", "EF", "a b",['l', 'o']

  • Bad entradas: "K l", "f(O)(I)",[1,5]

Resultado

  • A saída pode ser retornada em qualquer formato razoável .

  • Saída deve ser truthy/ falsyou um de 2 valores constantes

  • Bons resultados: false/ any positive number, 1/ 2, 'T'/'F'

  • Saídas incorretas: an even number/ an odd number, 1/more than 1

Exemplos

Usando o formato socket, plug=> true/ false.

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

As brechas padrão não são permitidas.

Isso é então a resposta com o menor número de bytes em cada idioma vence.

Asone Tuhid
fonte
Meu país usa apenas C e F, eu também vi J ... mas por que existem tantos ???
AlexRacer
1
@AlexRacer Aqui, tenha algumas leituras , há também o estranho plug do barbeador e o plug extra largo italiano e outros. O Europlug é o masterplug tho.
Asone Tuhid

Respostas:

7

Python 3 , 76 bytes

lambda s,p:any([s==p,p in"CEF"and s in"DEFHKO",s=="B"<p,s in"JLN"and"C"==p])

Experimente online!

Créditos:

Neil
fonte
1
lambda s,p:any([s==p,p in"CEF"and s in"DEFHKO",s=="B"<p,s in"JLN"and"C"==p])por 76 bytes?
305 Neil
@ Neil Obrigado eu atualizei isso.
Neil
3
Tão engraçado haha ​​Better Niel
Luis felipe De jesus Munoz
6

Python 3 , 72 bytes 73 bytes 70 bytes

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

Experimente online!

Edit: Obrigado a Chas Brown por cortar um pouco de gordura!

machina.widmo
fonte
Foi encontrado um erro de digitação que fazia com que C, C retornasse falso.
machina.widmo
Agradável! q=pode ser omitido, pois a função é anônima. Além disso, há um espaço extra. 70 bytes. Experimente online.
Chas Brown
Obrigado! Por alguma razão, pensei que o lambda capturaria y, e foi por isso que o escrevi dessa maneira inicialmente.
machina.widmo
Bem-vindo ao PPCG e bom primeiro post!
user202729
@ user202729: Não tinha visto isso antes; boa dica para saber.
quer
4

C (gcc) (arquitetura x86), 76 60 bytes

Muito obrigado a Arnauld pelas mudanças!

Os argumentos são dados em ordem (plugue, soquete).

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

Experimente online!

ErikF
fonte
Usando a referência que você forneceu aqui sobre arquiteturas x86: você pode salvar 3 bytes fazendo isso 1<<~-b.
Arnauld
66 bytes , eliminando d e o operador ternário.
Arnauld
62 bytes dobrando as máscaras de bits. Agora superando todos os idiomas, exceto Jelly e Retina! \ o /
Arnauld
1
60 bytes apenas comparando a com b .
Arnauld
Sugerir em L"\6\0\xdd78\0襰襰"vez de{6,0,56696,0,35184,35184}
tetocat 31/07
3

Haskell, 67 bytes

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

Os argumentos para funcionar #são dois caracteres, primeiro plug, segundo socket.

Experimente online!

nimi
fonte
3

JavaScript (Node.js) , 79 bytes

S=>P=>P==S|P<'B'&S<'C'|P=='C'&'JLN'[K='includes'](S)|'CEF'[K](P)&'DEFHKO'[K](S)

Chamado como uma função ao curry f(socket)(plug),.

Experimente online! (inclui casos de teste, mostrando uma matriz de resultados.)

FireFly
fonte
3

Gelatina , 31 bytes

Oḅ⁴_ȷe“j⁼⁽⁾ƇƑƓƘƝƤḄẸỊṂṢỴẒĊḞĿ‘o⁼/

Um link monádico que aceita uma lista de caracteres [plug,socket]que gera 1se compatível ou 0não.

Experimente online! Ou veja um conjunto de testes (que separa as duas classes).

Jonathan Allan
fonte
2

PHP , 81 bytes

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

Para executá-lo:

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

Exemplo:

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

Ou Experimente online!

Notas:

  • Para salvar alguns bytes, usei cadeias sem aspas simples / duplas como o invólucro da cadeia. Portanto, a error_reporting=0opção é usada para não emitir avisos.
  • A entrada funciona apenas com letras maiúsculas.
  • Saídas 1 para compatibilidade e 0 para não compatibilidade.

Quão?

Cada plugue é compatível com o mesmo soquete que ele. Existem quatro fichas especiais (A, C, E, F) que também são compatíveis com mais algumas tomadas. Quatro variáveis ​​de string com o nome dos plugues especiais são definidas para manter a lista de seus soquetes adicionais compatíveis.

É verificado se o plugue e o soquete de entrada são iguais ou se o soquete está na lista de soquetes compatíveis para esse plugue. A última verificação é feita com a ajuda das variáveis ​​variáveis do PHP .

Night2
fonte
2

Javascript ES6, 66 65 64 caracteres

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

Toma letras maiúsculas para pa ficha e spara o soquete, retornos Falsas ( 0) ou truthy ( 1, 2, 4, ..., 8192valor).

Teste:

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

Qwertiy
fonte
-1 byte com curry
Asone Tuhid
@AsoneTuhid, obrigado, atualizado. Mas seu link é esquisito e não abre.
21718 Qwertiy
É o TIO. Abre para mim.
Asone Tuhid
@AsoneTuhid,ERR_CONNECTION_RESET
Qwertiy
Você tentou remover https? Outros links TIO funcionam? Eu tentei no mac (chrome e safari) e android e ele funciona bem ...
Asone Tuhid
2

R , 132 129 113 bytes

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

Experimente online!

Cria a seguinte matriz e extrai m[S,P]=> 1 se TRUE, caso contrário 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

Economizou 3 bytes compactando índices usando intToUtf8e substituindo esta função por !. Veja Histórico para uma versão mais legível.

Guardado 16 bytes graças a @Giuseppe!

JayCe
fonte
você precisa t=entrar rep?
Giuseppe
@ Giuseppe parece que eu não!
Jayce
@ Giuseppe Parece totalmente um envio de idioma esotérico agora.
Jayce
0

Pascal (FPC) , 113 bytes

var p,s:char;begin read(p,s);write((p=s)or(pos(p,'CEF')>0)and(pos(s,'DEFHKO')>0)or(pos(p+s,'AB CJ CL CN')>0))end.

Experimente online!

Teste para todos os valores

Seguindo o DEFHKOtrem ...

pos(string1,string2)verifica a primeira ocorrência de string1in string2e retorna sua posição nele ou 0 se não existir.

AlexRacer
fonte