Расти до 2017 года


16

В этом задании вы создадите программу, которая будет развиваться по мере прохождения веков ... До 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, например ?
FlipTack

@FlipTack Да. ·
user2428118

«Тире, косые черты и т. Д. Перед флагом командной строки не учитываются в общем количестве, поэтому, например, perl -X считается одним дополнительным байтом». - Это намеренно противоречит здесь норме, как описано на Meta? Как правило, иногда должны учитываться тире, косые черты и т. Д., В зависимости от того, как выглядит вызов без этой опции: meta.codegolf.stackexchange.com/questions/273/…
hvd

@hvd Не думаю, что я читал это, так что нет, это не намеренно. Тем не менее, я не думаю, что игнорирование их принесет много вреда, поэтому я не буду менять его для этого вызова.
user2428118

Ответы:


6

*> <> , 29 28 30 байт

" r::2+l'-':*7-(?ul1-n;Ol?!;ou

Попробуй это здесь! (* попробуйте с байтами 2017 года )
* установите задержку на 0 мсек или вам придется долго ждать

Это добавляет дополнительный каждый последующий прогон. Если он имеет байты 2017 года и запущен, он выдаст 2017 и остановит выполнение без других выходных данных.

Обновление: сохранил 1 байт, проверив, что длина меньше 2017, а не равна

Обновление 2: исправлен вывод для +2 байта

объяснение

" r: 2+                         build quine
    :                           copy extra " "
       l                        push length to stack
        '-':*7-                 push "2018" to stack
               (?u     O        if not length < 2018:
                  l1-n;           output length-1 and exit
                       Ol?!;ou  output entire stack and exit

да, не совсем верно when your program has reached a length of 2017 bytes, не 2016
Разрушаемый Лимон

@DestructibleWatermelon исправлено
redstarcoder

4

Python 2.7, 90 байт

Вот относительно простой:

p='q';s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1929 else'2017'";exec s

Попробуйте первую итерацию здесь! Попробуйте предпоследнюю итерацию здесь! Попробуйте последнюю итерацию здесь!

Ungolfed:

p='q'      # The length of string p is the number of iterations so far.

s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1928 else'2017'"

exec s     # s contains the source code, but also contains a line saying "p += 'q'",
           # which makes the byte count longer. When the length of p is 1928 (i.e. when the
           # entire program is 2017 bytes long), 2017 is printed instead.

@redstarcoder Последняя итерация содержит ровно 2017 символов. Вы можете видеть количество байтов в верхнем правом углу, я думаю ....
Calconym

Ах, моя ошибка, не уверен, как это случилось, извините!
redstarcoder

Вы можете использовать p='';...и 1929else, но обратите внимание, что при печати также печатается новая строка в конце, поэтому вы должны добавить завершающую новую строку в вашу программу, иначе она увеличивается на два байта после первого запуска.
mbomb007


1

> <> , 34 байта

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#

Попробуйте онлайн! Обратите внимание, что для проверки этого на меньшие значения ваше значение (минус 1) должно быть сгенерировано в 7 байтов.

объяснение

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#
".................................   push this string
 :                                   duplicate
  l                                  push length of stack
   ' '95**                           push 2016
          )                          1, if length > 2016, 0 otherwise
           b*                        multiply by 11
             f3++                    add 18
                 0.                  jump to that character on this line
                                     if the length is sufficiently long, this skips the
                                     next 10 characters, to the 11th (`b` from earlier):
                             :ln;    (if length is > 2016)
                             :         duplicate
                              l        push length
                               n       output as number
                                ;      terminate
                   1-}'#'r>o<        (if length <= 2016)
                   1-                  subtract 1 from the last char, `#`, to get `"`,
                     }                 which is then moved to the bottom
                      '#'              pushes `#` (will be appended)
                         r             reverses the stack
                          >o<          output stack, until error (accepted by default)
                                 #   This is never reached, but is used to generate `"`

1

Java, 251 байт (Eclipse IDE)

import java.io.*;class G{public static void main(String[]args) throws Exception{File x=new File("./src/G.java");if(x.length()==2017){System.out.print("2017");}else{PrintWriter y=new PrintWriter(new FileOutputStream(x,1>0));y.print("A");y.close();}}}//

Предполагается, что проект был выполнен в Eclipse с использованием соглашения о .javaфайлах в SRC рабочего каталога. Есть и другие способы определить, где находится источник, но я не думаю, что это также противоречит правилам.

В основном открывает исходный код .java и добавляет As до 2017 года (после комментария). Когда размер файла источника достигнет 2017 байтов, вместо него будет напечатан 2017.


1

C 197 байт

#define A ""
char*s="#define A %c %s%c%cchar*s=%c%s%c;%cmain(){printf(sizeof A==1820?%c2017%c:s,34,A,34,10,34,s,34,10,34,34);}";
main(){printf(sizeof A==1820?"2017":s,34,A,34,10,34,s,34,10,34,34);}

1

Python 2, 217 167 78 байт

Обратите внимание, что должен быть завершающий перевод строки. Я использовал те же понятия, что и Calconym, так что спасибо за вдохновение!

p='q';s='p+=p[0];print"p=%r;s=%r;exec s"%(p,s)if len(p)<1941else 2017';exec s

Попробуйте онлайн

Попробуйте в 2016 году ; Попробуйте в 2017 году


Предыдущая версия:

Эта программа использует inspectмодуль для получения текущего номера строки. Затем он печатает сам, но с дополнительной строкой после импорта, которая изменяет номер строки для следующей программы. Здесь также должен быть заключительный перевод строки.

from inspect import*
n=stack()[0][2];s='from inspect import*%sn=stack()[0][2];s=%r;print(s%%(chr(10)*n,s))if n<1852else 2017';print(s%(chr(10)*n,s))if n<1852else 2017

Попробуйте онлайн


1

CJam , 39 33 30 байт

33q:X~

с входом

2017:N=N{33')X+`":X~"+}?

Попробуйте онлайн!

Это функционально эквивалентно моей предыдущей версии, за исключением того, что избегает необходимости писать и экранировать кавычки. Предыдущая версия:

33"2017:N=N{33')X+`\":X~\"+}?":X~

Какие выводы

33")2017:N=N{33')X+`\":X~\"+}?":X~

какие выводы

33"))2017:N=N{33')X+`\":X~\"+}?":X~

и так далее. Наконец, программа

33"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))2017:N=N{33')X+`\":X~\"+}?":X~

Выходы 2017 .

Как это устроено

33      Push 33
  q     Read the input: 2017:N=N{33')X+`":X~"+}?
   :X   Store it in variable X
     ~  Eval it

Но что на самом деле делает код на входе?

 2017:N                      Push 2017 and store it in N
       =                     Check if the other number (33 on first run) equals 2017
        N                     If it does, push 2017
         {                    Else, execute this block:
          33                   Push 33
            ')                 Push the ) character
              X                Push X
               +               Concatenate with ')
                `              String representation (wraps it in quotes, escapes quotes inside)
                 ":X~"       Push the string ":X~"
                      +      Concatenate
                       }?    (end of block)

Если первый номер программы не равен 2017 году, он выведет программу, в которой этот номер увеличивается на один раз больше, чем в этот раз. Если он равен 2017 (т.е. он был увеличен в 1984 году), просто нажмите 2017 и завершите. Первое число начинается с 33 (длина кода); каждое увеличение увеличивает длину кода на 1, а это число на 1, поэтому, когда значение 33 будет увеличено достаточно, чтобы стать 2017, код также будет иметь длину 2017 байт.


0

JavaScript, 98 83 байта

Это было довольно сложно… Думаю, это то, что я получаю, требуя возврата реальных функций, а не только источника функции.

Оригинальная функция

function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

Я использую functionвместо этого, =>потому что последний не поддерживает именованные функции, просто присваивая анонимные функции переменной.

Первая итерация

Запуск вышеуказанного в консоли браузера возвращает функцию, которая при приведении к строке выглядит следующим образом:

function x(){return "33".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

Начало в 2017

Поскольку каждая функция возвращает новую функцию, вы можете вызвать исходную функцию / ее результат 1934 раза, чтобы получить 2017 .

console.log((
function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}
)()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
)

Протестировано с Firefox.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.