历久不衰


24

受到SO上这个问题的启发,您的任务是生成一个程序,该程序在(至少)您选择的语言的两个主要版本中有效,并且会产生不同的输出。

规则

  • 可以使用具有多个主要版本的任何语言。
    • 出于此挑战的目的,我建议“主要版本”是版本号中第一个数字更改的地方。
      • PHP 4和PHP 5不同,PHP 5.3和PHP 5.4没有不同。
    • 但是,由于我不知道所有语言的版本控制方案,因此,如果您能充分辩护您的情况,那么我相信社区将确定您自己确定“主要版本”是否公平。
  • 该代码必须使用相同的标志进行编译和运行,并且每次都要输入
    • 如果需要的话,更改语言版本除外
  • 错误不算作输出,产生错误的答案不合格(而不是错误输出被忽略)
  • 该程序应只输入使其运行所需的输入。
  • 对于每个给定的版本,输出应始终相同
  • 目的是,更改应该是语言规范而不是VM规范或环境元数据更改的结果

计分

  • 长度的类型得分,因此+1每个字符/字节
  • -1每个字符输出长度上的差异
    • 例如,版本1输出abcde(5个字符),版本2输出123abc(6个字符)=-1

其他规定

  • 适用标准例外-无需外部程序,Web请求等。
  • 您的程序应终止(在2秒内)
  • 最低分获胜。

“更好”的得分

保留您的原始答案,为了公平起见,我将根据原始规则标记获胜者。

由于我的原始评分从根本上被打破,为什么不使用以下评分系统重新评分/重试:

  • 长度的类型得分,因此+1每个字符/字节
  • +1针对每个字符的输出 长度差异
    • abcde123456->+1
  • -1对于输出中的每个唯一字符差异(限制为最短输出的长度)
    • abcde123456->-5
    • 12345123456->-1
    • 12345123455->0
  • 分数最接近零赢
  • 如果出现第二次抢七,则简单的比分获胜。

注意:在Ruby中,第一个数字是epoch,它表示Ruby历史上的重大事件,而不是版本号(0-> 1是初始发行版,1-> 2是Ruby的20岁生日)。主号码是第二个数字。因此,Ruby 1.8-> 1.9将跨越一个主要版本。
约尔格W¯¯米塔格

1
我认为新评分与原始评分有很大不同,这实际上是一个新问题
Tal 2014年

我想说PHP示例是有争议的,5.4有很多基本功能会在5.3上中断(特征,[]数组,数组取消引用)。它将是PHP6,但随后决定默认情况下将6保存为更激进的unicode字符串IIRC
Einacio 2014年

2
独特的字符差异是什么?如果我输出zzzzaaaa,这是否给我-4?那就是我的感觉。
贾斯汀

1
因此,假设程序可以检测到它运行在哪个版本上,那么获胜者是谁可以在两秒钟内输出最多的字符?我认为,这个问题可以作为鼓励人们找到有趣且精妙的语言错误的人气竞赛更好。
Cephalopod 2014年

Answers:


39

经修订的“更好”的评分系统答案

C89 / C99,得分:0

我的程序长52个字符,并且使用与原始答案相同的机制来实现不同的输出。这是有效的,因为C89不会将其//视为注释:

i=32;main(){putchar(i+++0//**/
+52)&&i<84&&main();}

结果:

$ ./diff2c89
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS
$ ./diff2c99
TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂Çüéâäàåç
$ ./diff2c99 | wc
      0       1      52
$ ./diff2c89 | wc
      0       1      52
$ wc diff2.c
      1       2      52 diff2.c

旧答案:

C89 / C99,得分:-无穷大?

我不确定这个程序是否没有违反规则,但是没关系。该程序利用了C89 //中不是有效注释而是有效的事实/* ... */

使用注释技巧可以执行其他功能。在C89中,该函数仅打印"trolololol..."直到堆栈溢出(因此它可能会在2秒钟内完成)。

f1(){printf("ol");f1();}
f2(){printf("oll");}
main(){
    printf("tr");
    void (*f[])() = {f1,f2};
    f[0 //* trollololol */
      +1]();
}

C99

$ ./diffc99
troll

C89

$ ./diffc89
trolololololololololololololololololololololololololololololololololololololololololo
lolololololololololololololololololololololololololololololololololololololololololol
ololololololololololololololololololololololololol ....

1
我不确定这是否违反规则,但是我喜欢它:)
Tal

9
根据“更好的规则”,Scores closest to zero win因此实际上距离零远。
user80551

1
根据C标准的注释定义,通过除法或加法对函数指针数组进行索引...漂亮。
Desty

16

Python-比下一个最佳答案低10分

print(range(100))

在Python 2中,这将打印从0到99的整个整数列表。

在Python 3中,range是一个生成器,因此它将仅显示“ range(0,100)”。

鉴于我从未遇到过Python的大小限制,我可以用更大的数字(例如2 ** 1000)替换该100,最终在输出中几乎无穷大。

经过编辑以反映以下事实:尽管我可以得到的分数在任何实际目的上都是无限低的,但我无法使用终止于2秒的程序达到实际的无限

对于更新的决胜局计分系统,我将提交:

print(range(4))

输出:

Python 2: [0, 1, 2, 3]

Python 3: range(0, 4)

第一个打印有5个唯一字符([123]),第二个打印有8个唯一字符(range(4)),输出长度差为1,代码有15个字符,最短输出为11个字符...这些规则很令人困惑,但是我认为这使我的最终得分为15 + 1分钟(11,5 + 8)= 5。


但是,“即使您在非常(有限)快速的计算机上,您的程序也应终止”,您的“更大”(有限)数仍远没有达到-∞,因此我对您的分数表示怀疑(给定或接受;])
James Webster

@JamesWebster感谢您将这个可怕的技术错误引起我的注意,我已经对答案做了相应的编辑;)
Tal 2014年

其他类似的答案肯定会到来。我猜这些答案的得分应该根据它们达到无穷大的速度来计算。
Vereos

@Vereos我希望,如果出现其他此类答案,则将使用其他评分详细信息对问题进行编辑。
2014年

1
@Tal我认为阅读评分规则的每个人都将提出一种解决方案,该解决方案在阅读任何问题答案之前,只会产生负面评分,仅受语言或硬件限制;)评分被设计所破坏...
foob​​ar 2014年

13

Python-0分

不知道这是怎么工作的:P在尝试随机代码时偶然发现了它。

int

在Python 3 <class 'int'>和Python 2上<type 'int'>(使用交互控制台)
“更好”分数:3(长度)+1(字符差)-4(唯一字符)

旧版Python 1-7分

print()

非常感谢@grc这个版本,并帮助我减去了4分!

在Python 2中,此语句被解释为print ()打印空元组()
在Python 3中,print是函数,结果是没有任何输出。
“更好”得分:7(长度)+ 2(字符区分)-2(唯一字符)

旧版Python 2-13分:

print(1,2)

“更好”得分:12(长度)+ 2(字符差异o / p)-1(唯一字符o / p)

我知道这不会赢,但仍然给出了答案,因为这是我第一次尝试Python :)


我认为可以将其缩短为print()
grc 2014年

@grc非常感谢您的建议!回顾我的编译器,我发现我已经尝试过了,但是在文档中迷失了,于是我删除了它以尝试dict.itertools():P
Gaurang Tandon 2014年

12

C#

我还更改了C#2、3和4之间的通用方法类型推断算法。例如:

using System;
class C
{
  static int M<T>(T x, T y) { return 1; }
  static int M(object x, object y) { return 2; }
  static void Main() 
  {
    Console.WriteLine(M(1, new int?()));
  }
}

在C#2中,方法类型推断说T不能既是intand int?,因此产生2。在C#3方法类型推断说“之间的最佳折衷intint?int?等选” M<int?>,并产生1。


9
> 也改变了你是什​​么意思,改变了……哦。哦。
2014年

9

Ruby,4个字符+ 0个字符长度差-3个唯一字符差=得分1

p ?d

在Ruby 1.9上,它将打印"d"。在1.8上,它打印100

说明:?d"d"在1.9和1001.8(用于d的ASCII码)。p x等同于puts x.inspect*是字符串重复和乘法。


用于旧评分的“优化”版本:

Ruby,8个字符-999999989个字符差=得分-999999981

p ?!*1e9

打印33000000000.0为1.8,"!!!!!!... !!!"为1.9。(?!33在1.8和"!"1.9,并且*是两者串重复和乘法。)

确实,您可以使用乘法来达到所需的程度,这仅取决于计算机的速度。


您能解释一下第二行中到底发生了什么吗?
2014年

@Tal Okay,编辑
Doorknob

8

重击--∞(达到实际极限)

实际上,无论您有多少内存。例如约10GB:

echo {0..999999999}

重击2:不支持大括号扩展范围,因此prints {0..999999999}

重击3:


任何语言--∞(不超过实际限制)

您几乎可以用任何一种语言来使用它,即使最终变得更加复杂。一旦可以创建两个不同的值,就可以编写产生任意不同输出的代码。更好的计分方法将忽略输出中的差异。

version = … # some arbitrarily weird stuff
if version = 2:
    while not timed_out():
        print "version2"

@foobar “任何语言”版本中的代表您用来使程序依赖于语言规范更改的任何技巧。无论是if $version >= 3还是,它都是版本检测if isinstance(range(0),list)
吉尔斯(Gilles)'所以

4

C#

以下代码将为C#5.0和早期版本的C#产生不同的输出

using System;
using System.Collections.Generic;

namespace TestConsoleAppClosure
{
    class Program
    {
        static void Main(string[] args)
        {
            var actions = new List<Action>();
            List<int> list = new List<int> { 10, 20, 30, 40 };
            foreach (var item in list)
            {
                  actions.Add(() => Console.WriteLine(item));
            }
            foreach (var act in actions) act();
        }
    }
}

输出:C#5.0

10
20
30
40

输出:C#4.0

40
40
40
40

原因在Eric Lippert的博客文章中得到了解释。

关闭循环变量被认为是有害的


4

Python,-14点(3-17个字符长度差= -14)

2/3

Python 2输出: 0

Python 3输出: 0.6666666666666666

更好的得分版本,满分5分(3 + 2个字符长度差= 5)

3/2

Python 2输出: 1

Python 3输出: 1.5


4

C#

我在C#4中添加了协方差和逆方差,因此程序形式如下:

using System;
using System.Collections.Generic;
class C
{
  static void Main() 
  {
    Console.WriteLine((new List<string>()) is IEnumerable<object>);
  }
}

false在C#2和3以及trueC#4中生成。

但是,可能有人认为这不算什么,因为包含的定义的IEnumerable<T>也必须更改。


3

C ++ 98/11-“更好”的评分(115个字符-输出中的115个唯一字符差异=得分为0)

略加修改的版本以符合新的评分规则

打高尔夫球:

#include<cstdio>
#define u8 "\x0B"
int main(){int i=116;char c[i];c[--i]=0;while(i-->0)c[i]=u8"\x7E"[0]+i;puts(c);}

非高尔夫版本:

#include <cstdio>
#define u8 "\x0B"
int main() {
    int i = 116;
    char c[i];
    c[--i] = 0;

    while(i-- > 0)
        c[i] = u8"\x7E"[0] + i;

    puts(c);
}

新解决方案与旧解决方案并没有太大区别。在新解决方案中,C ++ 11和C ++ 98的输出均具有116个等长的字符,但是它们唯一的共同点是puts函数附加的换行符。

对于C ++ 98,u8in u8"\x7E"[0]仍将被替换,但现在被替换"\x0B"。因此,预处理后的结果值为"\x0B""\x7E"[0]。这两个字符串将串联在一起,"\x0B\x7E"下标运算符将访问第一个元素,在这种情况下,是字符编码中值为11的字符。另外,i将添加的值,其初始值为114。因此,值125的字符将被写入结果数组。由于i进入到从125到11将被写入到所述阵列零的所有值和puts将打印的所有字符与从11至125的值,加上后新行。

在C ++ 11 u8"\x7E"[0]中将被解释为UTF-8字符串,该字符串由具有十六进制值7E的单个字符组成。下标运算符现在将访问此字符,并将其值i添加到该字符,从而在第一次迭代期间产生十进制值241。当i变为零时,所有低至126的值都将被写入数组,puts并打印具有从126到241的值以及尾随新行的字符。

根据所使用的字符集,这将产生不同的结果,因为大多数字符集仅具有共同的前128个字符。

对于ISO-8859-2,输出如下:

C ++ 98: C ++ 98的输出

C ++ 11: C ++ 11的输出

C ++(106个字符-107个输出差=得分为-1)(旧规则)

打高尔夫球:

#include<cstdio>
#define u8 "f"
int main(){int i=108;char c[i];c[--i]=0;while(i-->0)c[i]=u8""[0];puts(c);}

非高尔夫版本:

#include <cstdio>
#define u8 "f"

int main() {
    int i = 108;
    char c[i];
    c[--i] = 0;

    while(i-- > 0)
            c[i] = u8""[0];

    puts(c);
}

g++ -std=c++98 main.cpp和编译g++ -std=c++11 main.cpp

实际上,您可以替换108为整数范围内的任何正数以获得负分数。只要大于108;)

在C ++ 98中,#define u8 "f"将导致预处理器替换u8""[0]"f"""[0]。这将导致"f"[0],最终成为单个字符'f',并将其写入数组。

puts(c)将打印由i-1组成的结果数组'f'

在C ++ 11中,u8""[0]将导致空字符串被解释为UTF-8字符串,因此不进行字符串连接。因为这是C字符串,所以下标运算符将访问终止的空字节并将其写入数组。

最后puts(c)将打印结果数组,该数组仅包含空字节。但是,puts一旦遇到空字节就停止读取输入,它将仅打印换行符,仅此而已。


我得到的分数是1。c ++ 89和c ++ 11都输出了?(至少在我的(Mac)系统上)
James Webster 2014年

虽然我在解决方案中只计算了115个字符。
James Webster

@James Webster是的,wc -c对我撒了谎;)我将在解决方案的末尾添加换行符;)……或只是对其进行调整。
foob​​ar 2014年

@James Webster我猜您在终端中使用UTF-8编码。由于字节中的最高有效位保留在UTF-8中,因此它无法映射程序输出的字符,范围为​​128到232。因此,您最多应该看到104个“?” 或更少,中间有二进制垃圾。以WINDOWS-1256编码为例,您的终端将在C ++ 11版本中显示此文本: › œ‌‍ں¢£¤¥¦§¨©ھ«¬®°±²³´µ¶·¸¹؛»¼½¾?ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهو–
foob​​ar

对于C ++ 98版本,您的终端可能会显示“?” 对于低于32的值,因为它们是控制字符。例如,我的终端机将大多数替换为一个正方形,并将其十六进制值打印到其中。以换行符和制表符为例。但是现在我自己提到了。C ++ 98版本包含两次新行,但这很容易解决;)
foob​​ar 2014年

2

CSS2 vs CSS3 48分

<i style='font-feature-settings:"smcp" on;'>abcdefghijklmnopqrstuvwxyz</i>

ABCDEFGHIJKLMNOPQRSTUVWXYZ在CSS3浏览器中呈现为(小写)

abcdefghijklmnopqrstuvwxyz在非CSS3浏览器上呈现为

74个字符-26个唯一字符差= 48


但这是CSS2中的错误。我以为错误不算数。
李斯特先生,2014年


1

Perl,24个字符-(9 *(10 ^ 9))-1个字符差=-((9 *(10 ^ 9))-1)+24分

print$]>=5?"a":"a"x9e9;

a对于低于5的所有版本,打印9e9倍;对于高于5的所有版本,打印9e9次a。您可以通过a在第二个输出中添加更多s来使得分无限低。


2
问题是:“意图是更改应该是语言规范而不是VM规范或环境元数据更改的结果”
Doorknob

我没有使用任何VM规范或环境元数据。只是安装的版本。
文斯2014年

1

Befunge,36-378 = -342;164-2576 = -2412

"v
"<v
" <v
"  <v
"   <v
 <v:,<
 ^_@

在Befunge 93中,这将输出3个空格,其次是<v,接着是76个空格,接着是<v,然后是76个空格,然后是<v,然后是76个空格,然后<v是77个空格,然后v是78个空格。长度:3 + 2 + 76 + 2 + 76 + 2 + 76 + 2 + 77 + 1 + 78 = 395通过添加类似于前5行的额外行,可以轻松扩展。

在Befunge 98中,将输出<v <v <v <v v

长度差:395 - 17 = 378。因此分数将是(按照旧规则):-342

注意:如果我使用.而不是,我可能会有更大的差异,。差异本来是-684


规则变更:

这有点棘手。

"  "-v>"Befunge 93 very long strings"v>"F"0g" "1-`!#v_   "F"0g1-"F"0pvz
     _^p0"F"-1g0"F"_v#    `-1" "g0"F"<^"j++a81zzzzzz]zzzzzzzzzzzzzzz"<
             _@#`0:,<

Befunge 93输出:

sgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeBsgnirts gnol yrev 39 egnufeB

Befunge 98输出:

j++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzzj++a81zzzzzz]zzzzzzzzzzzzzzz

长度:2576。字符串之间的字符都不相同,因此,如果我正确地理解了挑战,我的分数将是164 - 2576 = -2412(是的,我原本打算这样做0,但这很有趣)。如果需要使每个字符串中的每个字符唯一且彼此不同,可以这样做,请告诉我。


1

Powershell,“更好”得分,-163(15-178个字符差= -163)

$PSVersionTable

Powershell V2

Name                           Value                                                                   
----                           -----                                                                   
CLRVersion                     2.0.50727.5477                                                          
BuildVersion                   6.1.7601.17514                                                          
PSVersion                      2.0                                                                     
WSManStackVersion              2.0                                                                     
PSCompatibleVersions           {1.0, 2.0}                                                              
SerializationVersion           1.1.0.1                                                                 
PSRemotingProtocolVersion      2.1                                                                     

Powershell V3

Name                           Value                                                                   
----                           -----                                                                   
WSManStackVersion              3.0                                                                     
PSCompatibleVersions           {1.0, 2.0, 3.0}                                                         
SerializationVersion           1.1.0.1                                                                 
BuildVersion                   6.2.9200.16398                                                          
PSVersion                      3.0                                                                     
CLRVersion                     4.0.30319.1022                                                          
PSRemotingProtocolVersion      2.2 

1

PHP,得分:0(最佳情况)

srand(2);echo rand();

哇,这很有趣。

根据该网站的说法,该srand()功能似乎已从PHP 5.1.5更改为PHP 5.3.14。因此,我们将考虑使用PHP 4.4.9和一个随机版本的PHP 5,该版本处于上述指定的时间间隔内。

PHP 4.4.9输出: 1505335290

我不认为这是违反规则的;由于这似乎是一个错误,因此输出应该相同,但事实并非如此。我们的其他PHP版本将仅跳过该srand()函数并输出一个随机数。


1

Java(大约-2.000.000.000)

Java版本有时称为1.x,但我认为它仍在规则之内。

简单的方法是检查是否存在在特定版本中引入的类。

try {
    Class.forName("java.lang.AutoCloseable");
    // Java 7 or later
    char[] text = new char[Integer.MAX_VALUE];
    Arrays.fill(text, 'a');
    System.out.println(new String(text));
} catch (Exception e) {
    // Java 6 or earlier
    System.out.println("-");
}

(在某种程度上取决于您的终端是否可以在两秒内输出20亿个字符/对于新的计分,请替换Integer.MAX_VALUE为程序的字节数以获得完美的零分。)

此代码取决于所使用的VM / JDK的版本(这算吗?)

import java.lang.reflect.Field;
import java.util.Arrays;

{
    Field fValue = null;
    for (Field f: String.class.getDeclaredFields()) {
            if (f.getName().equals("value")) {
                    fValue = f;
            }
    }
    char[] text = new char[10];
    Arrays.fill(text, 'a');
    String s1 = new String(text);
    String s2 = s1.substring(1);
    fValue.setAccessible(true);
    text = (char[]) fValue.get(s2);
    Arrays.fill(text, 'z');
    System.out.println(s1);
}

z为Java 6和更早的JDK 打印s,a为最新版本打印。


1

JavaScript(ES3与ES5)-9分

长度10 +长度差0 -输出差1

[].map?1:0

1支持Array.prototype.map的现代浏览器的输出。0在旧版浏览器上的输出。我用IE8进行了测试。

使用旧规则:0分

长度26 -长度差26

Array([].map?27:0).join(0)

00000000000000000000000000在现代浏览器上的输出。并在旧的空字符串。


IE8确实支持ES4 ???
Bergi 2014年

我很惊讶他们如何实现了不存在的标准 ……
Bergi 2014年

哎呀!固定:)
nderscore 2014年

1

Python-0

a='a=%r\ntry:print a%%a\nexcept:pass'
try:print a%a
except:pass

Python 2会打印一个quine,而Python 3则什么也不打印。

编辑:更新,固定。


您的计算机能否在2秒内真正打印出90亿个数字?
James Webster 2014年

@JamesWebster这实际上是一个函数的返回值-因此,它只需要存在于内存中就可以完成程序。它需要一个/ lot /的RAM,但是在配置良好的计算机上,它会在2秒内完成。
cjfaure 2014年

0

APL(5-(1988894-1)= -1988888)

在旧式APL(如Dyalog,如果为⎕ML=0*)中,则表示mix,在一维向量上不执行任何操作。在APL2样式的APL中,例如GNU APL(或Dyalog,如果为,⎕ML=3表示first,它采用向量的第一项。

因此,以下5字节(APL字符集确实适合一个字节),

↑⍳3e5

将以1988894旧式APL方言输出字节(数字从1到3e5的空格分隔列表),

1字节(只是所述列表中的第一个数字1,因此是length 1),在APL2风格的APL方言中。

笔记:

  • ⎕ML表示迁移级别。在Dyalog APL中,设置得越高⎕ML,启用的APL2样式功能就越多。默认为0。(这是一个全局变量!很有趣!)
  • 3e5是Dyalog APL接受的最高3个字符的值4e5给我一个LIMIT ERROR。此限制可能与解释程序有关。(GNU APL使用更高的值没有问题。)

0

Bash 7(14个字节的程序长度+ 0个输出长度差-7个唯一字符差输出)

与@Gilles答案有关,但具有不同的扩展功能和不同的版本。根据编辑后的问题评分:

echo {1..9..2}

bash 3.x的输出:

{1..9..2}

bash 4.x的输出:

1 3 5 7 9

0

PHP的:−134217684(43-134217727)

echo str_pad("",ip2long("")&0x7ffffff,"a");

用法:

time php -r 'echo str_pad("",ip2long("")&0x7ffffff,"a");' > /tmp/test
1.61user 0.17system 0:01.79elapsed 99%CPU (0avgtext+0avgdata 142272maxresident)k
0inputs+0outputs (0major+35922minor)pagefaults 0swaps

在PHP5 +中,由于带有无效参数的ip2long变为false(强制转换为零),因此不会显示任何内容。在PHP4中,它ip2long("")返回-1,我们用128MB og填充空字符串a

安装好面罩后,它会在我的机器上2秒钟之前返回。如果您无法在2秒内完成购买,请购买更好的硬件!

使用新规则:0(40-40。您无法接近零。)

echo str_pad("",40,chr(97+ip2long("")));

输出:

In PHP4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
In PHP5: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

使用新的计分规则,您的分数是39。两个输出都一样长,因此无需为此付出任何代价。但是只有一个独特的字符差异。a不等于b,因此您可以从分数中减去-1。
foob​​ar 2014年

0

C89 / C99评论利用,45个字符,0分

main(a){while(++a<47)putchar(79-a//**/~0
);}

c89输出

QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} -45个字符。

c99输出

MLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! -45个字符。


实际上,这使用与其他C答案完全相同的逻辑。
user12205 2014年

我的意思是,考虑到已经存在使用完全相同的语言和完全相同的逻辑来回答这个问题的事实,所以这个回答不是很有趣。
user12205 2014年

该条目在多个级别上都优于初始的“其他C答案”。它更短,得分完美,在不到两秒钟的时间内完成,并且不会崩溃或中止。至于更新的版本...为了公平起见,您可能应该留下注释以链接此代码。
约翰尼·凯奇

您的答案优于“初始”其他C答案,因为该其他C答案是在规则更改之前提交的。
user12205 2014年

也许可以,但是更新后的版本会破坏我的实现。它不仅使用相同的偏移量并从切换printfputchar;最可恶的是,对于r5,我误读了规则,并意外地将新旧得分相结合。[r5,r6]的输出是错误的。其他C答案中的r3包含完全相同的错误。如果您查看时间戳记,则将看到其他答案更新时在此处发布的是r5。没关系,因为这是code golf,并且该条目可以用较少的字符数和时间来满足挑战。
约翰尼·凯奇

0

C ++ 98 / C ++ 11

#include <iostream>

int main()
{
  for (long i = 0; i < __cplusplus; ++i)
     std::cout << "x";
}

对于标准的C ++ 98编译器,其输出为199711乘以字母“ x”,而对于标准的C ++ 11编译器,其输出为201103乘以字母“ x”。因此,输出的长度差为1392个字符。这意味着实际上打高尔夫球的源代码是不值得的,因为仅用"x"更长的字符串替换或乘以__cplusplus某个数字就可以实现更大的效果。


0

SmileBASIC 3 / SmileBASIC 2,得分:-5(原始评分)

?1E9

在SB的现代版本中,此结果1000000000按预期进行打印,但是在版本2和更早的版本中,10由于存在错误,因此进行了打印。


0

TI-Basic 83 Plus vs.84 Plus,得分5-1 = 4

length("setTime(

2TI-83 Plus上的输出,其中相同的程序被解析为外观,length("?►DMS因为setTime(尚未引入该命令。因此该字符串包含两个1字节的令牌,其长度为2。

1TI-84 Plus上的输出,因为包含单个2字节令牌的字符串的长度为1。


0

转到1.9-> 1.10。分数= 1-1 = 0

1.10笔记

GOMAXPROCS设置不再受限制。(在1.9版中,限制为1024。)

package main 
import (r"runtime")
var g=r.GOMAXPROCS
func main() {g(10340)
print(g(0))}

1.8: 256

1.9: 1024

1.10: 10340

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.