Вызов
Если дан произвольный список из двух кортежей и одного элемента в одном из этих кортежей, выведите его «партнера», то есть, заданный a
и [(i,j),...,(a,b),...,(l,m)]
, выведите b
. Можно предположить, что все кортежи уникальны, и что все элементы в кортежах являются строками. Далее предположим, что у вас нет и того, (x,y)
и другого (y,x)
.
Контрольные примеры
Input Output
[("(", ")"), ("{", "}"), ("[", "]")], "}" "{"
[("I'm", "So"), ("Meta", "Even"), ("This", "Acronym")], "Even" "Meta"
[("I", "S"), ("M", "E"), ("T", "A")], "A" "T"
[("test", "cases"), ("are", "fun")], "test" "cases"
[("sad", "beep"), ("boop", "boop")], "boop" "boop"
Побеждает несколько байтов!
code-golf
array-manipulation
search
Нейт Стемен
источник
источник
[a, b, c, d]
вместо[(a, b), (c, d)]
. Это сбрило бы тонну байтов с моего ответа. : P(a,a)
и мне сказали, что этого не произойдет . Нейт тогда даже отредактировал вопрос, чтобы уточнить этот факт. Однако вы добавили тестовый пример с такой записью, а также отредактировали спецификацию, отменив это решение - почему? Это сломало кучу ответов.Ответы:
Japt, 6 байт
Работает со строками или целыми числами.
Проверь это
объяснение
Неявный ввод массива
U
и строки / целого числаV
.Получить первый элемент (subarray) в
U
этом ...Содержит
V
.Удалить
V
и неявно вернуть полученный массив из одного элемента.источник
f
вместо того, чтобыæ
в то время. Дух: Pæ
и пытается разобраться с этимf
! : DHaskell , 33 байта
Попробуйте онлайн!
Определяет бинарный оператор
!
, который принимает в качестве левого аргумента значениеx
типа τ, а в качестве правого аргумента - список кортежей (τ, τ). Шаблон определения соответствует заголовку(a,b)
и хвостуc
данного списка; еслиx==a
тогдаb
возвращается; еслиx==b
затемa
возвращается, и в противном случае мы продолжаем искать в остальной части списка, возвращаясь.(Если в списке нет «партнера», произойдет сбой, потому что мы не определили, что
x![]
должно быть.)источник
JavaScript (ES6), 39 байт
Принимает запись и массив массивов в качестве аргументов карри. Лучшая нерекурсивная версия, которую я мог сделать, была 44 байта:
источник
a=>b=>a.map(e=>b=e[1-e.indexOf(b)]||b)&&b
(a,b)=>
=>a=>b=>
каррирования, но нерекурсивная версия начиналась с рекурсивной версии, которая была каррирована, потому что мне удалось сэкономить 2 байта на рекурсивном вызове (само каррирование на самом деле стоит байт).MATL ,
41456 байтПопробуйте онлайн!
Ввод представляет собой массив как
[{a;b},{c;d}]
. Bytecount сильно колеблется, в то время как OP выясняет, что на самом деле разрешено.Я начал с 4-байтовой версии, которая могла обрабатывать только односимвольные строки, что было единственным тестовым сценарием в исходном тесте. Когда это оказалось недействительным, я сделал очень длинную 14-байтовую версию, которая была приятной и хакерской (проверьте историю изменений!), Заставила меня обнаружить ошибку, а затем оказалась совершенно ненужной
Y=
, с подходящим вводом , работал так же хорошо, как мой оригинальный 4-байтовыйy=P)
.источник
Python 2 , 37 байт
Попробуйте онлайн!
Протон , 31 байт
Попробуйте онлайн!
(Эти два ответа настолько похожи, что я публикую их вместе, чтобы избежать перефразинга)
источник
reversed
чтобыreverse
в течение Proton -1 байт. \ s: P А если серьезно,reverse
то намного лучше, не так ли? : PPerl 5 , 30 + 1 (-p) = 31 байт
Попробуйте онлайн!
источник
Python 2 ,
594542 байта-14 байтов благодаря Emigna. -3 байта благодаря Maltysen.
Попробуйте онлайн!
Все еще хочу использовать карри, хотя. ; -;
источник
y+[1,-1][y%2]
. Просто не думал, что это было побитовым ... Спасибо!C ++, 179 байт
C ++ с типом данных карты, 162 байта
В MSVC код компилируется, даже если последний
return
оператор (return"";
) опущен. Это делает код на 9 байт легче, НО выход из конца функции (то есть, не выход изreturn
оператора в цикле) без операторов возврата приведет к неопределенному поведению и не будет работать, если массив кортежей не содержит элемент «ключ»источник
PowerShell, 36 байт
находит элемент, содержащий intput, затем получает элемент 'other', исключая входные данные из него, PowerShell не обладает самым удивительным управлением массивами, но для этого может быть встроенный модуль, о котором я не знаю.
источник
("boop", "boop")
тестового случая.Рёда , 30 байт
Попробуйте онлайн!
Объяснение:
источник
Mathematica
2724 байтаCases
выбирает элементы списка, которые соответствуют шаблону. При использовании со стрелкой элементы, соответствующие шаблонам, могут быть преобразованы.Использование:
Объяснение: В этом примере после встречи с первым аргументом 3 функция становится той,
Cases[{3,x_}|{x_,3}:>x]
которая является операторной формой,Cases
которая затем применяется ко 2-му аргументу,{{1, 2}, {3, 4}}
выбирая таким образом компаньон из 3, независимо от того, находится ли он в позиции абсциссы или ординаты. В частности, эта функция выведет список всех компаньонов, если на самом деле 1-й аргумент встречается более чем один раз в 2-м аргументе, другими словами, это выходит за рамки предположений поставленного вопроса.Вмещающие глифы должны быть волнистыми скобками. Сохранено 3 байта с предложением "Curry" от @Notatree
источник
Cases[{#,x_}|{x_,#}:>x]&
используется как%[3][{{1,2},{3,4}}]
R , 47
42байтаПопробуйте онлайн!
Работает на матрице или прямом векторе. v = значение поиска, а = массив кортежей.
источник
Желе , 6 байт
Двоичная ссылка, в которой список партнеров находится слева, а потерянный - справа, а партнер возвращается.
Попробуйте онлайн!
Как?
источник
(a,a)
и получил ответ, что нам не нужно с этим обращаться). Я уверен, что смогу это исправить, но я не уверен, что спецификация такая, как планировалось сейчас.Pyth -
1198 байтПопробуйте это онлайн здесь .
источник
Haskell ,
6562 байтаПопробуйте онлайн!
объяснение
Это использует span, чтобы найти первый экземпляр, где
x
содержится кортеж. Затем он захватывает первый элемент кортежа, если он не равен, и второй в противном случае.Haskell Lambdabot,
5956 байтПопробуйте онлайн!
объяснение
Это использует функцию
Data.List
sfirst
для сокращения используемых байтов(!!0).snd.span
, однако, потому чтоfirst
возвращает a, которыйMaybe
мы должны добавитьJust
к нашему сопоставлению с образцом#
.источник
x!((a,b):c)|x==a=b|x==b=a|1<2=x!c
это 33 байта.05AB1E , 7 байтов
Попробуйте онлайн!
Альтернативное 7-байтовое решение
Попробуйте онлайн!
источник
˜D²k>è
для 6, если нет особой причины для XOR'ing с 1?Common Lisp, 74 байта
Попробуйте онлайн!
источник
Java 8, 78 байт
Лямбда (карри) от
Stream<List<String>>
лямбда отString
доString
(хотя неявная типизация позволяет этому работать для произвольных списков). В языке нет выделенных классов кортежей, и я не знаю ни одного в стандартной библиотеке, поэтому входные пары представлены в виде списков. Может быть назначен наFunction<Stream<List<String>>, Function<String, String>>
.Попробуйте онлайн
Я приписываю сохранение последних 6 байтов любому, кто сможет убедить меня в том, что возврат
Optional
действителен. Я не смог убедить себя.Одной из интересных частей этого решения для меня было определение самого дешевого способа получить выходные данные из потока. Я считал
reduce
,findFirst
иmin
/max
, но ни один не был ниже интуитивногоfindAny
.источник
Рубин, 31 байт
Возвращает одноэлементный массив.
источник
JavaScript (ES6), 45 байт
Придумал это прошлой ночью и заметил, что Нейл избил меня до лучшего решения JS; решил, что я могу также опубликовать это в любом случае.
Работает со строками и целыми числами.
источник
Пролог (SWI) , 43 байта
Попробуйте онлайн!
источник
C # (.NET Core) ,
101100 + 18 байтспасибо Гжегожу Пулавскому за помощь в сокращении пары байтов.
Попробуйте онлайн!
C # (.NET Core),
122121120 байтовПопробуйте онлайн!
источник
x=>y=>
короче(x,y)=>
(Func<a, b, c>
становитсяFunc<a, Func<b, c>>
и вызов функцииf(a, b)
становитсяf(a)(b)
) - отличный ответ кстати!using System.Linq;
противnamespace System.Linq{}
)Шелуха , 10 байт
Попробуйте онлайн!
Ungolfed / Пояснение
Примечание : приведенный выше пример работает с целыми числами только для удобства чтения, сам тип не имеет значения (если вы можете сравнить его).
источник
Swift 4 , 43 байта
Выходными данными является массив, который либо пустой (партнер не найден), либо содержит один элемент (партнер).
Тестовые случаи:
источник
QBIC , 30 байтов
QBIC не силен в списках и кортежах. Приведенный выше код принимает
a
в качестве параметра командной строки, а затем запрашивает ввод пользователя в парах для кортежей. Когда дан пустой элемент, он выводитb
.Пробный прогон
объяснение
Альтернативная версия, 22 байта
Это в основном делает то же самое, что и более длинная версия, но немедленно завершает работу, когда находит совпадение. Я перечислил это как альтернативу, потому что вы не можете ввести все кортежи в эту программу, учитывая, что она закрывается рано.
источник
Mathematica, 50 байтов
Попробуйте онлайн!
источник
{'boop','boop'}
теста.Stacked , 21 байт
Попробуйте онлайн!Это берет входные данные из стека и оставляет выходные данные в стеке. В развернутом виде это выглядит так:
объяснение
Давайте возьмем
(('sad' 'beep') ('boop' 'boop'))
и'boop'
в качестве входных данных. Затем такой массив создается так:$revmap,
:То есть копия массива является картой, каждый член переворачивается, и эти два соединяются вместе.
KeyArray
в свою очередь делает хеш из данных значений, например так:Затем
\
переносит строку поиска на вершину стека и получает ключ из KeyArray, который совпадает с#
. Это возвращает только одно значение, поэтому не нужно беспокоиться о дубликате ключа в KeyArray.Другие подходы
32 байта: (ввод из стека, вывод в STDOUT)
[@x:$revmap,uniq[...x=$out*]map]
36 байт:
{%x[y index#+]YES 0# :y neq keep 0#}
38 байт:
[@x:$revmap#,[KeyArray x#]map:keep 0#]
46 байтов:
[@x:KeyArray\$revmap KeyArray,[x#]map:keep 0#]
источник
Excel, 18 байт
Анонимная формула рабочей книги Excel, которая принимает входные данные
<Lookup Value>
из диапазонаA1
,<Key Array>
из диапазонаB:B
и<Def Array>
из диапазонаC:C
и выводит значение определения, связанного со значением поиска, в вызывающую ячейкуОбразец ввода / вывода должен быть включен, когда это возможно
источник