RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 674415
Accepted
Mike
Mike
Asked:2020-06-02 22:02:27 +0000 UTC2020-06-02 22:02:27 +0000 UTC 2020-06-02 22:02:27 +0000 UTC

代码高尔夫:增加数字

  • 772

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

示例:

接收到字符串“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 27 个回答
  • 10 Views

27 个回答

  • Voted
  1. retorta
    2020-06-03T00:22:06Z2020-06-03T00:22:06Z

    Python3,161 字节

    def f(s):
        for i in'0123456':print(*(format(b'>>@>>>"AAB@ABAAA(B@@AAA>>B~~>?A@AA"@AAAAA>>>>>>'[int(i+j)],'7b').translate({48:' ',49:'#'})for j in s))
    

    SO 剪切了一些字符,因此从此处复制的代码将不起作用,但如果从此处复制则可以。
    考试

    • 17
  2. Anton Petrusevich
    2020-06-03T21:48:21Z2020-06-03T21:48:21Z

    Perl, 230 165 155 153 150 символов и байт.

    Вся программа в ASCII, поэтому, число байт, занимамых программой, равно числу символов. Символы шрифта кодированы простой формулой, чтобы оставались печатными.

    $_="0987654321";
    for$l(0..6){say map{sprintf("%08b",127&(80+ord substr'L8nnp/n/nnRHqqrpqrqqqX11rpp4qqq8nnr..8noq8p1/1q@q1R8pq2qq@qqLn/n2nn@nn',$l.$_))=~y/01/ #/r}/./g}
    

    Ideone: https://ideone.com/gbBuzn

    Комментарий: код эволюционировал, приведён последний вариант. С подсказками Mike. Можно ужать ещё, наверное, пару символов, если формулу взять подсказанную, но тогда совсем моего авторства не останется :)

    Update: минус ещё два символа за счёт того, что ord берёт код первого символа строки. Спасибо Alexander Onokhov.

    Update: минус ещё три символа за счёт переупорядочивания данных шрифта и замены умножения на слияние строк. Идея "Someone Unknown".

    • 15
  3. Qwertiy
    2020-06-02T22:52:55Z2020-06-02T22:52:55Z

    Javascript ES6,376,286 个字符

    在变量中输入数据s。

    `235145251167151715251
    1131323152524111615241115251
    151111191624111615051215251
    15131452511411616414526
    15131316068625121415161
    01131413161515111525121415251
    0233517156125253155251`.replace(/./g,(m,i)=>' #'[i&1].repeat(m)).split`
    `.map(x=>s.replace(/./g,i=>x.substr(7*i,7)+" ")).join`
    `
    

    考试:

    f = s => `235145251167151715251
    1131323152524111615241115251
    151111191624111615051215251
    15131452511411616414526
    15131316068625121415161
    01131413161515111525121415251
    0233517156125253155251`.replace(/./g,(m,i)=>' #'[i&1].repeat(m)).split`
    `.map(x=>s.replace(/./g,i=>x.substr(7*i,7)+" ")).join`
    `
    
    document.querySelector("input").addEventListener("input", function (e) {
      document.querySelector("pre").textContent = f(e.target.value.replace(/\D/g, ''));
    })
    body { display:inline-block; }
    input { position:sticky; left:8px; width:calc(100vw - 16px); box-sizing:border-box; }
    <input>
    <pre></pre>

    旧版本(376 个字符)

    注意力!第一行代码以空格结尾!!!

    f = s => ` 2#3 5# 4#5 2#5 # 6#7 #5 #7 #5 2#5 
     # 3# 3#2 3# 5#2 5#2 4# # 6# 5#2 4# # 5#2 5#
    # 5# # # 9# 6#2 4# # 6#  9# 2# 5#2 5#
    # 5# 3# 4#5 2#5 # 4# #6 #6 4# 4#5 2#6
    # 5# 3# 3# 6 6#8 6#2 5# 2# 4# 5# 6#
     # 3# 4# 3# 6# 5# 5# # 5#2 5# 2# 4# 5#2 5#
     2#3 3#5 #7 #5 6# 2#5 2#5 3# 5#5 2#5 `.replace(/.\d/g,m=>m[0].repeat(m[1])).split`
    `.map(x=>s.replace(/./g,i=>x.substr(7*i,7)+" ")).join`
    `
    
    document.querySelector("input").addEventListener("input", function (e) {
      document.querySelector("pre").textContent = f(e.target.value.replace(/\D/g, ''));
    })
    body { display:inline-block; }
    input { position:sticky; left:8px; width:calc(100vw - 16px); box-sizing:border-box; }
    <input>
    <pre></pre>

    • 12
  4. Best Answer
    RusArt
    2020-06-09T22:57:05Z2020-06-09T22:57:05Z

    05AB1E, -78 91 86 bytes

    7F"‰ʒØTs“c7н7ƒÔΛ`"255öb7ô"KƶΘå驨ÈÐjη½ñ4BØ„ZƤ™Ωë₄´Ø#Ã.Dι¯ƒ“T"255öhIS7*N+èHè)»1'#‡0' ‡
    

    Попробовать

    Словарь в 255-й системе счисления:

     ‰ʒØTs“c7н7ƒÔΛ`
    

    При преобразовании в двоичную и разделении на группы по 7 получаем это:

    ['1000001', '0011100', '0100010', '0001000', '0011000', '0101000', '0111110', '0000001', '1000000', '1111111', '1000010', '0000010', '1111110', '0000100', '0010000', '0111111']
    

    Сам шрифт кодируется в 16-й системе счисления (в словаре 16 элементов)

    1200021 3453336 6076889 6076709 8AAA9BB 988C706 608C006 9AD3EEE 6006006 600F706
    

    В программе он также переведен в 255-ю систему счисления:

    KƶΘå驨ÈÐjη½ñ4BØ„ZƤ™Ωë₄´Ø#Ã.Dι¯ƒ“T
    

    Прогоняется цикл от 0 до 6, в каждой итерации ввод пользователя преобразуется в индексы шрифта, которые в свою очередь восстанавливаются по словарю. В конце программа все собирает и заменяет 0 на пробел и 1 на #.

    UPD Заменил использование • на явное преобразование системы счисления.

    ö = pop a,b push int(a, b)

    UPD Исправил цифру 3, заодно самоликвидировался костыль и код получился меньше

    Расшифровка

     7 - кладем в стек число 7
     F - берем из стека число a, в интервале от 0 до a выполняем следующие команды
     "‰ʒØTs“c7н7ƒÔΛ`" - кладем в стек строку
     255 - кладем в стек число 255
     ö - берем из стека a и b, выполняем преобразование системы счисления числа a с основания b к основанию 10, кладем результат в стек
     b - берем из стека число, преобразуем число в двоичную систему счисления, кладем результат в стек
     7 - кладем в стек число 7
     ô - берем из стека a и b, делим a на группы по b элементов, кладем в стек массив
     "KƶΘå驨ÈÐjη½ñ4BØ„ZƤ™Ωë₄´Ø#Ã.Dι¯ƒ“T" - кладем в стек строку
     255 - кладем в стек число 255
     ö - берем из стека a и b, выполняем преобразование системы счисления числа a с основания b к основанию 10, кладем результат в стек
     h - берем из стека число, переводим его в 16-ю систему счисления
     I - кладем в стек пользовательский ввод
     S - берем из стека строку и кладем массив ее символов
     7 - кладем в стек число 7
     * - берем из стека a и b, умножаем, кладем в стек результат. Тут массив умножается на число, то есть каждый элемент массива умножается на число
     N - кладем в стек текущий итератор из команды F (2-я по счету, N = [0..6])
     + - берем из стека a и b, складываем, кладем в стек результат
     è - берем из стека a и b (a - шрифт, b - индекс), кладем в стек a[b] (код из словаря)
     H - переводим число из 16-й системы в 10-ю
     è - берем из стека a и b (a - словарь, b - индекс), кладем в стек a[b] (часть рисунка) 
     ) - тут играет роль end F
     » - на этот момент в стеке есть строки с частями рисунка, команда соединяет их в одну и вставляет между ними перенос на новую строку
     1 - кладем в стек число 1
     '# -  кладем в стек символ #
     ‡ - берем из стека a,b,c (a - рисунок, b - 1, c - #), в a заменяем b на с
     0 - кладем в стек число 0
     '  -  кладем в стек пробел
     ‡ - берем из стека a,b,c (a - рисунок, b - 0, c - пробел), в a заменяем b на с    
     в конце программа сама выводит на экран последний элемент стека (наш рисунок)
    
    • 12
  5. br3t
    2020-06-03T17:35:17Z2020-06-03T17:35:17Z

    Javascript, 376 символов

    function printn(n) {
    var r=Array(7),s,i,d,k=0;while(n[k]){d='ab222ba7c777711231445123132148885dd546332112462215ef799912212211220321'.substr(n.split('')[k]*7, 7).split('');for(i=0;i<7;i++){s=' ######, ##### ,#     #,      #,#      ,#######,###### ,   #   ,#    # ,  #    ,  ###  , #   # ,  ##   ,     # ,#    # ,    #  '.split(',')[parseInt(d[i],16)];r[i]=r[i]?r[i]+' '+s:s}k++}return r.join('\n');
    }
    
    // Test
    document.querySelector("input").addEventListener("input", function (e) {
      document.querySelector("pre").textContent = printn(e.target.value.replace(/\D/g, ''));
    });
    document.querySelector("pre").textContent = printn('0123456789');
    body { display:inline-block; }
    input { position:sticky; left:8px; width:calc(100vw - 16px); box-sizing:border-box; }
    <input value="0123456789" />
    <pre></pre>

    • 10
  6. Visman
    2020-06-02T23:58:18Z2020-06-02T23:58:18Z

    PHP7.0 , 211,189,182 个 字符

    @Mike 在评论中澄清说 base64_decode() 被禁止。这是相同的 252 字符版本,但字体字符串是 ASCII 字符 0 到 254,并且 base64_decode() 函数已被删除。UTF-8编码无法正常显示代码

    <?php
    function p($s) {
    for($l=-1;$l++<6;){foreach(str_split($s)as$y)printf('%8s',strtr(decbin(ord("8||��|�||D0���������P������||���|~���� �D���� ��8|�||| ||"{$l*10+$y})),'01',' #'));echo"\n";}
    }
    p('0123456789876543210');
    

    要获取工作文件,请使用生成代码

    <?php
    $a = '38107C7C80FE7CFE7C7C443082828480828482828250020284808008828282107C7C84FCFC107C7E82108002FE028220820244108082048282208282387CFE7C047C7C207C7C';
    $b = '';
    for($i=0;$i<70;++$i){
        $b .= chr(hexdec(substr($a,$i*2,2)));
    }
    file_put_contents('test.php', "<?php
    function p(\$s) {
    for(\$l=-1;\$l++<6;){foreach(str_split(\$s)as\$y)printf('%8s',strtr(decbin(ord(\"$b\"{\$l*10+\$y})),'01',' #'));echo\"\\n\";}
    }
    p('01234567890123456789');
    ");
    

    PHP,252 个字符

    <?php
    function p($s) {
        $a = base64_decode('OBB8fID+fP58fEQwgoKEgIKEgoKCUAIChICACIKCghB8fIT8/BB8foIQgAL+AoIgggJEEICCBIKCIIKCOHz+fAR8fCB8fA==');
        for($l=0;$l<7;++$l){
            for($i=0;isset($s{$i});++$i){
                printf('%8s', str_replace(['0','1'], [' ','#'], decbin(ord($a{$l*10+$s{$i}}))));
            }
            echo"\n";
        }
    }
    p('98765432101');
    

    压缩视图(252 字节)

    $a=base64_decode('OBB8fID+fP58fEQwgoKEgIKEgoKCUAIChICACIKCghB8fIT8/BB8foIQgAL+AoIgggJEEICCBIKCIIKCOHz+fAR8fCB8fA==');for($l=0;$l<7;++$l){for($i=0;isset($s{$i});++$i)printf('%8s',str_replace(['0','1'],[' ','#'],decbin(ord($a{$l*10+$s{$i}}))));echo"\n";}
    

    测试http://sandbox.onlinephpfunctions.com/code/2f683e07299be492ac6b1af758ea7bab37ef3eba

    PHP,292 个字符

    可读视图

    <?php
    function p($s) {
        $a = '38107C7C80FE7CFE7C7C443082828480828482828250020284808008828282107C7C84FCFC107C7E82108002FE028220820244108082048282208282387CFE7C047C7C207C7C';
        for($l=0;$l<7;++$l){
            for($i=0;$i<strlen($s);++$i){
                printf('%8s', str_replace(['0','1'], [' ','#'], base_convert(substr($a,$l*20+$s{$i}*2,2), 16, 2)));
            }
            echo"\n";
        }
    }
    p('987654321054');
    

    压缩视图(292 字节)

    for($l=0;$l<7;++$l){for($i=0;$i<strlen($s);++$i)printf('%8s',str_replace(['0','1'],[' ','#'],base_convert(substr('38107C7C80FE7CFE7C7C443082828480828482828250020284808008828282107C7C84FCFC107C7E82108002FE028220820244108082048282208282387CFE7C047C7C207C7C',$l*20+$s{$i}*2,2),16,2)));echo"\n";}
    

    测试http://sandbox.onlinephpfunctions.com/code/8f895964dd8e7a51dba85dd23656baadb7e44238

    • 8
  7. teran
    2020-06-03T00:13:25Z2020-06-03T00:13:25Z

    德尔福,407 个字符

    暂时写下来,以后再想。在C/C++中,当然会更短,虽然这还需要考虑怎么缩。

    program numbers;
    {$APPTYPE CONSOLE}
    uses SysUtils, strUtils;
    
    const a: array[0..6] of string = (
    '1C083E3E407F3E7F3E3E',
    '22184141424040424141',
    '41280101424040044141',
    '41083E3E427E7E083E3F',
    '410840017F0141104101',
    '22084041024141104141',
    '1C3E7F3E023E3E103E3E');
    
    const s = '1234567890';
    var r,b: byte;
        c: char;
        x : word;
    begin
        for r:=0 to 6 do begin
          for c in s do begin
            x := strToInt('$'+copy(a[r],1+StrToInt(c)*2,2));
            for b := 6 downto 0 do
              write(ifthen(x and (1 shl b)>=1, '#', ' '));
            write(' ');
          end;
          writeln;
        end;
    end.
    

    PS:你觉得长度如何

    • 7
  8. Akzhan Abdulin
    2020-06-03T22:51:45Z2020-06-03T22:51:45Z

    Crystal 0.22, 250 байт

    def foo(s)
    7.times{|i|s.each_byte{|b|8.times{|j|print (1&[0x1C22414141221C,0x3E0808080A0C08,0x7F01013E40413E,0x3E41403E40413E,0x20207F21212101,0x3E41403F01017F,0x3E41413F01413E,0x404040810217F,0x3E41413E41413E,0x3E41407E41413E][b-48]>>8*i+j)>0?"#": " "}};puts}
    end
    foo("0123456789");
    

    https://play.crystal-lang.org/#/r/24o0

    Основано на коде https://ru.stackoverflow.com/a/674586/253020

    • 7
  9. KAGG Design
    2020-06-03T18:54:00Z2020-06-03T18:54:00Z

    PHP, 214 символов и байт

    function d($s){
        $c='>>@>>>"AAB@ABAAA(B@@AAA>>B~~>?A@AA"@AAAAA>>>>>>';
        for($l=0;$l<7;$l++){
            for($d=0;$d<strlen($s);$d++){
                for($j=1;$j<9;$j++){
                    echo(decbin((ord($c{$l*10+$s{$d}})+128)<<1)){$j}?'#':' ';
                }
            }
            echo"\n";
        }
    }
    
    d('98765432101');
    

    Тест http://sandbox.onlinephpfunctions.com/code/003b619c2dcc3f0ddff2c5b3c21a14b9be92c49c

    В сжатом виде тело функции имеет длину 214 символов и байт:

    function d($s){$c='>>@>>>"AAB@ABAAA(B@@AAA>>B~~>?A@AA"@AAAAA>>>>>>';for($l=0;$l<7;$l++){for($d=0;$d<strlen($s);$d++){for($j=1;$j<9;$j++){echo(decbin((ord($c{$l*10+$s{$d}})+128)<<1)){$j}?'#':' ';}}echo"\n";}}
    

    В отличие от других вариантов на php, работает в UTF-8.

    • 7
  10. Андрей NOP
    2020-06-04T01:40:38Z2020-06-04T01:40:38Z

    C#, 313 305 304 302 299 281 279 278 277 276 275 261 259 258 252 250 байтов

    void f(string s){
        for(int i=-1,j;++i<7;WriteLine())foreach(var c in s)for(Write(" "),j=0;j<7;)Write((new[]{-0x88F7EF9FCFA2,-0x1CB86CD9AB6,1056705L<<28,0,-0x790413A7D03D,0x102041,16449<<14,-0xE9EBC6CC0FBF,16385<<14,8193<<14}[c-48]+0xfa0c07d020be>>i*7+j++&1)>0?"#":" ");
    }
    

    ЗЫ. using static System.Console; - считаем как подключение стандартной библиотеки

    В немного более читабельном виде:

    using static System.Console;
    
    class Program
    {
        static void Main()
        {                
            ShowNumber("0123");
            ReadLine();
        }
    
        static void ShowNumber(string s)
        {
            for (int i = -1, j; ++i < 7; WriteLine())
                foreach (var c in s)
                    for (Write(" "), j = 0; j < 7;)
                        Write((new[] {
                                        -0x88F7EF9FCFA2,
                                         -0x1CB86CD9AB6,
                                           1056705L<<28,
                                                      0,
                                        -0x790413A7D03D,
                                               0x102041,
                                              16449<<14,
                                        -0xE9EBC6CC0FBF,
                                              16385<<14,
                                               8193<<14
                                     }[c - 48] + 0xfa0c07d020be >> i * 7 + j++ & 1) > 0 ? "#" : " ");
        }
    }
    

    Перенос объявления массива внутрь Write позволил выиграть 7 байт
    Перевод магических чисел в шестнадцатеричную систему позволил выиграть 8 байт
    Перевод '0' в 48 позволил выиграть еще один байт
    Чтение этого позволило избавиться от пары скобок и выиграть 2 байта
    Перенос вывода разделителей между цифрами в Write позволил уменьшить магические числа и выиграть 3 байта
    Убрал из подсчета заголовок функции
    Перенос WriteLine() внутрь заголовка for() позволил выкинуть пару скобок {} и выиграть 2 байта (подсмотрено в этом ответе)
    Замена операции сравнения == на < дает еще байт
    Вынос объявления переменных перед циклами позволил выиграть еще байт
    Перенос инкремента j++ в тело цикла позволил выиграть еще байт
    Перенос инкремента ++i в предусловие позволил выиграть еще байт
    Вынос постоянного слагаемого позволяет выиграть невероятные 14 байт (возможно выбор другого слагаемого может улучшить результат еще на 1-2 байта, но лень выбирать)
    Вынос вывода разделителя между цифрами в заголовок цикла позволил выиграть еще 2 байта
    Рекомендация @Qwertiy даёт еще один байт
    Формирование магических чисел с помощью сдвигов дает еще 6 байт
    Удалил лишнюю пару скобок (не понятно откуда она взялась) - 2 байта

    • 6

相关问题

  • 是否可以使用指示语气来构建程序?[关闭]

  • 代码中的注释应该怎么说?

  • “生产”和“研究”编程语言

Sidebar

Stats

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

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +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
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +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