七斜线显示


99

编写一个程序,该程序接受从0到9的非空字符串,并使用斜杠(,)打印它们在七段显示器上的显示方式/\

这些是精确的数字形状:

/\  
\ \
 \/

 \
  \


/\
 /
 \/

/\
 /\
  /

 \
\/\

/
\/\
  /

/
\/\
 \/

/\
  \

/\
\/\
 \/

/\
\/\
  /

当一个数字接一个数字出现时,它们以对角线形式向上和向右链接,中间是对角线。因此,例如,203将变为:

    /\
     /\
  /\  /
  \ \
/\ \/
 / 
 \/

请注意,1角色占用的空间与其他角色相同。的两行在1显示器的右侧,而不是左侧。

所以159114会变成这样:

           \
          \/\
         \
          \
       \
        \
    /\
    \/\
  /   /
  \/\
 \  /
  \

只要数字之间的正确位置,输出中可以有任何数量的行和/或换行符或空格的组合。

因此,对于159114,这也是有效的:



          \        
         \/\     
        \
         \
      \    
       \          
   /\     
   \/\
 /   /
 \/\         
\  /
 \    


从stdin或命令行获取输入,或编写一个包含字符串的函数。将结果打印到标准输出,或者如果编写函数,则可以将其作为字符串返回。

数字0到9的任何非空字符串都应该起作用,包括单个数字的字符串(例如8)和带前导零的字符串(例如在中007确实需要打印零)。

以字节为单位的最短代码获胜。


41
完全题外话:看起来很棒!
Martijn 2015年

4
这真的很酷。但是,我不确定kolmogorov-complexity是否适合此问题-我认为那需要恒定的输出?
亚历山大·布雷特

1
@ alexander-brett iirc的初衷是,但是,最近它已用于大多数代码可能将进行硬编码的问题。
Undergroundmonorail

这让我走得像...哇!哇!
Renae Lider 2015年

问题:我们需要处理空字符串或具有非数字字符的字符串吗?
frederick

Answers:


9

CJam,77 71 70 69 63 62字节

r_,5*_Sa*a*\{~"÷Ðëúܾ¿ðÿþ"=i2bS"\/"4*W<+.*3/..e>2fm>2m>}/Wf%N*

所有字符都是可打印的,因此复制和粘贴应该可以正常工作。

CJam解释器中在线尝试。

理念

我们首先检查输入中的位数n,然后推动一个足以覆盖输出的空格正方形。在实现中,此正方形将被编码为一个一字符字符串的二维数组。

对于简单的实现,长度为2n + 1的平方将是正确的(即没有周围的空格),但是我们将使用长度为5n的平方来节省几个字节。幸运的是,允许使用空格。

如果反转8的七个斜杠表示的行,则将获得以下内容:

 \/
\/\
/\

的所有的数字表示可以被编码为一个8位的整数,其中第i 位为0当且仅当第i 字符应该得到与空间置换。对于数字09,所得整数为

247 208 235 250 220 190 191 240 255 254

对应于以下ISO-8559-1字符:

÷Ðëúܾ¿ðÿþ

为输入中的每个位,在选择相应的8位整数后,我们重复第i 的表示的字符 8恰好一个次,其中一个是第i 整数的比特。这将推送一个包含一个或零个字符的字符串数组。通过将该数组划分为长度为3的块,我们获得了一个数组,其中每个元素对应于表示的一行。

现在,我们计算代表正方形的字符串和代表数字的字符串的向量化最大值。字符串/\比字符串大 ,因此它们将替换正方形中的空格。但是,空字符串小于string  ,因此数字表示形式中的空字符串将保留正方形中的空格。

现在,我们将行和列旋转两个单位,以将以下数字表示形式放置在正方形的适当位置,并对输入中的其余数字重复该过程。

最后,我们反转每一行,并在各行之间插入换行符。

r_,      e# Read a token from STDIN and push the length of a copy.
5*_      e# Multiply the length by 5 and push a copy.
Sa*      e# Repeat the array [" "] that many times.
a*       e# Repeat the array [[" " ... " "]] that many times.
\{       e# For each character C in the input:
  ~      e#   Push eval(C), i.e., the digit the character represents.

  "÷Ðëúܾ¿ðÿþ"

         e#   Push the encodings of all 10 seven slash representations.

  =      e#   Select the proper one.
  i2b    e#   Push the resulting characters code point in base 2, i.e., its bits.
  S      e#   Push " ".
  "\/"4* e#   Push "\/\/\/\/".
  +W<    e#   Concatenate and eliminate the last character.
  .*     e#   Vectorized repetition.

         e#   For the digit 5, e.g., we have [1 0 1 1 1 1 1 0] and  " \/\/\/\" on
         e#   the stack, so .* yields [" " "" "/" "\" "/" "\" "/" ""].

  3/     e#   Divide the representation into chunks of length 3, i.e., its lines.
  ..e>   e#   Compute the twofold vectorized maximum, as explained above.
  2fm>   e#   Rotate each line to characters to the right.
  2m>    e#   Rotate the lines two units down.
}/
Wf%      e# Reverse each line.
N*       e# Place linefeeds between them.

如果正方形的边长小于2n + 3,则最后的旋转会弄乱输出。由于所有正整数n的5n≥2n + 3,平方大到足以防止这种情况。


在此处发布您的代码的base64版本是否明智?
TRiG 2015年

1
+1,但老实说,我希望CJam等人。会把这个坐下来:p
primo

@primo:我对Pyth和数学问题也有相同的看法。:P我参加聚会有点晚了,因为我被《重新排列单词》所困扰。直到今天早上您进行编辑后,我才想到了这个问题。
丹尼斯

@Dennis的挑战似乎比以前快得多。我仍在研究两周前的
影片

1
我总是先寻找CJam,期望它的字节数最少。我还没有失望。
工程师吐司2015年

25

Python 3中,189个 183 174字节

s="a%sa"%input()
while s[1:]:b,a,c,d,e,f,g=[c*(ord(n)>>int(s[~(n>"Ͱ")],16)&1)or" "for c,n in zip("\/"*4,"ΟϭŅͭͱͼϻ")];S=len(s)*"  ";print(S+a+b,c+d+"\n"+S+e+f+g);*s,_=s

压缩对我来说似乎还可以,但是我很难提出一种放弃七个变量的好方法...

值得庆幸的是,该规范在空白规则上相当宽松,因为存在大量的前导/尾随空白。

展开:

s="a%sa"%input()
while s[1:]:
  b,a,c,d,e,f,g=[c*(ord(n)>>int(s[~(n>"Ͱ")],16)&1)or" "
                 for c,n in zip("\/"*4,"ΟϭŅͭͱͼϻ")]
  S=len(s)*"  "
  print(S+a+b,c+d+"\n"+S+e+f+g)
  *s,_=s

说明

变量表示的细分位置为:

    ab               /\
    efg               /\
  ab cd            /\  /
  efg              \ \
ab cd            /\ \/
efg               /
 cd               \/

每个段都由一个2字节的Unicode字符编码。例如,对的段进行ϻ编码,g如下所示:

bin(ord("ϻ")) = bin(1019) = "0b1111111011"
                               ^^^^^^^^^^
                               9876543210

的确,2是唯一不使用七段显示器右下段的数字。


19

C,1098个 345 323 319字节

第一 第二第三尝试。最终决定放弃屏幕缓冲区以节省几个字节。该程序采用数字参数,并以7段格式打印数字。

第一次参加。纯娱乐。要温柔。

a[]={100489,2056,98569,67849,2440,67969,100737,2057,100745,67977},i,j,k,n,m;char*c=" /\\";
#define f(q,r) for(q=0;q<(r);q++)
#define P(w) putchar(w)
#define Q(d,i,j) P(c[a[v[1][d]-48]>>(i*3+j)*2&3])
main(w,char**v){f(i,n=strlen(v[1]))f(k,(m=n-i-1)?2:3){f(j,m*2)P(32);f(w,3)Q(m,k,w);if(!k&&i)f(w,2)Q(m+1,2,w+1);P(10);}}

扩展,无警告:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int a[]={100489,2056,98569,67849,2440,67969,100737,2057,100745,67977};
char *c=" /\\";
#define f(q,r) for(q=0;q<(r);q++)
#define P(w) putchar(w)
#define Q(d,i,j) P(c[a[v[1][d]-48]>>(i*3+j)*2&3])
int main(int w, char **v)
{
    int i,j,k,n,m;
    f(i,n=strlen(v[1])) {
        m=n-i-1;
        f(k,m?2:3) {
            f(j,m*2) P(32);
            f(w,3) Q(m,k,w);
            if (!k&&i) f(w,2) Q(m+1,2,w+1);
            P(10);
        }
    }
}

西部最快的枪支。我现在正在压缩我的。
Alexey Burdin 2015年

15
嘿! 欢迎来到Code Golf。这项挑战的目的是使您的代码尽可能短,因此您应该对删除空格,shorting语句等进行一些优化,然后使用该语言在您的帖子顶部报告字节数。很棒的第一篇文章!仅供参考,您的初始帖子长1,098字节。
卡德,2015年

谢谢。刚刚添加了语言和字节数。我的原著甚至有评论和用法。:)
一些用户

提示:将所有变量名称更改为单个字符。此外,您还使用`for(i = 0; i <digits很多,也许用宏替换它?
Joshpbarron 2015年

辛苦了 为了使您的得分更具竞争力,您可以看看我们在C中打高尔夫球技巧
Alex A.15年

14

JavaScript中,192个 178 167 162字节

f=x=>{n=b="\n";for(k in x)for(i=0;i<8;)b+=("î\xA0Öô¸|~àþü".charCodeAt(x[k])>>i++&1?i%2?"/":"\\":" ")+(i%3?"":n+"  ".repeat(k));return b.split(n).reverse().join(n)}

用法:f("1337");将返回

      /\
        \
    /\   
     /\
  /\  /
   /\
 \  /
  \

它使用ES6的功能,并且由于省略了分号和括号等而可能具有某些依赖于实现的行为,但是它可以在Firefox中使用。

展开:

f=x=>
{
    n = b = "\n";

    for (k in x)
        for (i=0; i<8;)
            b += ("î\xA0Öô¸|~àþü".charCodeAt(x[k]) >> i++ & 1? i%2? "/" : "\\" : " ") + (i%3? "" : n+"  ".repeat(k));

    return b.split(n).reverse().join(n)
}

说明:

l是一个包含10个单字节字符的数组,这些字符对应于每个数字的形状。例如,数字0由字符表示î

/\        11
\ \  -->  101  --> 11 101 110 = î
 \/       011

输入字符用作保持其形状的数组的键,该数组代表对应的形状,这些形状逐点读取。


2
==0==1之前确实是必要的?。int在js中不被认为是布尔值吗?@Regret
Alexey Burdin 2015年

1
@Regret:"w\x05k/\x1D>~\x07\x7F?"每个字符按位反转变为"\xee\xa0\xd6\xf4\xb8|~\xe0\xfe\xfc",每个字符均可打印。这将再提供8个字节。虽然还不够……
Alexey Burdin 2015年

1
您可以通过删除括号来减少2个字节f=(x)=>{}-仅使用一个参数就不需要它们。
Scimonster 2015年

你绝对正确,@ Alexey。我会改变的。
遗憾的是

它行得通吗?我再得到6行带有虚假字符的行。
edc65 2015年

10

Perl-103字节

#!perl -n
print$i+$%2?U^(u,$i--%2?v9:z)[$i<4+$%2&vec$_,4*$-3-$i,1]:$/.!($i=$--)
while$+=2*y/0-9/wPkz\\>?p~/

上面包含6个不可打印的字符(可以从Ideone下载源代码),并且等效于以下内容:

#!perl -n
print$i+$^F%2?U^(u,$i--%2?v9:z)[$i<4+$^F%2&vec$_,4*$^F-3-$i,1]:$/.!($i=$^F--)
while$^F+=2*y/0-9/wPkz\\>?p\177~/

每个^F都可以由文字字符6(ACK)\177替换,并由字符127(DEL)替换。

shebang计为1,第二行不需要。输入来自标准输入。


样品用量

$ echo 0123 | perl seven-slash.pl

      /\
       /\
    /\  /
     /
   \ \/
    \
/\
\ \
 \/

$ echo 456789 | perl seven-slash.pl

          /\
          \/\
        /\  /
        \/\
      /\ \/
        \
    /
    \/\
  /  \/
  \/\
 \  /
\/\

说明

一次生成一个字节的输出。每个字符都被音译,然后使用将其解释为位数组vec。这些位以以下方式存储:

   /\           56 
   \/\          234
 /\ \/   ->   56 01
 \/\          234 
  \/           01

输出在3到5个斜杠之间交替,因此位56溢出到01下一位。7不使用位。


8

C#,360个355 331字节

您好,首先尝试打高尔夫。希望这对于C#入门来说不会太差。

string p(string n){var l=new string[n.Length*2+1];var i=l.Length-1;for(;i>0;){var x=@"/\\ \\/ \  \  /\ / \//\ /\ / \\/\  / \/\ // \/\\//\  \  /\\/\\//\\/\ /".Substring((n[0]-48)*7,7);for(var j=i-3;j>=0;){l[j--]+="  ";}l[i--]+=" "+x[5]+x[6];l[i--]+=""+x[2]+x[3]+x[4];l[i]+=""+x[0]+x[1];n=n.Remove(0, 1);}return string.Join("\n",l);}

用法:p("159114");将返回

          \
         \/\
        \
         \
      \
       \
   /\
   \/\
 /   /
 \/\
\  /
 \

展开:

string p(string n)
    {
        var l = new string[n.Length * 2 + 1];
        var i = l.Length - 1;
        for (; i > 0; )
        {
            var x = @"/\\ \\/ \  \  /\ / \//\ /\ / \\/\  / \/\ // \/\\//\  \  /\\/\\//\\/\ /".Substring((n[0] - 48) * 7, 7);

            for (var j = i - 3; j >= 0; )
            {
                l[j--] += "  ";
            }
            l[i--] += " " + x[5] + x[6];
            l[i--] += "" + x[2] + x[3] + x[4];
            l[i] += "" + x[0] + x[1];

            n = n.Remove(0, 1);
        }

        return string.Join("\n", l);
    }

1
我知道已经快三年了,但是您可以打30个字节:在线尝试。301个字节。不错的答案,但我+1。
凯文·克鲁伊森

凉。然后随意发布它作为您自己的答案:)
Shion

1
不,这是您的代码。我只是通过删除for循环括号并组合变量来缩短了一点。并改变string s(string n)n=>通过使用Lambda。嗯,如果您愿意,可以这样保留它。:)我确实创建了一个Java移植端口,但是功劳不错。;)
Kevin Cruijssen

4

蟒2,317 298 278 273.15

def f(s):
    r=range;n=len(s)*2;l=[[' ']*-~n for x in r(-~n)]
    for x in r(0,n,2):
        for i,[d,y,c]in enumerate(zip('0112012','1021012',r'\\\\///')):l[n-2-x+int(y)][x+int(d)]=[' ',c][('%7s'%(bin(ord('}(7/jO_,\x7fo'[map(int,s)[x/2]])))[2:])[i]=='1']
    for x in l:print''.join(x)

在计数时,我将4个空格视为制表符。
未压缩且可读:

def f(s):
    r=['1111101','0101000','0110111','0101111','1101010','1001111','1011111','0101100','1111111','1101111']
    ''.join(map(lambda x:chr(eval('0b'+x)),r))
    n=len(s)*2
    l=[[' ']*(n+1) for x in xrange(n+1)]
    shifts=[(0,1,'\\'),(1,0,'\\'),(1,2,'\\'),(2,1,'\\'),(0,0,'/'),(1,1,'/'),(2,2,'/')]
    for x in xrange(0,n,2):
        y=n-2-x
        for i,[dx,dy,c] in enumerate(shifts):
            l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' '
    return '\n'.join(''.join(x) for x in l)

嘿! 很好的答案,但是您可以进行一些更改以使其更短。更改l[y+dy][x+dx]=c if r[map(int,s)[x/2]][i]=='1' else ' 'l[y+dy][x+dx]=[' ',c][r[map(int,s)[x/2]][i]=='1']保存5个字节,更改return '\n'.join(''.join(x) for x in l)print'\n'.join(''.join(x)for x in l)保存3个字节,以及其他一些更改。这里有一个链接到一个要点,我得到了一个字节从508倒数至440
卡德

6
开尔文会对那个分数感到非常满意。
克里斯蒂安·卢帕斯库

3
您的答案实际上是272个字节,但是您可以节省一个字节,因为空格比制表符短。看这里。反正怎么会有273.15字节呢?
mbomb007

1
273.15字节意味着@AlexeyBurdin弄清楚了数字平台上的模拟计算。您为什么在世界上而不是在科学杂志上发表它?;-)
hBy2Py 2015年

1
这仅意味着解决方案被冻结为绝对零,即我不想专注于已经丢失的事物。:)
Alexey Burdin 2015年

3

KDB(Q),172136字节

{d:(9#1 2 0 2)*/:-9#'0b vs'427 136 403 409 184 313 315 392 443 441;
 -1" /\\"{m+(c,/:y),c:(count[m:0 0,x,\:0 0]-3)#0}/[3 3#/:d"J"$'(),x];}

说明

1)创建d具有所有数字形状的地图。

2)用额外的零填充矩阵,并将它们加在一起。即“ 01”

0           0 0 0 2 0   
0           0 0 0 0 2
1 2 0 0 0 + 0 0 0 0 0
2 0 2 0 0   0
0 2 1 0 0   0

3)使用索引映射" /\"和打印-1

测试

q){d:(9#1 2 0 2)*/:-9#'0b vs'427 136 403 409 184 313 315 392 443 441;-1" /\\"{m+(c,/:y),c:(count[m:0 0,x,\:0 0]-3)#0}/[3 3#/:d"J"$'(),x];}"0123456789"
                  /\
                  \/\
                /\  /
                \/\
              /\ \/
                \
            /
            \/\
          /  \/
          \/\
         \  /
        \/\
      /\
       /\
    /\  /
     /
   \ \/
    \
/\
\ \
 \/

我敢肯定这可以缩短!

谢谢@hjk


1
我发现的唯一减少是1 2 0 2 1 2 0 2 1(9#1 2 0 2)(-6)代替。
hjk 2015年

1
哦,enlist1#工程代替,所以是-5。
hjk 2015年

1
你是明星!我会更新!但enlist由于count[a 0]#0不是原子而无法替换:(
WooiKent Lee

啊,虽然对我有用,但很奇怪。一定是个怪癖。;)
hjk 2015年

1
实际上,列表加原子无论如何都会将原子扩展到正确的长度!你让我想起了这种机制!:D
WooiKent Lee

2

点,122 +1 = 123字节

使用-n标志。通过命令行参数获取输入。

l:$.(J"\/ "@^(A_TB3M"⮐䫶ヷ㄃䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma)z:2*#ap:sXz+2RLz+2Fi,5Fj,z{c:[4-ii]//2+j(pc@0c@1):(lij)}RVp

UTF-8字符串中的字符具有以下代码点:11152, 19190, 12535, 12547, 17651, 11575, 11557, 12629, 11071, 11089

稍微松了一下:

t:[120022001 222022202 122012021 122012201 220012202 120212201 120212001 122022202 120012001 120012201]
l:$.({J"\/ "@^t@a.2<>2}Ma)
z:2*#a+2
p:sXzRLz
Fi,5
 Fj,2*#a {
  x:i//2+j
  y:(4-i)//2+j
  p@y@x:l@i@j
 }
P RVp

基本策略是找到每个数字的组成字符,然后适当倾斜它们。例如,对于8,我们需要这样做(用点表示的空格):

/.
\\
/.
\\
/.

会变成这样:

 .  
/\. 
\/\.
 \/ 

此策略的一个不错的特点是,多个预先偏斜的数字可以简单地并排连接。

现在,我们可以将/.\\/.\\/.基数3 编码为1200120012。然后,我们可以将其转换为十进制并将其视为UTF-8代码点。

该表达式J"\/ "@^(A_TB3M"⮐䫶ヷ㄃䓳ⴷⴥㅕ⬿⭑")@_.2<>2Ma通过以下过程获取预偏斜数据:

                            Ma   Map this lambda function to each character in input:
        (A_TB3M"...")            Create list of the code points of each character in UTF-8
                                   string, converted to base 3
                     @_          Index into that list using the input character
                       .2        Concatenate 2 to the end of the base-3 value (all of the
                                   pre-skewed number grids end in 2, i.e. space)
       ^                         Split the number into a list of its digits
 "\/ "@                          Index into this string with those digits, giving a list
                                   of slashes & spaces
J                                Join the list together into a string
                         <>2     Group string two characters at a time

一旦使用并排连接了这些字符串$.,我们便创建了一个空间网格(2 * n +2平方),遍历前偏斜网格,然后用适当的字符。要看到它的发生,可以修改代码以打印每个阶段并暂停以供用户输入:

进行中的算法

网格实际上是上下颠倒地构建的,因为这似乎使数学更容易。

我确定有更好的算法可以使用。但是我想提出自己的想法,而不是模仿别人的想法。

更多关于点子


2

Brainfuck-719字节

仅出于历史背景,应归功于Daniel B Cristofani。我不确定这是何时创建的,但最早可从2003年5月9日从Internet档案中获得。

的输出9与问题描述中的输出不同。

>>>>+>+++>+++>>>>>+++[
  >,+>++++[>++++<-]>[<<[-[->]]>[<]>-]<<[
    >+>+>>+>+[<<<<]<+>>[+<]<[>]>+[[>>>]>>+[<<<<]>-]+<+>>>-[
      <<+[>]>>+<<<+<+<--------[
        <<-<<+[>]>+<<-<<-[
          <<<+<-[>>]<-<-<<<-<----[
            <<<->>>>+<-[
              <<<+[>]>+<<+<-<-[
                <<+<-<+[>>]<+<<<<+<-[
                  <<-[>]>>-<<<-<-<-[
                    <<<+<-[>>]<+<<<+<+<-[
                      <<<<+[>]<-<<-[
                        <<+[>]>>-<<<<-<-[
                          >>>>>+<-<<<+<-[
                            >>+<<-[
                              <<-<-[>]>+<<-<-<-[
                                <<+<+[>]<+<+<-[
                                  >>-<-<-[
                                    <<-[>]<+<++++[<-------->-]++<[
                                      <<+[>]>>-<-<<<<-[
                                        <<-<<->>>>-[
                                          <<<<+[>]>+<<<<-[
                                            <<+<<-[>>]<+<<<<<-[
                                              >>>>-<<<-<-
  ]]]]]]]]]]]]]]]]]]]]]]>[>[[[<<<<]>+>>[>>>>>]<-]<]>>>+>>>>>>>+>]<
]<[-]<<<<<<<++<+++<+++[
  [>]>>>>>>++++++++[<<++++>++++++>-]<-<<[-[<+>>.<-]]<<<<[
    -[-[>+<-]>]>>>>>[.[>]]<<[<+>-]>>>[<<++[<+>--]>>-]
    <<[->+<[<++>-]]<<<[<+>-]<<<<
  ]>>+>>>--[<+>---]<.>>[[-]<<]<
]
[Enter a number using ()-./0123456789abcdef and space, and hit return.
Daniel B Cristofani (cristofdathevanetdotcom)
http://www.hevanet.com/cristofd/brainfuck/]

2
我大概写于2002年,互联网档案馆说PANU Kalliokoski它添加到他的brainfuck库在2002年8月对于9,我觉得我用的模式,从第二版微处理器和接口技术,第4页
丹尼尔Cristofani

1

Perl,270个字节

我真的不应该在此上浪费时间。

$e="\\";$g=" ";$_=reverse<>;$l=length;push@a,(119,18,107,91,30,93,125,19,127,95)[$1]while/(.)/g;for($i=0;$i<=$l;$i++){$j=2*($l-$i);$b=$a[$i];$c=$i&&$a[$i-1];print" "x$j,$b&1?"/":$g,$b&2?$e:$g,$g,$c&32?$e:$g,$c&64?"/":$g,"
"," "x$j,$b&4?$e:$g,$b&8?"/":$g,$b&16?$e:$g,"
"}

替换[$1]while/(.)/g[$_]for/./g以保存4个字节。替换for($i=0;$i<=$l;$i++)for$i(0..$l)以保存9个字节。
霍布斯2015年

1

的JavaScript(ES6),191 206

在Firefox中运行代码段进行测试。

F=m=>(
  a='    \\/  /\\/\\ /  /\\  \\\\ \\'.match(/.../g),
  o=f='',r=' ',
  [for(d of m)(
    n=1e3+'¯B\x91ÿ$ê\x86A\x87ë'.charCodeAt(d)+'', // here there are 3 valid characters tha the evil stackoverflow editor just erase off, so I had to put them as hex escape
    o='\n'+f+' '+a[n[2]]+'\n'+r+a[n[1]]+o,
    r=f+a[n[3]],
    f+='  ')],
  r+o
)


//TEST

go=_=>O.innerHTML =(v=I.value)+'\n'+F(v)

go()
<input id=I value='0123456789'><button onclick='go()'>-></button>
<pre id=O></pre>


0

Java 8,341字节

n->{int i=n.length*2,j=i+1,k=0,t;String l[]=new String[j],x;for(;j-->0;l[j]="");for(;i>0;l[i--]+=" "+x.substring(5,7),l[i--]+=x.substring(2,5),l[i]+=x.substring(0,2))for(x="/~~ ~~/ ~  ~  /~ / ~//~ /~ / ~~/~  / ~/~ // ~/~~//~  ~  /~~/~~//~~/~ /".replace('~','\\').substring(t=(n[k++]-48)*7,t+7),j=i-2;j-->0;)l[j]+="  ";return"".join("\n",l);}

@Shion的C#.NET答案的端口,因此请确保也对他进行投票

在线尝试。

说明:

n->{                       // Method with character-array parameter and String return-type
  int i=n.length*2,        //  Two times the length of the input array
      j=i+1,               //  Index integer, starting at `i+1`
      k=0,t;               //  Temp integers
  String l[]=new String[j],//  String-array for the rows, default filled with `null`
         x;                //  Temp-String
  for(;j-->0;l[j]="");     //  Replace all `null` with empty Strings
  for(;i>0                 //  Loop `i` downwards in the range [`n.length*2`, 0)
      ;                    //   After every iteration:
       l[i--]+=            //    Append the row at index `i` with:
                           //    (and decrease `i` by 1 afterwards with `i--`)
         " "               //     A space
         +x.substring(5,7),//     And the 6th and 7th characters of temp-String `x`
       l[i--]+=            //    Append the row at index `i` with:
                           //    (and decrease `i` by 1 afterwards with `i--`)
         x.substring(2,5), //     The 3rd, 4th and 5th characters of temp-String `x`
       l[i]+=              //    Append the row at index `i` with:
         x.substring(0,2)) //     The 1st and 2nd characters of the temp-String `x`
    for(x="/~~ ~~/ ~  ~  /~ / ~//~ /~ / ~~/~  / ~/~ // ~/~~//~  ~  /~~/~~//~~/~ /".replace('~','\\')
                           //   String containing all digit-parts
          .substring(t=(n[k++]-48)*7,t+7),
                           //   and take the substring of 7 characters at index
                           //   `n[k]` as integer multiplied by 7
        j=i-2;j-->0;)      //   Inner loop `j` in the range (`i`-2, 0]
      l[j]+="  ";          //    And append the rows at index `j` with two spaces
  return"".join("\n",l);}  //  Return the rows delimited with new-lines
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.