Определение
Учитывая матрицу неотрицательных целых чисел и неотрицательное целое число , мы определяем как функцию «отбивки», которая удаляет все строки и все столбцы в которые содержат k .
Пример:
Твое задание
Учитывая и целевая сумма , ваша задача состоит в том, чтобы найти все возможные значения таким образом, что сумма остальных элементов в равна .
Пример:
Учитывая приведенные выше матрицы и :
- является решением, потому что и
- - единственное возможное решение: и
Таким образом, ожидаемый результат будет .
Разъяснения и правила
- На входе гарантированно допускается хотя бы одно решение.
- Сумма элементов в исходной матрице гарантированно будет больше , чем .
- Вы можете предположить, что . Это означает, что пустая матрица никогда не приведет к решению.
- Значения могут быть напечатаны или возвращены в любом порядке и в любом разумном, однозначном формате.
- Вам разрешено не вывод (например, или считаются правильными ответами для приведенного выше примера).[ 1 , 5 , 1 , 5 ]
- Это код-гольф .
Контрольные примеры
M = [[6,1,5],[1,2,8],[9,8,5],[6,0,4]]
S = 9
Solution = {1,5}
M = [[7,2],[1,4]]
S = 7
Solution = {4}
M = [[12,5,2,3],[17,11,18,8]]
S = 43
Solution = {5}
M = [[7,12],[10,5],[0,13]]
S = 17
Solution = {0,13}
M = [[1,1,0,1],[2,0,0,2],[2,0,1,0]]
S = 1
Solution = {2}
M = [[57,8,33,84],[84,78,19,14],[43,14,81,30]]
S = 236
Solution = {19,43,57}
M = [[2,5,8],[3,5,8],[10,8,5],[10,6,7],[10,6,4]]
S = 49
Solution = {2,3,4,7}
M = [[5,4,0],[3,0,4],[8,2,2]]
S = 8
Solution = {0,2,3,4,5,8}
code-golf
array-manipulation
matrix
Arnauld
источник
источник
[[1,5],[1],[5],[]]
для первого контрольного примера) будет допустимым средством вывода?Ответы:
К (нгн / к) , 39 байт
Попробуйте онлайн!
спасибо @ Adám за это объяснение :
{
...}
функция,x
является M иy
является S,/x
сгладить М (это k кандидатов)a:
назначить наa
x{
…}/:
Применить следующую функцию к каждому, используя M в качестве фиксированного левого аргумента (x
):x=y
Булева матрица, указывающая, где элементы M равны текущему k кандидату~
отрицать этоb:
назначить этоb
&/
И сокращение (находит столбцы без этого k )(
...)&\:
И это с каждым из следующего:&/'b
И сокращение каждого (находит строки без этого k )x*
умножить М на это+//
общая суммаy=
список логических значений, указывающих, где S равно этим суммам&
индексы истинa@
используйте это, чтобы индексировать в элементы ( k кандидатов)источник
APL (Dyalog Unicode) ,
353328 байт SBCS-7 благодаря нгн.
Анонимный инфикс лямбда. Принимает S в качестве левого аргумента и M в качестве правого аргумента.
Попробуйте онлайн!
{
…}
«Dfn»,⍺
и⍵
это левый и правый аргументы ( S и M ) соответственно:⍵[
…]
Индекс М со следующими координатами:⊂⍵
заключить M, чтобы рассматривать его как единый элемент⍵=
сравнить каждый элемент (т. е. k кандидатов) из M со всем этим M(
…)¨
Применить следующую молчаливую функцию к каждому:∧⌿
вертикальное И сокращение (находит столбцы без этого k кандидата)…
∘.∧
Декартово булево произведение с:∧/
горизонтальное сокращение И (находит строки без этого k кандидата)⍵×
умножить М с этой маской+/∘,
суммировать сплюснутую матрицу⍺=
Логическое указание, где S равно этим суммам⍸
индексы, где это правдаисточник
{M[⍸⍺={+/,(∧⌿d)/M⌿⍨∧/d←M≠⍵}¨M←⍵]}
M
когда она еще не создана?⍵
как⍺
во внутреннем dfn одинаково смущает меня{⍵[⍸⍺=+/¨(,⍵×∧/∘.∧∧⌿)¨⍵≠⊂⍵]}
R ,
7873 байтаПопробуйте онлайн!
Не сортирует и не дублирует вывод.
Кредит J.Doe & Giuseppe за -5 байт.
источник
Желе ,
2019171514 байтЭто монадическая ссылка, которая принимает M в качестве аргумента и читает S из STDIN.
Попробуйте онлайн!
Как это устроено
источник
Haskell ,
88868477 байтПроверьте все тестовые случаи .
объяснение
источник
Pyth ,
27 23 22 2120 байтТестирование!
Не дедуплицирует.
Как это устроено?
источник
Python 2 ,
114108 байтПопробуйте онлайн!
источник
Perl 6 ,
8074 байтаПопробуйте онлайн!
объяснение
источник
05AB1E , 21 байт
Попробуйте онлайн!
Только после того, как я написал этот ответ, я увидел Кевина . Я считаю, что это существенно отличается, поэтому я публикую это отдельно. Моя интуиция говорит, что оптимальное количество байтов составляет около 18, поэтому мне придется вернуться к этому и посмотреть, что еще я могу сделать. С помощью текущего кода невозможно написать набор тестов, но я сам проверил все тестовые примеры и результаты верны.
Алгоритм обрезки
~
с ,+
если вы хотите проверить , что тоже), что приводит к:Наконец, это карты0 в 1 и все остальные целые 0 и выполняет поэлементное умножение с M :
После чего вычисляется сумма полученной матрицы.
источник
[[1,1,0,1],[2,0,0,2],[2,0,1,0]]
когда меня подставили для номера1
(который удаляет каждый столбец ...) У меня действительно было чуть меньше 20 в моей голове, а также возможность. Жаль, что встроенных матриц практически нет, несмотря на добавленные в последнее время продукты. Что касается1|2
(1 2~
в 05AB1E synthax), приводящего к 3, то это потому, чтоlogical OR
действует как a,binary OR
когда участвуют числа, отличные от0
/1
(я думаю / предполагаю).+
anyway I guess, so I hope there will be no issues with it :)05AB1E (legacy),
2726 bytesDoes not sort nor uniquify the result.
Only works in the legacy (for now), because sum-each seems to be doing some odd things when part of the inner lists are integers and other are lists..
Try it online or verify all test cases.
Explanation:
источник
Jelly, 22 bytes
Try it online!
-6 bytes using the general approach from Mr. Xcoder's 05AB1E answer.
источник
Charcoal, 33 bytes
Try it online! Link is to verbose version of code and includes deduplication. Explanation:
Flatten the first input array
q
into the predefined listu
.For each element of the list, sum the array, but if the row contains the element then use
0
instead of its sum, and when summing rows that don't contain the element, if the column contains the element then use0
instead of the column's value. This is very slightly golfier than filtering the elements out as Charcoal can't sum an empty list.источник
Clean, 92 bytes
Try it online!
Explained:
источник
MATLAB - 80 bytes
(Corrected and) Compacted:
And in a fully developped version:
Thanks to the comments to highlight my initial mistake. Note that this version does not de-duplicate the output.
It is possible to deduplicate the output with 5 more bytes:
источник