绘制一个星号模拟时钟N小时


22

挑战:

创建一个函数或程序,该函数或程序将接受代表小时的输入N(0到24之间的数字)。

输出应从显示小时N的星号中提取一个模拟时钟。

🕛🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛


笔记:

•分针必须比时针长(就使用的星号而言)

•分针必须至少有两个星号。

•正午,3pm,6pm和9pm将始终正交。按度数排列时,中间小时的输出应与一天中的小时顺序相同。我的意思是中午时针为0º,在下午3点时针为90º,因此对于您的1pm和2pm输出情况,必须满足以下条件: 0pm_deg < 1pm_deg < 2pm_deg < 3pm_deg。除此规则外,实际的度数可以是您决定的任何值,显然它将根据字体和其他本地因素而变化。

•时针和分针之间的连接点是任何一种圆形/椭圆形的Unicode字符。 o, O, •, 0, etc.


输入/输出示例(可能会因工程图样式而异)

 N = 3;

 *
 *
 *
 O  *  *

 N = 4;

 *
 *
 *
 O
    *
       *

 N = 5;

 *
 *
 *
 0
  *
   *

 N = 6;

 *
 *
 o
 *

 N = 7;

      *
      *
      *
      •
    *
  *

 N = 0,12,24;

 *
 *
 *
 o

区分输出的示例:

 N = 4     VS     N = 5     VS     N = 6

  *                *                *
  *                *                *
  O                O                O
      *              *              *

这是,因此字节数最短的程序将获胜!


8
除非您每天有25个小时,否则小时通常是0-23或1-12,而不是0-24
fəˈnɛtɪk

1
分针必须比时针更长,但是它们是否需要保持其大小?例如,分针的3尺寸可以和分针的尺寸不同7吗?
AdmBorkBork

@LliwTelracs却23:0011:00。在我看来,我正试图再次回到12局
Albert Renshaw

6
@LliwTelracs有些日子一定感觉像他们一样!

1
是否接受前导或尾随的空白/换行符?填充呢?
泰特斯

Answers:


18

Javascript(ES6),105 76 65字节

F=N=>`  *
ab*12
 9@3
87654`.replace(/\w/g,y=>'0x'+y^N%12?' ':'*')
<!-- Snippet Demo: -->
N =  <input type="number" min="0" max="24" value="2" id="I" />
<button onclick="console.log(F(I.value))">Run</button>

  • -29字节:

    • 将分针和时针的大小分别减小到2和1星号。较小的时钟=较少的字节:-P
  • -11个字节:

    • 将字符串比较更改为数字比较。
    • y==(N%12).toString(16)?'*':' ' -> '0x'+y^N%12?' ':'*'

较长的原稿:(105 94字节)

F=N=>`    *
a b * 1 2
  ab*12
  99@33
  87654
8 7 6 5 4`.replace(/\w/g,y=>'0x'+y^N%12?' ':'*')
<!-- Snippet Demo: -->
N =  <input type="number" min="0" max="24" value="2" id="I" />
<button onclick="console.log(F(I.value))">Run</button>


1
真的很聪明!
AdmBorkBork

1
哦,我非常喜欢这个!
艾伯特·伦肖

哎呀。我的Python回答看起来有点像您的原始回答。老实说,我在看到您的答案之前就发布了。猜猜我们对十六进制也有相同的想法。
ElPedro

2
我以某种方式将其读为“时针必须至少为2 ...”,因此+1可以正确阅读并缩短时针。
ElPedro

1
@ElPedro那也是我以为我最初也阅读的内容:)
nderscore

14

CSS / HTML(JavaScript的),62 + 106 = 180个 168字节

pre{position:absolute;left:99px;bottom:99px;transform-origin:50% 80%}
<input oninput=h.style.transform=`rotate(${this.value*30}deg)`><pre>*
*
o</pre><pre id=h>*

</pre>

编辑:由于@nderscore,节省了9个字节。


很棒的主意!
nderscore '02

真是个好答案。
ElPedro '17

您可以将输入标签与此交换掉,从而将输入标签减少4个字节<body onload=f(prompt())>
Albert Renshaw

1
您也可以将函数代码直接嵌入oninput属性中:<input oninput=h.style.transform=`rotate(${this.value*30}deg)`>
nderscore

9

Python 2中148个 140 135字节

-8删除一些剩余的空格和不需要的换行符。

-5通过更改(' ','*')' *'

a=input()
b='''    *
a b * 1 2
  ab*12
9 9 o 3 3
  87654
8 7 6 5 4'''
for x in range(1,12):b=b.replace(hex(x)[2],' *'[x==a%12])
print b

在线尝试!


5

C(gcc),144字节

#define v ,t
h;t(i){putchar(i>12?i-9:h^i?32:42);}n(i){h=i%12;puts("  *")v(10)v(11)v(h)v(1)v(2)v(19)v(12)v(9)v(57)v(3)v(19)v(8)v(7)v(6)v(5)v(4);}

在线尝试!


+1; 神圣的递归!我觉得很有趣,您可以通过在逗号分隔的宏中保存字节来应对代码高尔夫球挑战
Albert Renshaw

我也没想到它,尽管看不到递归。这是一个硬编码的答案,尽管有些模糊。
Ahemone

我认为您不需要在逗号前

4

SmileBASIC,90 88 74字节

INPUT H?("  *"+" "*47)*2;"  o
R=H/1.9LOCATE 2.5+SIN(R)*2,3.5-COS(R)*2?"*

输出示例:

? 5
  *
  *
  o

   *

? 3
  *
  *
  o *


3

果冻35 34 33 字节

ị“ tI©’Œ?Ḋ¤µ⁶ẋ13”*⁸¦Ṗ;“**o”ṙ7s5ZY

在线尝试!tI©!)或查看全部(0-24)

怎么样?

ị“ tI©’Œ?Ḋ¤µ⁶ẋ13”*⁸¦Ṗ;“**o”ṙ7s5ZY - Main link: h
          ¤                       - nilad followed by link(s) as a nilad:
 “ tI©’                           -     base 250 number: 522956007
       Œ?                         - shortest permutation of [1,N] that would be at
                                     that index in a lexicographically sorted
                                     list: [2,3,4,5,6,7,1,12,11,10,9,8,13]
         Ḋ                        - dequeue: [3,4,5,6,7,1,12,11,10,9,8,13]
ị                                 - index into (1-based and modular, so h=2 picks 4,
                                     as does h=14 [as do h=26, h=-10, etc.])
           µ                      - monadic chain separation (call the result j)
            ⁶                     - space character
             ẋ13                  - repeat 13 times
                   ¦              - apply to index...
                  ⁸               - ...left argument (j)
                ”*                -     an asterisk character (replacemes the space
                                         at index j with an asterisk)
                    Ṗ             - pop the last character off the list †
                     ;“**o”       - concatenate "**o"
                           ṙ7     - rotate left by 7 ‡
                             s5   - split into chunks of length 5 (columns)
                               Z  - transpose (get the rows of the clock)
                                Y - join with line feeds
                                  - implicit print

请注意,“ tI©’Œ?Ḋ(索引处的置换,出队)是一个字节保存“9ȧỤ_ÑḶ’b⁴(以16为底),它是一个字节保存在“¦þxṙ<ȥ’ḃ13(以双数为底的13)。

关于流行音乐-字符串中有一个多余的空格,这是0、12、24的星号所在的位置,以允许对索引列表进行mod-12索引,将最后一个字符弹出,则比字节便宜“**o”事先进行串联并覆盖其中的一个星号。

关于旋转-这是一个字节,比构造中间带有“ ** o”的字符串(在星号放置之前或之后)节省了一个字节。


3

Haskell,148个字节

c n=mapM_ putStrLn$(t(n-3)!(t n!(\_->'*')))(map(\x->(2!(\_->x))"     ")"**O  ")
n!f=(\(x,a:y)->x++f a:y).splitAt n
t n=2+truncate(2.5*sin(n*pi/6))

函数c是解决给定任务的函数


2

Bash + Unix实用程序,57字节

tr `dc -e12o$1O%p` \*<<<'B*1
A*2
9O3
864
7 5'|tr 1-9AB \ 

(最后一个反斜杠后还有一个空格。)

在线尝试!

这不是一个非常漂亮的时钟,但它可以满足所有要求。


2

PHP,71字节

1个星号时针,2个星号分钟针。

$s="  *
  *  
  O  
";$s[ord(BGHNTSRQPJDE[$argv[1]%12])&31]="*";echo$s;

从命令行参数获取输入;与运行-nr

  1. 定义模板
  2. 将小时映射到位置(从字母解码)并将位置的字符设置为星号
  3. 打印

1

05AB1E,41个字节

对于TIO来说太慢了。

14Ýœ•2!&ô÷‰•èv… *@y_2L11+¹12%0‚ìyå+èJ}3ô»

对于在TIO上工作的类似代码,请尝试以下操作

可以肯定的是,这仍然可以同时进行。
解释稍后。


1

逻辑码 634字节

无法弄清楚如何输入,因此tio链接顶部的输入有一个var a = ...

circ v(a)->cond((a&1000)+0)&a->0/a
circ n(a)->cond a&10000->((a&100)+0)|!(a&100)&((a&011)|100)/a
circ y(a)->cond((a&100)+0)&a->a&10011/a
var s=@100000
var m=@101010
var x=y(n(v(a)))
var e=x&1000
var f=(x&100)+0
var t=(x&10)+00
var o=(x&1)+000
circ r(a,b)->cond(a)->b/@a
out s+s+s+s+m
out r(e&t&!o,m)+s+r(o&e&t,m)+s+m+s+r(o&!e&!f&!t,m)+s+r(t&!o&!f&!e,m)
out s+s+r(e&t&!o,m)+r(e&t&o,m)+m+r(o&!t&!f&!e,m)+r(t&!o&!f&!e,m)
out r(e&o&!t,m)+s+r(e&o&!t,m)+s+@110000+s+r(t&o&!f&!e,m)+s+r(t&o&!f&!e,m)
out s+s+r(e&!t&!o,m)+r((f&t&o),m)+r(f&t&!o,m)+r(f&!t&o,m)+r(f&!t&!o,m)
out r(e&!t&!o,m)+s+r(f&t&o,m)+s+r(f&t&!o,m)+s+r(f&o&!t,m)+s+r(f&!t&!o,m)

放弃了打高尔夫球。可以使时钟变短,但会使时钟看起来很恐怖。

在线尝试

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.