Рости до 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)

Ваше подання може працювати інакше, якщо воно відповідає вищевказаним правилам.


Чи ;;;дозволено додавати лише такі НОП, як дозволено?
FlipTack

@FlipTack Так. -
user2428118

"Тире, косі риски тощо перед прапором командного рядка не зараховуються до загальної величини, наприклад, perl -X вважається одним додатковим байтом." - Це навмисно суперечить нормі, описаній на Meta? Зазвичай тире, косою рисою тощо слід іноді рахувати, залежно від того, як виглядає виклик без цієї опції: meta.codegolf.stackexchange.com/questions/273/…
hvd

@hvd Не думаю, що я прочитав це, так що ні, це не навмисно. При цьому я не думаю, що в ігноруванні їх є багато шкоди, тому я не зміню це на цьому виклику.
користувач2428118

Відповіді:


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 fix
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

Спробуйте першу ітерацію тут! Спробуйте передостанню ітерацію тут! Спробуйте остаточну ітерацію тут!

Безголівки:

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 робочого dir. Є й інші способи виявити, де джерело, але я також не думаю, що це суперечить правилам.

В основному відкриває вихідний код .java і додає Як і до 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

Пітон 2, 217 167 78 байт

Зауважте, що має бути зворотний новий рядок. Я використав подібні поняття до того, що використовував Кальконім, тож дякую за натхнення!

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.