Socket - Kompatybilność wtyczek

19

Podróżowanie z elektroniką jest zawsze zabawne, szczególnie gdy potrzebujesz adaptera do ładowania. Twoim wyzwaniem jest ułatwienie planowania podróży poprzez sprawdzenie, czy dana wtyczka będzie kompatybilna z danym gniazdem.

Wyzwanie

Biorąc pod uwagę typ wtyczki i typ gniazda, zwróć wartość wskazującą, czy będą one działać razem, czy nie.

Tabela kompatybilności

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

Tabele pokazują te same informacje, tylko transponowane.

Dla odniesienia .

Wejście

  • Dane wejściowe będą podawane jako dwie wielkie lub dwie małe litery (wybierz).

  • Wejściami zawsze będą /[A-O]/(lub /[a-o]/), nie ma potrzeby obsługi nieprawidłowych danych wejściowych.

  • Możesz zaakceptować dwa dane wejściowe w dowolnej kolejności (proszę określić, które).

  • Dane wejściowe można przyjmować w dowolnym rozsądnym formacie (ciąg, standardowe, tablica, ...).

  • Jeśli weźmiesz oba dane wejściowe w jednym ciągu, można je oddzielić nie więcej niż jednym znakiem i nie może ich otaczać nic

  • Dobre wejścia: "G,K", "EF", "a b",['l', 'o']

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

Wynik

  • Dane wyjściowe można zwrócić w dowolnym rozsądnym formacie .

  • Wyjście musi być albo truthy/ falsylub jeden z 2 stałych

  • Dobre wyniki: false/ any positive number, 1/ 2, 'T'/'F'

  • Złe wyjścia: an even number/ an odd number, 1/more than 1

Przykłady

Używając formatu socket, plug=> true/ false.

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

Standardowe luki są niedozwolone.

To jest więc wygrywa odpowiedź z najmniejszą liczbą bajtów w każdym języku.

Asone Tuhid
źródło
Mój kraj używa tylko C i F, widziałem też J ... ale dlaczego jest ich tak dużo ???
AlexRacer
1
@AlexRacer Tutaj jakiś odczyt , tam również dziwne wtyczki golarka i włoska bardzo szeroka wtyczka i inni. Europlug jest wtyczką główną.
Asone Tuhid,

Odpowiedzi:

7

Python 3 , 76 bajtów

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

Wypróbuj online!

Kredyty:

Neil
źródło
1
lambda s,p:any([s==p,p in"CEF"and s in"DEFHKO",s=="B"<p,s in"JLN"and"C"==p])na 76 bajtów?
Neil
@Neil Thanks Zaktualizowałem to.
Neil
3
Tak zabawne haha ​​Better Niel
Luis felipe De jesus Munoz
6

Python 3 , 72 bajty 73 bajty 70 bajtów

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

Wypróbuj online!

Edycja: Podziękowania dla Chasa Browna za zmniejszenie ilości tłuszczu!

machina.widmo
źródło
Znaleziono literówkę, która spowodowała, że ​​C, C zwróci false.
machina.widmo
Ładny! q=można pominąć, ponieważ funkcja jest anonimowa. Jest też dodatkowa przestrzeń. 70 bajtów. Wypróbuj online.
Chas Brown
Dzięki! Z jakiegoś powodu myślałem, że lambda złapie y, i dlatego tak to napisałem na początku.
machina.widmo
Witamy w PPCG i miły pierwszy post!
user202729,
@ user202729: Nie widziałem tego wcześniej; fajna wskazówka.
Chas Brown,
4

C (gcc) (architektura x86), 76 60 bajtów

Ogromne podziękowania dla Arnaulda za zmiany!

Argumenty podano w kolejności (wtyczka, gniazdo).

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

Wypróbuj online!

ErikF
źródło
Korzystając z podanego tutaj odniesienia na temat architektur x86: możesz zaoszczędzić 3 bajty 1<<~-b.
Arnauld,
66 bajtów , pozbywając się d i operatora trójskładnikowego.
Arnauld
62 bajty poprzez podwojenie masek bitowych. Teraz pokonuje wszystkie języki oprócz Jelly i Retina! \ o /
Arnauld
1
60 bajtów przez porównanie a z b .
Arnauld,
Zaproponuj L"\6\0\xdd78\0襰襰"zamiast{6,0,56696,0,35184,35184}
ceilingcat
3

Haskell, 67 bajtów

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

Argumentami do działania #są dwa znaki, najpierw wtyczka, drugi gniazdo.

Wypróbuj online!

nimi
źródło
3

JavaScript (Node.js) , 79 bajtów

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

Powoływana jako curry funkcji f(socket)(plug).

Wypróbuj online! (obejmuje przypadki testowe przedstawiające macierz wyników).

Robaczek świętojański
źródło
3

Galaretka , 31 bajtów

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

Monadyczny link akceptujący listę znaków, [plug,socket]który daje 1zgodność, 0jeśli nie jest zgodna .

Wypróbuj online! Lub zobacz zestaw testowy (który oddziela dwie klasy).

Jonathan Allan
źródło
2

PHP , 81 bajtów

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

Aby uruchomić:

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

Przykład:

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

Lub wypróbuj online!

Uwagi:

  • Aby zapisać niektóre bajty, użyłem ciągów bez pojedynczych / podwójnych cudzysłowów jako opakowania ciągów. W ten sposób error_reporting=0opcja nie wyświetla ostrzeżeń.
  • Wprowadzanie działa tylko z dużymi literami.
  • Wyjścia 1 dla zgodności i 0 dla niezgodności.

W jaki sposób?

Każda wtyczka jest kompatybilna z tym samym gniazdem co sama. Istnieją cztery specjalne wtyczki (A, C, E, F), które są również kompatybilne z kilkoma innymi gniazdami. Zdefiniowane są cztery zmienne łańcuchowe z nazwą specjalnych wtyczek, które przechowują listę ich dodatkowych kompatybilnych gniazd.

Sprawdzane jest, czy wtyczka wejściowa i gniazdo są takie same lub czy gniazdo znajduje się na liście kompatybilnych gniazd dla tej wtyczki. Ta ostatnia kontrola odbywa się za pomocą zmiennych zmiennych PHP .

Noc 2
źródło
2

JavaScript ES6, 66 65 64 znaków

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

Staje liter do pdo wtyczki i sdo gniazda wraca falsy ( 0) lub truthy ( 1, 2, 4, ..., 8192wartości).

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

Qwertiy
źródło
-1 bajt z
curry
@AsoneTuhid, dziękuję, zaktualizowano. Ale twój link jest dziwny i nie otwiera się.
Qwertiy
To TIO. Otwiera się dla mnie.
Asone Tuhid,
@AsoneTuhid,ERR_CONNECTION_RESET
Qwertiy
Próbowałeś usunąć https? Czy działają inne łącza TIO? Próbowałem na Macu (Chrome i Safari) i
Androidzie
2

R , 132 129 113 bajtów

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

Wypróbuj online!

Buduje następującą macierz i wyodrębnia m[S,P]=> 1 jeśli PRAWDA, w przeciwnym razie 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

Zaoszczędzono 3 bajty, kompresując indeksy za pomocą intToUtf8i zastępując tę ​​funkcję !. Zobacz historię, aby uzyskać bardziej czytelną wersję.

Zaoszczędź 16 bajtów dzięki @Giuseppe!

JayCe
źródło
musisz t=się rep?
Giuseppe,
@Giuseppe wygląda na to, że nie!
JayCe,
@Giuseppe Teraz wygląda zupełnie jak ezoteryczny język.
JayCe,
0

Pascal (FPC) , 113 bajtów

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.

Wypróbuj online!

Sprawdź wszystkie wartości

Jadąc DEFHKOpociągiem ...

pos(string1,string2)sprawdza pierwsze wystąpienie string1in string2i zwraca swoją pozycję w nim lub 0, jeśli nie istnieje.

AlexRacer
źródło