обратный отсчет
Ваша цель для этой задачи кода-гольфа состоит в том, чтобы отсчитывать и тем временем перерабатывать числа. Позволь мне объяснить.
Сначала ваше приложение читает число, либо в качестве аргумента программы, либо с использованием стандартного ввода. Далее вам просто нужно будет отсчитать, как это:
10 9 8 7 6
(в порядке убывания)
Но подождите, это еще не все!
Утилизация отходов
Есть ситуации, когда мы можем напечатать каждый номер, но не перечислять каждый номер, мы можем сделать переработку! Позвольте мне привести быстрый пример:
Input: 110
Output: 11091081071061051041031021010099... etc
Recycled: 10 1
Теперь мы все еще перечислили все числа, 110, 109, 108, но мы переработали 0 и 1 .
Другой пример:
Input: 9900
Output: 9900989989897989698959894... etc
Recycled: 9 98
Код-гольф вызов
- Читать число (аргумент или стандартный)
- Вывести обратный отсчет в порядке убывания при утилизации всех возможных чисел (в стандартный вывод или файл)
- Остановитесь, когда достигнете 1 ИЛИ в тот момент, когда вы переработали от 0 до 9 (что бы ни случилось раньше)
Простой пример (пока не достигнуто 1):
Input: 15
Output: 15141312110987654321
(Notice the 110 instead of 1110)
Более сложный пример (все переработано):
Input: 110
Output: 110910810710610510410310210100998979695949392919089887868584838281807978776757473727170696867665646362616059585756554535251504948474645443424140393837363534332313029282726252423221
Recycled: 10 9 8 7 6 5 4 3 2
(We've recycled all 0-9)
Ответы:
T-SQL -
291277267217199191166158153145142128117Подойдя к этому по-новому, мне удалось снизить до 145 (142 после пары незначительных настроек), не слишком потертый. Это означает, что я мог бы бороться за серебро или бронзу. ^^
Это не печатает список, он выбирает результаты. Вопрос никогда не давал подробностей о выходе, так что все должно быть в порядке. Это все еще имеет тот же предел в 100 на входе, отчасти потому, что я злоупотребляю тем фактом, что каждый 11-й член до 100 теряет символ, и частично из-за предела рекурсии 100 по умолчанию для общих табличных выражений.
источник
Python 143
147Отступ первого уровня - пробел, второй - символ табуляции.
источник
p=o=''
помещайте в функцию такие вещи, как необязательные параметры; Вы можете использовать*
дляand
вn and r<1023
или , может быть , дажеr<1023*n
;while x-1:
может побрить пространство какwhile~-x
. Кроме того, может быть короче использовать набор цифр, а не битовую маску для хранения того, какие цифры были использованы.Хаскелл,
154149147145128120119117 байтдобавление в стоимость проверки переработки много символов ... вздох
немного поиграл, вспомнив, какие цифры еще не были переработаны, и остановился, когда список пуст. затем немного поиграл в гольф, перейдя к явной рекурсии и еще нескольким трюкам.
пример вывода:
источник
Python 2:
119117Отмечать это как вики сообщества, потому что это всего лишь более точная версия ответа Уилла .
источник
d=s,={''}
работает?d=s,={''}
эквивалентноd={''}; s,={''}
.s,={''}
использует последовательность распаковки, функция более широко используется в таких заявлениях, какa, b = (b, a)
, но вы также можете использовать его , чтобы извлечь единственный элемент из последовательности одного элемента.len(d)%11*n
, хотя похоже, что это спорный с вами, используя цикл exec.set()
чем набор из одного элемента{x}
. Итак, flornquake инициализирует его с помощью элемента-заполнителя и проверяет, имеет ли он все десять цифр, проверяя, имеет ли он одиннадцать элементов. Поскольку пустая строка должна быть инициализированаs
, она служит в качестве этого элемента-заполнителя, объединяя эти инициализации для сохранения символов.len(d)%11*n
было бы неплохо. :)Рубин,
145139130 байтАналогичен подходу Уилла, за исключением того, что я не использую битовую маску, а вместо этого - массив неиспользуемых цифр. Ввод через STDIN.
while
Вместо этого есть альтернативная версия,times
но что бы я ни пытался, количество байтов одинаково:источник
CJam,
8077655754 персонажаСкорее всего, не оптимизирован, нопосле многих оптимизаций и отладки здесь приведено прямое преобразование моего ответа ES6 в CJam:Попробуйте онлайн здесь . Функция принимает число в качестве STDIN и выводит обратный отсчет времени повторного использования, останавливаясь между ними, если переработка завершена.
Я постараюсь играть в гольф дальше.
Как это устроено:
Основная идея заключается в том, что для каждого числа C обратного отсчета проверьте, равны ли первые H цифр последним H цифрам результирующей строки, где H переходит от количества цифр в C к 0
источник
JavaScript ES6,
149146 символовТакой многословный, много персонажей, вау.
Запустите его в последней веб-консоли Firefox.
После запуска он создает метод,
C
который вы можете использовать какОБНОВЛЕНИЕ : Иногда обычный старый
return
короче закрытия функции стрелки :)источник