В этом задании вы создадите программу, которая будет развиваться по мере прохождения веков ... До 2017 года.
Вызов
Всякий раз, когда в описании вызова говорится «программа», вы также можете прочитать «функция».
Ваше представление, когда выполнено, выведет программу, которая имеет длину THE LENGTH OF YOUR SUBMISSION
+ 1
байт.
Когда эта программа выполняется, она выводит программу длиной THE LENGTH OF YOUR SUBMISSION
+ 2
байт… и так далее.
Однако , когда ваша программа достигла длины в 2017 байт, она должна вместо этого вывести 2017
и выйти.
правила
- Вывод итоговой программы должен быть
2017
и только2017
. Это может быть строка или целое число, но оно должно читаться,2017
а не2017.0
или0x7E1
или иная подобная ерунда. - Нет стандартных лазеек .
- Только ваша первоначальная программа может требовать ввода, который будет добавлен к вашей учетной записи.
Таким образом, если ваша исходная программа имеет длину 324 символа и требует ввода 13 байт, ваш общий результат будет 324 + 13 = 337, а программа, которую она выводит, должна иметьдлину 338 байт.- Однако использование флагов командной строки (например,
perl -X
хорошо) - до тех пор, пока ваша исходная программа, а также все сгенерированные программы используют одни и те же флаги. Кроме того, они тоже учитываются по общему счету. Тире, косые черты и т. Д. Перед флагом командной строки не учитываются в сумме, поэтому, например,perl -X
считается одним дополнительным байтом.
- Однако использование флагов командной строки (например,
- Если вы возвращаете функцию, она должна быть действительной функцией, а не строкой, которая при оценке производит функцию.
- Неправильные квин (если ваша программа - квин) запрещены.
пример
Псевдокод, 99 байт
IF (PROGRAM LENGTH == 2017) PRINT 2017 ELSE PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)
Ваше представление может работать по-разному, если оно соответствует приведенным выше правилам.
;;;
Допускается ли просто добавление NOP, например ?Ответы:
*> <> ,
292830 байтПопробуй это здесь! (* попробуйте с байтами 2017 года )
* установите задержку на 0 мсек или вам придется долго ждать
Это добавляет дополнительный
каждый последующий прогон. Если он имеет байты 2017 года и запущен, он выдаст 2017 и остановит выполнение без других выходных данных.
Обновление: сохранил 1 байт, проверив, что длина меньше 2017, а не равна
Обновление 2: исправлен вывод для +2 байта
объяснение
источник
when your program has reached a length of 2017 bytes
, не 2016Python 2.7, 90 байт
Вот относительно простой:
Попробуйте первую итерацию здесь! Попробуйте предпоследнюю итерацию здесь! Попробуйте последнюю итерацию здесь!
Ungolfed:
источник
p='';...
и1929else
, но обратите внимание, что при печати также печатается новая строка в конце, поэтому вы должны добавить завершающую новую строку в вашу программу, иначе она увеличивается на два байта после первого запуска.Microscript II, 38 байт
источник
> <> , 34 байта
Попробуйте онлайн! Обратите внимание, что для проверки этого на меньшие значения ваше значение (минус 1) должно быть сгенерировано в 7 байтов.
объяснение
источник
Java, 251 байт (Eclipse IDE)
Предполагается, что проект был выполнен в Eclipse с использованием соглашения о
.java
файлах в SRC рабочего каталога. Есть и другие способы определить, где находится источник, но я не думаю, что это также противоречит правилам.В основном открывает исходный код .java и добавляет As до 2017 года (после комментария). Когда размер файла источника достигнет 2017 байтов, вместо него будет напечатан 2017.
источник
C 197 байт
источник
Python 2,
21716778 байтОбратите внимание, что должен быть завершающий перевод строки. Я использовал те же понятия, что и Calconym, так что спасибо за вдохновение!
Попробуйте онлайн
Попробуйте в 2016 году ; Попробуйте в 2017 году
Предыдущая версия:
Эта программа использует
inspect
модуль для получения текущего номера строки. Затем он печатает сам, но с дополнительной строкой после импорта, которая изменяет номер строки для следующей программы. Здесь также должен быть заключительный перевод строки.Попробуйте онлайн
источник
CJam ,
393330 байтс входом
Попробуйте онлайн!
Это функционально эквивалентно моей предыдущей версии, за исключением того, что избегает необходимости писать и экранировать кавычки. Предыдущая версия:
Какие выводы
какие выводы
и так далее. Наконец, программа
Выходы
2017
.Как это устроено
Но что на самом деле делает код на входе?
Если первый номер программы не равен 2017 году, он выведет программу, в которой этот номер увеличивается на один раз больше, чем в этот раз. Если он равен 2017 (т.е. он был увеличен в 1984 году), просто нажмите 2017 и завершите. Первое число начинается с 33 (длина кода); каждое увеличение увеличивает длину кода на 1, а это число на 1, поэтому, когда значение 33 будет увеличено достаточно, чтобы стать 2017, код также будет иметь длину 2017 байт.
источник
JavaScript,
9883 байтаЭто было довольно сложно… Думаю, это то, что я получаю, требуя возврата реальных функций, а не только источника функции.
Оригинальная функция
Я использую
function
вместо этого,=>
потому что последний не поддерживает именованные функции, просто присваивая анонимные функции переменной.Первая итерация
Запуск вышеуказанного в консоли браузера возвращает функцию, которая при приведении к строке выглядит следующим образом:
Начало в 2017
Поскольку каждая функция возвращает новую функцию, вы можете вызвать исходную функцию / ее результат 1934 раза, чтобы получить 2017 .
Протестировано с Firefox.
источник