Разъем - совместимость штекера


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]/), нет необходимости обрабатывать неправильные входы.

  • Вы можете принять два входа в любом порядке (пожалуйста, укажите, какой).

  • Входные данные могут быть приняты в любом разумном формате (строка, стандартный, массив, ...).

  • Если вы берете оба ввода в одну строку, они могут быть разделены не более чем одним символом, и их не должно быть ничего

  • Хорошие входы: "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 Здесь есть кое-что для чтения , есть также странный штекер бритвы, итальянский сверхширокый штекер и некоторые другие. Европлаг - это мастер-плагин.
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 Спасибо, я обновил это.
Нил

3
Так смешно, ха-ха. Лучше Ниль
Луис Фелипе Де Иисус Муньос

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"

Попробуйте онлайн!

Редактировать: Спасибо Час Браун за сокращение жира!


Найдена опечатка, которая заставила C, C вернуть false.
machina.widmo

Ницца! q=может быть опущено, так как функция анонимна. Кроме того, есть дополнительное место. 70 байтов. Попробуйте онлайн.
Час Браун

Благодарность! По какой-то причине я подумал, что лямбда будет захватывать y, поэтому я и написал так изначально.
machina.widmo

Добро пожаловать в PPCG и приятного первого поста!
user202729

@ 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}
потолок кошка

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

Или попробуйте онлайн!

Примечания:

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

@AsoneTuhid,ERR_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и замены этой функции! . Смотрите историю для более разборчивой версии.

Благодаря @Giuseppe сэкономлено 16 байт!


вам нужно t=в rep?
Джузеппе

@ Джузеппе выглядит так, как будто я нет!
JayCe


@Giuseppe Теперь это выглядит как эзотерическое представление.
JayCe

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.