Phát triển đến năm 2017


16

Trong thử thách này, bạn sẽ xây dựng một chương trình phát triển khi nó đi qua các lứa tuổi cho đến năm 2017.

Thử thách

Bất cứ khi nào bản mô tả thử thách này nói về chương trình, thì bạn cũng có thể đọc chức năng của Google.

Việc gửi của bạn, khi được thực thi, sẽ xuất ra một chương trình dài THE LENGTH OF YOUR SUBMISSION+ 1byte.

Khi chương trình đó được thực thi, nó sẽ xuất ra một chương trình dài THE LENGTH OF YOUR SUBMISSION+ 2byte, v.v.

Tuy nhiên , khi chương trình của bạn đã đạt đến độ dài 2017 byte, thay vào đó, nó phải xuất 2017và thoát.

Quy tắc

  • Đầu ra của chương trình cuối cùng phải 2017và duy nhất 2017. Nó có thể là một chuỗi hoặc một số nguyên, nhưng nó phải đọc 2017và không 2017.0hoặc 0x7E1hoặc vô nghĩa như vậy.
  • Không có sơ hở tiêu chuẩn .
  • Chỉ chương trình ban đầu của bạn mới được phép yêu cầu đầu vào, sẽ được thêm vào bytecount của bạn.
    Vì vậy, nếu chương trình ban đầu của bạn là dài 324 ký tự và phải mất một đầu vào của 13 byte, tổng số điểm của bạn sẽ được 324 + 13 = 337 các chương trình xuất ra bởi nó phải là 338 dài byte.
    • perl -XTuy nhiên, sử dụng cờ dòng lệnh (ví dụ ) là tốt - miễn là chương trình ban đầu của bạn cũng như tất cả các chương trình được tạo sử dụng cùng một cờ. Ngoài ra, họ cũng tính vào tổng số bytecount. Dấu gạch ngang, dấu gạch chéo, v.v ... trước cờ dòng lệnh không được tính vào tổng, do đó, ví dụ như perl -Xđược tính là một byte bổ sung.
  • Nếu bạn trả về một hàm, nó sẽ là một hàm thực tế chứ không phải là một chuỗi mà khi được đánh giá sẽ tạo ra một hàm.
  • Các quines không đúng (nếu chương trình của bạn là một quine) không được phép.

Thí dụ

Mã giả, 99 byte

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

Trình của bạn có thể hoạt động khác nhau, miễn là nó tuân thủ các quy tắc trên.


Là chỉ nối thêm NOP như ;;;được phép?
FlipTack

@FlipTack Có. ·
user2428118

"Dấu gạch ngang, dấu gạch chéo, v.v ... trước cờ dòng lệnh không được tính vào tổng số, vì vậy, ví dụ: perl -X được tính là một byte bổ sung." - Điều này có cố ý trái với định mức ở đây như được mô tả trên Meta không? Thông thường, dấu gạch ngang, dấu gạch chéo, v.v. đôi khi nên được tính, tùy thuộc vào cách gọi mà không có tùy chọn đó trông như thế nào: meta.codegolf.stackexchange.com/questions/273/ Thẻ
hvd

@hvd Đừng nghĩ tôi đọc cái đó, nên không, nó không cố ý. Điều đó nói rằng, tôi không nghĩ rằng có nhiều tác hại trong việc bỏ qua chúng vì vậy tôi sẽ không thay đổi nó cho thử thách này.
dùng2428118

Câu trả lời:


6

*> <> , 29 28 30 byte

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

Hãy thử nó ở đây! (* thử với byte 2017 )
* đặt độ trễ thành 0ms hoặc bạn có thể phải chờ rất lâu

Điều này thêm một lần chạy bổ sung . Nếu nó có byte 2017 và được chạy, nó sẽ xuất 2017 và dừng thực thi mà không có đầu ra nào khác.

Cập nhật: Đã lưu 1 byte bằng cách kiểm tra xem độ dài nhỏ hơn 2017 thay vì bằng

Cập nhật 2: Đã sửa lỗi đầu ra cho +2 byte

Giải trình

" 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

vâng, không hoàn toàn đúng when your program has reached a length of 2017 bytes, không phải năm 2016
Lemon phá hủy

Đã sửa lỗi @DeststallibleWateriwi
redstarcoder

4

Python 2.7, 90 byte

Đây là một cách tương đối đơn giản:

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

Hãy thử lần lặp đầu tiên ở đây! Hãy thử lặp lại áp chót ở đây! Hãy thử lặp lại cuối cùng ở đây!

Ung dung:

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 Lặp lại cuối cùng có chính xác 2017 ký tự. Bạn có thể thấy số byte ở góc trên bên phải tôi nghĩ ....
Calconym

Ah lỗi của tôi, không chắc điều đó đã xảy ra như thế nào, xin lỗi!
redstarcoder

Bạn có thể sử dụng p='';...1929else, nhưng lưu ý rằng việc in cũng in một dòng mới ở cuối, vì vậy bạn nên thêm một dòng mới vào chương trình của mình, nếu không nó sẽ tăng hai byte sau lần chạy đầu tiên.
mbomb007


1

> <> , 34 byte

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

Hãy thử trực tuyến! Lưu ý rằng, để kiểm tra giá trị này cho các giá trị nhỏ hơn, giá trị của bạn (trừ 1) phải có thể được tạo trong 7 byte.

Giải trình

":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 byte (IDE Eclipse)

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

Điều này giả sử dự án được thực hiện trong Eclipse, sử dụng quy ước của .javacác tệp trong SRC của thư mục làm việc. Có nhiều cách khác để phát hiện nguồn ở đâu, nhưng tôi cũng không nghĩ điều này là trái với quy tắc.

Về cơ bản sẽ mở mã nguồn .java và nối thêm As cho đến năm 2017 (sau khi nhận xét). Khi kích thước tệp của nguồn đạt tổng số byte 2017, thay vào đó, nó sẽ in năm 2017.


1

C, 197 byte

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

Lưu ý rằng nên có một dòng mới. Tôi đã sử dụng các khái niệm tương tự như những gì Calconym đã sử dụng, vì vậy cảm ơn về nguồn cảm hứng!

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

Dùng thử trực tuyến

Thử năm 2016 ; Thử năm 2017


Phiên bản trước:

Chương trình này sử dụng inspect mô-đun để lấy số dòng hiện tại. Sau đó, nó tự in nhưng có thêm một dòng sau khi nhập, thay đổi số dòng cho chương trình tiếp theo. Cũng cần có một dòng mới ở đây.

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

Dùng thử trực tuyến


1

CJam , 39 33 30 byte

33q:X~

với đầu vào

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

Hãy thử trực tuyến!

Đây là chức năng tương đương với phiên bản trước của tôi, ngoại trừ việc nó tránh được việc phải viết và thoát khỏi dấu ngoặc kép. Phiên bản trước:

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

Đầu ra nào

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

đầu ra nào

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

và như thế. Cuối cùng, chương trình

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

Đầu ra 2017.

Làm thế nào nó hoạt động

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

Nhưng mã trong đầu vào thực sự làm gì?

 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)

Nếu số đầu tiên của chương trình không bằng 2017, thì nó sẽ xuất ra một chương trình trong đó số đó được tăng thêm một lần so với lần này. Nếu nó bằng 2017 (nghĩa là nó đã tăng 1984 lần), thì chỉ cần đẩy 2017 và chấm dứt. Số đầu tiên bắt đầu là 33 (độ dài của mã); mỗi gia số làm tăng độ dài mã thêm 1 VÀ số đó thêm 1, vì vậy khi 33 đã được tăng đủ để trở thành 2017, mã cũng sẽ dài 2017 byte.


0

JavaScript, 98 83 byte

Đó là một thách thức khá lớn, Guess đó là những gì tôi nhận được khi yêu cầu các hàm thực tế phải được trả về và không chỉ là nguồn của hàm.

Chức năng ban đầu

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

Tôi đang sử dụng functionthay vì =>ở đây vì cái sau không hỗ trợ các hàm được đặt tên, chỉ gán các hàm ẩn danh cho một biến.

Lặp lại đầu tiên

Chạy phần trên trong bảng điều khiển trình duyệt của bạn sẽ trả về một hàm, khi được truyền tới một chuỗi, trông giống như:

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

Đến năm 2017

Vì mỗi hàm trả về một hàm mới, bạn có thể gọi hàm ban đầu / kết quả của nó là 1934 lần để nhận 2017 .

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

Đã thử nghiệm với Firefox.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.