Намалюйте аналоговий годинник зірочкою протягом години N


22

Виклик:

Створіть функцію або програму, яка буде приймати вхід N (число від 0 до 24), який представляє ГОДУ.

Вихід повинен вивести аналоговий годинник із зірочок із зазначенням години Н.

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


Примітки:

• Хвилинна рука повинна бути довшою годинної (за кількістю зірочок, що використовуються)

• Хвилинна рука повинна становити не менше 2 зірочок.

• Полудень, 15:00, 18:00 та 21:00 завжди будуть ортогональними. Ваш висновок для посередницьких годин, якщо вони розташовані за градусами, повинен бути в тому ж порядку, що і години дня. Те , що я маю в виду, в полудень годину рука 0º і о 3 годині годинникова стрілка 90º так для вихідних випадків 1pm і 2PM наступне повинно бути істинним: 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
О, ух, мені це дуже подобається!
Альберт Реншоу

На жаль Моя відповідь 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.


Дуже класна ідея!
nderscore

Дійсно приємна відповідь.
ElPedro

Ви можете поголити 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; Свята рекурсія! Мені здається веселим, що ви можете зберегти байти в кодовому гольф-виклику, макровуючи кома ах
Альберт Реншо

Я не очікував цього, хоча рекурсії не видно. Це важко кодована відповідь, хоч і дещо придушена.
Агемон

Я не думаю, що тобі потрібен пробіл перед комою
roofcat

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

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)

Відмовились від цього в гольфі. Зробити це можна коротше, якщо годинник виглядає жахливим.

Спробуйте в Інтернеті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.