Soket - Pasang kompatibilitas

19

Bepergian dengan barang elektronik selalu menyenangkan, terutama ketika Anda membutuhkan adaptor untuk mengisinya. Tantangan Anda adalah membuat perencanaan perjalanan sedikit lebih mudah dengan memeriksa apakah colokan yang diberikan akan kompatibel dengan soket yang diberikan.

Tantangan

Diberi jenis steker dan jenis soket, kembalikan nilai yang menunjukkan apakah mereka akan bekerja bersama atau tidak.

Tabel kompatibilitas

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

Tabel menunjukkan informasi yang sama, hanya dialihkan.

Untuk referensi .

Memasukkan

  • Input akan diberikan sebagai dua huruf besar atau dua huruf kecil (Anda pilih).

  • Input akan selalu /[A-O]/(atau /[a-o]/), tidak perlu menangani input yang tidak valid.

  • Anda dapat menerima dua input dalam urutan apa pun (harap tentukan yang mana).

  • Input dapat diambil dalam format apa pun yang wajar (string, stdin, array, ...).

  • Jika Anda mengambil kedua input dalam satu string, mereka dapat dipisahkan oleh tidak lebih dari satu karakter dan pasti tidak ada yang mengelilinginya

  • Baik input: "G,K", "EF", "a b",['l', 'o']

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

Keluaran

  • Output dapat dikembalikan dalam format yang masuk akal .

  • Output harus berupa truthy/ falsyatau salah satu dari 2 nilai konstan

  • Output bagus: false/ any positive number, 1/ 2, 'T'/'F'

  • Output buruk: an even number/ an odd number, 1/more than 1

Contohnya

Menggunakan format socket, plug=> true/ false.

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

Celah standar tidak diijinkan.

Ini adalah sehingga jawabannya dengan byte paling sedikit di setiap bahasa menang.

Asone Tuhid
sumber
Negara saya hanya menggunakan C dan F, saya juga melihat J ... tetapi mengapa ada begitu banyak ???
AlexRacer
1
@AlexRacer Di sini, ada beberapa bacaan , ada juga steker alat cukur aneh dan steker ekstra lebar Italia dan beberapa lainnya. Europlug adalah masterplug.
Asone Tuhid

Jawaban:

7

Python 3 , 76 byte

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

Cobalah online!

Kredit:

Neil
sumber
1
lambda s,p:any([s==p,p in"CEF"and s in"DEFHKO",s=="B"<p,s in"JLN"and"C"==p])untuk 76 byte?
Neil
@Neil Terima kasih, saya memperbarui itu.
Neil
3
So funny haha ​​Better Niel
Luis felipe De jesus Munoz
6

Python 3 , 72 Bytes, 73 byte, 70 byte

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

Cobalah online!

Sunting: Terima kasih kepada Chas Brown untuk memotong sedikit lemak!

machina.widmo
sumber
Menemukan kesalahan ketik yang menyebabkan C, C mengembalikan false.
machina.widmo
Bagus! q=dapat dihilangkan karena fungsi ini anonim. Juga, ada ruang ekstra. 70 byte Cobalah online.
Chas Brown
Terima kasih! Untuk beberapa alasan saya berpikir bahwa lambda akan menangkap y, itulah sebabnya saya telah menulisnya pada awalnya.
machina.widmo
Selamat datang di PPCG, dan posting pertama yang bagus!
user202729
@ user202729: Belum pernah melihat itu sebelumnya; tip yang bagus untuk diketahui.
Chas Brown
4

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

Terima kasih banyak kepada Arnauld untuk perubahannya!

Argumen diberikan dalam urutan (steker, soket).

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

Cobalah online!

ErikF
sumber
Menggunakan referensi yang Anda berikan di sini tentang arsitektur x86: Anda dapat menghemat 3 byte dengan melakukan 1<<~-b.
Arnauld
66 byte dengan menghilangkan d dan operator ternary.
Arnauld
62 byte dengan menggandakan bitmask. Sekarang mengalahkan semua bahasa kecuali Jelly dan Retina! \ o /
Arnauld
1
60 byte dengan hanya membandingkan suatu dengan b .
Arnauld
Sarankan L"\6\0\xdd78\0襰襰"daripada{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]

Argumen berfungsi #adalah dua karakter, colok dulu, soket kedua.

Cobalah online!

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

Dipanggil sebagai fungsi kari f(socket)(plug),.

Cobalah online! (termasuk testcases, menunjukkan matriks hasil.)

FireFly
sumber
3

Jelly , 31 byte

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

Tautan monadik yang menerima daftar karakter [plug,socket]yang menghasilkan 1jika kompatibel atau 0jika tidak.

Cobalah online! Atau lihat test-suite (yang memisahkan dua kelas).

Jonathan Allan
sumber
2

PHP , 81 byte

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

Untuk menjalankannya:

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

Contoh:

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

Atau Coba online!

Catatan:

  • Untuk menghemat beberapa byte, saya telah menggunakan string tanpa kutip tunggal / ganda sebagai pembungkus string. Dengan demikian, error_reporting=0opsi ini digunakan untuk tidak menampilkan peringatan.
  • Input hanya berfungsi dengan huruf besar.
  • Output 1 untuk kompatibilitas dan 0 untuk non-kompatibilitas.

Bagaimana?

Setiap colokan kompatibel dengan soket yang sama. Ada empat colokan khusus (A, C, E, F) yang kompatibel dengan beberapa soket lainnya. Empat variabel string dengan nama colokan khusus didefinisikan untuk menampung daftar soket ekstra yang kompatibel.

Diperiksa apakah colokan dan soket input sama atau jika soket ada dalam daftar soket yang kompatibel untuk steker itu. Pemeriksaan terakhir dilakukan dengan bantuan variabel variabel PHP .

Night2
sumber
2

Javascript ES6, 66 65 64 karakter

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

Membawa huruf modal ke pplug dan suntuk socket, pengembalian falsy ( 0) atau truthy ( 1, 2, 4, ..., 8192) nilai.

Uji:

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
sumber
@ AsoneTuhid, terima kasih, diperbarui. Tetapi tautan Anda agak aneh dan tidak terbuka.
Qwertiy
Ini TIO. Terbuka untuk saya.
Asone Tuhid
@AsoneTuhid,ERR_CONNECTION_RESET
Qwertiy
Apakah Anda mencoba menghapus https? Apakah tautan TIO lain berfungsi? Saya mencoba di mac (chrome dan safari) dan android dan berfungsi dengan baik ...
Asone Tuhid
2

R , 132 129 113 byte

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

Cobalah online!

Buat matriks berikut dan ekstrak m[S,P]=> 1 jika BENAR, kalau tidak 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

Disimpan 3 byte dengan mengompresi indeks menggunakan intToUtf8dan mengganti fungsi ini dengan !. Lihat Sejarah untuk versi yang lebih mudah dibaca.

Disimpan 16 byte berkat @Giuseppe!

JayCe
sumber
yang Anda butuhkan t=di rep?
Giuseppe
@ Giuseppe sepertinya tidak!
JayCe
@Giuseppe Ini benar-benar terlihat seperti pengiriman bahasa esoteris sekarang.
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.

Cobalah online!

Uji semua nilai

Mengikuti DEFHKOkereta ...

pos(string1,string2)memeriksa kemunculan pertama string1in string2dan mengembalikan posisinya di dalamnya atau 0 jika tidak ada.

AlexRacer
sumber