挑战
在这个挑战中,您将编写无限个程序序列的第一个程序p 1,其中运行p n输出/生成程序p n + 1。当连接前n> = 2个程序时,该序列应输出n
。
例
假设前四个程序是:
p1 p2 p3 p4
如果要运行p1
,它应该输出:
p2
如果要运行p1p2
,它应该输出:
2
如果我要运行p1p2p3p4
它,应输出:
4
如果要运行p4
,它将按顺序生成下一个程序:
p5
计分
您的分数是第一个10
程序的字节数。
在这个挑战中,您将编写无限个程序序列的第一个程序p 1,其中运行p n输出/生成程序p n + 1。当连接前n> = 2个程序时,该序列应输出n
。
假设前四个程序是:
p1 p2 p3 p4
如果要运行p1
,它应该输出:
p2
如果要运行p1p2
,它应该输出:
2
如果我要运行p1p2p3p4
它,应输出:
4
如果要运行p4
,它将按顺序生成下一个程序:
p5
您的分数是第一个10
程序的字节数。
Answers:
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。
类似于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.
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 _%_
第一个程序(使用编译器标志/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("\"","\"\""));}}
你明白了。
程序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/
p1p2p3...
总是从p1到pn?