Chương trình xâu chuỗi


26

Thử thách

Trong thử thách này, bạn sẽ viết chương trình đầu tiên, p 1 , một chuỗi chương trình vô hạn, trong đó chạy p n đầu ra / tạo chương trình p n + 1 . Khi nối các chương trình n> = 2 đầu tiên, chuỗi sẽ xuất ra n.

Thí dụ

Giả sử 4 chương trình đầu tiên là:

p1 p2 p3 p4

Nếu tôi chạy p1, nó sẽ xuất ra:

p2

Nếu tôi chạy p1p2, nó sẽ xuất ra:

2

Nếu tôi chạy p1p2p3p4nó thì nên xuất ra:

4

Nếu tôi chạy p4, nó sẽ tạo chương trình tiếp theo trong chuỗi:

p5

Chấm điểm

Điểm của bạn là số byte của các 10chương trình đầu tiên .


Các trình tự sẽ p1p2p3...luôn luôn từ p1 đến pn ?
Moose

@Moose Có, nó sẽ luôn luôn từ p1 đến pn.
Hạ cấp

5
Đây là một vấn đề thú vị. Trình tự chương trình là đủ dễ dàng; xích càng khó hơn.
Conor O'Brien

Có cho phép truy cập các tập tin?
Lynn

@Mauris Có nhưng số byte của nội dung & tên của tệp phải được tính trong tổng số byte cho mỗi chương trình được sử dụng.
Downgoat

Câu trả lời:


49

Bình 12 tháng 12

p1:

l"1

p2: 1

p3: 1

v.v.

p1p2p3:

l"111 

Đầu ra: 3

Giải trình:

l        length
 "1      string "1"

Trong lần chạy đầu tiên, điều này xuất ra độ dài của một chuỗi ký tự , 1. Đây cũng là một chương trình Pyth hợp lệ, xuất ra 1lần nữa. Do đó, pn + 1 luôn 1. Khi các chương trình được xâu chuỗi, sẽ p1xuất ra độ dài của các chương trình được xâu chuỗi n.


9

Lua, 950 900 byte

s=io.open(arg[0]):read()if#s<95 then print(s)do return end end print(#s/90) do return end;

Ung dung:

s=io.open(arg[0]):read'*a'
if #s < 96 then 
    print(s)
    do return end 
end 
print(#s/90) 
do return end;

Giải trình:

Dòng đầu tiên lấy toàn bộ nguồn của chương trình. Sau đó, chúng tôi so sánh độ dài của toàn bộ chương trình với 1 + độ dài của một chương trình. Nếu kích thước của chương trình hiện tại nhỏ hơn giá trị này, so với nguồn được in, đó là chương trình tiếp theo, p2 và chúng tôi thoát. Mỗi lần lặp chỉ là một quine. Khi một vài trong số này được đặt cùng nhau, điều kiện không thành công và chúng tôi in độ dài của chương trình được chia cho độ dài của một chương trình, đó là số lượng chương trình được nối, n.


+1 để sử dụng một phương pháp khác (so với của tôi). Đây là loại câu trả lời sáng tạo mà tôi đã hy vọng.
Moose

+1 cho Lua và chọn phương pháp làm mát, nếu phương pháp dài hơn các câu trả lời khác: P
cat

Haha cảm ơn bạn, tôi đã rất tự hào rằng tôi đã xoay sở để làm điều này với một ngôn ngữ không chơi golf và khá dài dòng :)
Nikolai97

4

Vitsy , 19 byte

Không xử lý các chuỗi ở đây, nhưng sử dụng các thủ thuật phương thức.

p1

1ml1-\+N
1

p2

1

p3

1

Cứ như vậy, cứ thế.

Giải thích bên dưới:

1ml1-\+N
1m       Execute the first index of lines (the bit with the ones)
  l1-    Get the length minus 1.
     \+  Add them all up.
       N Output as number.

1        Push one to the stack.

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


4

Vitsy , 14 byte

Tương tự như câu trả lời của Pyth và Jolf, tôi đang ánh xạ các chuỗi. Sự khác biệt duy nhất là tôi sử dụng các tính năng gói dòng để đảm bảo tôi luôn có được độ dài phù hợp.

p1

'l3-N

p2

1

Thay thế 1 bằng bất kỳ số nào.

p3 và vv phù hợp với mẫu này và bạn có thể làm điều này cho đến khi Integer.MAX_VALUE, giới hạn số nguyên của ngôn ngữ.

Giải trình:

'l3-N
'     Wrap around the line until finding another '. Since no ' is found before the
      End of the line, it wraps around.
 l    Get the length of the stack.
  3-  Subtract three.
    N Output as number.

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


4

Nghiêm túc, 15 byte

Chương trình đầu tiên, 6 byte (chứa một không thể in được):

5Ql-.

Bãi rác Hex:

35516c2d2e7f

Chương trình này in 1: Dùng thử trực tuyến

Phần còn lại của các chương trình là tất cả 1, một chương trình hợp lệ tự in giống như câu trả lời của Pyth. Chương trình gốc in độ dài của mã nguồn trừ 5 và chấm dứt ngay lập tức. 1s được nối vào cuối làm tăng độ dài của mã nguồn thêm 1 byte mỗi lần, nhưng không bao giờ được thực thi.


2

Jolf , 14 byte

Hãy thử nó ở đây!

a-lq4
a      print
  lq   the length of the source code
 -  4  minus 4

Khi thực hiện, điều này in 1. Như vậy , p2 = 1. p2Sản lượng thực hiện 1. Vì vậy, cho tất cả N > 1, pN = 1.

Quan sát p1p2: a-1q41. Điều này chuyển đến:

alert(sub(length("a-lq41"),4));
1;

Vì in ngầm bị vô hiệu hóa sau lần in đầu tiên, bản in này 2, vì độ dài của mã nguồn trừ 4 là 2. Và bật và tắt.


2

Ruby, 318 byte

p 1 :

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__

Mỗi chương trình p riêng tôi kết quả đầu ra này một dòng Quine: _="_=%p;puts _%%_";puts _%_.

Khi bạn thêm các quines này vào cuối p 1 , chúng sẽ kết thúc dưới dạng các dòng trong DATAđối tượng vì chúng nằm dưới phép thuật __END__.

Đây là một bài kiểm tra:

$ ruby chain.rb                                    # running p1
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p2
_="_=%p;puts _%%_";puts _%_

$ ruby -e '_="_=%p;puts _%%_";puts _%_'            # running p3
_="_=%p;puts _%%_";puts _%_

$ # Concatenating p2 and p3 to p1:
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb
$ ruby -e '_="_=%p;puts _%%_";puts _%_' >> chain.rb

$ ruby chain.rb                                    # running p1p2p3
3

Mười chương trình đầu tiên được nối giống như thế này (318 byte):

x=DATA.readlines.size
_="_=%p;puts _%%_"
puts x>0?x+1:_%_
__END__
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_
_="_=%p;puts _%%_";puts _%_

1

C #, 2099 + 7 = 2106 byte

Chương trình đầu tiên (sử dụng cờ biên dịch /main:A):

class A{static void Main(){int a=System.Reflection.Assembly.GetEntryAssembly().GetTypes().Length;var b=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a>1?"{2}":b,0,b.Replace("\"","\"\""),a);}}

Chương trình thứ hai:

class A0{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,0+1,a.Replace("\"","\"\""));}}

Chương trình thứ ba:

class A1{static void Main(){var a=@"class A{0}{{static void Main(){{var a=@""{1}"";System.Console.Write(a,{0}+1,a.Replace(""\"""",""\""\""""));}}}}";System.Console.Write(a,1+1,a.Replace("\"","\"\""));}}

Bạn có được ý tưởng.


0

Javascript ES6, điểm 483 455

Chương trình 1, 77 byte:

v=1;setTimeout(_=>alert(v>1?v:'a=_=>this.v?v++:alert("a="+a+";a();");a();'));

Chương trình 2 trở lên, mỗi 42 byte:

a=_=>this.v?v++:alert("a="+a+";a();");a();

0

PHP, 1470 byte

Chương trình 1: 219 byte:

class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();

progam 2 và hơn 139 byte:

if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));

sử dụng như:

php -r "class O{public$n=1;function __destruct(){echo($n=$this->n)>1?$n:'if(!$o->n++)echo str_replace(chr(9),$a=aWYoISRvLT5uKyspZWNobyBzdHJfcmVwbGFjZShjaHIoOSksJGE9CSxiYXNlNjRfZGVjb2RlKCRhKSk7,base64_decode($a));';}}$o=new O();"

Sử dụng một phiên bản được đánh golf nhẹ, kỹ thuật quine php chi tiết tại đây: http://10types.co.uk/the-lab/a-minimal-php-quine/

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.