Учитывая список заданий, которые должны быть выполнены по порядку, каждый из которых занимает слот, сколько времени потребуется для их выполнения, если после выполнения задания одно и то же задание не может быть выполнено для следующих двух слотов (охлаждение слотов) )? Однако в этих слотах охлаждения можно назначить другую работу.
Например,
[9,10,9,8] => output: 5
Потому что рабочие места будут выделяться как [9 10 _ 9 8]
.
1. Во-первых, 9 нуждается в двух охлаждающих точках _ _. Итак, начнем с 9 _ _
.
2. Следующее задание 10 отличается от предыдущего задания 9, поэтому мы можем выделить одно из _ _. Тогда мы будем иметь 9 10 _
.
3. В-третьих, сейчас нельзя выделить 9, поскольку первое задание 9 - это то же самое задание, и оно требует времени охлаждения. 9 10 _ 9
,
4. Последнее, 8 не то же самое, что и любые другие предыдущие два задания, поэтому его можно распределить сразу после 9, и, поскольку это последнее задание, ему не нужно время для охлаждения. Окончательный список 9 10 _ 9 8
и ожидаемый результат равен 5, что является количеством мест (или количеством слотов)
Тестовые случаи:
[1,2,3,4,5,6,7,8,9,10] => output : 10 ([1 2 3 4 5 6 7 8 9 10])
[1,1,1] => output: 7 ([1 _ _ 1 _ _ 1])
[3,4,4,3] => output: 6 ([3 4 _ _ 4 3])
[3,4,5,3] => output: 4 ([3 4 5 3])
[3,4,3,4] => output : 5 ([3 4 _ 3 4])
[3,3,4,4] => output : 8 ([3 _ _ 3 4 _ _ 4])
[3,3,4,3] => output : 7 ([3 _ _ 3 4 _ 3])
[3,2,1,3,-4] => output : 5 ([3 2 1 3 -4])
[] => output : 0 ([])
[-1,-1] => output : 4 ([-1 _ _ -1])
Входное значение может быть любым целым числом (отрицательное, 0, положительное). Длина списка заданий составляет 0 <= длина <= 1 000 000.
Выходными данными будет целое число, общее количество слотов, которое указывается в тестовом примере как выходной. Список в скобках показывает, как будет сгенерирован вывод.
Критерий победы
код-гольф
источник
[]
?Ответы:
Желе , 14 байт
Попробуйте онлайн!
источник
05AB1E , 22 байта
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Брахилог , 10 байт
Всегда приятно видеть проблему, где Brachylog работает лучше всего
объяснение
Попробуйте онлайн!
источник
R , 123 байта
Попробуйте онлайн - одна программа!
Попробуйте онлайн - несколько примеров!
Полная программа, которая читает разделенный запятыми список целых чисел в качестве входных данных и выводит необходимые слоты. Я уверен, что это могло бы быть еще лучше, и внедрение этого решения на основе регулярных выражений в некоторых других языках было бы более эффективным в байтах.
Обратите внимание на второй TIO, который я обернул в функцию, чтобы можно было показывать несколько примеров. Эта функция также показывает окончательный список, но это не выводит мою основную программу, если она запускается изолированно.
источник
TSQL-запрос, 158 байт
Входные данные в виде таблицы.
Запрос рекурсивный, так
необходимо, потому что список чисел может превышать 100, хотя он может обрабатывать только 32 767 рекурсий - действительно ли нужно ограничение в этой задаче?
Попробуйте онлайн
источник
R ,
8170 байтПопробуйте онлайн!
После нескольких неудачных попыток код стал довольно уродливым и не таким коротким, но, по крайней мере, теперь он работает ...
Сначала мы оцениваем длины последовательных прогонов одной и той же работы. Например,
3, 3, 4, 3
это дает:Каждый из этих прогонов производит
(len - 1) * 3 + 1
шаги (+ 1
обрабатывается отдельно).Затем мы обрабатываем вхождения одной и той же работы в двух местах, например:,
x, y, x
используяdiff(s, lag=2)
. Полученный вектор также разбивается на последовательные функции run (r
) поrle
функциям. Теперь из-за различных чередующихся чередований нам нужно добавитьceiling(r$len/2)
шаги для всех серий нулей. Например:x y x
(длина 1) иx y x y
(длина 2) оба требуют 1 дополнительный шаг:x y _ x (y)
x y x y x
(длина 3) иx y x y x y
(длина 4) оба требуют 2 дополнительных шага:x y _ x y _ x (y)
Наконец, нам нужно компенсировать возникновение этих чередований в середине долгого периода выполнения одной и той же работы:
x, x, x, x...
следовательно,1-l%/%6
вместо простого1
.источник
diff(s,lag=2)
для обнаружения близости! Теперь вы на байт короче моего решения ...Python 2 , 67 байт
Попробуйте онлайн!
Реализует задачу в буквальном смысле. Использует копии самого списка в качестве «пробелов», так как они не могут равняться любому числу.
источник
Древесный уголь ,
2723 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Цикл работы.
Добавьте места охлаждения, пока задание является одним из двух последних в результате.
Добавьте текущую работу к результату.
Распечатать количество пятен.
источник
R ,
7468 байтПопробуйте онлайн!
Создает рабочий массив (в обратном порядке), затем принимает длину. Чуть
короче,чем ответ Кирилла Л. , поэтому иногда наивный подход довольно хорош. РЕДАКТИРОВАТЬ: снова короче! Я также позаимствовал тестовый шаблон Кирилла.-6 байт
max(0,which(y==x[2:1]))
с заменой наmatch(y,x,0)
.источник
c
функция?c
расшифровываетсяcombine
, хотяconcatenate
может быть и лучше; он объединяет свои аргументы в один список.Perl 6 , 98 байт
Попробуйте онлайн!
Блерг, должен быть лучший способ сделать это. Я не уверен на 100%, что это полностью правильно, хотя и проходит все крайние случаи, о которых я мог подумать.
По сути, это начинается с группировки всех триплетов входного списка с заполнением в любую сторону. Например,
[1,2,1,2]
становится(Any,1,2), (1,2,1), (2,1,2), (1,2,Nil)
. Мы получаемrepeated
элементы в каждом триплете, становясь(), (1), (2), ()
.Затем он
squish
получает последовательные элементы, которые не являются одним и тем же списком, но имеют одинаковый размер (чтобы не сжимать что-то подобное[1,1,1]
), и первый элемент не равен элементу перед ним (потому что мы не можем объединить часы[1,1,2,2]
), и наконец, элемент ранее также не был сжат ([1,2,1,2,1,2]
). Таким образом,(1), (2)
в приведенном выше примере будут сжаты вместе.Наконец, мы получаем
sum
все длины этого списка, которые представляют наши вставленные часы, и добавляем длину исходного списка.Например:
источник
JavaScript (ES6), 57 байт
Попробуйте онлайн!
комментарии
источник
C (gcc) , 69 байтов
Попробуйте онлайн!
Простая рекурсия.
источник
Perl 6 , 48 байт
Попробуйте онлайн!
45 байт, если список содержит хотя бы два элемента:
Попробуйте онлайн!
источник
Smalltalk, 125 байт
объяснение
источник
Perl 5
-pl
,4240 байтПопробуйте онлайн!
источник
-p
и переделывая замену: Попробуйте это онлайн!Пакет, 184 байта
Ввод осуществляется через аргументы командной строки, а вывод - через код выхода. Объяснение:
Отслеживайте последние две работы.
Инициализируйте счет.
Обработайте каждую работу.
Выведите итоговый счет.
Для каждой работы:
Если мы недавно обработали работу, добавьте соответствующее количество мест охлаждения. Кроме того, очистите последнее задание, чтобы следующее задание могло только охлаждаться, если оно совпадает с заданием.
Обновите последние две вакансии и выделите место для этой работы.
источник
Swift, 114 байт
Попробуйте онлайн!
источник
3,4,3,4
, должен ставить 5, а не 6.s = a
может бытьs=a
, и вы можете сделать,s+=
а не несколькоs=s+...
и удалить пробелы после?
:for i in 1...a.count-1{s+=a[i-1]==a[i] ?3:i>1&&a[i-2]==a[i] ?2:1}
для сохранения 9 байтов.Python 3 ,
7975 байт-3 байта благодаря mypetlion
-1 байт благодаря Саре J
Попробуйте онлайн!
источник
a[0]in b[:2]and f(a,['']+b)or f(a[1:],[a[0]]+b)
может статьf(*[a[1:],a,[a[0]]+b,['']+b][a[0]in b[:2]::2])
экономить 2 байта.[a[0]]+b
может статьa[:1]+b
экономить 1 байт.['']+b
на «[b]+b
сохраняет байт» -b
это список, поэтому он никогда не будет равен ни одному из значений вa
Java (JDK) , 110 байт
Попробуйте онлайн!
Ungolfed прокомментировал код:
источник
3,4,3,4,3,4
, возвращает 7 вместо 8Желе , 20 байт
Попробуйте онлайн!
Хотя это довольно похоже на более короткий ответ @ EriktheOutgolfer , я написал его, не видя его. В любом случае его лучше!
объяснение
Вспомогательная диадическая ссылка, принимает текущий список в качестве левого элемента и следующий элемент в качестве правого
Основная монадическая ссылка, принимает список целых чисел в качестве входных данных
источник
Python 2 , 75 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) , 52 байта
Попробуйте онлайн!
источник
APL (Dyalog Classic) , 22 байта
Попробуйте онлайн!
источник
JavaScript (V8), 101 байт
Попробуйте онлайн!
Распакованный код выглядит следующим образом:
Моя первая попытка кода-гольфа, вероятно, может быть значительно оптимизирована путем сокращения массива и его рекурсивной передачи.
источник
Zsh ,
6660 байтов-6 байт из неявного
"$@"
Попробуйте онлайн! Я настоятельно рекомендую добавить
set -x
в начало, чтобы вы могли следовать.a
всегда содержит последние два задания, поэтому, если поиск находит подходящее задание вa[2]
, мы увеличиваем его на три (поскольку слоты заданий будут[... 3 _ _ 3 ...]
).Если
a
не установлено, поиск не удастся, и арифметическое расширение возвратит ошибку, но это происходит только на первом задании и не является фатальным.Мы можем сохранить еще один байт, если будем использовать
$[x+=i+1]
вместо него, и в системе пользователей нет команд, состоящих полностью из цифр.источник
К (нгн / к) , 27 байтов
Попробуйте онлайн!
источник