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.


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:




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!


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!


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!



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


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 .


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



@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!


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.