N時間のアスタリスクアナログ時計を描画します


22

チャレンジ:

HOURを表す入力N(0から24までの数字)を受け取る関数またはプログラムを作成します。

出力は、時間Nを示すアスタリスクからアナログ時計を描画する必要があります。

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


ノート:

•分針は時間針よりも長くする必要があります(使用するアスタリスクの数に関して)

•分針には少なくとも2つのアスタリスクが必要です。

•正午、午後3時、午後6時、午後9時は常に直交します。中間時間の出力は、度単位で並べると、その日の時間と同じ順序になります。つまり、正午の時針は0ºであり、午後3時の時針は90ºです。したがって、午後1時と午後2時の出力の場合、次の条件を満たしている必要があります 0pm_deg < 1pm_deg < 2pm_deg < 3pm_deg。このルールとは別に、実際の学位額はあなたが決めるものであれば何でもかまいませんが、明らかにフォントやその他のネイティブ要因によって変わります。

•時針と分針の間の接続ジョイントは、あらゆる種類の円形/楕円形のユニコード文字です。 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ハンドにループバックしようとしていました
アルバートレンショー

6
@LliwTelracsいつの日か確かに彼らのように感じる!

1
先頭または末尾の空白/改行は受け入れられますか?パディングはどうですか?
タイタス

回答:


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の答えはあなたのオリジナルに少し似ています。正直に言って、答えを見る前に投稿しました。ヘックスでも同じ考えがあったと思います。
エルペドロ

2
そして、どういうわけか「時針は少なくとも2でなければなりません...」と読んでいるので、正しく読んで手を短くするために+1します。
エルペドロ

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

本当にいい答えです。
エルペドロ

これと交換することで、入力タグから4バイトを削ることができます<body onload=f(prompt())>
アルバートレンショー

1
また、直接oninput属性で関数のコードを埋め込むことができます:<input oninput=h.style.transform=`rotate(${this.value*30}deg)`>
nderscore


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; 神聖な再帰!コンマahhaをマクロ化することにより、コードゴルフチャレンジでバイトを節約できることをおもしろいと思います
アルバートレンショー

再帰はありませんが、私もそれを期待していませんでした。これは、少し難読化されていますが、ハードコードされた回答です。
アヘモネ

コンマの前にスペースは必要ないと思います
ceilingcat

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”事前に連結し、それらのアスタリスクの1つを上書きします。

回転に関して-これは、「アスタリスク配置の前または後のいずれかで」中央に「** 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

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

Logicode 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)

これをゴルフすることをあきらめました。しかし、時計を恐ろしく見えるようにする代わりに、短くすることができます。

オンラインで試す

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.