Vẽ một đồng hồ tương tự dấu hoa thị cho giờ N


22

Thử thách:

Tạo một hàm hoặc chương trình sẽ lấy N đầu vào (một số từ 0 - 24) đại diện cho GIỜ.

Đầu ra sẽ vẽ một đồng hồ analog ra khỏi các dấu sao hiển thị giờ N.

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


Ghi chú:

• Kim phút phải dài hơn kim giờ (tính theo số lượng dấu sao được sử dụng)

• Kim phút phải có ít nhất 2 dấu sao.

• Trưa, 3 giờ chiều, 6 giờ chiều và 9 giờ tối sẽ luôn trực giao. Đầu ra của bạn cho giờ trung gian, khi được sắp xếp theo độ, nên theo thứ tự như giờ trong ngày. Ý tôi là vào buổi trưa, kim giờ là 0º và vào lúc 3 giờ chiều thì kim giờ là 90º vì vậy đối với các trường hợp đầu ra của bạn là 1pm và 2pm thì điều sau phải đúng : 0pm_deg < 1pm_deg < 2pm_deg < 3pm_deg. Ngoài quy tắc này, mức độ thực tế có thể là bất cứ điều gì bạn quyết định, rõ ràng nó sẽ thay đổi tùy thuộc vào phông chữ và các yếu tố bản địa khác.

• Khớp nối giữa kim giờ và kim phút là một ký tự unicode hình tròn / hình bầu dục thuộc bất kỳ loại nào. o, O, •, 0, etc.


Ví dụ Nhập / Xuất (Có thể thay đổi tùy theo kiểu vẽ)

 N = 3;

 *
 *
 *
 O  *  *

 N = 4;

 *
 *
 *
 O
    *
       *

 N = 5;

 *
 *
 *
 0
  *
   *

 N = 6;

 *
 *
 o
 *

 N = 7;

      *
      *
      *
      •
    *
  *

 N = 0,12,24;

 *
 *
 *
 o

Ví dụ về đầu ra khác biệt:

 N = 4     VS     N = 5     VS     N = 6

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

Đây là , vì vậy chương trình có số lần thắng ngắn nhất!


8
Giờ thường là từ 0-23 hoặc 1-12 chứ không phải 0-24 trừ khi bạn có 25 giờ trong một ngày
fnɛtɪk

1
Kim phút phải dài hơn kim giờ, nhưng họ có cần duy trì kích thước của chúng không? Ví dụ, kim phút có thể có 3kích thước khác với kim phút 7không?
admBorkBork

@LliwTelracs nhưng 23:0011:00. Trong tâm trí tôi, tôi đang cố gắng quay trở lại bàn tay 12 lần nữa
Albert Renshaw

6
@LliwTelracs Một số ngày chắc chắn cảm thấy như họ làm!

1
Được khoảng trống hàng đầu hoặc dấu / dòng mới được chấp nhận? Còn đệm thì sao?
Tít

Câu trả lời:


18

Javascript (ES6), 105 76 65 byte

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 byte:

    • Giảm kích thước của kim phút và kim giờ xuống còn 2 và 1 dấu sao. Đồng hồ nhỏ hơn = ít byte hơn :-P
  • -11 byte:

    • Thay đổi chuỗi so sánh với so sánh số.
    • y==(N%12).toString(16)?'*':' ' -> '0x'+y^N%12?' ':'*'

Bản gốc với bàn tay dài hơn: ( 105 94 byte)

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
Điều đó thực sự thông minh!
admBorkBork

1
Oh wow tôi thích điều này rất nhiều!
Albert Renshaw

Rất tiếc. Câu trả lời Python của tôi trông hơi giống với bản gốc của bạn. Tôi đã đăng trước khi tôi thấy câu trả lời của bạn, một cách trung thực. Đoán chúng tôi đã có cùng một ý tưởng với hex.
ElPedro

2
và bằng cách nào đó tôi đã đọc nó là "Kim giờ phải có ít nhất 2 ..." vì vậy +1 để đọc đúng và rút ngắn tay.
ElPedro

1
@ElPedro đó là những gì tôi nghĩ ban đầu tôi cũng đọc :)
nderscore 16/2/2017

14

CSS / HTML (JavaScript), 62 + 106 = 180 168 byte

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>

Chỉnh sửa: Đã lưu 9 byte nhờ @nderscore.


Ý tưởng rất tuyệt!
nderscore

Câu trả lời thực sự tốt đẹp.
ElPedro

Bạn có thể loại bỏ 4 byte khỏi thẻ đầu vào của mình bằng cách hoán đổi nó bằng thẻ này<body onload=f(prompt())>
Albert Renshaw

1
Bạn cũng có thể nhúng trực tiếp mã chức năng vào thuộc tính oninput:<input oninput=h.style.transform=`rotate(${this.value*30}deg)`>
nderscore 16/2/2017

9

Python 2 , 148 140 135 byte

-8 bằng cách xóa một số khoảng trống còn sót lại và một dòng mới không cần thiết.

-5 bằng cách thay đổi (' ','*')thành' *'

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

Hãy thử trực tuyến!


5

C (gcc) , 144 byte

#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);}

Hãy thử trực tuyến!


+1; Thánh đệ quy! Tôi thấy thật vui khi bạn có thể tiết kiệm byte trong một thử thách chơi gôn bằng cách macro một dấu phẩy ahha
Albert Renshaw

Tôi cũng không mong đợi điều đó, mặc dù không có đệ quy trong tầm nhìn. Đây là một câu trả lời được mã hóa cứng, mặc dù hơi khó hiểu.
Ahemone

Tôi không nghĩ rằng bạn cần không gian trước dấu phẩy
trần

4

SmileBASIC, 90 88 74 byte

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

Ví dụ đầu ra:

? 5
  *
  *
  o

   *

? 3
  *
  *
  o *

3

Python 3 , 86 85 byte

-1 byte, mặt đồng hồ tốt hơn (tín dụng DuctrTape, như được sử dụng trong câu trả lời Jelly của tôi)

def f(h):print(*([c,' *'[h%12+64==ord(c)]][c>'@']for c in'''
K*A
J*B
I0C
HFD
G E'''))

Hãy thử trực tuyến!


3

Thạch , 35 34 33 byte

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

Hãy thử trực tuyến! (tI©!) hoặc xem tất cả (0 - 24) .

Làm sao?

ị“ 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

Lưu ý rằng “ tI©’Œ?Ḋ(hoán vị tại chỉ mục, dequeued) là một byte lưu trên “9ȧỤ_ÑḶ’b⁴(cơ sở 16 của), là một byte lưu trên “¦þxṙ<ȥ’ḃ13(cơ sở phỏng đoán 13 của).

Về pop - chúng tôi có thêm một khoảng trắng trong chuỗi, đó là nơi dấu hoa thị cho 0, 12, 24 sẽ cho phép lập chỉ mục mod-12 của danh sách các chỉ mục, bật ra ký tự cuối cùng có giá rẻ hơn byte thực hiện việc ghép nối “**o”trước và ghi đè một trong những dấu sao đó.

Về xoay vòng - đây là một byte tiết kiệm khi xây dựng một chuỗi với `'** ** o ở giữa (với nó trước hoặc sau vị trí dấu hoa thị).


3

Haskell, 148 byte

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

Hàm c là hàm giải quyết công việc đã cho


2

Tiện ích Bash + Unix, 57 byte

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

(Có khoảng trống sau dấu gạch chéo cuối cùng.)

Hãy thử trực tuyến!

Không phải là một chiếc đồng hồ rất đẹp, nhưng nó đáp ứng tất cả các yêu cầu.


2

PHP, 71 byte

1 dấu hoa thị giờ tay, 2 dấu hoa thị phút.

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

lấy đầu vào từ đối số dòng lệnh; chạy với -nr.

  1. xác định mẫu
  2. ánh xạ giờ đến vị trí (giải mã từ chữ cái) và đặt ký tự ở vị trí thành dấu hoa thị
  3. in

1

05AB1E , 41 byte

Điều này là quá chậm đối với TIO.

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

Đối với mã tương tự làm việc trên TIO, hãy thử điều này

Khá chắc chắn rằng điều này vẫn có thể được cả golf và tăng tốc.
Giải thích đến sau.


1

Logicode 634 byte

Không thể tìm ra cách nhập để có var a = ... cho đầu vào ở đầu liên kết tio

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)

Đã từ bỏ việc chơi golf này. Có thể làm cho nó ngắn hơn với chi phí làm cho đồng hồ trông khủng khiếp mặc dù.

Dùng thử trực tuyến

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.