制作更长的语言节目


16

Lenguage是一种令人难以置信的方言,以打破源限制挑战而臭名昭著。这是因为Lenguage只关心源的长度,而不关心内容的长度。

首先,计算程序的长度。然后,将所述长度转换为二进制,并用零左填充为3的倍数。所得的二进制字符串被拆分为3位的块,每个块都被转换为Brainfuck命令,如下所示:

000 -> +
001 -> -
010 -> >
011 -> <
100 -> .
101 -> ,
110 -> [
111 -> ]

最终,该程序作为Brainfuck 1运行。

从这里开始,挑战非常简单,编写一个不带任何输入并产生一个输出的字节程序,该输出由一个字节重复ñ次组成,其中ñ严格大于程序的长度。

答案将以字节计分,而字节数越少越好。

这是一个可以通过脑操计算语言的hacky程序


1:对于此挑战,我们将使用包裹单元和非包裹胶带。


3
+[.]我赢了吗?:P
Quintec '19

3
也许对输出的长度进行评分可能会更有趣?
乔·金

@JoKing这是一个好主意。不幸的是,这似乎为时已晚。
发布Rock Garf Hunter

2
另外,为什么要标记此奎因?
无知的体现,

1
@ msh210多数情况下会用到这种技巧,但是有一些区别,例如,不同的Brainfuck角色花费不同的数量(+是最便宜和]最昂贵的),当然,它们在程序中的位置很重要。虽然是一个很好的估计,但并不完全相等。23ñ
发布Rock Garf Hunter,

Answers:


15

8437495638205698686671字节

转换为Brainfuck程序:

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

确切地打印231584178474632390847141970017375815706539969331281128078915168015826259279614 SOH字节。

这由函数计算

f(n)=2*f(n-1)+n
f(0)=0

输入255。

说明:

-[         Loop 255 times
  >>[>]    Move to the end of a series of positive cells (initially empty)
  +        Add one cell to the end
  [-       Loop over each cell 
    >[>]+  Add one cell to the end
    .      Print a SOH byte
    [<]+   Restore current cell
  <]       Move to next cell
<-]        Decrement counter

4

9093903938998324939360576240306155985031832511491088836321985855167849863863065731015823字节

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

哪个打印准确

298333629248008269731638612618517353495058861384016275770860733328251135402804732197446995616017112134460464130233444058136509123809012106419446593183683387659250431692751255099808162970657410517657862174602556590616568690423540284801267472920128909691902547970614008613488242333460665145840144517097342073878746293059960326132795671583153307437896728515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

250255

在此Brainfuck答案中功劳归功于@hvd,因此请确保对他进行投票

说明:

我打算自己写一个解释,但是意识到@hvd的解释已经很明确了,所以我在这里引用它:

>>>>>> 需要留一点工作空间。

-产生255(因为有包装单元时0-1 = 255)。

[[->>>+<<<]------>>>-] 将其转换为255个值250的副本,得到如下所示的磁带:

0 0 0 0 0 0 250 0 0 250 0 0 ... 250 0 0 [0]

<<<[<<<]+ 向后移动数据指针并完成初始数据:

0 0 0 [1] 0 0 250 0 0 250 0 0 ...

然后是循环:[+...-]最初将1设置为2,然后在循环结束时将其设置回1。当循环主体已将2设置为1时,循环终止。

现在,数字2 250 250 250 ... 250以基数250表示一个计数器,每个数字都比它所表示的数字大一。

  • [>>>]<<<一直向右移动。由于每个数字都由非零数字表示,因此这是微不足道的。

  • ->+[<[+>-]>[-<<<<->+>>------>>]<<<<]>>-将计数器减1。从最后一位开始:该位递减。如果仍然是积极的,我们就完成了。如果变为零,则将其设置为250,然后继续前面的数字。

  • [<<<].>>>将指针移到最左边的数字之前,这是打印NUL字节的好时机。然后重新定位到最左边的数字,看看是否完成。

为了验证正确性,改变初始-+打印250 1 NUL字节,++250 2,等等。


4

19326644346528796447字节

Brainfuck代码:

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

版画

57896044618658097711785492504343953926634992332820282019728792003956564819967

空字节。

它是这样的:

mem[i]=255;
do
    while(--mem[i]){
        mem[i+1]=mem[i+2]=mem[i];
        mem[i]=1;
        i+=2;
    }
while(mem[--i]);

非常简单的递归。

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.