Kolmogorov的灵活性。又名特价!所有Codegolf售完即享


12

这是产生无输入的固定输出的挑战。

但是,输出格式是灵活的-可以按标准输出,按标准错误打印,作为字符列表返回,作为字节列表返回或作为整数列表返回。如果您认为还有其他合理的选择,请在评论中提问!

这是一个简单的大字母ASCII 代码CODEGOLF

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFF
C      O   O  D   D  E      G      O   O  L      F
C      O   O  D   D  EEE    G  GG  O   O  L      FFF
C      O   O  D   D  E      G   G  O   O  L      F
 CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

没有任何换行符(或任何行尾都有空格),它的长度为256个字符:

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFFC      O   O  D   D  E      G      O   O  L      FC      O   O  D   D  EEE    G  GG  O   O  L      FFFC      O   O  D   D  E      G   G  O   O  L      F CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

非空格字符的(从0开始)索引是:

1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255

可能无法在代码中使用这97个字节中的任何一个,但必须按此顺序生成这些字节的列表(或类似输出),并将丢失的字节替换为您正在使用的代码页中的第32个字节(很多代码页中的空格字符)。

如果有帮助,您可以包括漂亮印刷的换行符(但行上不包含尾随空格)。

例如,使用Jelly代码页,此输出是可接受的:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      12345
6      =   A  D   H  K      R      Y   ]  `      g
h      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓ
ƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ
 ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

...但也是如此:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      123456      =   A  D   H  K      R      Y   ]  `      gh      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

...也是如此:

[32, 1, 2, 3, 4, 32, 32, 32, 8, 9, 10, 32, 32, 32, 14, 15, 16, 17, 32, 32, 32, 21, 22, 23, 24, 25, 32, 32, 32, 29, 30, 31, 32, 32, 32, 32, 36, 37, 38, 32, 32, 32, 42, 32, 32, 32, 32, 32, 32, 49, 50, 51, 52, 53, 54, 32, 32, 32, 32, 32, 32, 61, 32, 32, 32, 65, 32, 32, 68, 32, 32, 32, 72, 32, 32, 75, 32, 32, 32, 32, 32, 32, 82, 32, 32, 32, 32, 32, 32, 89, 32, 32, 32, 93, 32, 32, 96, 32, 32, 32, 32, 32, 32, 103, 104, 32, 32, 32, 32, 32, 32, 111, 32, 32, 32, 115, 32, 32, 118, 32, 32, 32, 122, 32, 32, 125, 126, 127, 32, 32, 32, 32, 132, 32, 32, 135, 136, 32, 32, 139, 32, 32, 32, 143, 32, 32, 146, 32, 32, 32, 32, 32, 32, 153, 154, 155, 156, 32, 32, 32, 32, 32, 32, 163, 32, 32, 32, 167, 32, 32, 170, 32, 32, 32, 174, 32, 32, 177, 32, 32, 32, 32, 32, 32, 184, 32, 32, 32, 188, 32, 32, 191, 32, 32, 32, 195, 32, 32, 198, 32, 32, 32, 32, 32, 32, 205, 32, 207, 208, 209, 210, 32, 32, 32, 214, 215, 216, 32, 32, 32, 220, 221, 222, 223, 32, 32, 32, 227, 228, 229, 230, 231, 32, 32, 32, 235, 236, 237, 238, 32, 32, 32, 242, 243, 244, 32, 32, 32, 248, 249, 250, 251, 252, 32, 32, 255]

(最后一个是使用任何语言和代码页以任何语言输出的有效列表,并且也可以使用任何合理的列表格式。)


这是Python 3代码,显示了不可用的ASCII字节。

*尽管打印本身实际上可能并不那么漂亮!


您可能无法在代码中使用这97个字节中的任何一个。这是否意味着我不能使用以下ASCII字符:$%&*123456=ADHKRY]``ghosvz}~并且没有换行符?
泰特斯

1
@Titus如果您的代码页与ASCII对齐,则是-或制表符或给定范围内的其他任何字符,例如不可打印或扩展。(另请参见在TIO上链接的Python脚本
Jonathan Allan

2
对于它的价值,这里有一个代码验证器(假设没有特殊的代码页)。
Arnauld

我几乎在PHP中拥有它……只需要一种array_map(function($n){return sprintf("%6b",$n);},...)没有$(我可以做到)和没有}(不知道)的方法。是; 我要打包数据!
泰特斯

Answers:


7

Python 2中321个 203字节

print map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8,enumerate(bin(int(reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkf','')))))

在线尝试!


说明:

从里到外:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclk25731972618407747697792173390589410779249734035626759409848989703511287412985用允许的字符编码的数字。(123456不允许)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') 将字符串映射到其十进制字符串:

  • reduce(lambda x,y:x+y,'..','')''.join('..')o不允许)相同
  • repr('..')而不是str('..')s不允许)
  • 'abcdefijkl'.find(y) 将字符映射到数字。

enumerate(bin(int(...)))将数字字符串转换为二进制字符串并枚举。这给双[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) 将枚举列表转换为最终结果。

  • map(lambda(i,x):.. , .. )而不是[... for(i,x)in ...]o]不允许)
  • lambda(i,x): ..将每个(索引,值)对转换为索引或32
  • (x>'0'and i-8-8-8-8)+8+8+8+8 是相同的:
    • x>'0'and i or 8+8+8+8,(o不允许)
    • [8+8+8+8,i][x>'0'][8<<9-7,i][x>'0'],(]不允许)
  • 8+8+8+8= 3223不允许)

这意味着该程序与以下内容基本相同:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]

那里一些不错的高尔夫工作:D
乔纳森·艾伦,

7

C(gcc),318字节

main(_){--_<88+80+88?printf((int[:>){77707-989908070??>,((int[:>){0xE8E8C79E^0xB0B0080,0xC07E0870^0xE0000C00,0xCC08099C^0xEE0C008E,0xE8888989^0xCC00808,0x9E088990^0x800C0000,0x990C8888^0x080ECC00,0xF9C7a088^0x080000C0,0x9F8C78F8^0x900000??>[_>>(0xC^0x9):>>>(_<<9+9+9>>9+9+9))<<(70^89)>>(70^89)?_:' '),main(_+9-7):0;??>

在线尝试!

这是一段旅程...

1.压缩列表

我们需要以某种方式检查给定的整数是否是特殊代码点之一。任何“裸”列表都将太长,因此我们使用检查列表。此列表在“受限制”的代码点处具有非零值,在没有限制的代码点处具有零值。

不幸的是,这仍然需要512个字节才能拥有列表(看起来像0,0,7,7,0,7,0,...)。可以使用位掩码将其缩短。

为了利用位掩码,我们将每个字节分成两部分。前3位将从阵列中选取一个掩码,而后5位将从阵列中选取一位。我们无法进一步缩小数组,因为默认情况下使用的32位整数不支持超过2 ^ 5 = 32位。

使用参考实现,我写道:

int main() {
    int i;
    int vals[] = {1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255, 0};

    for (i = 0; i <= 0xFF; ++i) {
        int j,f;
        f = 0;
        for (j = 0; vals[j]; ++j)
            if (vals[j] == i)
                f = 1;
        if (f)
            printf("1");
        else
            printf("0");

        if (i%32 == 31)
            printf("\n");
    }

    return 0;
}

我能够使用命令为该新数组生成适当的值echo "obase=16;ibase=2;$(./a.out | rev)" | bc。这会将上述程序(./a.out)的输出传递给该rev程序,该程序反转每一行。它将它与标题一起打印到bc,该标题将输出基数设置为16,将输入基数设置为2。因此,bc将二进制数字转换为十六进制位掩码。

可以在此“测试版”解决方案中看到结果数组:

f(){
    int x;
    int arr[] = {0xE3E3C71E, 0x207E0470, 0x22040912, 0xE4488181, 0x1E048990, 0x91024488, 0xF1C7A048, 0x9F1C78F8};
    for (x=0; x<=0xFF; ++x) {
        int mask = arr[x >> 5];
        int bit = mask >> (x & 0x1F);

        if (bit & 1)
            printf("%c", x);
        else
            printf(" ");
    }
}

2.处理约束

上面的代码上有很多约束。在这里,我逐一介绍了它们。

  1. 没有分配

其他语言也感觉到这一点,如果不使用C赋值,则很难将任何保证的值放入变量中。对我们而言,最简单的方法是将我们的函数编写为完整程序。main将传递第一个参数,argc如果不带参数调用,则其值为1。

  1. 无循环

在C中的仅循环结构是forwhilegoto所有这些的含有限制字符。这使我们可以使用递归。main函数将从1开始并递归直到参数> 256,与此同时,它将内部减小参数以使用0索引值。

  1. 十六进制值

上面数组中的值是十六进制的,即使转换为十进制,它们也包含一些受限制的符号,最值得注意的是123456(AD可以小写)。要解决此问题,每个常量都会与另一个常量进行XOR运算,以便删除受限制的字符。1变成9 ^ B,2变成C ^ E,3变成B ^ 8,4变成8 ^ C,5变成9 ^ C,而6变成9 ^ F(还有更多方法,我选择了这种方式) 。

  1. 列印

这些限制不会给我们留下很多打印功能。putchar并且puts都受到限制,离开printf。不幸的是,我们必须发送printf格式字符串,理想情况下是“%c”。所有这些字符串都具有我们希望删除的讨厌的百分号。幸运的是,我们假设使用一台低位字节序的机器(因为这显然是TIO所使用的,并且这很典型)。通过构造其内存字节为0x25(%),0x63(c),0x00(\ 0)的整数,无论​​是什么(无关紧要,在空终止符之后),我们都可以将其地址传递给它,printf并且它将假定它是一个字符串。一个有效的数字是-989830363(0xC5006325)。这很容易在77707-989908070的限制下创建。

仍然存在我们无法引用任何值的问题(因为我们无法分配它们,并且因为我们无法使用&),因此我们必须使用数组文字(int []){...}。我们实际上也将其用于上面的位掩码数组。

  1. 右括号

我们不能使用']'或'}'关闭数组或函数。幸运的是,C具有有效的有向图和三向图。:>将成为],而??>将成为}。这要求gcc进行-trigraphs切换,因为默认情况下它会忽略trigraph(违反标准)。

  1. 按位运算

我们不能使用&掩盖索引中的位,也不能使用%老式的方法。因此,我们依赖于特定于实现的行为。特别是,我们将32位整数向左移动足够远以丢失位,然后又向右移动。例如,要获取数字的最后5位,我们首先将其左移27位(离开abcde00000...),然后将其向右移27位(离开...00000abcde)。

  1. 杂项值

在整个代码中,我们还需要一些文字值-这些值取自Arnauld的JS答案,加上27(出于上述原因),我被添加为9+9+9

3.放在一起

以下是所有这些更改的来源说明。

main(_){                // This is our main entry point
--_<88+80+88            // This subtracts 1 from the argument (_) and checks if it is less than 256
    ?                   // If it is less than 256 we 'continue'
printf(                 // first we call printf with...
    (int[:>){           // An integer array that will be interpreted as a string
    77707-989908070     // With the value we determined above, to represent "%c\0\xC5"
    ??>,                // This is a trigraph for }, just as the :> above is a digraph for ]
    ((int[:>){          // We immediately create another integer array
0xE8E8C79E^0xB0B0080,   // Each row is the bit-mask for 32 characters
0xC07E0870^0xE0000C00,
0xCC08099C^0xEE0C008E,
0xE8888989^0xCC00808,
0x9E088990^0x800C0000,
0x990C8888^0x080ECC00,
0xF9C7a088^0x080000C0,
0x9F8C78F8^0x900000??>
[_>>(0xC^0x9):>         // This is {arr}[_>>5] just in a roundabout way
>>(_<<9+9+9>>9+9+9))    // Similarly this is (...)>>(_&0x1F)
<<(70^89)>>(70^89)      // This is <<31>>31 or &1, to check the last bit
?_:' ')                 // If its 1, we print the character, otherwise we print a space
,main(_+9-7):0;         // We recurse, the :0 is the other branch of the if, it terminates execution
??>

做得好!很好的解释。(我不是100%,但相信标头应显示为“ C(gcc)-trigraphs”)
Jonathan Allan

1
有待辩论。该代码不是特定于gcc的代码,也不是完全符合标准的代码,但是在我的计算机上cc可以毫无参数地对其进行编译。默认情况下,TIO上没有任何符合标准的内置编译器,如果存在(或旧版本的gcc),则trigraph只会生成警告。
LambdaBeta

使用g ++ ?:扩展,滥用按位移位模
32、273

那很聪明。但是,我将其保持不变,因为此版本-trigraphs在某些C编译器上不需要此选项,而?:需要gcc,则需要-trigraphs
LambdaBeta

6

brainfuck,635个字节

++++++++++++++++++++++++++++++++.>+.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+....++++.+.+.<...>++++.<......>+++++++.+.+.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<......>+++++++.<...>++++.<..>+++.<......>+++++++.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.+.+.<....>+++++.<..>+++.+.<..>+++.<...>++++.<..>+++.<......>+++++++.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<.>++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.+.<..>>-.

在线尝试!

为了最终被Javascript击败,我尝试了以下方法:

通过在单元格0中具有32和递增单元格1保存了1个字节(我最初以另一种方式拥有它的唯一原因是因为OrjanJohansen指出我无法使用时的快速修复]

通过递减第三个单元(最初为0)来节省1个字节,以生成255=-1

通过在字符31和36之间打印空格而节省了2个字节,而没有使用<>,而是在从31到33递增时,简单地停在32从单元0打印。

笨蛋,639字节

>++++++++++++++++++++++++++++++++.<+.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.>....<+++++.+.+.>...<++++.>......<+++++++.+.+.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>......<+++++++.>...<++++.>..<+++.>......<+++++++.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.+.+.>....<+++++.>..<+++.+.>..<+++.>...<++++.>..<+++.>......<+++++++.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>.<++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.+.>..<+++.

在线尝试!

首先我们生成数字32。然后我们只需增加一个单元格并在该单元格和包含32的单元格之间切换打印即可。稳定地增加数字是Brainfuck擅长的。

用Brainfuck击败Javascript真是太好了,这种情况很少发生!


抱歉,但]不允许使用此字符。尽管您仍然应该能够解决该问题并击败Javascript。:)
与Orjan约翰森

@ØrjanJohansen固定
Level River St

抱歉,您丢失了Javascript。
user202729

@ user202729很好!仍然,我被Java殴打了三天。因为]不允许使用循环,所以我认为我的BF答案现在可能是最佳的。
水平河圣

5

JavaScript(SpiderMonkey)1918 1598 1487 1431字节

@ user202729,节省了56个字节

print(8<<98,7/7,9-7,7>>97,8>>97,8<<98,8<<98,8<<98,8,9,0xa,8<<98,8<<98,8<<98,0xe,0xf,7+9,8+9,8<<98,8<<98,8<<98,7+0xe,7+0xf,8+0xf,9+0xf,78^87,8<<98,8<<98,8<<98,77^80,70^88,70^89,8<<98,8<<98,8<<98,8<<98,9<<98,70^99,77>>97,8<<98,8<<98,8<<98,98-070,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,9^070,80^98,80^99,87^99,87^98,9^077,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,70-9,8<<98,8<<98,8<<98,7^70,8<<98,8<<98,9^77,8<<98,8<<98,8<<98,7^79,8<<98,8<<98,70^0xd,((8<<98)+' ').repeat(8^0xe)+(8^90),((8<<98)+' ').repeat(8^0xe)+89,8<<98,8<<98,8<<98,7^90,8<<98,8<<98,7+89,((8<<98)+' ').repeat(8^0xe)+(7|97),7+97,((8<<98)+' ').repeat(8^0xe)+(77|98),8<<98,8<<98,8<<98,80|99,8<<98,8<<98,8^0x7e,8<<98,8<<98,8<<98,0x7a,8<<98,8<<98,0x7d,0x7e,0x7f,8<<98,8<<98,8<<98,8<<98,7+0x7d,8<<98,8<<98,0x87,0x88,8<<98,8<<98,0x8b,8<<98,8<<98,8<<98,0x8f,8<<98,8<<98,7+0x8b,((8<<98)+' ').repeat(8^0xe)+0x99,0x9a,0x9b,0x9c,((8<<98)+' ').repeat(8^0xe)+(7+0x9c),8<<98,8<<98,8<<98,0xa7,8<<98,8<<98,0xaa,8<<98,8<<98,8<<98,0xae,8<<98,8<<98,78+99,((8<<98)+' ').repeat(8^0xe)+0xb8,8<<98,8<<98,8<<98,0xbc,8<<98,8<<98,0xbf,8<<98,8<<98,8<<98,97+98,8<<98,8<<98,99+99,((8<<98)+' ').repeat(8^0xe)+0xcd,8<<98,0xcf,0xd0,7+0xca,7+0xcb,8<<98,8<<98,8<<98,7+0xcf,0xd7,0xd8,8<<98,8<<98,8<<98,0xdc,0xdd,0xde,0xdf,8<<98,8<<98,8<<98,7+0xdc,7+0xdd,7+0xde,7+0xdf,0xe7,8<<98,8<<98,8<<98,0xeb,0xec,0xed,0xee,8<<98,8<<98,8<<98,7+0xeb,7+0xec,7+0xed,8<<98,8<<98,8<<98,0xf8,0xf9,0xfa,0xfb,0xfc,8<<98,8<<98,0xff)

在线尝试!

怎么样?

=不允许的事实是JS中的表演杀手。我们不能进行任何变量赋值,也不能使用任何箭头函数。

0789+-/|^<<>>

  1 = 7/7     |   50 = 80^98   |  136 = 0x88    |  216 = 0xd8
  2 = 9-7     |   51 = 80^99   |  139 = 0x8b    |  220 = 0xdc
  3 = 7>>97   |   52 = 87^99   |  143 = 0x8f    |  221 = 0xdd
  4 = 8>>97   |   53 = 87^98   |  146 = 7+0x8b  |  222 = 0xde
  8 = 8       |   54 = 9^077   |  153 = 0x99    |  223 = 0xdf
  9 = 9       |   61 = 70-9    |  154 = 0x9a    |  227 = 7+0xdc
 10 = 0xa     |   65 = 7^70    |  155 = 0x9b    |  228 = 7+0xdd
 14 = 0xe     |   68 = 9^77    |  156 = 0x9c    |  229 = 7+0xde
 15 = 0xf     |   72 = 7^79    |  163 = 7+0x9c  |  230 = 7+0xdf
 16 = 7+9     |   75 = 70^0xd  |  167 = 0xa7    |  231 = 0xe7
 17 = 8+9     |   82 = 8^90    |  170 = 0xaa    |  235 = 0xeb
 21 = 7+0xe   |   89 = 89      |  174 = 0xae    |  236 = 0xec
 22 = 7+0xf   |   93 = 7^90    |  177 = 78+99   |  237 = 0xed
 23 = 8+0xf   |   96 = 7+89    |  184 = 0xb8    |  238 = 0xee
 24 = 9+0xf   |  103 = 7|97    |  188 = 0xbc    |  242 = 7+0xeb
 25 = 78^87   |  104 = 7+97    |  191 = 0xbf    |  243 = 7+0xec
 29 = 77^80   |  111 = 77|98   |  195 = 97+98   |  244 = 7+0xed
 30 = 70^88   |  115 = 80|99   |  198 = 99+99   |  248 = 0xf8
 31 = 70^89   |  118 = 8^0x7e  |  205 = 0xcd    |  249 = 0xf9
 32 = 8<<98   |  122 = 0x7a    |  207 = 0xcf    |  250 = 0xfa
 36 = 9<<98   |  125 = 0x7d    |  208 = 0xd0    |  251 = 0xfb
 37 = 70^99   |  126 = 0x7e    |  209 = 7+0xca  |  252 = 0xfc
 38 = 77>>97  |  127 = 0x7f    |  210 = 7+0xcb  |  255 = 0xff
 42 = 98-070  |  132 = 7+0x7d  |  214 = 7+0xcf  |
 49 = 9^070   |  135 = 0x87    |  215 = 0xd7    |

32

shiftCount为掩盖rnum的除最低有效5位以外的所有位的结果,即计算rnum&0x1F。

8<<988<<232


328<<9-7为每个保存一个字节32
TF

1
@TFeld实际上,我正在向刚刚发现的求解器添加移位32 = 8<<98(因为)。这样可以缩短一些表达式。仍在努力。982(mod32)
Arnauld

3
是“表演杀手”还是“娱乐制造者”?
乔纳森·艾伦

2
@JonathanAllan ;-)后者来自前者!
Arnauld

抱歉,如果我很傻,但是为什么要链接到旧版本的SpiderMonkey?
所罗门·乌科

4

Haskell中,623个 617 614 594 360 342字节

编辑:-234字节感谢@Lynn,找到了编码为字符串的模式。-18个字节,感谢@ØrjanJohansen。

map(\i->cycle(8+8+8+8:filter(\_->" XXXX   XXX   XXXX   XXXXX   XXX    XXX   X      XXXXXX      X   X  X   X  X      X      X   X  X      XX      X   X  X   X  XXX    X  XX  X   X  X      XXXX      X   X  X   X  X      X   X  X   X  X      X XXXX   XXX   XXXX   XXXXX   XXXX   XXX   XXXXX  X"!!i>' ')(pure i))!!9)(take(0xf8+8)(iterate(9-8+)0))

在线尝试!

怎么运行的

map(\i->    )                   -- map the lambda over the
        (take(0xf8+8)           -- first 256 elements of
           (iterate(9-8+)0))    -- the list [0,1,2,....]

                                -- the lambda is:

    cycle                       -- make an infinite list by repeating the list
      8+8+8+8:                  -- wih element 32 followed by
                  pure i        -- the singleton list with 'i'
       filter                   -- but keep 'i' only if
          \_->" XXXX..."!!i>' ' -- the pattern has an 'X' at index 'i', else
                                -- remove it to make an empty list
                                -- i.e. the cycled list is, if the pattern is
                                -- a space: [32,32,32,32,32,32,32,32,32,32,...]
                                -- an 'X':  [32, i,32, i,32, i,32, i,32, i,...]
                                --                                       ^
                                --                        9th element ---/ 
                      !!9       -- pick the 9th element which is the result
                                -- of the lambda

3
你可以索引(id:pure(\_->8+8+8+8))until((||" XXXX XXX XXXX XXXXX XXX XXX X XXXXXX X X X X X X X X X XX X X X X XXX X XX X X X XXXX X X X X X X X X X X X XXXX XXX XXXX XXXXX XXXX XXX XXXXX X"!!i<'X').(<1))pred 1 ,节省了一堆字节。
林恩

1
342个字节filter而不是until要分支(并cycle避免产生额外的分支++pure(...))。
与Orjan约翰森

3

Brain-Flak -r,4190 4188字节

(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())())()<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())

在线尝试!

因为我们不能使用]或,所以这对于Brain-flak来说有点困难}。意味着唯一有用的字符是<>()

是一个Haskell程序,可以帮助我编写此程序

它只是跳过需要的空间并单独推动这些空间。


可证明这是最优的吗?
user202729 '18

@ user202729我怀疑不是。可能是这样。没有太多的摆动空间,但我远不能证明它是最佳的。尽管由于我们没有{}计算机搜索,实际上可以在有限的时间内找到最佳位置。
Ad Hoc Garf Hunter,

我最终编写了一个生成最佳解决方案的程序,但是它比我期望的要慢一些。不过,运行速度仍然足够快。
user202729

@ user202729嗯,这不是最佳的。我找到了一个较短的。
Ad Hoc Garf Hunter,

3

的JavaScript(SpiderMonkey的)1001个 919 789 441字节

print(/u/.exec().map.call('0777700077700077770007777700077700007770007000000777777000000700070070007007000000700000070007007000000770000007000700700070077700007007700700070070000007777000000700070070007007000000700070070007007000000707777000777000777700077777000777700077700077777007',''.repeat.bind(Number)).map(/u/.exec().find.bind(/()/.exec().fill(Number.bind(0,88-070)).fill(/u/.exec().fill,!0),''.indexOf)).map(Map.call.bind(Map.call)))

在线尝试!

终于击败了BF !!!

大概的概念

将长字符串的每个字符转换为其索引或32,取决于值。

Array.prototype.map?如何获得数组

蛮力通过访问对象属性来查看可访问哪些对象(因为]不允许这样做,因此只能访问名称与标识符匹配的属性)。

RegExp.prototype.exec匹配时返回类似数组的对象。如果未提供任何参数,则该参数默认为undefined,因此/u/.exec()匹配并返回一个数组。

在2个不同的字符上获得2个任意不同的值

我们想要有(x,y)=>x=='0'?32:y,但是我们不能用=

相反,我们将要做

new Array(a)
    .map(x=>x=='0'?()=>32:function()this)
    .map((x,y,z)=>x.call(y,z))

我们可以map在某些函数上使用字符串,但=>不允许这样做,因此只能使用几个函数。它可能有绑定this参数和一些绑定参数(所以它的形式为(x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z)

在考虑了功能列表(repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply)之后,我决定将使用以下功能(在考虑所有其他组合之后)

  • repeat:数字->不同的字符串。
  • find:thisArg->数组匹配中的第一个元素。

总体思路是:

[].map.call('07070707...', (x,y,z)=>[elem1,elem2].find(somefunction,x,y,z)

其中somefunction考虑this参数(x)和第一个参数(elem1elem2),并返回其是否匹配。

最后一个箭头功能被重写为[].find.bind([elem1,elem2],somefunction)

数组文字

我们可以使用regex exec来获取一个数组,并fill使用不同的值。例如,/()/.exec()返回一个长度为2的数组,那么我们可以根据需要填充它。

somefunction我们需要哪一个?

我们需要一个返回真实/错误值所依赖的值this(这是我们将要返回的2个函数中的1个)和第一个参数(必须为字符串或数组)。

为此,我使用了indexOf-如果第一个参数是该this参数的前缀,则它返回假值。

表示函数文字


1
关的解释最终磕磕绊绊和缠挂在分支
与Orjan约翰森

2

TI-Basic(83系列),578字节

8XFact8-ΔTbl
seq(X and XX≤8+8 or 8≤X and X≤Xmax or 7+7≤X and X<9+9 or 7+7+7≤X and X<8π or 9π<X and X<πXmax or 9 nCr 7≤X and X+X<77 or X=7²-7 or 7²≤X and X≤7*9-9 or X=70-9 or X=8²+ΔTbl or X=78-Xmax or X=9*8 or X=89-7-7 or X=89-7 or X=89 or X=900-807 or X=88+8 or 809-707<X and X≤97+77-70 or 9X=999 or 8X=990-70 or X=888-770 or X=899-777 or 8*7+77-8≤X and X+X<Ans or 7²X/77=77+7 or 999+77<8X and 7X<970-9-7 or 8²X=8888+8 or X+X=99+99+88 or 7X=9099-8077 or 9+8≤X/9 and X<997-770-70 or X=99+8² or X=87+80 or X=80+90 or X=87+87 or X=87+90 or X=87+97 or X=98+90 or X=999-808 or X=97+98 or X=99+99 or X=99+99+7 or 9²8<πX and X+X+X≤70*9 or 70π-π-π<Xand X+X+X≤9²8 or 70π<X and X<70π+π or 997-770≤X and X+X+X≤99*7 or 77+79+79≤X and X+8+9≤Ans or 77π<X and X<Ans-Xmax or 7*8*9-8≤X+X and X+X≤7*8*9 or X=Ans,X,0,Ans
8XFact+Ansseq(X,X,⁻8XFact,70π+π

TI-Basic拥有自己的非常特殊的“代码页”,具有多种奇怪的设计选择,例如将空格字符移至0x29,以便可以将0x20用作randM(命令。

弄清楚如何使TI-Basic输出正确的对象是很棘手的。字符串由于多种原因而无法使用:没有使用令牌就无法引用令牌的方法,而且我们也不允许使用"字符。我们不能只写一个列表,因为{}被禁止。我们允许使用[]字符作为矩阵,但是1乘256矩阵不起作用,因为矩阵最多允许99行和列。我们不能使用赋值变量,也不能使用列表变量ʟL₁通过变量L₆

因此,在这里,我们写下了一个不等式的复杂逻辑公式,该公式表示何时字符是我们要输出的字符之一。然后,我们使用seq(命令生成一个列表,其中包含1这些位置和0其他位置。从那里开始,另一个seq(命令和一些算法完成了这项工作。

那是令人兴奋的部分;剩下的就是打常量,我可能没有做得尽可能多。一个我用的招数是,默认情况下,Xmax为10,XFact为4,和ΔTbl值为1。


虽然1 * 256矩阵不起作用,但是您可以制作3 * 99矩阵之类的东西并使用div / mod索引该矩阵吗?
user202729

哦,我们也不能索引事物,因为这(是被禁止的。
Misha Lavrov

是否存在条件表达式(如果是a,然后是b,则是c)或floor或mod?数字精度是15位十进制数字,对吗?
user202729

所有这些都存在。我们只是无法使用来获得矩阵条目[A](I,J),并且据我了解,您想要做一些事情[A](int(I/99),I-99int(I/99))来读出矩阵的所有元素[A]-我们也无法做到这一点。(顺便说一句,)也是禁止的。幸运的是,我们不必关闭结尾的括号,但是它限制了我们使用许多命令的方式。)
Misha Lavrov

我正在考虑使用数字对数组进行编码,类似于位掩码。就像Python中的(123456789 >> X)&1一样。
user202729

1

Brain-Flak -r,3894字节

(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())<((())((()())()))>)))(((((((()()()()()()()())(()()()()()()()()())(()()()()()()()()()())()()()()())))<((((((((()()()()()()()()()()()()()())((((((((((()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()())()))))<((((((((((((()()()()()()()()()()()()()()()()()()()()())())())())())()()()()()()())))<((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()())())())()))))()()()())())())>)))()()()()()()()()()())>))))))()()())())())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())>)))())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())())<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())

在线尝试!

我写了一个程序来为任何输出生成最佳的Brain-Flak程序。假使,假设:

  • <> 未使用
  • 我的程序是正确的

,则此解决方案是最佳的。

O(n5)


1

Python 2中162个 157字节

警告:前面不可打印的字符!

print map(lambda(i,x):(x>'0'and i-0xe0/7)+0xe0/7,enumerate(bin(reduce(lambda x,y:(x<<0xd-7)-x+y,bytearray('7?QcZ;+BqiQJUS!?B0W![<LBU7X!frQd(SQdB\0')))))

在线尝试!

基于TFeld的现有答案,但有一些更改:

A bytearray类似于a str,它是可迭代的,但是,对其进行迭代会得到整数,而不是字符。我们可以使用它来编码以N为基数的文字并对其reduce(lambda x,y: x*N+y, my_bytearray)进行解码。

由于Python 2文件默认没有编码,因此只能使用ASCII(0..127)字符。空字节,换行符,反斜杠和引号再占用1个字节。

另外,不可能使用所有的碱基。

考虑到这些限制,我编写了一个程序来查找最短的表示形式n

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.