Возьмите матрицу A, состоящую из положительных целых чисел и одного положительного целого числа N, в качестве входных данных и определите, есть ли хотя бы N последовательных вхождений одного и того же числа в какой-либо строке или столбце матрицы.
Вам нужно только проверить горизонтально и вертикально.
Контрольные примеры
N = 1
A =
1
Result: True
----------------
N = 3
A =
1 1 1
2 2 3
Result: True
----------------
N = 4
A =
1 1 1
2 2 3
Result: False
----------------
N = 3
A =
3 2 3 4 2 1
4 1 4 2 4 2
4 2 3 3 4 1
1 1 2 2 3 4
3 2 3 1 3 1
1 1 2 2 3 4
Result: True
----------------
N = 1
A =
5 2 3 8
Result: True
----------------
N = 3
111 23 12 6
111 53 2 5
112 555 5 222
Result: False
----------------
N = 2
4 2 6 2 1 5
2 3 3 3 3 3
11 34 4 2 9 7
Result: True
Пояснения это всегда хорошо :)
code-golf
number
decision-problem
matrix
Стьюи Гриффин
источник
источник
Ответы:
Шелуха , 9 байт
Принимает 2D массив и число, возвращает
0
ложные экземпляры и положительное число для истинных. Попробуйте онлайн!объяснение
Husk - это функциональный язык, поэтому программа представляет собой просто набор из нескольких функций.
источник
Dyalog APL,
272523 байтаПопробуйте онлайн!
Благодаря @MartinEnder и @Zgarb за -2 байта каждый (композиция устраняет необходимость использования
w
бессмысленные парены)Оповестите меня, если есть какие-либо проблемы и / или байты в гольфе. Левый аргумент N , правый аргумент .
Объяснение:
источник
Perl 6 , 60 байт
Попробуйте онлайн!
@^m
является входной матрицей (первый аргумент) и$^n
является количеством последовательных вхождений для проверки (второй аргумент).[Z,] @^m
транспонирование входной матрицы(@^m | [Z,] @^m)
является или соединением входной матрицы и ее транспонирования. Следующееmap
оценивает истинное значение, если$^n
последовательные равные значения встречаются в любой строке инвоканта. Применительно к входной матрице ИЛИ ее транспонированию, он оценивает истинное значение, если либо входная матрица, либо ее транспонирование содержат$^n
последовательные равные значения в любой строке; если транспонирование удовлетворяет этому условию, это означает, что входная матрица имеет$^n
последовательные равные значения в одном из своих столбцов.*.rotor($^n => $^n - 1)
превращает каждую строку в последовательность$^n
срезов -элементов. Например, если$^n
3 и строка есть<1 2 2 2 3>
, это оценивается как(<1 2 2>, <2 2 2>, <2 2 3>)
..map({ [==] $_ })
превращает каждый срез в логическое значение, которое указывает, равны ли все элементы среза. Продолжая предыдущий пример, это становится(False, True, False)
..any
превращает эту последовательность логических значений в ор-соединение, что является правдой, если любое из логических значений истинно.Вывод является истинным значением или значением j-junction, которое истинно, если либо входная матрица, либо ее транспонирование имеют ЛЮБУЮ строку, в которой
$^n
последовательные значения равны.источник
MATL , 12 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Неквадратная матрица не может быть надлежащим образом соединена с ее транспонированием, ни вертикально, ни горизонтально. Таким образом, код объединяет их по диагонали , создавая блок-диагональную матрицу.
Результирующая матрица линеаризуется в главном порядке столбцов и кодируется по длине серии. Нули, полученные в результате конкатенации блок-диагональ, служат для выделения серий фактических значений.
Результаты кодирования длин серий представляют собой массив значений и массив длин серий. Длина пробега, соответствующая ненулевым значениям, сохраняется. Выходные данные -
1
если некоторые из этих длин больше или равны входному номеру, и0
иначе.Давайте посмотрим на промежуточные результаты, чтобы прояснить ситуацию. Рассмотрим вход
и
Диагональная матрица блока, содержащая входную матрицу и ее транспонирование (код
t!Yd
):Эта матрица неявно линеаризована в главном порядке столбцов (вниз, затем поперек):
Кодирование длин серий (код
Y'
) дает следующие два вектора (показаны здесь как векторы строк; на самом деле это векторы столбцов): вектор со значениямии вектор с длинами пробега
Сохранение только длин, соответствующих ненулевым значениям (код
wg)
), даетСравнение, чтобы увидеть, какая длина больше или равна входному числу (коду
>~
), дает векторНаконец, вывод должен быть
true
(показан как1
), если указанный выше вектор содержит хотя быtrue
запись (кодa
). В этом случае результатисточник
Октава,
7770 байтПопробуйте онлайн!
Объяснение: Поскольку матрица содержит только ненулевые целые числа, мы можем добавить границу 0 вокруг матрицы и вычислить кодировку по длине прогона матрицы (преобразованной в вектор).
источник
runlength
... Учиться чему-то новому каждый день ...runlength
! Будучи более сосредоточенным на Matlab, я не помню, что существовало в Octaverunlength
.Желе ,
98 байтПринимает матрицу в качестве аргументов и читает целое число из STDIN.
Попробуйте онлайн!
Как это устроено
Пример запуска
источник
;Z
, хотя в Джапте, а не в желе ...Ȧ
Атом был вдохновлен MATL хотя.E
встроенный был способ сделать это. Приятно :)Python 2 ,
609291 байтПопробуйте онлайн!
Вместо подсчета
n
генерируется список с размером (для каждого элемента в матрице) и проверяется, находится ли он в матрицеБез строк, 94 байта
Попробуйте онлайн!
источник
Октава , 59 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
Это использует тот же подход, что и мой ответ на MATL (см. Объяснение там).
источник
blkdiag(A,A')
, Очень хорошо!Japt ,
181514 байтовПроверь это
объяснение
источник
cUy)®ò¦ d_l ¨V\nd
, а другой сcUy)d_ò¦ d_l ¨V
, и тогда у вас практически есть мое (удаленное) решение.CJam , 16 байтов
Попробуйте онлайн!
объяснение
источник
runlength
функция Octave также выводит данные в этом порядке. Но почему-то я чувствую порядокvalue, length
более естественнымPython 3 ,
129128125120104101 байтОгромное спасибо @Zachary T, @Stewie Griffin, @Mr. Xcoder, @Rod, @totallyhuman за много улучшений.
Попробуйте онлайн!
источник
1
иif
.a=b;b=0;c=0
наa=b=c=0
m+zip(*m)
вместо этогоm
на 4-й строке и полностью отбросить 1-ю строку, переместив ееn<=max()
на последнюю строку какn<=c
b=b+1
использованияb+=1
... Ах, Ninja'd @StewieGriffin05AB1E ,
16 1412 байтПопробуйте онлайн!
источник
0
s во втором ряду, так что это должно быть правдой.[3,3,3]
. Я неправильно понял вызов в этом случае, поэтому я думаю, что я не прав здесь.Желе , 18 байт
Попробуйте онлайн!
Возвращает
0
для ложного и ненулевого целого для правды.Фу, это плохо. И очень долго. Гольф советы будут оценены :)
источник
JavaScript (ES6), 99 байт
Принимает матрицу
m
и ожидаемое количество вхожденийn
в синтаксисе карри(m)(n)
. Возвращает логическое значение.Как?
Этот код не очень короткий, но я хотел попробовать подход, основанный исключительно на регулярных выражениях.
Преобразование матрицы в строку
Мы используем
m.join('|')
для преобразования 2D-массива в строку. Это сначала вызывает неявное приведение строк матрицы к разделенным запятыми строкам.Например, этот вход:
будет преобразован в:
Соответствие строк
Мы ищем последовательные вхождения в строке с:
Это соответствует:
\b
граница слова\d+
с последующим номером(){n-1}
следуют n-1 раз:,
запятая\1
сопровождаемый нашей ссылкой: граница слова + первое число\b
сопровождается границей словаСопоставление столбцов
Мы ищем последовательные вхождения в столбце с:
где
L
длина строки.Это соответствует:
\b
граница слова\d+
с последующим номером(){n-1}
следуют n-1 раз:(){L-1}
L-1 раз:.
любой символ (в действительности: запятая или труба)\d+?
с последующим номером (этот должен быть не жадным).
сопровождаемый любым символом (снова: или запятая или труба)\1
сопровождаемый нашей ссылкой: граница слова + первое число\b
сопровождается границей словаКонтрольные примеры
Показать фрагмент кода
источник
Python 2 , 64 байта
Попробуйте онлайн!
источник
Clojure, 77 байт
Создает все последовательные разделы
p
длиныN
(символа%2
) и подсчитывает, сколько у него различных значений. Затем он формирует набор этих длин и возвращает,1
если он найден из набора, и вnil
противном случае.for
конструкция была идеально подходит для этого, использовали мой первоначальный попыткаflatten
,concat
или что - то из этого короткого замыкания.источник