RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-194569

Mike's questions

Martin Hope
Mike
Asked: 2020-06-02 22:02:27 +0000 UTC

代码高尔夫:增加数字

  • 39

任务:编写一个尽可能短的代码,以大号符号字体显示输入的数字字符串。字体必须与问题中指定的完全一致。

示例:

接收到字符串“0123456789”作为输入,程序应输出到标准输出:

  ###      #     #####   #####  #       #######  #####  #######  #####   #####
 #   #    ##    #     # #     # #    #  #       #     # #    #  #     # #     #
#     #  # #          #       # #    #  #       #           #   #     # #     #
#     #    #     #####   #####  #    #  ######  ######     #     #####   ######
#     #    #    #             # #######       # #     #   #     #     #       #
 #   #     #    #       #     #      #  #     # #     #   #     #     # #     #
  ###    #####  #######  #####       #   #####   #####    #      #####   #####

规则和限制:

  • 该程序可以但不必采用函数的形式。int main() {}如果它是一个函数——在大小上不考虑这个函数声明的语法(对于 C),工作代码本身的大小很重要。
  • 输入字符串可以以您方便的任何方式进入程序:作为在代码之前的测试用例中指定的变量,作为函数参数,或来自标准输入。
  • 输入字符串只能包含数字
  • 结果应作为文本写入标准输出。如果标准输出被定向到终端,则假定屏幕足够宽以打印整个测试用例并带有边距。使用用于在您的平台上换行的任何字符/字符组合(例如,\n或)标记到新行的过渡(显式或隐式\r\n)。
  • 结果的字体必须与上面指定的字体完全匹配。输出的数字之间必须至少有一个空格(数字不能合并)。字体被认为是等宽的,即 设备周围可能有更多空间。它的图像比其余数字窄。
  • 禁止在程序中使用任何内置语言和库进行数据压缩和编码(如:zip/unzip、base64)
  • 该程序必须直接在其主体中包含字体(或构成它的代码)。禁止从外部来源(输入、磁盘、网络、视频适配器内存、BIOS)接收字体。
  • 程序大小以字节为单位。尺寸最小的程序获胜。

比赛结束

第一名被@RusArt 占据,答案是 05AB1E,只有 91 个“字节”长。

第二名是@Anton Petrusevich的 perl answer,长 150 字节。

第三名是@retorta的 python答案,长 161 字节。

答案涵盖了多种压缩字体的方法。在准备比赛时,我考虑了其中的大部分。最容易实现且同时非常有效的是以 7 位水平编码压缩最多 70 个字节(我的原始编码在答案中给出在 postgresql 上。我们甚至设法通过更改 6-7 位并减去 2 来进入有效字符范围。的确,并非所有参与者都费心并花费宝贵的字节来编码从 0x20 到 0x7E 的可打印字符范围。编码是原样使用的,经常是8位甚至进入控制范围。原则上,此类编码有权在编写程序的平台上运行。虽然当程序无法在打印机上打印时我真的不喜欢它,但从一张纸上再次输入并且它会继续工作(你将无法在书中发布你的代码;))。

获胜者使用了完全不同的字体编码。包含 16 个可能的 7 字符字体元素(位编码)的字典和一个带有每个字符部件号的代码表,由于 05AB1E 语言的非标准代码页,它占用了 35 个“字节”(从技术上讲,这种语言使用了256个字素,被认为是“字节”,因为正好有256个字素,如果真的存在这样的码表,那么真的可以全部编码成一个字节)。不幸的是,其他语言的这种编码原则上是不可能的,因为在 256 个 ASCII 字节值中,31 个用于控制代码,而 128 个更高的值在平台之间传输不佳。

其他一些答案原则上使用了类似的字典方法,但他们没有使用二进制编码,因此字体占用了更多空间。在准备比赛的过程中,我什至考虑了用字典编码的几种选择。例如,经常出现的两个组合#####和应该用值为 10 和 11 的两个位进行编码,而其余选项为 5 和一个位值,其第一位为 0,以便# #区分前两位和其余 4 位的选项数。实际上,这在字体编码方面的增益非常小,同时,解码代码过于复杂且不适用于代码高尔夫,同样,很难将其放入常规的 ascii 代码中。

也可以在答案中找到完全不同的编码方式,例如在@Qwertiy的答案#中提供仅用连续数字编码重复和空格

不幸的是,没有参与者尝试使用垂直编码,即 其中元素是从中垂直取出的编码字符的 7 位。使用这种编码方法,可以获得很多重复。仔细看5689这几个数字,只有1和最后一竖不一样,其他都是一样的。当在这样的字符串中对重复进行编码时,可以实现与字典和位编码几乎相同的压缩。但在高尔夫练习中,由于解码代码量的增长,它的适用性又很差。


备选评级

不幸的是,不可能以真正反映我想从比赛中得到什么的方式制定规则。许多答案使用在其他字符编码中不起作用的字符或与 base64 含义接近的函数,即 将编码字符串表示为一个大数,因此代码不包含其自身的解码。在这个替代排名中,我反映了如果规则被精确制定的结果。

  1. Anton Petrusevich, perl answer , 150 字节长
  2. Andrey,用 C#回答,176 字节长
  3. Visman, PHP响应,235 字节长

请在您的答案中注明字节数,以便更容易识别获胜者。

execute("ru.stackoverflow.com", "674415");
.cssload-container,.cssload-cube{width:97px;height:97px;transform-style:preserve-3d}.cssload-container,.cssload-cube,.cssload-half1,.cssload-half2{transform-style:preserve-3d}.cssload-container{position:relative;margin:23px 84px;perspective:292px}.cssload-cube{animation:cube 11.5s forwards infinite;transform-origin:center 49px}.cssload-half1,.cssload-s1{top:0;transform-origin:50% 100%}.cssload-half1{height:39px;position:absolute;animation:half-fold 11.5s forwards infinite}.cssload-side{width:19px;height:19px;background:#ddd;position:absolute}.cssload-s1{left:39px;animation:s1ani 11.5s forwards infinite}.cssload-s2,.cssload-s3,.cssload-s4{left:39px;transform-origin:50% 0}.cssload-s2{top:19px;animation:s2ani 11.5s forwards infinite}.cssload-s3{top:39px;animation:s3ani 11.5s forwards infinite}.cssload-s4{top:58px;animation:s4ani 11.5s forwards infinite}.cssload-s5{left:19px;top:19px;transform-origin:100% 50%;animation:s5ani 11.5s forwards infinite}.cssload-s6{left:58px;top:39px;transform-origin:0 50%;animation:s6ani 11.5s forwards infinite}@keyframes cube{0%,30%{transform:rotateX(0)}40%{transform:rotateX(45deg) rotateY(0) rotate(45deg)}60%{transform:rotateX(60deg) rotateY(0) rotate(45deg)}65%,70%{transform:rotateX(60deg) rotate(45deg) rotate(180deg)}75%,80%{transform:rotateX(60deg) rotate(45deg) rotate(1turn)}90%{transform:rotateX(0) rotate(0) rotate(0)}}@keyframes s1ani{0%{opacity:1;transform:translateY(0);background:#ddd}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(-90deg);background:#ddd}90%{transform:rotateX(-90deg)}}@keyframes s2ani{0%{opacity:0;transform:rotateX(-179deg)}10%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%,80%{background:#b4b4b4}65%{opacity:1;background:#b4b4b4}90%{opacity:1}to{opacity:0}}@keyframes s3ani{0%,10%{opacity:0;transform:rotateX(-179deg)}20%,90%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%{background:#969696}to{opacity:0}}@keyframes s4ani{0%,20%{opacity:0;transform:rotateX(-179deg)}10%,to{opacity:0}30%{opacity:1;transform:rotateX(0)}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(90deg);background:#b4b4b4}80%{background:#b4b4b4}90%{opacity:1;transform:rotateX(90deg)}}@keyframes s5ani{0%,10%{opacity:0;transform:rotateY(-179deg)}20%{opacity:1;background:#ddd;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(90deg)}55%{background:#ddd}60%{background:#c8c8c8}90%{transform:rotateY(90deg);opacity:1}to{opacity:0}}@keyframes s6ani{0%,20%{opacity:0;transform:rotateY(179deg)}30%{opacity:1;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(-90deg);background:#ddd}60%,80%{background:#c8c8c8}90%{opacity:1;transform:rotateY(-90deg)}to{opacity:0}}@keyframes half-fold{0%,50%{transform:rotateX(0)}60%,90%{transform:rotateX(-90deg)}}
<script src="https://mayorovp.github.io/codegolf/table-8c505e68f1349e4c69e7.js"></script>
<div class=cssload-container><div class=cssload-cube><div class=cssload-half1><div class="cssload-side cssload-s1"></div><div class="cssload-side cssload-s2"></div><div class="cssload-side cssload-s5"></div></div><div class=cssload-half2><div class="cssload-side cssload-s3"></div><div class="cssload-side cssload-s4"></div><div class="cssload-side cssload-s6"></div></div></div></div>

любой-язык
  • 27 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5