โปรแกรมผูกมัด


26

ท้าทาย

ในความท้าทายนี้คุณจะเขียนโปรแกรมแรก, หน้า1ของลำดับอนันต์ของโปรแกรมซึ่งในการทำงาน P nผล / โปรแกรมสร้างหน้า1 + n เมื่อเชื่อมโยง n ที่> = 2 nโปรแกรมแรกลำดับควรเอาท์พุท

ตัวอย่าง

สมมติว่า 4 โปรแกรมแรกคือ:

p1 p2 p3 p4

ถ้าฉันจะทำงานp1ก็ควรเอาท์พุท:

p2

ถ้าฉันจะทำงานp1p2ก็ควรเอาท์พุท:

2

ถ้าฉันจะเรียกใช้p1p2p3p4มันควรจะส่งออก:

4

หากฉันต้องรันp4ก็ควรสร้างโปรแกรมต่อไปตามลำดับ:

p5

เกณฑ์การให้คะแนน

คะแนนของคุณคือจำนวนไบต์ของ10โปรแกรมแรก


ลำดับp1p2p3...จะมาจากp1ถึงpn เสมอหรือไม่
Moose

@ เลือกใช่มันจะเป็นตั้งแต่ p1 ถึง pn เสมอ
Downgoat

5
นี่คือปัญหาที่น่าสนใจ. ลำดับของโปรแกรมนั้นง่ายพอ การผูกมัดยากขึ้น
Conor O'Brien

อนุญาตให้เข้าถึงไฟล์หรือไม่
Lynn

@Mauris ใช่ แต่จำนวนไบต์ของเนื้อหาและชื่อไฟล์จะต้องนับเป็นจำนวนไบต์ทั้งหมดสำหรับแต่ละโปรแกรมที่ใช้
Downgoat

คำตอบ:


49

Pyth, 12

p1:

l"1

P2: 1

p3: 1

ฯลฯ ..

p1p2p3:

l"111 

เอาท์พุท: 3

คำอธิบาย:

l        length
 "1      string "1"

ในการรันครั้งแรกสิ่งนี้จะส่งออกความยาวของสตริงอักขระเดียว, 1. สิ่งนี้จะเกิดขึ้นเป็นโปรแกรม Pyth ที่ถูกต้องและให้ผลลัพธ์1อีกครั้ง ดังนั้นPN + 11อยู่เสมอ เมื่อโปรแกรมจะถูกล่ามโซ่เอาท์พุทความยาวของโปรแกรมที่ถูกล่ามโซ่ซึ่งจะp1n


9

Lua, 950 900 ไบต์

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

Ungolfed:

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

คำอธิบาย:

บรรทัดแรกจะจับแหล่งที่มาทั้งหมดของโปรแกรม จากนั้นเราเปรียบเทียบความยาวของโปรแกรมทั้งหมดกับ 1 + ความยาวของโปรแกรมเดียว หากขนาดของโปรแกรมปัจจุบันมีขนาดเล็กกว่าค่านี้กว่าแหล่งที่มาจะถูกพิมพ์ซึ่งเป็นโปรแกรมถัดไป p2 และเราออกจาก การวนซ้ำแต่ละครั้งเป็นเพียงแค่ควิน เมื่อหลายสิ่งเหล่านี้รวมเข้าด้วยกันเงื่อนไขจะล้มเหลวและเราพิมพ์ความยาวของโปรแกรมที่ต่อกันหารด้วยความยาวของหนึ่งโปรแกรมซึ่งเป็นจำนวนของโปรแกรมที่ต่อกัน n


+1 สำหรับการใช้วิธีการอื่น (นอกเหนือจากของฉัน) นี่คือประเภทของคำตอบที่สร้างสรรค์ที่ฉันหวังไว้
Moose

+1 สำหรับ Lua แล้วเลือกวิธีที่เย็นกว่าหากใช้เวลานานกว่าคำตอบอื่น ๆ : P
cat

ฮ่าฮ่าขอบคุณมากฉันภูมิใจมากที่ฉันสามารถทำสิ่งนี้ด้วยภาษาที่ไม่ใช่กอล์ฟและ verbose อย่างเป็นธรรม :)
Nikolai97

4

Vitsy , 19 ไบต์

ไม่ได้จัดการกับสตริงที่นี่ แต่ใช้เทคนิควิธีการ

p1

1ml1-\+N
1

P2

1

p3

1

เป็นต้นไปเรื่อย ๆ

คำอธิบายด้านล่าง:

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.

ลองออนไลน์!


4

Vitsyขนาด 14 ไบต์

คล้ายกับคำตอบของ Pyth และ Jolf ฉันกำลังทำแผนที่สตริง ข้อแตกต่างเพียงอย่างเดียวคือฉันใช้คุณสมบัติการตัดบรรทัดเพื่อให้แน่ใจว่าฉันได้ความยาวที่เหมาะสมเสมอ

p1

'l3-N

P2

1

แทนที่ 1 กับใด ๆหมายเลขเดียว

p3 และอื่น ๆ ตรงกับรูปแบบนี้และคุณสามารถทำเช่นนี้ได้จนถึงInteger.MAX_VALUEข้อ จำกัด จำนวนเต็มของภาษา

คำอธิบาย:

'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.

ลองออนไลน์!


4

อย่างจริงจัง 15 ไบต์

โปรแกรมแรก, 6 ไบต์ (ประกอบด้วย unprintable):

5Ql-.

ฐานสิบหก:

35516c2d2e7f

โปรแกรมนี้พิมพ์ 1 : ลองออนไลน์

ส่วนที่เหลือของโปรแกรมทั้งหมด1เป็นโปรแกรมที่ถูกต้องซึ่งพิมพ์ตัวเองเช่นเดียวกับคำตอบของ Pyth โปรแกรมต้นฉบับพิมพ์ความยาวของซอร์สโค้ดลบ 5 และยุติทันที 1ต่อท้ายเพิ่มความยาวของซอร์สโค้ด 1 ไบต์ในแต่ละครั้ง แต่ไม่เคยถูกเรียกใช้งานเลย


2

Jolf , 14 ไบต์

ลองที่นี่!

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

เมื่อดำเนินการแล้วจะพิมพ์1ออกมา ดังนั้นp2 = 1. การดำเนินการที่อัตราผลตอบแทนp2 1ดังนั้นสำหรับทุกคนN > 1pN = 1 ,

สังเกตp1p2: a-1q41. transpiles นี้ไปที่:

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

เนื่องจากการพิมพ์โดยนัยถูกปิดใช้งานหลังจากการพิมพ์ครั้งแรกการพิมพ์นี้2เนื่องจากความยาวของซอร์สโค้ดลบ 4 คือ 2 และเปิดและเปิดและตลอดเวลา


2

Ruby, 318 ไบต์

หน้า1 :

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

แต่ละโปรแกรมที่แยกจากกัน p ฉันเอาท์พุทควินไลน์เดียวนี้ :_="_=%p;puts _%%_";puts _%_ควินหนึ่งบรรทัด:

เมื่อคุณเพิ่ม quines เหล่านี้ไปยังจุดสิ้นสุดของ p 1พวกมันจะจบลงด้วยเส้นในDATAวัตถุเพราะอยู่ต่ำกว่าเวทย์มนตร์__END__วัตถุเพราะพวกเขาอยู่ด้านล่างมายากล

นี่คือการทดสอบ:

$ 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

สิบโปรแกรมแรกที่ต่อกันจะมีลักษณะดังนี้ (318 ไบต์):

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 ไบต์

โปรแกรมแรก (ใช้คอมไพเลอร์แฟล็ก/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);}}

โปรแกรมที่สอง:

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("\"","\"\""));}}

โปรแกรมที่สาม:

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("\"","\"\""));}}

คุณได้รับความคิด


0

Javascript ES6, คะแนน483 455

โปรแกรม 1, 77 ไบต์:

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

โปรแกรม 2 และสูงกว่าแต่ละ 42 ไบต์:

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

0

PHP, 1470 ไบต์

โปรแกรม 1: 219 ไบต์:

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 และสูงกว่า 139 ไบต์:

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

ใช้เช่น:

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();"

ใช้เทคนิค php quine รุ่นที่ตีกอล์ฟเล็กน้อยรายละเอียดที่นี่: http://10types.co.uk/the-lab/a-minimal-php-quine/

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