Socket - сумісність штекера


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, масив, ...).

  • Якщо ви візьмете обидва входи в один рядок, їх можна розділити не більше ніж одним символом, і навколо них не повинно бути нічого

  • Хороші входи: "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=> true/ false.

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 tho.
Асона Тухід

Відповіді:




6

Пітон 3 , 72 байти 73 байти 70 байт

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

Спробуйте в Інтернеті!

Редагувати: Дякую Шасу Брауну за різання жиру!


Виявили помилку, яка спричинила повернення C, C до помилкового.
machina.widmo

Приємно! q=можна опустити, оскільки функція анонімна. Також є додаткове місце. 70 байт. Спробуйте в Інтернеті.
Chas Brown

Спасибі! Я чомусь думав, що лямбда захопить y, тому я написав це так спочатку.
machina.widmo

Ласкаво просимо до PPCG та приємного першого повідомлення!
користувач202729

@ user202729: Я цього раніше не бачив; приємна порада знати.
Час Браун

4

C (gcc) (архітектура x86), 76 60 байт

Велике спасибі Арнольду за зміни!

Аргументи наводяться в порядку (штепсельна розетка, розетка).

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

Спробуйте в Інтернеті!


Використовуючи наведене тут посилання про архітектури x86: ви можете зберегти 3 байти, виконавши 1<<~-b.
Арнольд

66 байт , позбавившись d і термінального оператора.
Арнольд

62 байти шляхом подвоєння бітових масок. Тепер б’ємо всі мови, окрім желе та сітківку! \ o /
Арнольд

1
60 байт , просто порівнявши a з b .
Арнольд

Запропонувати L"\6\0\xdd78\0襰襰"замість{6,0,56696,0,35184,35184}
roofcat




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

Або спробуйте в Інтернеті!

Примітки:

  • Для збереження деяких байтів я використовував рядки без одинарних / подвійних лапок в якості обгортки рядків. Таким чином, 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

Це ТІО. Відкривається для мене.
Асона Тухід

@AsoneTuhid,ERR_CONNECTION_RESET
Qwertiy

Ви спробували видалити https? Чи працюють інші посилання TIO? Я спробував на mac (хром і сафарі) та андроїд, і він працює чудово ...
Asone Tuhid

2

R , 132 129 113 байт

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

Спробуйте в Інтернеті!

Побудує таку матрицю і витягує m[S,P]=> 1, якщо ІСТИНА, інше 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.