เติบโตจนถึงปี 2560


16

ในความท้าทายนี้คุณจะสร้างโปรแกรมที่เติบโตขึ้นเมื่อมันผ่านไปมานาน ... จนถึงปี 2560

ท้าทาย

เมื่อใดก็ตามที่คำอธิบายการท้าทายนี้ระบุว่า "โปรแกรม" คุณสามารถอ่าน "ฟังก์ชั่น" ได้เช่นกัน

การส่งของคุณเมื่อดำเนินการจะส่งออกโปรแกรมที่มีความยาวTHE LENGTH OF YOUR SUBMISSION+ 1ไบต์

เมื่อเรียกใช้งานโปรแกรมนั้นจะส่งออกโปรแกรมที่มีความยาวTHE LENGTH OF YOUR SUBMISSION+ 2ไบต์ ... และต่อไป

อย่างไรก็ตามเมื่อโปรแกรมของคุณมีความยาวถึง 2017 ไบต์จะต้องส่งออก2017และออกแทน

กฎระเบียบ

  • การส่งออกของโปรแกรมสุดท้ายจะต้องมีและมีเพียง2017 2017สามารถเป็นสตริงหรือจำนวนเต็ม แต่ต้องอ่าน2017และไม่2017.0หรือ0x7E1เรื่องไร้สาระอื่น ๆ
  • ไม่มีช่องโหว่มาตรฐาน
  • เฉพาะโปรแกรมเริ่มต้นของคุณเท่านั้นที่ได้รับอนุญาตให้ป้อนข้อมูลซึ่งจะถูกเพิ่มไปยัง bytecount ของคุณ
    ดังนั้นหากโปรแกรมเริ่มต้นของคุณมีความยาว 324 ตัวอักษรและรับอินพุต 13 ไบต์คะแนนรวมของคุณจะเป็น 324 + 13 = 337 และโปรแกรมที่เอาต์พุตจะต้องมีความยาว 338ไบต์
    • การใช้แฟล็กบรรทัดคำสั่ง (เช่นperl -X) นั้นใช้ได้อย่างไรก็ตามตราบใดที่โปรแกรมเริ่มต้นของคุณรวมถึงโปรแกรมที่สร้างขึ้นทั้งหมดใช้แฟล็กเดียวกัน นอกจากนี้พวกเขายังนับรวมต่อจำนวนทั้งหมดด้วย เครื่องหมายขีดกลาง, สแลช ฯลฯ ที่ด้านหน้าของแฟล็กบรรทัดคำสั่งจะไม่นับรวมทั้งหมดดังนั้นเช่นperl -Xนับเป็นหนึ่งไบต์เพิ่มเติม
  • หากคุณส่งคืนฟังก์ชันควรเป็นฟังก์ชันจริงและไม่ใช่สตริงที่เมื่อประเมินแล้วจะสร้างฟังก์ชันขึ้นมา
  • Quines ที่ไม่เหมาะสม (หากโปรแกรมของคุณเป็นควินิน) ไม่ได้รับอนุญาต

ตัวอย่าง

Pseudocode ขนาด 99 ไบต์

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

การส่งของคุณอาจทำงานแตกต่างกันตราบใดที่มันเป็นไปตามกฎข้างต้น


เป็นเพียงการผนวก NOPs เช่น;;;อนุญาตหรือไม่
FlipTack

@FlipTack ใช่·
2428118

"เครื่องหมายขีดกลาง, เครื่องหมายทับ ฯลฯ ที่ด้านหน้าของแฟล็กบรรทัดคำสั่งจะไม่นับรวมทั้งหมดดังนั้นเช่น 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 ไบต์ )
* ตั้งค่าหน่วงเวลาเป็น 0ms หรือคุณอาจต้องรอเป็นเวลานาน

นี่เป็นการเพิ่มการเรียกใช้ย่อยเพิ่มเติมแต่ละครั้ง หากมี 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 ของ 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

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 จะมีการส่งออกโปรแกรมที่จำนวนนั้นเพิ่มขึ้นหนึ่งครั้งมากกว่าครั้งนี้ ถ้ามันเท่ากับปี 2560 (นั่นคือเพิ่มขึ้น 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))()}

เดินทางไปปี 2560

ตั้งแต่ฟังก์ชั่นทุกฟังก์ชั่นส่งกลับใหม่คุณสามารถเรียกใช้ฟังก์ชันเดิม / ผล 1934 ของเวลาที่จะได้รับ2017

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

ทดสอบกับ Firefox

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.