Укороченная версия Skyscrapers Challenge
задача
Учитывая массив высот зданий и положительное целое число k
, найдите все перестановки (без дубликатов) высот, чтобы точно k
были видны здания.
Любое здание будет скрывать за собой все здания меньшей или одинаковой высоты.
Любой формат для ввода и вывода действителен.
Входной массив никогда не будет пустым.
В случае, если невозможно увидеть столько же зданий, выведите все, что не может быть ответом, но без ошибки.
Примеры:
(Длина вывода показана для очень длинных выходов, но ваш вывод должен быть со всеми возможными перестановками)
input:[1,2,3,4,5],2
output: 50
input:[5,5,5,5,5,5,5,5],2
output: []
input:[1,2,2],2
output:[(1,2,2)]
Seeing from the left, exactly 2 buildings are visible.
input:[1,7,4],2
output:[(4, 7, 1), (1, 7, 4), (4, 1, 7)]
input:[1,2,3,4,5,6,7,8,9],4
output:67284
input:[34,55,11,22],1
output:[(55, 34, 11, 22), (55, 22, 34, 11), (55, 34, 22, 11), (55, 11, 34, 22), (55, 22, 11, 34), (55, 11, 22, 34)]
input:[3,4,1,2,3],2
output:31
Это код-гольф, поэтому выигрывает самый короткий код
Необязательно: Если возможно, вы можете добавить что-то вроде if length is greater than 20: print length else print answer
. В нижнем колонтитуле, а не в коде.
источник
[1,2,3,4,5],5 -> [(1,2,3,4,5)]
. Ни один из текущих тестовых примеров не гарантирует, что ответы могут поддерживать показ всех зданий (хотя я не знаю, есть ли у кого-то проблемы с этим).Ответы:
05AB1E ,
109 байтовПопробуйте онлайн или проверьте (почти) все тестовые примеры (
[1,2,3,4,5,6,7,8,9],4
время ожидания тестовых случаев ).Нижний колонтитул TIO делает то, что ОП спросил внизу:
Объяснение:
источник
if length is greater than 20: print length; else print answer;
файла является ̶b̶y̶t̶e̶ ̶l̶o̶n̶g̶e̶r̶ равной длины по сравнению с самой программой. xDHaskell, 73 байта
Попробуйте онлайн!
источник
Желе ,
1210 байтПопробуйте онлайн!
-2 байта @ Эрик Outgolfer
Это диадическая функция, принимающая высоту здания и
k
в таком порядке.источник
ʋ
! (это намного старше, чем наƇ
самом деле: P)Pyth,
1816 байтовПопробуй это здесь .
Обратите внимание, что онлайн-версия интерпретатора Pyth выдает ошибку памяти в самом большом тестовом примере.
источник
Perl 6 ,
8163 байта-18 байт благодаря nwellnhof!
Попробуйте онлайн!
Блок анонимного кода, который принимает ввод карри, например
f(n)(list)
. Это.unique(:with(*eqv*))
раздражающе долго, хотя:(
Объяснение:
источник
;
конечном итоге избавиться от этого раздражает ;)Japt , 11 байт
Попробуйте онлайн!
Для более длинных выходов добавление
} l
в конец приведет к получению длины. Онлайн-интерпретатор истекает для[1,2,3,4,5,6,7,8,9],4
тестового случая вне зависимости от длины или списка.Объяснение:
источник
JavaScript (ES6),
108107 байтПринимает вход как
(k)(array)
. Печатает результаты сalert()
.Попробуйте онлайн!
комментарии
источник
Python 2 ,
114113 байтовПопробуйте онлайн!
-1 байт, спасибо ovs
Python 3 , 113 байт
Попробуйте онлайн!
источник
J
4338 байт-5 байт после включения оптимизации из ответа Кевина O5AB13
Попробуйте онлайн!
ungolfed
объяснение
мы просто перечисляем все возможные варианты
i.@!@#@] A. ]
, выбираем их уникальные элементы~.
, затем фильтруем их по количеству видимых зданий, которое должно равняться левому входу.ключевая логика заключена в глагол в скобках, который подсчитывает количество видимых зданий:
Здесь мы используем максимальное сканирование
>./\
для подсчета самого высокого здания, которое мы видели до сих пор. Затем мы просто берем уникальные элементы максимального сканирования, и это количество видимых зданий.источник