Морские коньки, конечно же, нуждаются в обуви. Однако морскому коньку, имеющему только один хвост, нужна только одна обувь. К сожалению, обувь только в парах. У правительства морских коньков денег мало, поэтому им нужно купить как можно меньше пар. У каждого морского конька есть размер обуви x, где x - положительное целое число. Тем не менее, морской конек может носить обувь размера х - 1 или х + 1, если это необходимо.
Ваша задача - вывести минимальное количество пар, которое правительство морского конька должно купить, чтобы надеть обувь на всех своих морских коньков.
Вы можете взять ввод, как хотите, стандартные лазейки и т. Д.
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Контрольные примеры
2 4 6 6 8 14 -> 4
2 1 3 1 1 -> 3
4 1 4 9 1 8 9 1 8 4 -> 6
1 2 3 5 7 8 10 12 -> 4
Ответы:
05AB1E , 13 байтов
Использует подход OP, описанный в комментариях.
Попробуйте онлайн!
объяснение
источник
Шелуха ,
1514 байтИспользует жадный алгоритм: сортировка и пара слева. Попробуйте онлайн!
Спасибо Лео за сохранение 1 байта.
объяснение
Это первый ответ Husk, который использует
Γ
функцию для сопоставления с шаблоном списка. В этом случае использования, еслиa
является значением иg
является функцией, тоΓag
соответствует функции,f
определенной фрагментом HaskellЯ определяю базовый случай как
a = 0
игде
line0
относится ко всей строке. В коде Huskx
иxs
есть неявные аргументы лямбда-функции, иline0
есть₀
. Список сортируется снова в каждом рекурсивном вызове, но это не имеет значения при игре в гольф.источник
Python 3 ,
696660 байт9 байтов благодаря xnor.
Попробуйте онлайн!
источник
a.sort()
.lambda
:f=lambda a:a[1:a.sort()]and-~f(a[1+(a[1]-a[0]<3):])or len(a)
or[]<a
сохранить 3 байтаЖеле ,
20-18 байтПопробуйте онлайн!
Вилка моего Python ответа .
источник
IḢ<3+2⁸ṫß‘µLḊ?
(в основном я не вижу никакой причины делать этоṢ
раньшеL
, иḊ
возвращал[]
бы, если список имеет длину 1 или 0, а затем я могу удалитьµ
изLµḊ?
)Ṣ
мой гольф, если я правильно понимаю.Python 2 , 49 байт
Попробуйте онлайн!
Основано на рекурсивном решении Лики Нун .
Python 2 , 59 байт
Попробуйте онлайн!
Перебирает размеры
x
в отсортированном порядке. Запоминает верхний порогp
для текущего размера в паре с предыдущим. Если это так (x>p
), сбросьте порог до0
чтобы сделать невозможным сопряжение следующего. Если нет, увеличьте счетчик выходных данныхc
и установите следующий порогp
наx+2
.Новый порог
p=(x>p)*(x+2)
является раздутым выражением. Я хотел бы найти способ сократить его.источник
C #,
111108137102 байтаЭто никогда не победит, но я все равно хотел решить упражнение:
Благодаря комментарию @grabthefish мне удалось откусить еще несколько байтов:
Следуя специальным правилам C # для PC & G:
Использование лямбда-функции:
источник
Perl, 113 байт
Принимает список аргументов из командной строки (как
@ARGV
), печатаетSTDOUT
по умолчанию.В Сихорсвилле ...
окрестности представляет собой последовательность соседних размеров обуви. При сортировке у каждого морского конька есть непосредственные соседи, которые могут иметь одинаковый размер обуви. В соседстве может быть несколько соседей, и никакие соседи не могут различаться по значению более чем на два:
например,
3 3 4 5 5 6
является единственной окрестностью, как есть2 4 6 6
, и1 2 3 5 7 8 10 12
Например,
1 1 1 4 5 6
содержит две окрестности:1 1 1
и4 5 6
.Основа алгоритма
Есть два типа окрестностей:
Даже размер
Для этих
n/2
пар всегда достаточно:например ,
3 3 4 5 5 6
требуется три пары для3 3
,4 5
и5 6
Нечетные размера
Для этих
ceil(n/2)
пар всегда достаточно:например ,
12 13 13 14 15
требуется три пары для12 13
,13 14
и в15
одиночку.Неуправляемый код для проверки алгоритма
Пример результатов
(Окрестности заключены в
[ ]
)источник
Mathematica, 67 байт
Попробуй в песочнице Вольфрама .
источник
UpTo
Perl, 103 байта
Принимает список аргументов из командной строки (как
@ARGV
), печатает вSTDOUT
по умолчанию.Это альтернативный подход, основанный на следующих отношениях:
(См. Этот ответ для определения окрестности )
источник
Javascript, 67 байт
Пример кода:
источник