ซ็อกเก็ต - ความเข้ากันได้ของปลั๊ก


19

การเดินทางด้วยอุปกรณ์อิเล็กทรอนิกส์เป็นเรื่องสนุกเสมอโดยเฉพาะอย่างยิ่งเมื่อคุณต้องการอะแดปเตอร์เพื่อชาร์จ ความท้าทายของคุณคือทำให้การวางแผนการเดินทางง่ายขึ้นเพียงเล็กน้อยโดยตรวจสอบว่าปลั๊กที่ให้มานั้นเข้ากันได้กับซ็อกเก็ตที่กำหนด

ท้าทาย

กำหนดประเภทปลั๊กและซ็อกเก็ตประเภทส่งกลับค่าที่ระบุว่าพวกเขาจะทำงานร่วมกันหรือไม่

ตารางความเข้ากันได้

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

ตารางแสดงข้อมูลเดียวกันย้ายที่เท่านั้น

สำหรับการอ้างอิง

อินพุต

  • อินพุตจะได้รับเป็นตัวอักษรตัวพิมพ์ใหญ่สองตัวหรือตัวพิมพ์เล็กสองตัว (คุณเลือก)

  • อินพุตจะเป็น/[A-O]/(หรือ/[a-o]/) เสมอไม่จำเป็นต้องจัดการอินพุตที่ไม่ถูกต้อง

  • คุณสามารถยอมรับทั้งสองอินพุตในลำดับใดก็ได้ (โปรดระบุว่า)

  • อินพุตสามารถนำมาในรูปแบบที่เหมาะสม (สตริง, stdin, array, ... )

  • หากคุณใช้ทั้งสองอินพุตในสตริงเดียวพวกเขาสามารถคั่นด้วยอักขระไม่เกินหนึ่งตัวและจะต้องไม่มีสิ่งใดล้อมรอบพวกเขา

  • ปัจจัยการผลิตที่ดี: "G,K", "EF", "a b",['l', 'o']

  • ปัจจัยการผลิตที่ไม่ดี: "K l", "f(O)(I)",[1,5]

เอาท์พุต

  • การส่งออกสามารถกลับมาในรูปแบบที่เหมาะสมใด

  • เอาต์พุตต้องเป็นค่าคงที่truthy/ falsyหรือหนึ่งใน 2

  • เอาต์พุตที่ดี: false/ any positive number, 1/ 2, 'T'/'F'

  • เอาต์พุตไม่ดี: an even number/ an odd number, 1/more than 1

ตัวอย่าง

โดยใช้รูปแบบsocket, =>plug /truefalse

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

ช่องโหว่มาตรฐานไม่ได้รับอนุญาต

นี่คือดังนั้นคำตอบที่มีจำนวนไบต์น้อยที่สุดในแต่ละภาษาจะเป็นผู้ชนะ


ประเทศของฉันใช้ C และ F เท่านั้นฉันยังเห็น J ... แต่ทำไมถึงมีจำนวนมาก ???
AlexRacer

1
@AlexRacer ที่นี่มีการอ่านบางส่วนนอกจากนี้ยังมีปลั๊กเครื่องโกนหนวดที่แปลกและปลั๊กแบบกว้างเป็นพิเศษของอิตาลีและอื่น ๆ Europlug เป็น masterplug สรรพสินค้าใหญ่
Asone Tuhid

คำตอบ:



7

Python 3 , 76 ไบต์

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

ลองออนไลน์!

เครดิต:


1
lambda s,p:any([s==p,p in"CEF"and s in"DEFHKO",s=="B"<p,s in"JLN"and"C"==p])สำหรับ 76 ไบต์?
Neil

@ Neil ขอบคุณฉันได้รับการปรับปรุง
Neil

3
ตลกมากฮ่าฮ่า Better Better Niel
Luis felipe De jesus Munoz

6

Python 3 , 72 ไบต์ 73 ไบต์ 70 ไบต์

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

ลองออนไลน์!

แก้ไข: ขอบคุณChas Brownสำหรับการลดไขมัน!


พบความผิดพลาดที่ทำให้ C, C ส่งคืนค่าเท็จ
machina.widmo

ดี! q=สามารถละเว้นได้เนื่องจากฟังก์ชั่นนั้นไม่ระบุชื่อ นอกจากนี้ยังมีพื้นที่พิเศษ 70 ไบต์ ลองออนไลน์
Chas Brown

ขอบคุณ! ด้วยเหตุผลบางอย่างฉันคิดว่าแลมบ์ดาจะจับ y ซึ่งเป็นเหตุผลที่ฉันได้เขียนไว้ในตอนแรก
machina.widmo

ยินดีต้อนรับสู่ PPCG และโพสต์แรกที่ดี!
user202729

@ user202729: ไม่เคยเห็นมาก่อน เคล็ดลับที่ดีที่จะรู้ว่า
Chas Brown

4

C (gcc) (สถาปัตยกรรม x86), 76 60 ไบต์

ขอบคุณ Arnauld สำหรับการเปลี่ยนแปลงทุกอย่าง!

อาร์กิวเมนต์ได้รับตามลำดับ (ปลั๊ก, ซ็อกเก็ต)

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

ลองออนไลน์!


โดยใช้การอ้างอิงที่คุณให้ไว้ที่นี่เกี่ยวกับสถาปัตยกรรม x86: คุณสามารถบันทึก 3 1<<~-bไบต์โดยการทำ
Arnauld

66 ไบต์โดยการกำจัดdและผู้ประกอบการที่ประกอบไปด้วย
Arnauld

62 ไบต์โดยการเพิ่ม bitmasks เป็นสองเท่า ตอนนี้เต้นทุกภาษายกเว้น Jelly และ Retina! \ o /
Arnauld

1
60 ไบต์โดยเพียงแค่การเปรียบเทียบกับข
Arnauld

แนะนำL"\6\0\xdd78\0襰襰"แทน{6,0,56696,0,35184,35184}
ceilingcat

3

Haskell, 67 ไบต์

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

อาร์กิวเมนต์ของฟังก์ชั่น#คือสองตัวอักษร, ปลั๊กก่อน, ซ็อกเก็ตที่สอง

ลองออนไลน์!




2

PHP , 81 ไบต์

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

วิธีเรียกใช้:

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

ตัวอย่าง:

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

หรือลองออนไลน์!

หมายเหตุ:

  • หากต้องการบันทึกบางไบต์ฉันได้ใช้สตริงโดยไม่มีการเสนอราคาเดียว / สองครั้งเป็น wrapper สตริง ดังนั้นerror_reporting=0ตัวเลือกที่ใช้ในการไม่ส่งคำเตือน
  • อินพุตใช้งานได้กับตัวอักษรตัวพิมพ์ใหญ่เท่านั้น
  • เอาต์พุต 1 สำหรับความเข้ากันได้และ 0 สำหรับความเข้ากันไม่ได้

อย่างไร?

ปลั๊กทุกตัวสามารถใช้งานได้กับซ็อกเก็ตตัวเดียวกัน มีปลั๊กพิเศษสี่ (A, C, E, F) ซึ่งเข้ากันได้กับซ็อกเก็ตอีกไม่กี่เช่นกัน ตัวแปรสตริงสี่ตัวที่มีชื่อปลั๊กพิเศษกำหนดไว้เพื่อเก็บรายการซ็อกเก็ตที่ใช้งานร่วมกันได้พิเศษ

มีการตรวจสอบว่าปลั๊กและซ็อกเก็ตอินพุตเหมือนกันหรือถ้าซ็อกเก็ตอยู่ในรายการซ็อกเก็ตที่เข้ากันได้สำหรับปลั๊กนั้น การตรวจสอบหลังจะทำด้วยความช่วยเหลือของตัวแปรตัวแปรของ PHP


2

Javascript ES6, 66 65 64 ตัวอักษร

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

นำตัวอักษรลงในpปลั๊กและsซ็อกเก็ตผลตอบแทน falsy ( 0) หรือ truthy ( 1, 2, 4, ... 8192) มูลค่า

ทดสอบ:

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 ขอบคุณอัปเดตแล้ว แต่ลิงค์ของคุณแปลกประหลาดและไม่เปิด
Qwertiy

มันคือ TIO เปิดให้ฉัน
Asone Tuhid

@AsoneTuhidERR_CONNECTION_RESET
Qwertiy

คุณลองลบhttpsไหม ลิงก์ TIO อื่น ๆ ใช้งานได้หรือไม่ ฉันลองบน mac (chrome และ safari) และ android และมันใช้งานได้ดี ...
Asone Tuhid

2

R , 132 129 113 ไบต์

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

ลองออนไลน์!

สร้างเมทริกซ์ต่อไปนี้และแยกm[S,P]=> 1 ถ้า TRUE หรือ 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 ไบต์โดยการบีบอัดดัชนีการใช้และการเปลี่ยนฟังก์ชั่นนี้กับintToUtf8 !ดูประวัติสำหรับเวอร์ชันที่อ่านง่ายขึ้น

บันทึก 16 ไบต์ด้วย @Giuseppe!


คุณไม่จำเป็นต้องt=อยู่ในrep?
จูเซปเป้

@Giuseppe ดูเหมือนว่าฉันไม่ได้!
JayCe


@Giuseppe ตอนนี้ดูเหมือนว่าการส่งภาษาลึกลับทั้งหมด
JayCe

0

Pascal (FPC) , 113 ไบต์

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.

ลองออนไลน์!

ทดสอบค่าทั้งหมด

ติดตามDEFHKOรถไฟ ...

pos(string1,string2)ตรวจสอบการเกิดขึ้นครั้งแรกของstring1ในstring2และส่งกลับตำแหน่งในนั้นหรือ 0 ถ้ามันไม่อยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.