显示钟面


39

完全像这样在钟面上显示12个数字:

           12            
     11           1      

 10                   2  


9                       3


  8                   4  

      7           5      
            6            

为了更好地查看网格,下面是带有点的网格:

...........12............
.....11...........1......
.........................
.10...................2..
.........................
.........................
9.......................3
.........................
.........................
..8...................4..
.........................
......7...........5......
............6............

请注意,网格的宽度被拉伸了两倍,使其看起来更加方形。

还要注意,两位数字与他们的一位对齐。9位数字应与左侧齐平。

以多行字符串(而不是行列表)返回或打印结果。任何尾随空格都是可选的。最后的换行符也是可选的。

Answers:


25

木炭,40字节

F¹²«M⁻↔⁻¹⁴⊗÷×⁴鳦⁸⁻⁴↔⁻⁷÷×⁴﹪⁺³ι¹²¦³P←⮌I⊕ι

在线尝试!链接是详细版本的代码。说明:数学计算每个数字之间的偏移量。木炭的索引为0(因此输出),因此水平和垂直偏移的公式如下:112

δx=|1424i3|8δy=4|74i3|

其中。i=i+3(mod12)


22

JavaScript(Node.js),91字节

这不是一个非常聪明的方法,但是目前我还没有找到任何简短的方法。

_=>`K12
E11K1

A10S2


9W3


B8S4

F7K5
L6`.replace(/[A-Z]/g,c=>''.padEnd(Buffer(c)[0]&31))

在线尝试!


4
我喜欢使用Buffer()替代charCodeAt()
Downgoat

1
@Downgoat这让我想知道是否应针对Node特定功能在Node.js问题中有打高尔夫球技巧。不过,不确定是否值得。
Arnauld

也许添加一个包含所有特定于节点的功能的单独答案,或者至少一个链接所有不同答案的列表?

15

05AB1E39 33 31字节

感谢Magic Octopus Urn节省了6个字节!

6xsG12N-N•°£•NèØú«тR∞Nè¶×]\6».c

一些33字节的替代方法:

711ćŸā•Σ°w•₂вú‚øJƵt3в¶×‚ø»6xŠ».c¦
6xsŸ5L•Σ°w•₂вúõ¸ì‚ζJï2Ý«ƶ×)ø».c
6xsG¶12N-N•Θ{©•₂вNèú«ƵB∞Nè¶×]6J.c
6xsG12N-N•Θ{©•₂вNèú«тR∞Nè¶×]6s».c

使用05AB1E编码在线尝试!


好答案!我喜欢使用ÿwith .V,非常原始!和有趣的您如何使用12¤,以同时获得122在堆栈中。我可能会刚用过12Y,但是我想那是无关紧要的,因为两者都有12和2的筹码。如果我在05AB1E中尝试过此挑战,那么字节数将以更高的方式结束。.猜猜我还有很多东西要学。;)
Kevin Cruijssen

@KevinCruijssen哦,是的,我忘了Y。那将是一个更容易的选择哈哈哈。
阿德南(Adnan)'18

我不知道是否将6个字节内的6个字节固定了:6xsŸ5L•δ;Ì’•2ôúð.ø‚ζJ012∞S¶×‚ζJ.c但是欢迎您在这里使用任何东西。
魔术章鱼缸

1
@MagicOctopusUrn邮编很好,我没想到。
阿德南

1
@adnan道具6xŠ»也是,我永远也不会想到这一点。
魔术章鱼缸

10

6502机器代码(C64),82 76 73字节

00 C0 A2 0E BD 38 C0 29 03 A8 A9 0D 20 25 C0 BD 38 C0 4A 4A A8 A9 20 20 25 C0
BD 29 C0 20 D2 FF CA 10 E1 60 20 D2 FF 88 10 FA 60 36 35 37 34 38 33 39 32 30
31 31 31 31 32 31 31 2C 1A 4C 0B 5C 03 4C 00 06 2C 00 15 00 2C
  • -6个字节,感谢Arnauld的聪明主意:)
  • 在Arnauld的想法之后的另一个-3个字节不1专门处理前导数字

这里的想法是只按需要的顺序存储所有数字的数字。所需的其他信息是要添加的换行符的数量和前面的空格的数量。

换行的最大数量为3,因此我们需要2位,而空格的最大数量为23,因此5位就足够了。因此,对于要打印的每个数字,我们可以将这些信息压缩到单个“控制字节”中。

因此,此解决方案的数据正好占用30个字节:15个数字和15个关联的“控制字节”。

在线演示

用法:SYS49152开始。

已评论拆解

         00 C0                          ; load address
.C:c000  A2 0E       LDX #$0E           ; table index, start from back (14)
.C:c002   .mainloop:
.C:c002  BD 38 C0    LDA .control,X     ; load control byte
.C:c005  29 03       AND #$03           ; lowest 3 bits are number of newlines
.C:c007  A8          TAY                ; to Y register for counting
.C:c008  A9 0D       LDA #$0D           ; load newline character
.C:c00a  20 25 C0    JSR .output        ; repeated output subroutine
.C:c00d  BD 38 C0    LDA .control,X     ; load control byte
.C:c010  4A          LSR A              ; and shift by two positions for ...
.C:c011  4A          LSR A              ; ... number of spaces
.C:c012  A8          TAY                ; to Y register for counting
.C:c013  A9 20       LDA #$20           ; load space character
.C:c015  20 25 C0    JSR .output        ; repeated output subroutine
.C:c018  BD 29 C0    LDA .digits,X      ; load current digit
.C:c01b  20 D2 FF    JSR $FFD2          ; output
.C:c01e  CA          DEX                ; decrement table index
.C:c01f  10 E1       BPL .mainloop      ; still positive -> repeat
.C:c021  60          RTS                ; and done.
.C:c022   .outputloop:
.C:c022  20 D2 FF    JSR $FFD2          ; output a character
.C:c025   .output:
.C:c025  88          DEY                ; decrement counting register
.C:c026  10 FA       BPL .outputloop    ; still positive -> branch to output
.C:c028  60          RTS                ; leave subroutine
.C:c029   .digits:
.C:c029  36 35 37 34 .BYTE "6574"
.C:c02d  38 33 39 32 .BYTE "8392"
.C:c031  30 31 31 31 .BYTE "0111"
.C:c035  31 32 31    .BYTE "121"
.C:c038   .control:
.C:c038  31 2C 1A 4C .BYTE $31,$2C,$1A,$4C
.C:c03c  0B 5C 03 4C .BYTE $0B,$5C,$03,$4C
.C:c040  00 06 2C 00 .BYTE $00,$06,$2C,$00
.C:c044  15 00 2C    .BYTE $15,$00,$2C

2
您可以通过使用子程序来JSR $FFD2 / DEY / BNE loop / LDA .control,X / RTS为换行符和空格调用节省2个字节吗?我认为这将是+10字节长,并在主代码中保存-12个字节。
Arnauld

1
实际上,我认为如果子例程正在执行JSR $FFD2 / DEY / BPL loop / LDA .control,X / RTS并且入口点是,则可以节省更多字节DEY。这样,您不必0在主代码中进行测试。
Arnauld

感谢好主意,稍后会进行编辑。但是后者不起作用,我需要一个跳过整个循环的情况。
菲利克斯·帕尔曼

1
如果Y = 0,DEY / BPL / RTS将立即退出而不处理任何JSR $FFD2。(请注意,使用该方案,子例程的入口点必须为DEY。)
Arnauld

1
@Arnauld经过一番试验之后,我认为使用您存储所有数字的建议时保留子例程最短:)
Felix Palmen

6

Perl 6的76 74个字节

$_="K12
E11K1

A10S2


9W3


B8S4

F7K5
L6";say S:g/<:Lu>/{" "x$/.ord-64}/

在线尝试!

直到我能提出更简短的内容之前,阿尔纳德港的答案。


6

R75 68字节

write("[<-"(rep("",312),utf8ToInt('*`®÷ĥĹĚä—M'),1:12),1,25)

在线尝试!

压缩数字位置。在花费大量时间试图得出三角答案之后进行了此操作(请参阅编辑历史记录)。

受到其他R答案的启发,请购买J.Doe!

多亏了J.Doe,节省了7个字节。


68个字节 -更改了哈希值以避免算术运算,并更改了write调用以使用默认分隔符。
J.Doe '18

1
@ J.Doe这样更有意义。当然,没有证明我的高尔夫,我不知道为什么我会首先进行复杂的哈希处理……
JayCe

5

HTML + JavaScript(画布),13 + 161 = 174字节

任意画布定位使用6个字节。

with(C.getContext`2d`)with(Math)for(font='9px monospace',textAlign='end',f=x=>round(sin(x*PI/6)*6)*measureText(0).width*2,x=13;--x;)fillText(x,f(x)+80,f(9-x)+80)
<canvas id=C>

使用网格进行比较:

with(C.getContext`2d`)with(Math){
    for(font='9px monospace',textAlign='end',f=x=>round(sin(x*PI/6)*6)*measureText(0).width*2,x=13;--x;)fillText(x,f(x)+80,f(9-x)+80)
    for(globalAlpha=0.2,y=-6;y<=6;y++)fillText('.'.repeat(25),6*measureText('.').width*2+80,y*measureText(0).width*2+80)
}
<canvas id=C>


定位公式的说明

请参阅我的SVG的JavaScript答案


8
我不认为这很重要,因为既然这是ASCII技术,我们应该在挑战中生成确切的字节流,同时渲染看起来像输出的图像。
Downgoat

5

爪哇8 11,141个 138字节

v->{for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())System.out.print(x<59?" ".repeat(x-48):(char)(x>76?10:x-17));}

在线尝试(注意:String.repeat(int)仿真repeat(String,int)相同的字节数,因为Java 11尚未在TIO上。)

解释类似于以下内容,但它使用" ".repeat(x-48)空格代替格式"%"+(x-48)+"s"


Java 8,141字节

v->{for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())System.out.printf("%"+(x>58?"c":x-48+"s"),x>76?10:x>58?x-17:"");}

在线尝试。

说明:

v->{                        // Method with empty unused parameter and no return-type
  for(var x:"92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G".getBytes())
                            //  Loop over the bytes of the above String:
    System.out.printf("%"+  //   Print with format:
     (x>58?                 //    If the character is a letter / not a digit:
       "c"                  //     Use "%c" as format
      :                     //    Else:
       x-48+"s"),           //     Use "%#s" as format, where '#' is the value of the digit
     x>76?                  //    If the byte is 'N':
      10                    //     Use 10 as value (newline)
     :x>58?                 //    Else-if the byte is not a digit:
      x-17                  //     Use 48-58 as value (the 0-9 numbers of the clock)
     :                      //    Else:
      "");}                 //     Use nothing, because the "%#s" already takes care of the spaces

进一步说明92BCN5BB92BNN1BA991CNNNJ995DNNN2I991ENN6H92FN93G

  • 所有数字将替换为该数量的空格。(因此,为11个空格92。)
  • 所有“ N”都是换行符
  • 所有['A','J']都是时钟数字([0,9])

5

R,168个 159 125字节

将数字写在文本矩阵中指定点的幼稚解决方案。点以UTF-8字母存储,通过utf8ToInt

"!"=utf8ToInt
write("[<-"(matrix(" ",25,13),cbind(!"LMFGSBCWAYCWGSM",!"AABBBDDDGGJJLLM")-64,-64+!"ABAAAA@BICHDGEF"),1,25,,"")

在JayCe的建议下,丢弃了9个字节,以使用它write并避免定义矩阵。

根据JayCe的存储建议,又删除了34个字节。


您好,欢迎来到PPCG!我认为这些点应该有助于可视化图案,但不是输出的一部分。
乔纳森·弗雷希

欢迎来到PPCG!您可以确定一些未定义m和使用的字节writeTIO。PS:您没有义务在答案中包含TIO链接,但可以为您很好地设置答案的格式,请参见TIO页面顶部的链接图标。
JayCe '18年

您可以将点存储在字符串中,并使!运算符重载为125个字符。真的很好的解决方案!
JayCe

5

Haskell,88 87字节

f=<<"k12{e11k1{{a10s2{{{9w3{{{b8s4{{f7k5{l6"
f c|c>'z'="\n"|c>'9'=' '<$['a'..c]|1<2=[c]

Haskell中的encode-spaces-as-letters方法(首先在@Arnauld的答案中看到)。使用{并将其扩展到\n\n直接使用短一个字节。

在线尝试!



5

brainfuck240个 235字节

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

在线尝试!

注释代码

++++++++++                              Put 10 in cell 0
[>++>+>+++>+++++>++>++[<]>-]            Loop 10 times incrementing to leave 0 20 10 30 50 20 20 in memory 
>>>++                                   30 plus 2 = 32 (ascii space)
...........>-.+.                        print 11spaces followed by 12 (ascii 49 50)
<<.>.....>-..<...........>.             print 1newline 5spaces 11 11spaces 1 
<<..>.>.-.>-[<<.>>-]<++.                print 2newlines 1space 10 19spaces 2
<<...>>+++++++.>>+++[<<<.>>>-]<<------. print 3newlines         9 23spaces 3
<<...>..>+++++.<<<-[>>.<<-]>>>----.     print 3newlines 2spaces 8 19spaces 4
<<..>......>+++.<...........>--.        print 2newlines 6spaces 7 11spaces 5
<<.>............>+.                     print 1newline  12spaces 6

一个罕见的示例,其中的文本具有足够的重复性,以至于Brainfuck程序小于输出长度的两倍 1.6倍!

根据Jo King的建议保存了2个字节:>>>>>>-->[<]>-

通过将第三个20位递减计数器从ASCII码的最右边10 30 50移到它们的左边,可以节省3个字节。<<>>填补两者之间的空白时保存84但向该行添加1个字节>>>++

原始版本

++++++++++                              Put 10 in cell 0
[>+>+++>+++++>++>++>++<<<<<<-]          Loop 10 times incrementing to leave 0 10 30 50 20 20 20 in memory 
>>++                                    30 plus 2 = 32 (ascii space)
...........>-.+.                        print 11spaces followed by 12 (ascii 49 50)
<<.>.....>-..<...........>.             print 1newline 5spaces 11 11spaces 1 
<<..>.>.-.>-[<<.>>-]<++.                print 2newlines 1space 10 19spaces 2
<<...>>+++++++.>>+++[<<<.>>>-]<<------. print 3newlines         9 23spaces 3
<<...>..>+++++.>>>-[<<<<.>>>>-]<<<----. print 3newlines 2spaces 8 19spaces 4
<<..>......>+++.<...........>--.        print 2newlines 6spaces 7 11spaces 5
<<.>............>+.                     print 1newline  12spaces 6

4

Python 2,97字节

for i in range(7):w=abs(3-i);print'%*d'%(1-~w*w,12-i),'%*d'%(24-3**w-2*w,i)*(w<3),'\n'*min(i,5-i)

在线尝试!

计算循环中的所有间距和换行符


4

果冻,32 字节

⁶ẋ“¿×¿ Œ4ç4Œ!¿Ø‘ż“øn0œ’Œ?D¤Fs25Y

打印结果的完整程序。

在线尝试!

怎么样?

“¿×¿ Œ4ç4Œ!¿Ø‘对于这部分,我还没有想到/发现比我认为更长的任何东西-弹跳/基本解压缩/增量,似乎没有任何节省!)

⁶ẋ“¿×¿ Œ4ç4Œ!¿Ø‘ż“øn0œ’Œ?D¤Fs25Y - Main Link: no arguments
⁶                                - space character
  “¿×¿ Œ4ç4Œ!¿Ø‘                 - code-page indices list = [11,17,11,32,19,52,23,52,19,33,11,18]
 ẋ                               - repeat (vectorises) -> [' '*11, ' '*17, ...]
                          ¤      - nilad followed by link(s) as a nilad:
                 “øn0œ’          -   base 250 number = 475699781
                       Œ?        -   first natural number permutation which would be at
                                 -   index 475699781 if all permutations of those same
                                 -   natural numbers were sorted lexicographically
                                 -   = [12,11,1,10,2,9,3,8,4,7,5,6]
                         D       -   to decimal lists = [[1,2],[1,1],[1],[1,0],[2],[9],[3],[8],[4],[7],[5],[6]]
                ż                - zip together = [[' '*11, [1,2]], [' '*17, [1,1]], ...]
                           F     - flatten = [' ',' ',...,1,2,' ',' ',...,1,1,...]
                            s25  - split into chunks of 25 (trailing chunk is shorter)
                               Y - join with new line characters
                                 - implicit print

大声笑我实际上很惊讶这是幼稚的方法。
暴民埃里克(Erik the Outgolfer)'18年

4

C(GCC) 145个 137 125字节

只有制表符位置是硬编码的:所有行距和时钟值都在循环中生成。

再次感谢ceilingcat的建议。

i,j,k;f(char*t){for(i=7;i--;t=memset(t+sprintf(t,"%*d%*d"+3*!j,"NHDA"[j]-65,6+i,"AMUY"[j]-65,6-i),10,k=j+i/4)+k)j=i>3?6-i:i;}

在线尝试!


建议"\r\7\3"[j]而不是"NHDA"[j]-65
ceilingcat

3

PHP,97字节

<?=gzinflate(base64_decode(U1CAA0MjLghtqIAkyMWlYGiggAmMuLi4LBWwA2OgnIKCBRYZEy6IHQrmSIKmXMhKzAA));

在线尝试!

这是一个硬编码的压缩字符串。我找不到比这更短的解决方案!


您可以将二进制压缩字符串放入源文件中,并跳过base64_decode吗?我尝试了此操作,但出现了“ gzinflate():数据错误”,但是如果源文件是用十六进制编辑器而不是文本编辑器编写的,则可能会出现这种情况。
bdsl

@bdsl实际上是我之前做过的,您不需要HEX编辑器,您可以只使用PHP本身file_put_contents($path, '<?=gzinflate("'.gzdeflate($clockString,9).'");');,但是我不确定如何在其中发布带有二进制数据的代码。像这样的文件是70个字节。
夜间2

3

派克(Pyke),37个字节

3B 32 35 75 07 0d 13 0c 22 14 35 18 44 74 5F 74 2B 46 6F 68 32 C4 52 7D 74 2A 31 32 25 31 32 7C 60 52 2D 29 73

在这里尝试!(原始字节)

;25Dt_t+Foh2.DR}t*12%12|`R-)s

在这里尝试!(人类可读)

                              - o = 0
;25                           - set line width to 25 characters
                              -      `[13, 19, 12, 34, 20, 53, 24]`
                              -       (In hex version, encoded in base 256, regular version in input field)
    t_t                       -     reversed(^[1:])[1:]
   D   +                      -    ^^ + ^
        Foh2.DR}t*12%12|`R-)  -   for i in ^:
         o                    -            o++
          h                   -           ^+1
           2.DR               -          divmod(^, 2)
               }t             -         (remainder*2)-1
                 *            -        quotient * ^
                  12%         -       ^ % 12
                     12|      -      ^ or 12 (12 if 0 else ^)
                        `     -     str(^)
                         R-   -    ^.rpad(i) (prepend spaces such that length i)
                            s -  sum(^)
                              - output ^ (with newlines added)

3

brainfuck315个 313字节

由于ovs节省了2个字节!

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

在线尝试!

全部在一个代码块中:

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

一开始您可以使用++++[>++++<-]>16。
ovs,

@ovs啊,当然,谢谢!
科纳·奥布莱恩

大声笑,你已经><在您的代码中
Jo King

3

Powershell,94 88 82字节

直接Powershell格式运算符{i,w}表示索引为的参数i的占位符,占位符的宽度w右对齐。

"{11,13}
{10,7}{0,12}

 10{1,20}


9{2,24}


  8{3,20}

{6,7}{4,12}
{5,13}"-f1..12

Powershell,88字节

Arnauld的 Javascript答案端口

-6个字节,感谢@AdmBorkBork

[RegEx]::Replace("K12
E11K1

A10S2


9W3


B8S4

F7K5
L6",'[A-Z]',{' '*("$args"[0]-64)})

为了更好地查看网格,请使用'.'代替' '


1
为什么不使用字符串乘法而不是.PadLeft88字节- 在线尝试!
AdmBorkBork '18年

这是的巧妙用法-f。您为什么不包含“ 在线试用”的链接这样其他人就能看到您的代码如何工作?
AdmBorkBork

我只有错误This site can’t be reached。抱歉。
mazzy

啊,真可惜。这是很好的资源。:-(
AdmBorkBork,

我同意。谢谢。
mazzy

3

C(GCC) 125个 109 105字节

x,*d=L"<;1:2938475640P`P05";main(i){for(;i=d[12];printf("%*d",i/4,*d++-48))for(x=i&3;x--;)puts("");}
  • 多亏了Jonathan Frech,我们获得了-16个字节(-3表示更好的循环安排,-13表示直接包含不可打印的字符)。
  • -4字节,通过替换一个班次进行移位并滥用一个事实,即在许多系统上(例如托管TIO的那个系统),sizeof(wchar_t) == sizeof(int)-在Windows上不起作用:)感谢ErikF的想法。

在线尝试!

这是从我的总体思路的端口6502溶液至C.这有点修改:代替具有用于龙头的标志的1,字符通过减去48,所以10印刷为十进制- 12被编码为:<



@JonathanFrech不错的循环重排,我想知道我怎么会错过那个:o但真的没想到gcc会接受源代码中不可打印的字符:)
Felix Palmen

只要字符可以用UTF-8表示,编译器在技术上就可以接受。这是否是件好事,取决于您在做什么:-)
ErikF,

说到Unicode,您可以使用宽字符再保存3个字节:在线尝试!
ErikF

1
这就是为什么我喜欢打高尔夫球的原因:我开始滥用UB,并使用随着时间的流逝而产生的所有“不该做的事”!
ErikF

2

附件,69字节

{ReplaceF["l12
f11l1

b10t2


9x3


c8t4

g7l5
m6",/"\\l",sp&`*@STN]}

在线尝试!

这个编码的空格作为每次运行:NTS[count of spaces]; NTS是内置的“数字到短”,它允许数字表示为字符串。例如NTS[95] = $R1NTS[170297] = $XQOSTN是此内置函数的逆函数。

这个答案用函数的结果替换(ReplaceF)输入中所有出现的字母(/\l/),该函数sp&`*@STN首先对字母进行解码,然后重复sp(空格)多次。


2

斯威夫特178165字节

var b="";for c in"L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6"{let i=c.unicodeScalars.first!.value;if c=="n"{b+="\n"}else if i>64{for _ in 0..<(i-65){b+=" "}}else{b+="(c)"}};print(b)

根据Downgoat发布的内容,我将其减少到165个字节:

print("L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6".unicodeScalars.map{let x=Int($0.value);return x==110 ?"\n":(x>64 ?String(repeating:" ",count:x-65):"($0)")}.joined())

扩展出来,$0转换为命名变量:

print("L12nF11L1nnB10T2nnn9X3nnnC8T4nnG7L5nM6".unicodeScalars.map { c in let x = Int(c.value) return x == 110 ? "\n" : (x>64 ? String(repeating:" ", count: x-65) : "(c)") }.joined())

输入字符串的编码如下:大写字母(A-Z)代表空格的块,偏移量为65。因此,将A0表示空格,B1 L表示空格,前11表示空格,等等n。s被转换为换行符。所有其他字符均按原样打印。

在此处在线运行(感谢mbomb007)


欢迎来到PPCG!我们中的许多人都使用在线尝试翻译(TIO)进行在线口译,以便在我们的答案中包含指向该程序的超链接。这是您的答案之一:tio.run
##JY1BC4IwGIb

这是您的答案,这是172个字节。它使用一个函数代替:{"L12NF11L1NNB10T2NNN9X3NNNC8T4NNG7L5NM6".unicodeScalars.map({(c)->String in let x=c.value;return x==78 ? "\n" : x>64 ?String(repeating:" ",count:x-65) : "\(c)"}).joined()}(swift 3(-swift-version 3在repl上,因为swift 4删除了减法,看起来像))
Downgoat

@Downgoat我又将其减少了3个字节,并使其与Swift 4兼容。请参阅更新的帖子。
以西结·埃林

2

纯粹的打击,123

printf 在这里进行繁重的工作:

n=" 0 a 0 a"
printf -vo %*s%*s\\n 0 a 13 12 7 11 12 1 $n 3 10 20 2$n$n 1 9 24 3$n$n 3 8 20 4$n 7 7 12 5 13 6
echo "${o//a}"

在线尝试!



1

带有SVG的JavaScript,188字节

120%的任意行高使用4个字节。

with(Math)for(s='<pre><svg viewBox=-8-8+16+16 style=font-size:1;text-anchor:end>',f=x=>round(sin(x*PI/6)*6),x=13;--x;)s+=`<text x=${f(x)*2}ch y=${f(9-x)*1.2}>${x}</text>`
document.write(s)

使用网格进行比较:

with(Math)for(s='<pre><svg viewBox=-8-8+16+16 style=font-size:1;text-anchor:end>',f=x=>round(sin(x*PI/6)*6),x=13;--x;)s+=`<text x=${f(x)*2}ch y=${f(9-x)*1.2}>${x}</text>`
for(y=-6;y<=6;y++)s+=`<text x=12ch y=${y*1.2} style=fill:#0002>${'.'.repeat(25)}</text>`
document.write(s)


定位公式的说明

f(x) = round(sin(x * π/6) * 6)

假设原点为时钟的中心,则任何给定时钟号的最右边数字的网格坐标x为[ f(x) * 2f(9 - x)]。


1

Bash,225个字节

s=(12 0 6 11 0 0 2 19 0 0 0 0 1 23 0 0 0 0 3 19 0 0 7 11 13 0)
n=(12 11 1 10 2 9 3 8 4 7 5 6) j=0;for i in {0..25};{
[ ${s[i]} = 0 ]||{ printf %${s[i]}s " ";echo -n ${n[j]}
j=$((j+1));};[ $((i%2)) -gt 0 ]&&echo;}|sed 's/ //'

令人讨厌的是,这比仅以循环方式打印每一行的天真解决方案要长(如果使用制表符,则为132个字符)。


tr -d \<space>(其中<space>是空格字符)的工作,而不是sed的替换吗?
Kritixi Lithos

@Cowsquack可悲的是,不tr -d\ 等于sed 's/ //g'
crystalgecko


1

C(GCC) 135个 123 110字节

这使用一种简单的编码,其中和c之间的任何一个代表重复的空格,代表一个换行符,所有其他字符均保持不变。'a''z'c-'a'+1'`'

f(i){char*s="k12`e11k1``a10s2```9w3```b8s4``f7k5`l6`";for(;i=*s;s++)i>96?printf("%*s",i-96,""):putchar(i%86);}

在线尝试!


建议*s=L"...";f(i){不要使用f(i){char*s="...";
ceilingcat '18 / 08/30

1

T-SQL,132个字节

PRINT SPACE(11)+'12
     11           1

 10'+SPACE(20)+'2


9'+SPACE(23)+'3


  8'+SPACE(19)+'4

      7           5
            6'

仅比简单的解决方案(PRINT按原样整个字符串)短12个字节。

找到了一个我喜欢的变体,它更长(235 226个字节),但是却更像SQL:

SELECT CONCAT(SPACE(PARSENAME(value,4)),PARSENAME(value,3),
              SPACE(PARSENAME(value,2)),PARSENAME(value,1))
FROM STRING_SPLIT('11.1..2,5.11.11.1,. .. ,1.10.20.2,. .. ,. .. ,.9.23.3,
                   . .. ,. .. ,2.8.19.4,. .. ,6.7.11.5,12.6.. ',',')

STRING_SPLIT在逗号处将其分成几行,并PARSENAME在点处将每一行拆分。第一个和第三个用于打印多少空间,第二和第四个用于显示什么内容。

(这一行中的换行符只是为了便于阅读)


1

Perl 6,116个字节

my@a=["  "xx 13]xx 13;($_=pi/6*++$;@a[0+|6*(1.1-.cos);0+|6*(1.1+.sin)]=fmt ++$: "%2s")xx 12;@a>>.join>>.&{say S/.//}

在线尝试!

(Ta @JoKing可节省26个字节)

Perl 6、142字节

my@a=[[[32,32]xx 13]xx 13];for 1..12 {$_=$^b*pi/6;@a[round 6*(1-.cos);round 6*(1+.sin)]=[" $b".ords.tail(2)]}
{say S/^.//}(.[*;*].chrs) for @a

在线尝试!

我想做点不同的事情。因此,该函数通过成对的字符计算所有数字的位置,去除起始空间并打印行。

可以轻松修改不同的参数,例如45个字符的17位数字



@JoKing:Ta,我已经将其粘贴到Wiki中了。
Phil H
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.