Входные данные:
Ввод - это рандомизированный массив орехов (на вашем языке), возможные орехи следуют. Ваша программа должна иметь способ представления каждого вида орехов, таких как целочисленный код. Программа должна быть в состоянии обрабатывать любой размер массива любой конфигурации орехов.
Возможные орехи:
Kola nut
Macadamia
Mamoncillo
Maya nut
Mongongo
Oak acorns
Ogbono nut
Paradise nut
Pili nut
Pistachio
Walnut
Выход:
Выходными данными должен быть массив, отсортированный таким образом, чтобы не было смежных гаек одного и того же вида. Если это невозможно, на выходе должен быть пустой массив.
Пример ввода (упрощенно):
["walnut", "walnut", "pistachio"]
Пример вывода:
["walnut", "pistachio", "walnut"]
Решения могут не просто перемешать массив, пока он не станет уникальным случайно. Используемый сорт должен быть детерминированным
perl6 -e 'my @a="aaaaabbbbccccdddee".comb;my @b = @a.pick(*) while @b.squish !== @a;say [~] @b'
baedcbdacdecbabaca
(3,3,2) может привести к их отказу также.Ответы:
GolfScript,
42413738 символовКод ожидает ввода в STDIN и выводит результат в STDOUT, например:
Сценарий стал длиннее, чем ожидалось, но я полагаю, что есть возможности для улучшения.
Редактировать: случай списка с одним элементом стоит мне 1 символ (лучшее сравнение, которое я могу придумать, такое же, как у Питера).
источник
$.,)2//zip
именно это я и имел в виду. Моя интерпретация спецификации заключалась в том, что он может принимать входные данные в стеке и оставлять их в стеке, поэтому, возможно, нам следует потребовать разъяснений.["walnut"]
в разделе «сравните первые два».GolfScript, 32 символа
Тот же формат ввода и вывода, что и у решения Говарда.
источник
Brachylog v2, 10 байт
Попробуйте онлайн!
Решение для грубой силы. (Это функция, разрешенная, потому что задача не говорит «полная программа».) Это также в основном прямой перевод спецификации (единственная реальная тонкость в том, что мне удалось организовать вещи так, чтобы все неявные ограничения поступали именно в правильные места, таким образом, не нужно никаких дополнительных символов для их устранения неоднозначности).
Обратите внимание, что это общий алгоритм для перестройки любого вида списка, чтобы он не имел двух трогательных элементов; он может обрабатывать строковые представления элементов, а также может обрабатывать целочисленные коды. Так что на самом деле не имеет значения, как «Ваша программа должна иметь способ представления каждого вида орехов, таких как целочисленный код». Требование из вопроса интерпретируется.
объяснение
источник
J, 80 знаков
Не совсем в той же лиге, что и Golfscript на этом. Я подозреваю, что можно получить выгоды, но 14 символов, необходимых только для того, чтобы получить список в программе,
[;.1' ',1!:1[1
являются серьезным препятствием.По сути, программа берет список, группирует похожие элементы, сортирует по количеству элементов в каждой группе по убыванию и чередует выходные данные между первой половиной и второй половиной списка. Остальное, если код избавляется от посторонних элементов и решает, является ли список допустимым выводом (вывод бесконечности).
_
если это не так).Пример:
группа
(</.])
:сортировать
(\:#&.>)
:Равель
((],.|.)~>.@-:@#)
:источник
Желе , 14 байт
Попробуйте онлайн!
Последние 6 байтов могут быть удалены, если мы можем иметь неопределенное поведение для неверных входных данных.
источник
Stax , 10 байт
Запустите и отладьте его
Вот та же самая программа, распакованная, разархивированная и прокомментированная.
Запустите этот
источник