Rosnąć aż do 2017 roku


16

W tym wyzwaniu zbudujesz program, który rośnie wraz z upływem wieków… Aż do 2017 roku.

Wyzwanie

Ilekroć w opisie wyzwania jest napisane „program”, można również przeczytać „funkcja”.

Po przesłaniu dane wyjściowe wygenerują program o długości THE LENGTH OF YOUR SUBMISSION+ 1bajtów.

Gdy ten program zostanie wykonany, wyświetli program o długości THE LENGTH OF YOUR SUBMISSION+ 2bajtów… i tak dalej.

Jednak gdy program osiągnie długość 2017 bajtów, musi zamiast tego wyjść 2017i wyjść.

Zasady

  • Wynik końcowego programu musi być 2017i tylko 2017. To może być ciągiem lub liczbę całkowitą, ale musi to czytać 2017i nie 2017.0lub 0x7E1czy inne tego typu bzdury.
  • Brak standardowych luk .
  • Tylko twój początkowy program może wymagać danych wejściowych, które zostaną dodane do twojego bajtu.
    Więc jeśli twój program początkowy ma 324 znaki i zajmuje 13 bajtów, twój wynik będzie wynosił 324 + 13 = 337, a program przez niego wyprowadzony musi mieć 338 bajtów.
    • Używanie flag wiersza poleceń (np. perl -X) Jest jednak w porządku - o ile zarówno program początkowy, jak i wszystkie generowane programy używają tych samych flag. Również one liczą się do całkowitej liczby bajtów. Kreski, ukośniki itp. Przed flagą wiersza poleceń nie liczą się do sumy, więc np. perl -XLiczy się jako jeden dodatkowy bajt.
  • Jeśli zwrócisz funkcję, powinna to być funkcja rzeczywista, a nie ciąg znaków, który po ocenie tworzy funkcję.
  • Niewłaściwe quiny (jeśli twój program jest quine) są niedozwolone.

Przykład

Pseudokod, 99 bajtów

IF (PROGRAM LENGTH == 2017)
  PRINT 2017
ELSE
  PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)

Twoje zgłoszenie może działać inaczej, o ile będzie zgodne z powyższymi zasadami.


Czy tylko dodawanie NOP, takich jak ;;;dozwolone, jest dozwolone?
— FlipTack

@FlipTack Tak. ·
— user2428118

„Myślniki, ukośniki itp. Przed flagą wiersza poleceń nie liczą się do sumy, więc np. Perl -X liczy się jako jeden dodatkowy bajt.” - Czy jest to celowo sprzeczne z normą opisaną tutaj na Meta? Zwykle należy liczyć myślniki, ukośniki itp., W zależności od tego, jak wygląda wywołanie bez tej opcji: meta.codegolf.stackexchange.com/questions/273/…
— hvd

@hvd Nie sądzę, że to przeczytałem, więc nie, to nie jest zamierzone. To powiedziawszy, nie sądzę, aby ignorowanie ich było bardzo szkodliwe, więc nie zmienię tego dla tego wyzwania.
— user2428118

Odpowiedzi:


6

*> <> , 29 28 30 bajtów

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

Wypróbuj tutaj! (* spróbuj z 2017 bajtami )
* ustaw opóźnienie na 0ms lub być może będziesz musiał długo czekać

Dodaje to dodatkowe każde kolejne uruchomienie. Jeśli ma 2017 bajtów i jest uruchomiony, wygeneruje 2017 i zatrzyma wykonywanie bez innych danych wyjściowych.

Aktualizacja: Zapisano 1 bajt, sprawdzając, czy długość jest mniejsza niż 2017, a nie równa

Aktualizacja 2: Naprawiono wyjście dla +2 bajtów

Wyjaśnienie

" 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

tak, niezupełnie racja when your program has reached a length of 2017 bytes, nie 2016
— Destructible Lemon

@DestructibleWatermelon naprawiono
— redstarcoder

4

Python 2.7, 90 bajtów

Oto stosunkowo prosty:

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

Spróbuj pierwszej iteracji tutaj! Spróbuj tutaj przedostatniej iteracji! Wypróbuj ostatnią iterację tutaj!

Nie golfowany:

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 Ostatnia iteracja ma dokładnie 2017 znaków.
— Liczbę

Ach mój błąd, nie jestem pewien, jak to się stało, przepraszam!
— redstarcoder

Możesz użyć p='';...i 1929else, ale pamiętaj, że drukowanie drukuje również nowy wiersz na końcu, więc powinieneś dodać końcowy znak nowej linii do swojego programu, w przeciwnym razie powiększy się o dwa bajty po pierwszym uruchomieniu.
— mbomb007


1

> <> , 34 bajty

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

Wypróbuj online! Zauważ, że aby przetestować to dla mniejszych wartości, twoja wartość (minus 1) musi być możliwa do wygenerowania w 7 bajtach.

Wyjaśnienie

":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 bajtów (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();}}}//

Zakłada się, że projekt został wykonany w środowisku Eclipse, przy użyciu konwencji .javaplików w SRC działającego katalogu. Istnieją inne sposoby wykrycia źródła, ale nie sądzę, aby było to sprzeczne z regułami.

Zasadniczo otwiera kod źródłowy .java i dołącza As do 2017 r. (Po komentarzu). Gdy rozmiar pliku źródłowego osiągnie w sumie 2017 bajtów, zamiast tego zostanie wydrukowany 2017.


1

C, 197 bajtów

#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 bajtów

Zauważ, że powinna pojawić się nowa linia. Użyłem podobnych koncepcji do tego, co użył Calconym, więc dziękuję za inspirację!

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

Wypróbuj online

Spróbuj w 2016 roku ; Wypróbuj w 2017 roku


Poprzednia wersja:

Ten program używa inspectmodułu do uzyskania bieżącego numeru linii. Następnie drukuje się sam z dodatkową linią po imporcie, która zmienia numer linii dla następnego programu. Powinien tu również znajdować się nowy wiersz.

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

Wypróbuj online


1

CJam , 39 33 30 bajtów

33q:X~

z wejściem

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

Wypróbuj online!

Jest to funkcjonalnie równoważne z moją poprzednią wersją, z tym wyjątkiem, że unika potrzeby pisania i unikania cudzysłowów. Poprzednia wersja:

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

Które wyjścia

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

które wyjścia

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

i tak dalej. Wreszcie program

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

Wyjścia 2017.

Jak to działa

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

Ale co właściwie robi kod na wejściu?

 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)

Jeśli pierwsza liczba programu nie jest równa 2017, to wypisze program, w którym liczba ta zostanie zwiększona jeszcze raz, niż była tym razem. Jeśli ma wartość równą 2017 r. (Tzn. Została zwiększona 1984 razy), po prostu pchnij 2017 i zakończ. Pierwszy numer zaczyna się od 33 (długość kodu); każdy przyrost zwiększa długość kodu o 1 ORAZ tę liczbę o 1, więc gdy liczba 33 zostanie zwiększona na tyle, aby stać się 2017, kod będzie również miał długość 2017 bajtów.


0

JavaScript, 98 83 bajty

To było spore wyzwanie… Zgaduję, że otrzymałem to, że wymagałem zwrotu rzeczywistych funkcji, a nie tylko źródła funkcji.

Oryginalna funkcja

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

Używam functionzamiast =>tutaj, ponieważ ten ostatni nie obsługuje nazwanych funkcji, po prostu przypisując funkcje anonimowe do zmiennej.

Pierwsza iteracja

Uruchomienie powyższego w konsoli przeglądarki zwraca funkcję, która po rzutowaniu na ciąg wygląda następująco:

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

Dostać się do 2017 roku

Ponieważ każda funkcja zwraca nową funkcję, możesz wywołać oryginalną funkcję / jej wynik 1934 razy, aby uzyskać 2017 .

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

Testowane z Firefoksem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.