克服集群规模


37

厌倦了闪存的可靠性,您决定将所有程序存储在这些旧的1,440 KiB软盘之一中。但是,即使复制不到3,000个程序,磁盘也已满。那怎么可能呢?就像您一样,精通代码高尔夫球技术,大多数程序甚至都没有100字节长,因此应该留有足够的空间...

在“超级用户”上查询该文件后,您发现文件系统的群集大小使您感到困惑,这是FAT12设计人员的恶作剧,使您的软盘中的大部分未被使用,并迫使您购买超出实际需要的容量

买更多的软盘?决不!如果我们仅将多个程序保存在一个文件中,则群集大小将不再是一个问题,这是可能的,因为对于相同的源代码,不同的编译器/解释器的行为将有所不同。

任务

编写一个适合单个群集(小于或等于512个字节)的多语种,并尽可能解决以下许多任务。

  1. 读取所有输入并打印。

  2. 打印您好,世界!

  3. 读取一行/参数(name)作为输入,并打印生日快乐[name]!

  4. 阅读所有输入并打印我爱的标签!如果它包含一个或多个制表符(0x09),并且我讨厌空格!如果没有。

  5. 读取两行/参数,如果第二行是第一行的子字符串,则打印真实值,否则输出虚假值。

  6. 读取一行/自变量,如果字符严格按升序打印,则输出真实值;否则,输出虚假值。

  7. 读取行/参数和一个字符,并打印该字符所有出现的索引。

  8. 读取一行/自变量并打印出现次数最多的任何字符。

  1. 读取两个介于0255之间的整数,并打印它们的总和。

  2. 读取0255之间的单个整数,并打印除以7的商和余数。

  3. 读取一个介于1255之间的整数,如果它是一个复合数字(既不是1也不是素数),则输出一个真实值,如果不是,则输出一个虚假值。

  4. 读取一个介于1255之间的整数,如果它是2的幂,则打印一个真实值,如果不是,则打印一个虚假值。

  5. 读取0255之间的两个整数,并打印较大的整数。

  6. 读取介于0255之间的十进制整数,打印其十六进制表示形式。

  7. 读取0255之间的单个整数并打印其汉明权重(1位的数量)。

  8. 读取113之间的单个整数n并打印F n,第n 斐波那契数

    例如,对于输入13,print 233

  1. 读取一行输入/参数并对其进行构图。

    例如,对于input Programming Puzzles & Code Golf,输出:

    +---------------------------------+
    | Programming Puzzles & Code Golf |
    +---------------------------------+
    
  2. 读取一个矩形的字符块并将其顺时针旋转四分之一圈。

    例如,对于输入

    tye
    xll
    epb
    tma
     id
     sa
    s e
    i r
    hsn
    Tiu
    

    打印此:

    This  text
    is  simply
    unreadable
    
  3. 读取140之间的整数,并打印该边长的菱形。

    例如,对于input 3,输出:

      /\
     /  \
    /    \
    \    /
     \  /
      \/
    
  4. 打印此:

    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    ....@@@@....@@@@....@@@@....@@@@
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    @@@@....@@@@....@@@@....@@@@....
    

计分

设法将最大数量的程序合并到适合单个512字节群集的单个文件中的答案将获胜。领带按字节数断开(越低越好)。

附加规则

  • 对于要索取分数的每个任务,必须使用您选择的语言,用相同的文件(每个字节一个字节)构成一个完整的程序,以解决该特定任务。

  • 每个任务必须用不同的语言解决。

    如果语言不是同一语言的不同版本,则它们被视为不同。例如,只有一种JavaScript,一种Python和一种TI-BASIC,但是C,C ++,Octave和MATLAB是四种不同的语言。

  • 为每个任务选择的语言必须满足我们对编程语言的通常定义。

    此外,该语言必须在2015年9月9日之前发布和实施。

  • 您的编译器/解释器可能不需要任何非标准标志即可产生预期的行为。

    该规则的例外包括指定特定语言,从(单个)文件读取程序或禁止显示横幅所需的标志。

  • 每个任务的输入将由可打印的ASCII字符(0x20至0x7E)和换行符(0x0A)组成,并且长度不得超过255个字节。

  • 除非任务中另有说明,否则所有整数都可以十进制或一元形式读取。

  • 无效输入的行为是不确定的。

  • 您可以从STDIN(或与其最接近的替代品)或命令行参数中读取输入。

    如果任务需要读取两个输入,则可以按任意顺序读取它们,并以一个字节的定界符分隔它们,将其作为单独的命令行参数,或者将其从STDIN中分离出来,将另一个作为命令行参数。

    如果输入段之一是行,则唯一可能的定界符是换行符。

  • 将输出打印到STDOUT(或最接近的替代品)。所有输出到STDERR的都将被忽略。

  • 对于每个任务,均适用标准规则。

    特别是,这包括默认情况下禁止漏洞,但对输出进行硬编码(明确要求此挑战除外)除外。


1
JavaScript和CoffeeScript是否足够不同以被视为不同的语言?
Downgoat

是的,这些算作不同。
丹尼斯2015年

17
您的挑战4是胡说八道> :(
门把手

Quote:所有输出到STDERR都将被忽略。这是否意味着当我们使用调用脚本/程序2>/dev/null并将正确的输出输出到stdout时,可以吗?只是要确定。
Cabbie407

2
@ Cabbie407准确地。根据对meta的共识,默认情况下,此规则实际上适用于所有挑战。我只是想确保每个人都知道这一点。
丹尼斯

Answers:


17

12种语言,418个字节

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
 \@-[I love tabs!]o#
  \ >qi---@
( @-[ ]e<''';print hex(
input())#-[I hate spaces!]o#"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"))?(!?)
'''=#print(([1 1;1 0]^int(readline()))[1,2])
#=
Tr is here.
>Tr, Hello, World!
>X Tr
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#=#.91<0#'''#";

这是一个有趣的挑战。越来越难以适应更多的语言,但是剩下这么多字节,我大概可以再做一遍。

免费使用2D语言。请注意,在之间的字符[ ]@-[ ]e<线是一个标签。另外,这需要\n行尾才能使TRANSCRIPT正常工作。

前奏(任务1 /猫)

( 
      )?(!?)

?(!?)只是,[.,]BF中的直接翻译。前奏()循环的作用类似于BF []循环,因此从(最左边一列到)核心程序执行之前的所有内容。

Prelude的语法规则意味着括号需要匹配(按列读取从左到右),并且每列只能有一个括号。除此之外,这是一种非常容易使用的语言。

如果您使用的是Python解释器,请确保NUMERIC_OUTPUT设置为False

转录(任务2 / Hello world)

Tr is here.
>Tr, Hello, World!
>X Tr

TRANSCRIPT是一个基于互动小说的主题世界。TRANSCRIPT无法识别的行将被忽略,使其易于插入。

Tr is here.声明一个Tr字符串变量,第二行将变量的内容设置为Hello, World!X TrX供检查)然后输出字符串。

尽管TRANSCRIPT非常容易安装,但它是一种非常冗长的语言,因此我使它成为最简单的挑战。

裂变(任务3 /生日消息)

R"Happy Birthday, "[?S"!"*
                   \!/

它打印出第一部分,用较小的2D循环显示输入,然后输出结尾的感叹号。该R意味着一个原子开始这里向右移动,因为这个程序可以任何地方被移动这是有用的。

导轨(任务4 /选项卡)

$'main'
 \@-[I love tabs!]o#
  \ >qi---@
  @-[ ]e<
         -[I hate spaces!]o#

像Fission一样,Rail是2D语言,其优点是可以在任何地方移动。从开始执行$的的main功能,驶向东南部。

首先,我们朝\s方向走,在处向左转-,点击[<tab>]会推动制表符。e<然后根据EOF进行分支-如果是EOF,我们停下来打印,"I hate spaces!"然后再暂停,否则我们往上走。如果向上走,我们将读取下一个字符并将其与制表符进行比较,再次分支-如果制表符,请"I love tabs!"在停顿之前抬头并打印,否则向下走并继续输入循环。

这个程序非常昂贵,但是由于TRANSCRIPT选择了Hello World,因此很难为Rail选择合适的任务。

> <>(任务6 /升序输入)

"1\"#      \""" "" "


>0[0>i:0(?v:{)?v0n;
       ;n1< .95<


        .91<

1如果严格提升0则打印,否则进行。

> <>是另一种2D语言,执行从左上角开始。"..."是字符串模式,一次将一个内部字符推入一个。在我们击中第一个字符串之后#,它向左反射IP,在击中之前,推入更多的字符串并环绕(> <>为环形)\,这是一个向上反射我们的镜子。

该程序的底部是.91<,它会将我们传送到(9, 1)核心程序所在的。之后,0[将所有垃圾从字符串中删除,0将0推入代表最后读取的char,然后一次只读取char,确保我们仍在升序。

最好将核心程序下移而不是传送,但是如有必要,我将在后面处理。

Befunge(任务9 /添加)

"1\"# &&+.@

经过测试发现与解释这里。这是一个非常简单的程序,从一开始就推送无用的字符串并#跳过空间。之后,这只是核心程序&&+.@

迷宫(任务10 / Divmod by 7)

"1
 =
 '
 <
""'("']
 ?
 :_7/!\_7%!@

便利,'"在迷宫的NOP其中像在迷宫适合步行的路径。我将跳过混乱的导航,但是基本上,在我们点击之前有很多转折和徘徊?,这是核心程序的开始。

该程序还不太齐备以解决前奏(例如,?在前奏中读取了输入)。

Python 2(任务14 /十六进制)

"1\"# &&+.@\""" "" "
#=
''''
xxx
xxx''';print hex(
input())#xxx
'''
xxx
xxx'''#";

xxxs为通过多行字符串或评论的评论出不相关的部分。在两者之间是print hex(input())核心程序。这个输出带有一个Leading 0x,但是我假设这是可以的(如果没有,那么无论如何这都是一个简单的解决方法)。

第一行是一个字符串,"1\"# &&+.@\""后跟两个" "s。这三个字符串由解析器连接起来,并且不使用(第一行对于Ruby和Julia之后的工作类似)。

GolfScript(任务15 /汉明重量)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("']0=~2base{+}*}

第一行输入三个字符串,第二行为注释。''''再推送两个字符串,然后进行<<两次比较(s忽略)。最后,""'("'再推两个字符串。

所有这些都是垃圾,然后通过将其包装在数组中并获取第一个元素(]0=)来删除,这是最初在堆栈上的输入。然后~,我们用评估输入,用转换为二进制,2base然后用求和{+}*。下一个}是无与伦比的,它将对程序的其余部分进行超级注释。

朱莉娅(任务16,斐波那契)

"1\"# &&+.@\""" "" "
#=
xxx
xxx=#print(([1 1;1 0]^int(readline()))[1,2])
#=
xxx
xxx=#.91<0#xxx

#=开始多行注释,然后=#结束多行注释。核心程序使用矩阵求幂来计算斐波纳契数(取自Rosetta)。

Ruby(任务17 / ASCII框架)

"1\"# &&+.@\""" "" "
#=
''''
<<s
xxx
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a#xxx

该程序假定输入不以尾随换行符结尾。

我们有一个无用的字符串,一个注释,另一个无用的字符串,然后是一个注释文档,它注释掉了程序的大部分内容。在那之后是核心程序,然后是一行#注释。

果酱(任务19 /钻石)

"1\"# &&+.@\""" "" "
#=
''''
<<s
""'("xxx
"
R"xxx"[?S"!"*"
xxx
xxx"ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"xxx
xxx
xxx";

第一行末尾的两个空格字符串应满足CJam,因为#=它们是两个二进制运算符。我不会在此详细介绍,但基本上是一团糟,核心程序仅仅是

ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>

在两者之间。

GolfScript和CJam之间的主要区别在于,在CJam中,单引号'不会开始和结束字符串,而是将下一个字符压入堆栈。这意味着在CJam中

'("'

按下a (然后以开始的字符串"(其第一个字符为'),而上面的内容只是GolfScript中的单个直线。

在线尝试1>用于代替(前奏。


这是12种语言(373个字节)。一些任务已经完成,删除了TRANSCRIPT(这使Rail变得过于昂贵),并添加了Scheme(鸡肉)。这只是我的职业发展之地,因为更新主要职位需要永远。

"1\"09!#.&&+.@"" "" "#|"
#=
''''
<<s
11]0=~2base{+}*}
 ?
 :_7/!\_7%!@
"
R"Happy Birthday, "[?S"!"*"
>0[0>i:0(?v:{)?v0n;\!/
$'main';n1< .95<
(-[Hello, World!]o#''';print(input()in input());'''"]];ri:X{_~X+S*'/@S*_'\4$N}%_sW%1>"=#print(([1 1;1 0]^int(readline()))[1,2])#=)?(!?)
s
l=gets
a='+-'+?-*~/$/+'-+'
puts a+'
| %s |
'%l+a# =##'''#";e# |#(print(format"~x"(eval(read))))

我可以为Julia保留几个字节,因为未终止的多行注释会引起STDERR错误。


好东西。TRANSCRIPT的任务是什么?
Cabbie407

@ Cabbie407我仍在尝试优化使用哪种语言来执行哪个任务,但是目前TRANSCRIPT已采用Hello World,并且Rail已更改为tabs任务。
Sp3000

嗯,;)由于篇幅较长,我现在可以更改答案中的任何内容。大声笑
Cabbie407's

26

7 8 9 10种语言,398个 431 447 507字节

这可能是我在当前解决方案中所能适应的。

#if      + 0+0/*^",v  +- '[.,][[" ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
a=0--0;b=input();print(sorted(set(b))==list(b));[[""""                 ^ <
print("Hello, World!")--[[vv? +<
#endif/*  >.!0 + +1ffr"!"~< */
#include<stdio.h>/*>:1 +?!^>i:1^*/
int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1//**/1==2
){printf("%x",/*>&:7/.7%.@*/i);}else{for(;--i-1>0;a=b,b=c)c=a +b;printf("%d",b);}}/*]]--"""]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J "` + +,*.]]]*/SSSTNSSNSNSTNTTTTTSSSTNSNSTNTTTTTTSSTNTTSNSSNNSSSNTTTTNSTNNNN

最后一行包含编码的空白代码,以便SE不会吃掉它。要运行代码,请S用空格,T制表符和N换行符替换所有代码。

C89,任务16

这是编译器看到的内容:

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1/ 1==2
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

其他所有内容都被剥离为注释或#if 0

C ++,任务14

我使用从这里偷来的花招来区分C89和C ++。

int main(){int a=1,b=1,c,i;scanf("%d",&i);if(1
){printf("%x",i);}else{for(;--i-1>0;a=b,b=c)c=a+b;printf("%d",b);}}

Lua,任务2

这是基本结构。

#comment
a=0--comment
print("Hello, World!")--[[
... multiline comment ...
]]--comment

Brainfuck,任务1

我只需要确保没有.,发现无限循环或杂散。Lua的多行评论也是BF评论的两倍。除了前两个字符之外的所有内容都是一个大的NOP循环。

++,+-[.,][[,+++.+<--[[<,--[[+<>.++<<.>>+>,,,,,>..--->,+,]]--]]+++-+[++,.]]]

Python,任务6

同样,我使用特定于语言的功能来NOP或注释掉其他代码。

#comment
a=0--0;b=input();print(sorted(b)==list(b));[["""
... multiline string ...
"""]];#comment

Pyth,任务17

Pyth很适合这件事。它以第一个#while True:循环,并在出错时退出。因此,我只是将大部分代码设置为字符串(以免;s提前结束循环),然后结束循环,退出由Python注释创建的另一个并执行任务。这是所有非空字符串都替换为" string "的功能,在功能上仍然等效:

#if      + 0+0/*^" string " ,yadhtrib yppaH" string """" string "Hello, World!" string "!"  string "%d"  string "%x" string "%d" string """]];#@;_J + + \+*\-hhlz \+s[\|dzd\|)J " string

> <>,​​任务3

这个很有趣。执行在代码中反弹,在必要时使用跳转来避开障碍物。相关部分:

#                  v            " ,yadhtrib yppaH"l?!;offf4+ + +0.0 +aa<*/
                   i                                                   ^ <
                   !      vv? +<
          >.!0 + +1ffr"!"~<
                   >:1 +?!^>i:1^

星空任务9

在这里,我必须开始进入“丢弃除”之外的所有字符。除去任何其他内容,它看起来像:

      + +*,  + '., , + + +. +*                  ,  +*  . + + *.* +*  ,,,,**,*..*, +,* + + +* + ` + +,*.*

该代码仅使用代码的开头和结尾就跳过了大多数标点符号,以免造成麻烦。该代码在功能上等同于

      + +*,  + + +,*.*

Befunge-98,任务10

与> <>类似。幸运的是,#在> <>中是一个镜像,在Befunge中是一个跳过,因此我们可以实现不同的行为。另外,0/0 == 0

#if      + 0+0/*^
                >&:7/.7%.@

空格,任务13

这是我要解决的最后一件事。前几行只是将零推入堆栈,因为它们仅包含“正常”代码中的空格和换行符。代码被编码;S用空格,T制表符和N换行符替换所有内容。

SSSSSSSSSSSSSSSN
SSSSSSSSSSSSSSSSSSN
SSN
SSSSSN
SN
SSN
SSSSSSSSSSSTN
SSN
SN
STN
TTTTTSSSTN
SN
STN
TTTTTTSSTN
TTSN
SSN
N
SSSN
TTTTN
STN
N
N

9

17种不同版本的Pip,383个字节(无效)

当这个问题被沙箱化时,我梳理了我的语言Pip的所有修订,并提出了使用其中17种的多语言。令人遗憾的是,现在挑战规则禁止使用相同语言的版本,但是在Dennis的许可和免责声明下,我还是要发布我的作品。

原始代码

I!ga:0m@0:0v:uIN[(oTM0,0i)EN1N1Y1RCkw(hR`1.+0``&2o`)@>3@AB0`u`rZ4AB6({a}V7)BN8AZ9@m]Iv<2W##YqlPByc:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}m:'+.'-X#a+2.'+.n."| "Iv=5La{i+:oSio}j:ak:bPv=11?a>1&0INa%(2,a)[((J_M ZRVl)|0)Jnl?lJnlcJnd.n.RVdm.a.RVmih:$+TBa({j@aEQk}FI0,#a).saTB16a>b?abh=1ua//7.s.a%7a+bbINa"Happy Birthday, ".a.'!"Hello, World!"]@v

策略

在Pip中,小写字母是变量。大写字母更加复杂:它们分成最多两个字符的行,可以是运算符或变量。如果未将大写标记专门定义为变量或运算符,则假定它是未定义的变量,其值为nil。

因此,要区分两个版本的Pip,我只需要查找在两个版本的较新版本中添加的一些变量或字母运算符。在较旧的版本中,它将为零。该代码v:uIN[...]汇总了一个大列表,其中包含我要测试的每个版本的检查之一,找出该列表中有多少个nil(u变量已明确初始化为nil),并将数字存储在v(用于“版本”)中。

经过一些其他计算之后,还有另一个大列表可以计算挑战中17个任务的结果,并v根据该版本选择一个。

版本和任务

0.15.09.04

诊断:((oTM0,0i)修复了带有Tri M运算符的错误,该错误从字符串的每一端开始修剪0个字符会改成空字符串;索引到空字符串会产生nil)

任务18 :(Iv<2W##YqlPBy设置:如果stdin v小于2,则从stdin读取所有行),然后进行((J_M ZRVl)|0)Jn(反向行列表,转置并联接回字符串)

0.15.08.06

诊断:(EN1添加了EN枚举运算符)

任务1 :(Iv<2W##YqlPBy与上面相同的设置代码),然后是l?lJnl(在换行符处联接)

0.15.08.03

诊断:(作为操作员的简短版本1N1添加)NIN

任务20 :(c:((J['.'@]X4)X4RL3)Jnc.:n.RVcc:cRL4|0设置:生成包含上半部和下半部棋盘的列表并存储在中c),然后是cJn(在换行符上联接)

0.15.08.01

诊断:(Y1添加了Yank运算符)

任务19 :(Iv=3{d:sXaRLaFj,ad@j@j:'\d:(RVdR'\'/).d|0dJ:n}设置:如果v为3,则在中创建菱形的上半部分d),然后再进行d.n.RVd(对下半部分进行反向转换并在换行符上加入)

0.15.06.19

诊断:(RCk添加了Random Choice运算符)

任务17 :(m:'+.'-X#a+2.'+.n."| "设置:在中构建+----+\n| 字符串m),然后是m.a.RVm(在中包装输入,m并在后面反向包装m

0.15.06.12

诊断:(将变量k初始化k", ";以前未定义,因此为nil)

任务16 :(Iv=5La{i+:oSio}如果v为5,则在中生成斐波那契数i),然后是i

0.15.06.08 (注意:直到下一次提交,版本号才更改)

诊断:(对的w预初始化w变量`\s+`

任务15 :(h:$+TBa将输入转换为二进制和总和数字;h稍后将结果保存到任务12中)

0.15.05.29

诊断: (hR`1.+0``&2o`)@>3@AB0

此版本&作为正则表达式替换中整个匹配字符串的替换模式添加(受sed启发)。上面的代码采用h100)并将其替换为`&2o`(即,"1002o"在较新版本中,但仅"&2o"在较旧版本中)。然后,它将第3个字符切成薄片("2o"在新版本中,""在旧版本中),并尝试索引到该字符串中。索引为空字符串将得到nil。

任务7: j:ak:b(设置:拷贝本地变量ab对全局变量jk因此他们将能够使用的功能内),随后({j@aEQk}FI0,#a).s(过滤器在指数a在相应的字符等于b,和加入的空间)

0.15.05.26

诊断:(`u`添加了模式类型;在以前的版本中,反引号被视为无法识别的字符,并且表达式的计算结果为u,为nil)

任务14: aTB16(转换Tø BASE 16)

0.15.05.24

诊断:(rZ4创建的r特殊变量,每次引用该变量都会返回0到1之间的随机值;以前未定义,因此表达式的计算结果为nil)

任务13 :(a>b?ab三元表达式)

0.15.05.12

诊断:(rZ4添加的Zip运算符)

任务12 :(h=1任务15中的位总和必须等于1)

0.15.05.11

诊断:(AB6添加了AB溶质值运算符)

任务11 :(Pv=11?a>1&0INa%(2,a)[...]@v如果v为11,1则在输入大于1且较小的数字将其精确除法的情况下输出,0否则;如果v在其他情况下,请v用作列表的索引来决定输出什么)

0.15.05.02

诊断:(({a}V7)添加的V运算符;V未定义时,此函数将参数nil和7发送至{a}返回其第一个参数的函数)

任务10 :(a//7.s.a%7输入整数除以7和mod 7,以空格分隔)

0.15.04.26

诊断:(BN8添加BNwiseegation运算符)

任务9: a+b

0.15.04.23

诊断:(AZ预初始化AZ为大写字母的变量)

任务5: bINaIN使出现次数)

0.15.04.20

诊断:m@0:0其次9@m

m变量已预初始化为1000。在此提交中,@运算符被固定为返回左值;以前,分配m@0给发出警告,但没有执行任何操作。因此,在修正错误后,第一条语句设置m0000,这是的合法索引9;错误修正前,mstays 1000,这不是合法索引。(指标尚未循环。)

任务3: "Happy Birthday, ".a.'!

0.15.04.18

以前的所有诊断结果都将nil添加到诊断列表中。

任务2: "Hello, World!"


其他大多数代码都是为了避免各种版本中的错误而不得不进行的调整。这篇文章已经太久了,因此,如果您想了解我还没有解释的任何内容,让我们将讨论带入深奥的语言chatroom


4

6种语言,226个字节(229个取决于\x1b接受方式!)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));/*
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

因此,我认为我不是语言的最佳选择,我想这并不是特别有竞争力,但是我仍然发现这是一个有趣的挑战!总体而言,完成的挑战并不多,但是我可能会在空白或类似的环境中遇到挑战,但这是我到目前为止的目标:


1.脑干

[+.]>>+[>,]<[<]>>[.>]>[<.[],[][,],,[],[].]

http://copy.sh/brainfuck/http://brainfuck.tk/上进行了测试。

除去所有忽略的字符后,剩下的就是上面的程序,这只是cat程序示例,带有一些额外的空循环以绕过其他语言对符号的使用。

2.红宝石

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

用法:

ruby cluster

上面是删除所有注释后的代码。第一行在Ruby中完全没有用,因为我们定义了一些包含Befunge-93和brainfuck代码的正则表达式,然后我们创建了一个包含和打印的数组,HelloWorld使用printf(添加,!)进行打印。

3. Perl

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;
$a=['Hello','World'];//;printf"%s, %s!
",$a[0]||'Happy Birthday',$a[1]||pop;

用法:

perl cluster <name>

与Ruby非常相似,不同之处在于,由于我们在中存储数组引用$a,当我们尝试访问$a[0]它为空时,因此可以将其替换为质询3的文本,Happy Birthday并且pop(它显示了命令行程序的最后一个参数) )。

4. JavaScript

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;
$a=['Hello','World'];
",$a[0]||'Happy Birthday',$a[1]||pop;#";$a="\
#";alert(prompt().match("\t")?"I hate tabs!":"I love spaces!");/\]/

用法:粘贴到浏览器控制台中并运行。

与Ruby和Perl相同,第一行本质上创建了无用的RegExp对象,然后我们在其中存储了一个无用的数组$a并实例化了两个无用的字符串,一个包含Ruby / Perl代码,一个包含换行符和a #,然后我们prompt()用于输入和alert()预期的结果由大多数人挑战4。我们以另一个无用的RegExp物体结束了大脑他妈的循环。

9. Befunge-93

/&&#[+.#]@

http://www.quirkster.com/iano/js/befunge.html上进行了测试。

据我了解,/将堆栈划分为栈,然后将没有不良影响的结果压入堆栈,除了NaN在上述站点上压入,&要求输入整数,以便我们将质询9所需的两个数字都读入堆栈,以#确保我们跳过了[在那里进行脑力劳动,+然后将堆栈中的前两个数字相加,将其.输出,#]再次进行脑力劳动并@退出。

13. PHP(在Bash中运行)

/&&#[+.#]@>>+[>,]<[<]>>[.>]>\[/;//;#<?die("\x1bc".max($argv[1],$argv[2]));

用法:

php cluster <x> <y>

在PHP中,未包含在<?标签中的所有内容都是逐字输出的,因此这将输出Befunge-93和brainfuck代码,因此我们die()立即在代码中输出屏幕clear(\x1bc),然后输出max()前两个参数的。


您可以在字符串文字中添加文字ESCape字符,只需添加一个注释(在其中the first character in the first string literal is the byte ASCII 27)即可。您的分数是226。–
cat

@cat是的,我想您是对的,我暂时保持现状,但我确实在标题中输入了226。我已经忘记了我对这项挑战有多喜欢,我现在可能可以做更多的事情,而使用ES6我可以拥有.match'\x09'(“是”),也许我会看看是否可以在某个时候添加更多!
Dom Hastings

4

6种语言,450个 404字节

bash,brainfuck,C,gawk4,JavaScript和Minimal-2D

/*\t/#[R,+/D
/\t/ # UL.-L<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/#*/
#define func
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#//]++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<[>>>>>+++[<++++[<<....>....>-]<<<.>>>>-]<<<[>>+<<-]<[[>+<-]<]>>-]

更新:打了一下。仍然不确定要添加什么,并且我不确定使用相同语言的竞争成员会如何考虑我。试图解释Brainfuck算法。

好吧,这是/是我的第一次通晓多语言,因此我不得不从头开始学习所有内容。我认为从awk开始并不是最聪明的主意,因为它是相对不宽容的。因为已完成任务的数量是相关的,所以我首先从最简单的任务开始。不知道这是否是明智之举。这不是打高尔夫球的原因,因为我很难让这六个一起工作,但是我尽了最大的努力。

以下是这些语言及其按字母顺序进行的操作。我将展示一种简单的方法来进一步测试它们。因为其中一些可能是特定于版本的,所以我将为您提供所用工具的版本号。

bash,任务3

好吧,我使用sed很明显。我试图以某种方式放入sed脚本,但是我无法使其正常工作,所以我走了bash路线。我的理解方式是,它位于C注释中,并且awk将其评估为False

sed --versionsed (GNU sed) 4.2.2

bash --versionGNU bash, Version 4.3.30(1)-release (x86_64-pc-linux-gnu)

所以sed部分归结为

sed "s/^\(.*\)$/Happy Birthday, &!/;q"

它将输入分组,将其粘贴到新字符串中并打印结果。很普通的东西。

头脑操,任务20

好吧,我猜这总是很容易隐藏。#//C和awk忽略以开头的行。或者至少他们可以在其后生活垃圾。

bfbf - a Brainfuck interpreter version 20041219

这是压缩代码。第一行只是其他语言的垃圾。

[,+.-<>.+.++.<>.,,,,[][][++]++<[--][]]
++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<
[>>>>>+++[<++++[<<....>....>-]<<<.>>>>-]<<<[>>+<<-]<[[>+<-]<]>>-]

我将尽力解释其运作方式

++++++++[>+>+>++++++>++++++++<<<<-]>>++>--<<

这将磁带和指针布置到此

0 8 10 46 64 C2 C1
  ^

包含8的单元格是下一个循环的全局计数器,
它是打印3条相同行的次数

[>>>>>+++

设置C1为3,相同的行数

    [<++++

设置C2为4,....@@@@一行中“ ” 的数字(开头)

        [<<....>....>-]<<<.>>>
    >-]

如果为零,则C2在此过程中打印完整的行减量,然后打印换行并进行减量。
C2C1

如果C1为零,魔法就发生了

    <<<[>>+<<-]
    <[[>+<-]<]

46移到64
的后面,10移到全局计数器的右边

>>-]

然后,
如果全局计数器为零,则将其递减,程序退出

C,任务2

我在这里通过打印“ Hello,World!”来耗尽C的所有最后一点功能。好吧,有人必须做这项工作。

gcc --versiongcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2

实际的C代码

#define func
func main(){puts("Hello, World!");}
#

这样#define func可以使它正常工作。它认为这是awk函数。func的缩写是gawk的功能。

gawk4,任务18

由于我在这里几乎将awk用于所有内容,因此我决定必须在其中。

awk --versionGNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)

awk看到了

/*\t/
/\t/
sed "s/^\(.*\)$/Happy Birthday, &!/;q"&&0
/\t/
func main(){puts("Hello, World!");}
//{split($0,b,_);for(i in b)a[NR][i]=b[i++]}END{for(;j++<i;print"")for(k=NR;k;)printf a[k--][j]}
#

搜索模式包括,\t评估为false。我在这里选择了tab,因为我认为不能在输入中。sed评估为false"the string"&&0评估为假。该功能还可以。如果匹配任何输入的空模式,则执行该程序。

它做到了

输入值

埃莱克语
帕里
成功
rig

输出量

e
卡尔
伊夫拉
吉利
tic

您必须确保所有输入线都具有相同的长度。使用空格来填充它们。

JavaScript,任务9

我不确定这是否合法,因为这太容易了。如果给程序文件添加html结尾,然后在浏览器(我使用Firefox 40.0.3和chrome 45.0.2454.85)中打开它,则提示您输入。您必须输入两个数字,并用空格分隔,这将警告这些数字的总和。

<script>var s=prompt().split(' ');alert(+s.pop()+ +s.pop())</script>

最小2D任务1

这很容易放入注释行中。我使用在python中运行的解释器对此进行了测试。它将输入打印到输出。该程序看起来像这样

R,+/D
UL.-L

RUDL是右,上,下和左。因此它开始正确,从stdin读取一个字符到内存中并添加一个。如果内存的值为0,则斜杠将跳过下一个命令。这将结束该命令。如果读取值为-1的字符,则输入已结束。因此,如果读取-1,它将跳过D并终止。如果读取了其他内容,它将向左下移,将该1加回内存并将字符打印到stdout。然后它向上和向左移动并重新开始。

测试中

免责声明:对于您为此对系统造成的任何损害,我不承担任何责任。

假设您已经安装了bash&co,gawk(至少是版本4,因为它使用多维数组),gcc,python,bf作为安装了Brainfuck的解释器并安装了Firefox。

为方便起见,请将程序源复制到名为的文件中cluster.html。使该文件对于bash任务可执行。将Minimal-2d解释器复制并粘贴到minimal2D.py同一目录中命名的文件中。然后将以下脚本复制并粘贴到脚本文件中,并将其放入同一目录中,使其可执行并运行...好吧,我在和谁聊天。如果您阅读了此内容,则可能不需要太多说明,无论如何都可以使它运行。

#!/bin/bash
# Task  3: bash
echo "Dr. Hfuhruhurr" | ./cluster.html 2>/dev/null;echo
# Task 18: awk 
printf "elaic\nparli\nucfit\nsrigs\n" | awk -f cluster.html 2>/dev/null;echo
# Task  2: C
cp ./cluster.html ./cluster.c;gcc -w -o cluster cluster.c;./cluster;rm cluster cluster.c;echo
# Task  1: Minimal-2D
python minimal2D.py cluster.html <<<"This
has
to be
copied     !!!";echo
# Task 20: brainfuck
bf cluster.html;echo
# Task  9: JavaScript
firefox cluster.html 2>/dev/null
#google-chrome cluster.html 2>/dev/null

您还可以在其中找到用于单独运行测试的命令。

玩得开心!


笨蛋有问题;代码中的括号不平衡,无法正常运行(您必须运行整个文件,而不仅仅是相关部分)。另外,棋盘格的正方形实际上是4x3而不是4x4,以使文本看起来更正方形。
PurkkaKoodari

感谢您的提示。好吧,它在这里运行良好。正如您在脚本中看到的那样,我总是运行整个文件。不确定解释器在运行前是否应检查括号。我不在乎。但是我忽略了行数。得到改变。
Cabbie407's

好吧,我再次调查了它,希望我能解决它。
Cabbie407
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.