วาดนาฬิกาดอกจันอนาล็อกเป็นชั่วโมง N


22

ท้าทาย:

สร้างฟังก์ชั่นหรือโปรแกรมที่จะรับอินพุต N (ตัวเลขตั้งแต่ 0 - 24) ซึ่งหมายถึงชั่วโมง

เอาต์พุตควรดึงนาฬิกาอะนาล็อกออกจากเครื่องหมายดอกจันซึ่งแสดงชั่วโมง N

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


หมายเหตุ:

•เข็มนาทีจะต้องยาวกว่าเข็มชั่วโมง (ตามจำนวนเครื่องหมายดอกจันที่ใช้)

•เข็มนาทีต้องมีอย่างน้อย 2 ดอกจัน

•เที่ยง, 15:00, 18:00 น. และ 21:00 น. จะเป็นมุมฉากเสมอ ผลลัพธ์ของคุณสำหรับชั่วโมงตัวกลางเมื่อจัดเรียงตามองศาควรอยู่ในลำดับเดียวกับชั่วโมงของวัน สิ่งที่ผมหมายถึงคือตอนเที่ยงเข็มชั่วโมงเป็น0ºและ 15:00 เข็มชั่วโมงเป็น 90 องศาดังนั้นสำหรับกรณีการส่งออกของคุณและ 2PM 13:00 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
ชั่วโมงมักจะมาจาก 0-23 หรือ 1-12 ไม่ใช่ 0-24 เว้นแต่ว่าคุณมี 25 ชั่วโมงในหนึ่งวัน
fəˈnɛtɪk

1
เข็มนาทีจะต้องยาวกว่าเข็มชั่วโมง แต่พวกเขาจำเป็นต้องรักษาขนาดของพวกเขาหรือไม่? ยกตัวอย่างเช่นเข็มนาทีสำหรับ3ขนาดที่แตกต่างจากเข็มนาทีนั้นสามารถทำได้7หรือไม่?
AdmBorkBork

@LliwTelracs แต่เป็น23:00 11: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
โอ้ว้าวฉันชอบสิ่งนี้มาก!
Albert Renshaw

อุ่ย คำตอบ 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>

แก้ไข: บันทึกแล้ว 9 ไบต์ขอบคุณ @nderscore


ความคิดที่ยอดเยี่ยมมาก!
2560

คำตอบที่ดีจริงๆ
ElPedro

คุณสามารถโกน 4 ไบต์ออกจากแท็กอินพุตของคุณโดยการสลับกับสิ่งนี้<body onload=f(prompt())>
Albert Renshaw

1
คุณสามารถฝังโค้ดฟังก์ชันในแอตทริบิวต์ oninput ได้โดยตรง:<input oninput=h.style.transform=`rotate(${this.value*30}deg)`>
ขีดล่าง

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; เรียกซ้ำศักดิ์สิทธิ์! ฉันพบว่ามันเฮฮาที่คุณสามารถบันทึกจำนวนไบต์ในการแข่งขันรหัสด้วยการทำเครื่องหมายจุลภาค ahha
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©’Œ?Ḋ(การเปลี่ยนแปลงที่ดัชนี dequeued) เป็น byte บันทึกมากกว่า“9ȧỤ_ÑḶ’b⁴(ฐาน 16 ของ) ซึ่งเป็น byte บันทึกมากกว่า“¦þxṙ<ȥ’ḃ13(ฐาน bijective 13 จาก)

เกี่ยวกับป๊อป - เรามีพื้นที่พิเศษในสตริงซึ่งเป็นที่ที่เครื่องหมายดอกจันสำหรับ 0, 12, 24 จะไปเพื่อให้การทำดัชนี mod-12 ของรายการของดัชนี, popping ตัวละครสุดท้ายออกมีไบต์ที่ถูกกว่า ทำการเรียงต่อกัน“**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

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 ไบต์

ไม่สามารถหาวิธีป้อนข้อมูลได้ดังนั้นจึงมี var a = ... สำหรับอินพุตที่ด้านบนของลิงก์ 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)

ได้เลิกเล่นกอล์ฟครั้งนี้แล้ว อาจทำให้ค่าใช้จ่ายในการทำให้นาฬิกาดูแย่ลงได้

ลองออนไลน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.