2017'ye Kadar Büyüyün


16

Bu meydan okumada çağlar boyunca ilerledikçe büyüyen bir program inşa edeceksiniz… 2017 yılına kadar.

Meydan okuma

Bu meydan okuma tanımı “program” dediğinde “fonksiyon” da okuyabilirsiniz.

Gönderiminiz yürütüldüğünde THE LENGTH OF YOUR SUBMISSION+ 1bayt uzunluğunda bir program çıkarır.

Ne zaman o programın yürütüldüğü çıktısı verecektir bir program THE LENGTH OF YOUR SUBMISSION+ 2uzun ... vb bayt.

Ancak , programınız 2017 bayt uzunluğa ulaştığında, bunun yerine çıktı almalı 2017ve çıkmalıdır.

kurallar

  • Nihai programın çıktısı 2017sadece ve olmalıdır 2017. Bu bir dize veya bir tamsayı olabilir, ancak okumalı 2017ve 2017.0ya 0x7E1başka böyle saçma ya.
  • Standart boşluklar yok .
  • Yalnızca ilk programınızın bayt hesabınıza eklenecek giriş gerektirmesine izin verilir.
    Dolayısıyla, başlangıç ​​programınız 324 karakter uzunluğunda ve 13 baytlık bir girdi alırsa, toplam puanınız 324 + 13 = 337 olacaktır ve program tarafından çıkarılan program 338 bayt uzunluğundaolmalıdır.
    • perl -XBununla birlikte, komut satırı bayraklarını (örn. ) Kullanmak iyidir - ilk programınız ve üretilen tüm programlar aynı bayrakları kullandığı sürece . Ayrıca, onlar da toplam bayt sayılır. Komut satırı bayrağının önündeki kesik çizgiler, eğik çizgiler vb. Toplamda sayılmaz, bu nedenle örneğin bir bayt perl -Xolarak sayılır .
  • Bir işlevi döndürürseniz, değerlendirildiğinde bir işlev üreten bir dize değil, gerçek bir işlev olmalıdır.
  • Uygun olmayan sorgulara (programınız bir sorgu ise) izin verilmez.

Misal

Sahte kod, 99 bayt

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

Gönderiminiz, yukarıdaki kurallara uyduğu sürece farklı şekilde çalışabilir.


Sadece ekleme gibi NOP'lara ;;;izin veriliyor mu?
FlipTack

@FlipTack Evet. ·
kullanıcı2428118

"Komut satırı bayrağının önündeki kesik çizgiler, eğik çizgiler vb. Toplamda sayılmaz, bu nedenle perl -X ek bir bayt olarak sayılır." - Bu, burada Meta'da tarif edilen normlara kasıtlı olarak aykırı mı? Normalde, vb tire, eğik çizgiler, bazen bağlı sayılması gereken gibi o seçenek görünüyor olmadan çağırma: meta.codegolf.stackexchange.com/questions/273/...
KKH

@hvd Bunu okuduğumu sanmıyorum, bu yüzden hayır, kasıtlı değil. Bununla birlikte, onları görmezden gelmenin çok fazla zararı olduğunu düşünmüyorum, bu yüzden bu meydan okuma için değiştirmeyeceğim.
user2428118

Yanıtlar:


6

*> <> , 29 28 30 bayt

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

Burada deneyin! (* 2017 bayt ile deneyin )
* gecikmeyi 0 ms'ye ayarlayın veya uzun süre beklemeniz gerekebilir

Bu, her bir alt çalıştırmayı ekler . 2017 baytı varsa ve çalıştırılırsa, 2017 çıktısı verir ve başka çıktı olmadan yürütmeyi durdurur.

Güncelleme: Uzunluğun eşit yerine 2017'den az olup olmadığını kontrol ederek 1 bayt kaydedildi

Güncelleme 2: +2 bayt için sabit çıktı

açıklama

" 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

evet, pek doğru when your program has reached a length of 2017 bytesdeğil, 2016
Yıkıcı Limon

Karpuz düzeltildi
redstarcoder

4

Python 2.7, 90 bayt

İşte nispeten basit olanı:

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

Burada ilk yinelemeyi deneyin! Burada sondan bir önceki yinelemeyi deneyin! Burada son yinelemeyi deneyin!

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 Son yineleme tam olarak 2017 karakter içeriyor. Sanırım sağ üst köşedeki bayt sayısını görebilirsiniz ....
Calconym

Ah benim hatam, bunun nasıl olduğundan emin değilim, üzgünüm!
redstarcoder

Kullanabilir p='';...ve kullanabilirsiniz 1929else, ancak yazdırmanın sonunda bir satırsonu yazdırdığına dikkat edin, bu nedenle programınıza bir satırsonu satır eklemeniz gerekir, aksi takdirde ilk çalıştırmadan sonra iki bayt büyür.
mbomb007


1

> <> , 34 bayt

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

Çevrimiçi deneyin! Bunu daha küçük değerler için test etmek için, değerinizin (eksi 1) 7 baytta oluşturulabileceğini unutmayın.

açıklama

":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 Bayt (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();}}}//

Bu, projenin .javaçalışma talimatının SRC'sindeki dosyaların konvansiyonu kullanılarak Eclipse'de yapıldığını varsayar . Kaynağın nerede olduğunu tespit etmenin başka yolları da var, ama bunun da kurallara aykırı olduğunu düşünmüyorum.

Temel olarak .java kaynak kodunu açar ve 2017'ye kadar ekler (bir yorumdan sonra). Kaynağın dosya boyutu toplam 2017 bayta ulaştığında, bunun yerine 2017 yazdırılır.


1

C, 197 Bayt

#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 bayt

Sonunda bir satırsonu olması gerektiğini unutmayın. Calconym'in kullandığı ile benzer kavramlar kullandım, bu yüzden ilham için teşekkürler!

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

Çevrimiçi deneyin

2016'da deneyin ; 2017'de deneyin


Önceki versiyon:

Bu program inspect , geçerli hat numarasını almak modülü . Ardından, içe aktarmadan sonra bir sonraki programın satır numarasını değiştiren fazladan bir satırla kendini yazdırır. Ayrıca burada bir satırsonu olmalıdır.

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

Çevrimiçi deneyin


1

CJam , 39 33 30 bayt

33q:X~

girdi ile

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

Çevrimiçi deneyin!

Bu, işlevsel olarak önceki sürümümle eşdeğerdir, ancak tırnak işaretleri yazma ve kaçma ihtiyacını ortadan kaldırır. Önceki sürüm:

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

Hangi çıktılar

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

hangi çıktılar

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

ve bunun gibi. Son olarak, program

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

Çıktılar 2017.

Nasıl çalışır

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

Ancak girişteki kod aslında ne yapar?

 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)

Programın ilk sayısı 2017'ye eşit değilse, bu sayının bu kez olduğundan bir kez daha artırıldığı bir program çıkarır. 2017'ye eşitse (yani 1984 kez artırıldı), 2017'yi itin ve sonlandırın. İlk sayı 33 (kodun uzunluğu) olarak başlar; her artış kod uzunluğunu 1 VE bu sayıyı 1 arttırır, bu nedenle 33 2017 olacak kadar artırıldığında, kod da 2017 bayt uzunluğunda olacaktır.


0

JavaScript, 98 83 bayt

Bu oldukça zor bir işti ... Sanırım gerçek fonksiyonların sadece fonksiyonun kaynağı değil, geri gönderilmesini istemek için de aldım.

Orijinal işlev

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

Ben kullanıyorum functionyerine=> çünkü ikincisi adlandırılmış işlevleri desteklemiyor, sadece bir değişkene anonim işlevler ataıyor.

İlk yineleme

Yukarıdakileri tarayıcı konsolunuzda çalıştırmak, bir dizeye yayın yapıldığında şöyle görünen bir işlev döndürür:

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

2017 Yılı

Her fonksiyon yeni bir işlev döndürür olduğundan, özgün fonksiyon / onun sonucu 1934 kez olsun çağırabilir 2017 .

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

Firefox ile test edildi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.