Steckdose - Steckerkompatibilität

19

Reisen mit Elektronik macht immer Spaß, besonders wenn Sie einen Adapter zum Aufladen benötigen. Ihre Herausforderung besteht darin, die Reiseplanung zu vereinfachen, indem Sie prüfen, ob ein bestimmter Stecker mit einer bestimmten Steckdose kompatibel ist.

Herausforderung

Geben Sie bei einem Steckertyp und einem Buchsentyp einen Wert zurück, der angibt, ob sie zusammenarbeiten oder nicht.

Kompatibilitätstabelle

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

Die Tabellen zeigen die gleichen Informationen, nur transponiert.

Als referenz .

Eingang

  • Die Eingabe erfolgt in zwei Groß- oder Kleinbuchstaben (Sie wählen).

  • Eingaben werden immer /[A-O]/(oder /[a-o]/) sein, ungültige Eingaben müssen nicht behandelt werden.

  • Sie können die beiden Eingaben in beliebiger Reihenfolge akzeptieren (bitte angeben, welche).

  • Die Eingabe kann in jedem vernünftigen Format erfolgen (String, Stdin, Array, ...).

  • Wenn Sie beide Eingaben in einer einzigen Zeichenfolge verwenden, dürfen sie nicht mehr als ein Zeichen voneinander entfernt sein und dürfen von nichts umgeben sein

  • Gute Eingänge: "G,K", "EF", "a b",['l', 'o']

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

Ausgabe

  • Die Ausgabe kann in jedem vernünftigen Format erfolgen .

  • Die Ausgabe muss entweder truthy/ falsyoder einen von 2 konstanten Werten haben

  • Gute Ergebnisse: false/ any positive number, 1/ 2, 'T'/'F'

  • Schlechte Ausgänge: an even number/ an odd number, 1/more than 1

Beispiele

Mit dem Format socket, plug=> true/ false.

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

Standardlücken sind nicht zulässig.

Das ist also gewinnt die Antwort mit den wenigsten Bytes in jeder Sprache.

Asone Tuhid
quelle
Mein Land benutzt nur C und F, ich habe auch J gesehen ... aber warum gibt es so viele ???
AlexRacer
1
@AlexRacer Hier, lesen Sie etwas , es gibt auch den seltsamen Rasiererstecker und den italienischen extrabreiten Stecker und einige andere. Europlug ist Masterplug.
Asone Tuhid

Antworten:

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

Probieren Sie es online!

Credits:

Neil
quelle
1
lambda s,p:any([s==p,p in"CEF"and s in"DEFHKO",s=="B"<p,s in"JLN"and"C"==p])für 76 Bytes?
Neil
@ Neil Danke, das habe ich aktualisiert.
Neil
3
So lustig haha ​​Besser 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"

Probieren Sie es online!

Edit: Danke an Chas Brown für das Schneiden von Fett!

machina.widmo
quelle
Es wurde ein Tippfehler gefunden, der dazu führte, dass C, C false zurückgab.
machina.widmo
Nett! q=kann weggelassen werden, da die Funktion anonym ist. Es gibt auch einen zusätzlichen Platz. 70 Bytes. Probieren Sie es online aus.
Chas Brown
Vielen Dank! Aus irgendeinem Grund dachte ich, dass das Lambda y erfassen würde, weshalb ich es ursprünglich so geschrieben hatte.
machina.widmo
Willkommen bei PPCG und schönen ersten Beitrag!
user202729
@ user202729: Hatte das noch nie gesehen; schöner tipp zu wissen.
Chas Brown
4

C (gcc) (x86-Architektur), 76 bis 60 Byte

Vielen Dank an Arnauld für die Änderungen!

Die Argumente werden in der Reihenfolge (Stecker, Buchse) angegeben.

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

Probieren Sie es online!

ErikF
quelle
Anhand der Referenz, die Sie hier zu x86-Architekturen angegeben haben, können Sie 3 Byte einsparen 1<<~-b.
Arnauld
66 Bytes, indem Sie d und den ternären Operator entfernen.
Arnauld
62 Bytes durch Verdoppelung der Bitmasken. Schlagen Sie jetzt alle Sprachen außer Gelee und Retina! \ o /
Arnauld
1
60 Bytes durch einfaches Vergleichen von a mit b .
Arnauld
Schlagen Sie L"\6\0\xdd78\0襰襰"anstelle von{6,0,56696,0,35184,35184}
ceilingcat vor
3

Haskell, 67 Bytes

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

Argumente für die Funktion #sind zwei Zeichen, plug first und socket second.

Probieren Sie es online!

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

Wird als Curry-Funktion aufgerufen f(socket)(plug).

Probieren Sie es online! (Beinhaltet Testfälle mit einer Ergebnismatrix.)

FireFly
quelle
3

Gelee , 31 Bytes

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

Ein monadischer Link, der eine Liste von Zeichen akzeptiert, [plug,socket]die anzeigt, 1ob sie kompatibel sind oder 0nicht.

Probieren Sie es online! Oder sehen Sie sich eine Testsuite an (die die beiden Klassen voneinander trennt).

Jonathan Allan
quelle
2

PHP , 81 Bytes

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

Um es auszuführen:

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

Beispiel:

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

Oder versuchen Sie es online!

Anmerkungen:

  • Um einige Bytes zu sparen, habe ich Strings ohne einfache / doppelte Anführungszeichen als String-Wrapper verwendet. Daher wird die error_reporting=0Option verwendet, um keine Warnungen auszugeben.
  • Die Eingabe funktioniert nur mit Großbuchstaben.
  • Ausgänge 1 für Kompatibilität und 0 für Nichtkompatibilität.

Wie?

Jeder Stecker ist mit derselben Steckdose kompatibel wie er. Es gibt vier Spezialstecker (A, C, E, F), die auch mit einigen weiteren Buchsen kompatibel sind. Vier Stringvariablen mit dem Namen der Spezialstecker sind definiert, um die Liste ihrer zusätzlichen kompatiblen Buchsen aufzunehmen.

Es wird geprüft, ob Eingangsstecker und -buchse identisch sind oder ob sich die Buchse in der Liste der kompatiblen Buchsen für diesen Stecker befindet. Die letztere Prüfung erfolgt mit Hilfe der variablen Variablen von PHP .

Night2
quelle
2

Javascript ES6, 66 65 64 Zeichen

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

Nimmt in Großbuchstaben pfür Stecker und sfür die Buchse, kehrt falsy ( 0) oder truthy ( 1, 2, 4, ..., 8192) Wert.

Prüfung:

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
quelle
-1 Byte mit Curry
Asone Tuhid
@AsoneTuhid, danke, aktualisiert. Aber dein Link ist etwas seltsam und öffnet sich nicht.
Qwertiy
Es ist TIO. Öffnet für mich.
Asone Tuhid
@AsoneTuhid,ERR_CONNECTION_RESET
Qwertiy
Hast du versucht zu entfernen https? Funktionieren andere TIO-Links? Ich habe es auf einem Mac (Chrome und Safari) und Android versucht und es funktioniert gut ...
Asone Tuhid
2

R , 132 129 113 Bytes

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

Probieren Sie es online!

Erstellt die folgende Matrix und extrahiert m[S,P]=> 1, wenn TRUE, sonst 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

3 Byte durch Komprimieren von Indizes mit intToUtf8und Ersetzen dieser Funktion durch gespeichert !. Weitere Informationen finden Sie unter Verlauf.

16 Bytes gespart dank @Giuseppe!

JayCe
quelle
brauchen Sie t=in rep?
Giuseppe
@ Giuseppe sieht aus wie ich nicht!
JayCe
@ Giuseppe Es sieht jetzt total nach einer esoterischen Sprache aus.
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.

Probieren Sie es online!

Auf alle Werte prüfen

Dem DEFHKOZug folgen ...

pos(string1,string2)prüft auf erstes Auftreten von string1in string2und gibt seine Position darin oder 0 zurück, wenn es nicht existiert.

AlexRacer
quelle