首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩减压

压缩减压
EN

Code Golf用户
提问于 2022-01-18 14:39:38
回答 3查看 637关注 0票数 14

你的任务是制造一个双向压缩机。它以一个字节列表作为输入,并返回一个字节列表作为输出。它具有这个属性,而不是每次迭代两次就返回原始输入。

换句话说,如果f是您的程序作为一个函数,那么f(f(x))=x适用于所有x

现在,由于这是一个“压缩机”,它实际上应该尝试压缩它的输入。当然,它不能压缩每个输入。然而,它应该能够压缩您的程序的源代码。也就是说,如果s是程序的源代码,那么len(f(s))<len(s)

综上所述,您的程序充当一个函数,它接受一个字节列表作为输入,并输出一个字节列表作为输出。让我们调用您的程序f,它是源代码s。您的程序必须同时满足两个方面:

  • f(f(x)) = x for all x
  • len(f(s)) < len(s)

请记住,空列表是一个列表,因此您的代码应该能够处理它。

正常的quine规则适用,所以不允许内省(打开包含源代码的文件,等等)。

最短代码获胜!

EN

回答 3

Code Golf用户

发布于 2022-01-18 14:52:39

JavaScript (ES6),26字节

-1感谢@thejonymyster

-7感谢@Arnauld

-4多亏@l4m2

代码语言:javascript
复制
x=>x.replace(/-2|1/,z=>~z)

交换-21的第一个实例,在程序压缩自身时保存一个字节。将字节列表作为输入,作为字符串。

这就是现在社区的努力:

票数 11
EN

Code Golf用户

发布于 2022-01-19 10:38:00

Dyalog Unicode,37字节

代码语言:javascript
复制
'¯2|1'⎕R{⍕83⎕Dr~11⎕Dr⍎⍵.Match}⍠'ML'1⊢

在网上试试!

与这里的其他人所做的一样,用1代替了as 1,反之亦然。

这一次确实有效:D

票数 2
EN

Code Golf用户

发布于 2022-01-19 06:06:39

Haskell,54字节

代码语言:javascript
复制
f('l':')':l)='!':l;f('!':l)="l)"++l;f(x:l)=x:f l;f_=[]

在网上试试!

切换l)!的第一次出现。

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/241259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档