Socket: compatibilità con la spina


19

Viaggiare con l'elettronica è sempre divertente, soprattutto quando è necessario un adattatore per caricarli. La tua sfida è rendere la pianificazione di un viaggio un po 'più semplice verificando se una determinata spina sarà compatibile con una determinata presa.

Sfida

Dato un tipo di spina e un tipo di presa, restituisce un valore che indica se funzioneranno insieme o meno.

Tabella di compatibilità

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

Le tabelle mostrano le stesse informazioni, solo trasposte.

Per riferimento .

Ingresso

  • L'input verrà dato come due lettere maiuscole o due lettere minuscole (si sceglie).

  • Gli input saranno sempre /[A-O]/(o /[a-o]/), non è necessario gestire input non validi.

  • È possibile accettare i due ingressi in qualsiasi ordine (specificare quale).

  • L'input può essere preso in qualsiasi formato ragionevole (stringa, stdin, array, ...).

  • Se prendi entrambi gli input in una singola stringa, possono essere separati da non più di un carattere e non deve esserci nulla che li circonda

  • Buone ingressi: "G,K", "EF", "a b",['l', 'o']

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

Produzione

  • L'output può essere restituito in qualsiasi formato ragionevole .

  • L'output deve essere truthy/ falsyo uno dei 2 valori costanti

  • Buoni risultati: false/ any positive number, 1/ 2, 'T'/'F'

  • Uscite errate: an even number/ an odd number, 1/more than 1

Esempi

Utilizzando il formato socket, plug=> true/ false.

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

Le scappatoie standard non sono ammesse.

Questo è quindi vince la risposta con il minor numero di byte in ogni lingua.


Il mio paese usa solo C e F, ho visto anche J ... ma perché ce ne sono così tanti ???
AlexRacer,

1
@AlexRacer Qui, hanno qualche lettura , c'è anche la presa per rasoio strano e la spina extra wide italiana e alcuni altri. Europlug è masterplug tho.
Asone Tuhid,

Risposte:




6

Python 3 , 72 byte 73 byte 70 byte

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

Provalo online!

Modifica: grazie a Chas Brown per il taglio di grasso!


Trovato un errore di battitura che ha reso C, C restituito false.
machina.widmo,

Bello! q=può essere omesso poiché la funzione è anonima. Inoltre, c'è uno spazio extra. 70 byte. Provalo online.
Chas Brown,

Grazie! Per qualche ragione ho pensato che il lambda avrebbe catturato y, motivo per cui l'avevo scritto in quel modo inizialmente.
machina.widmo,

Benvenuti in PPCG e bel primo post!
user202729

@ user202729: non l'avevo mai visto prima; bel consiglio da sapere.
Chas Brown,

4

C (gcc) (architettura x86), 76 60 byte

Mille grazie ad Arnauld per le modifiche!

Gli argomenti sono riportati in ordine (spina, presa).

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

Provalo online!


Usando il riferimento che hai fornito qui sulle architetture x86: puoi salvare 3 byte facendo 1<<~-b.
Arnauld,

66 byte eliminando d e l'operatore ternario.
Arnauld,

62 byte raddoppiando le maschere di bit. Ora battendo tutte le lingue tranne Jelly e Retina! \ o /
Arnauld,

1
60 byte semplicemente confrontando a con b .
Arnauld,

Suggerisci L"\6\0\xdd78\0襰襰"invece di{6,0,56696,0,35184,35184}
ceilingcat

3

Haskell, 67 byte

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

Gli argomenti da utilizzare #sono due caratteri, primo plug, secondo socket.

Provalo online!


3

JavaScript (Node.js) , 79 byte

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

Invocata come funzione curry, f(socket)(plug).

Provalo online! (include testcase, che mostrano una matrice di risultati.)



2

PHP , 81 byte

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

Per eseguirlo:

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

Esempio:

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

Oppure provalo online!

Appunti:

  • Per salvare alcuni byte, ho usato stringhe senza virgolette singole / doppie come wrapper di stringhe. Pertanto, l' error_reporting=0opzione viene utilizzata per non generare avvisi.
  • L'input funziona solo con lettere maiuscole.
  • Output 1 per compatibilità e 0 per non compatibilità.

Come?

Ogni spina è compatibile con la stessa presa di se stessa. Esistono quattro spine speciali (A, C, E, F) che sono compatibili anche con alcune prese in più. Quattro variabili stringa con il nome delle spine speciali sono definite per contenere l'elenco delle loro prese extra compatibili.

Viene verificato se la spina e la presa di ingresso sono uguali o se la presa si trova nell'elenco di prese compatibili per quella spina. Quest'ultimo controllo viene eseguito con l'aiuto delle variabili variabili di PHP .


2

Javascript ES6, 66 65 64 caratteri

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

Prende in lettere maiuscole pper spina e sper lo zoccolo, i rendimenti falsy ( 0) o truthy ( 1, 2, 4, ..., 8192valore).

Test:

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, grazie, aggiornato. Ma il tuo link è abbastanza strano e non si apre.
Qwertiy,

È TIO. Si apre per me.
Asone Tuhid,

@AsoneTuhid,ERR_CONNECTION_RESET
Qwertiy,

Hai provato a rimuovere https? Altri link TIO funzionano? Ho provato su Mac (Chrome e Safari) e Android e funziona benissimo ...
Asone Tuhid

2

R , 132 129 113 byte

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

Provalo online!

Crea la seguente matrice ed estrae m[S,P]=> 1 se TRUE, altrimenti 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

Salvato 3 byte comprimendo gli indici usando intToUtf8e sostituendo questa funzione con !. Vedi Cronologia per una versione più leggibile.

16 byte salvati grazie a @Giuseppe!


avete bisogno t=di rep?
Giuseppe,

@Giuseppe sembra che io no!
JayCe


@Giuseppe Sembra totalmente una presentazione in lingua esoterica ora.
JayCe,

0

Pascal (FPC) , 113 byte

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.

Provalo online!

Test per tutti i valori

Seguendo il DEFHKOtreno ...

pos(string1,string2)verifica la prima occorrenza di string1in string2e restituisce la sua posizione in esso o 0 se non esiste.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.