链接程序


26

挑战

在这个挑战中,您将编写无限个程序序列的第一个程序p 1,其中运行p n输出/生成程序p n + 1。当连接前n> = 2个程序时,该序列应输出n

假设前四个程序是:

p1 p2 p3 p4

如果要运行p1,它应该输出:

p2

如果要运行p1p2,它应该输出:

2

如果我要运行p1p2p3p4它,应输出:

4

如果要运行p4,它将按顺序生成下一个程序:

p5

计分

您的分数是第一个10程序的字节数。


序列是否p1p2p3...总是从p1pn
驼鹿

@Moose是的,它将始终是从p1到pn。
Downgoat

5
这是一个有趣的问题。程序顺序很容易;链接更加困难。
Conor O'Brien 2015年

是否允许访问文件?
林恩

@Mauris是的,但是文件内容和名称的字节数必须计入使用该程序的总字节数
。– Downgoat 2015年

Answers:


49

珀斯,12岁

p1:

l"1

p2: 1

p3: 1

等等..

p1p2p3:

l"111 

输出: 3

说明:

l        length
 "1      string "1"

第一次运行时,这将输出单个字符串的长度1。这也恰好是有效的Pyth程序,1再次输出。因此,pn + 1始终为1。链接程序时,p1输出链接程序的长度,即n


9

Lua,950900字节

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

取消高尔夫:

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(使用不同于我的方法)。这是我所希望的创造性答案的类型。
麋2015年

Lua +1,并且选择冷却器,如果比其他答案更长的方法:P
cat

哈哈,谢谢,我为使用一种非高尔夫和相当冗长的语言来做到这一点感到非常自豪:)
Nikolai97

4

Vitsy,19个字节

这里不处理字符串,而是使用方法技巧。

1

1ml1-\+N
1

2

1

3

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的答案,我正在映射字符串。唯一的区别是,我使用换行功能来​​确保始终获得正确的长度。

1

'l3-N

2

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个字节(包含不可打印的):

5Ql-.

十六进制转储:

35516c2d2e7f

该程序打印1在线尝试

其余所有程序都是1有效的程序,可以像Pyth答案一样打印自己。原始程序将打印其源代码的长度减去5,然后立即终止。1末尾附加s,每次都会将源代码的长度增加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

观察p1p2a-1q41。这会转换为:

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

由于在第一次打印后禁用了隐式打印,因此将打印2,因为源代码的长度减去4的长度为2。


2

Ruby,318个字节

p 1

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

每个单独的程序p i输出单行quine :_="_=%p;puts _%%_";puts _%_

当您将这些奎因添加到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();

节目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/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.