(мы не будем находить Find
или ловить tryCatch
, хотя)
Это вторая часть серии из нескольких частей реализации некоторых интересных R-функций. Часть первая можно найти здесь .
Задание:
Вы должны реализовать функцию Rmatch
как можно меньше байтов.
Входные данные:
x
возможно пустой список / массив целых чиселtable
возможно пустой список / массив целых чиселnomatch
одно целое значениеincomparables
возможно пустой список / массив целых чисел
Выход:
- один массив / список целых чисел
O
равной длиныx
, где каждое значениеO[i]
представляет либо:- Индекс
j
от первого значения вtable
которомtable[j]==x[i]
nomatch
, указывая, что никакое значение вtable
не равноx[i]
ИЛИ, которыйx[i]
находится в спискеincomparables
.
- Индекс
Тестовые случаи
All in the form x, table, nomatch, incomparables -> output
outputs
[], [1,2,3], 0, [5] -> []
[1, 2, 3], [], 0, [5] -> [0, 0, 0]
[9, 4, 3, 6, 3], [9, 8, 7, 6, 5, 4, 3, 2, 1], -1, [4] -> [1, -1, 7, 4, 7]
[8, 6, 7, 5, 3, 0, 9], [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6], 1000, [1] -> [12, 8, 14, 5, 1, 1000, 6]
При необходимости можно создавать больше тестовых случаев.
Дополнительные правила:
- R имеет индексы на основе 1, но приемлемы последовательные альтернативные индексы. Таким образом, вы можете использовать индексы, которые начинаются с 3 или 17 или как угодно, но это должно быть согласовано, и вы должны указать это в своем ответе.
- Если у выбранного вами языка есть встроенная функция, которая делает это, пожалуйста, также внедрите свое собственное решение.
- Пояснения приветствуются.
Это код-гольф , поэтому выигрывает самое короткое решение в байтах!
code-golf
array-manipulation
Giuseppe
источник
источник
4
вincomparables
, так что это не может быть сопоставлено. Если ваш язык не может поддерживать отрицательные числа, тогда можно потребовать неотрицательные числа, но укажите это предположение в своем представлении.make
.Ответы:
Желе ,
108 байт-2 благодаря Эрику Аутгольферу
Полная программа, принимающая четыре аргумента командной строки,
incomparables nomatch table x
которая печатает представление Jelly * спискаmatch
результатов функции R.Попробуйте онлайн!
Как?
например, с
incomparables nomatch table x
=[1,4], 2, [2,4], [4,3,2,1,0]
:* Пустой список представлен как ничто, список длиннее представлен как просто элемент, в то время как другие списки заключены в
[]
и разделены,
источник
R , 83 байта
Попробуйте онлайн!
Избегает
match
,%in%
иsetdiff
.источник
R , 55 байт
В этом случае код не использует
match
его с полной функциональностью, он просто используется какindex
функция. Первый ответ R, так что, вероятно, невероятно неэффективно!Примечание (спасибо Giuseppe за информацию) :
%in%
иsetdiff
оба они реализованы внутриmatch
, поэтому полное избавление от этой удивительно полезной функции приведет к путанице . Таким образом, есть награда в 150 представителей без крайнего срока для этого! (обратите внимание, чтоsetdiff
это разрешено, хотя)Попробуйте онлайн!
или...
R , 5 байт
Попробуйте онлайн!
источник
%in%
иmatch
; если вы хотите найти хороший ответ для игры в гольф без какой-либо из этих функций (вероятно, это будет ужасно), я щедро вознагражу это.match
подчинениеifelse
этот совет: codegolf.stackexchange.com/a/97826/59530match
: SЖеле ,
98 байтПопробуйте онлайн!
Полная программа , которая принимает три аргумента:
[[table], incomparables]
,x
,nomatch
в таком порядке.источник
C # (интерактивный компилятор Visual C #) , 60 байт
Попробуйте онлайн!
источник
Рубин , 44 байта
Zero-индексироваться.
Попробуйте онлайн!
источник
R , 79 байт
Попробуйте онлайн!
R , 66 байт
Объединяя мое решение с частями решения Ника .
Попробуйте онлайн!
источник
Japt , 14 байт
Попытайся
источник
Python 3 , 60 байт
Попробуйте онлайн!
источник
R has 1-based indices, but a consistent alternative-based indices are acceptable.
Таким образом, вы можете удалить-~
и использовать 0-индексирование для -1 байта.t.index(v)if v in{*t}-{*i}else n
имеет точно такой же байтовый счет, что и ваше текущееv in{*t}-{*i}and-~t.index(v)or n
решение, хахаPowerShell , 63 байта
Попробуйте онлайн!
0 индексированные
источник
JavaScript (ES6), 53 байта
Попробуйте онлайн!
источник
Perl 6 , 45 байт
Попробуйте онлайн!
Блок анонимного кода, который принимает ввод curry, like
f(table, nomatch, incomparables)(x)
и возвращает индексированные совпадения 0.Объяснение:
источник
$_∉d&&b.antipairs.Map{$_}||c
то, что работало бы хорошо, но при значении Falsey, равном 0. Первое ($ _: k) - отличное решение, позволяющее избежать длинных антипар. Принуждение к карте.Древесный уголь , 14 байтов
Попробуйте онлайн! Ссылка на подробную версию кода. 1-индексироваться. Объяснение:
источник
C (gcc) , 125 байт
1-индексироваться.
Учитывая, что я не могу использовать значение Sentinel в переданных массивах, мне нужно дать границы массивов для каждого массива.
Попробуйте онлайн!
источник
Атташе , 39 байт
Попробуйте онлайн!
Довольно простая проверка. Обратите внимание, что порядок аргументов отличается от порядка соответствия; в частности,
x
является последним аргументом, а не первым, и соответствует_4
приведенному фрагменту.объяснение
источник
Haskell,
5756 байтПорядок Аргументом является:
table
,nomatch
,incomparables
,x
.Попробуйте онлайн!
источник
05AB1E , 7 байтов
0 индексированные. Входы в следующем порядке:
incomparables, table, x, nomatch
.Попробуйте онлайн.
Объяснение:
источник