एनालॉग Obtuse है!


23

एनालॉग घड़ी में 2 हाथ होते हैं *: घंटा और मिनट।
समय बीतने के साथ ये हाथ घड़ी के चेहरे को घेरे रहते हैं। मिनट हाथ के प्रत्येक पूर्ण रोटेशन में घंटे के हाथ के रोटेशन का 1/12 वीं परिणाम होता है। घंटे के हाथ के 2 पूर्ण घुमाव एक पूरे दिन का संकेत देते हैं।

चूंकि ये हाथ एक ही केंद्रीय बिंदु पर तय होते हैं, और उस बिंदु के चारों ओर घूमते हैं, आप हमेशा हाथों के बीच के कोण की गणना कर सकते हैं। वास्तव में किसी भी समय 2 कोण हैं; एक बड़ा, और एक छोटा (कभी-कभी वे दोनों समान 180 होंगे, लेकिन यह महत्वपूर्ण नहीं है)

* हमारी काल्पनिक घड़ियों के दूसरे हाथ नहीं हैं

कार्य

24 घंटे के प्रारूप में एक समय को देखते हुए, हाथों के बीच के छोटे कोण को डिग्री में आउटपुट करें। यदि हाथ सीधे प्रत्येक अभिघात (जैसे कि 6:00, 18:00आदि) के विपरीत हों तो आउटपुट 180

नियम

एक सीमांकक स्ट्रिंग अलग: -: के रूप में इनपुट लिया जा सकता है 6:32, 14.26 - 2 अलग मूल्यों, तार या ints: 6, 32, 14, 26 - 2 मूल्यों, तार या ints की एक सरणी: [6, 32],[14, 26]

या फिर आप निर्दिष्ट कर सकता है कि आपका जवाब आदानों 2 अंकों के लिए गद्देदार हो की आवश्यकता है (यदि आप तार ले कल्पना करते हुए), अर्थात्: 06:32, 06, 32,[06, 32]

तुम भी वैकल्पिक रूप से, आदानों की क्रम को उल्टा कर सकते हैं घंटा, मिनट तो ले रही है अर्थात्: 32:6, 32, 6,[26, 14]

घंटे के बीच पूर्णांक मान होगा 0और 23(समावेशी) मिनट के बीच 0और 59(समावेशी) के बीच पूर्णांक मान होगा

आप मान सकते हैं कि मिनट का हाथ चेहरे के साथ 6 डिग्री की वृद्धि के लिए जाता है (प्रत्येक मिनट के मूल्य के लिए एक समान स्थान)
आप मान सकते हैं कि घंटे का हाथ चेहरे के साथ 0.5 डिग्री की वेतन वृद्धि के लिए (एक समान रूप से स्थान के लिए स्थान) प्रत्येक मिनट का मान प्रति घंटा मान)

आउटपुट को डिग्रियों में दिया जाना चाहिए, रेडियंस को नहीं। आप .0पूरे नंबर के लिए एक अनुगामी शामिल कर सकते हैं

स्कोरिंग

यह प्रत्येक भाषा की जीत में इतनी कम बाइट्स है !

परीक्षण के मामलों

Input: 06:32
Output: 4

Input: 06:30
Output: 15

Input: 18:32
Output: 4

Input: 06:01
Output: 174.5

Input: 00:00
Output: 0

Input: 00:01
Output: 5.5

Input: 12:30
Output: 165

Input: 6:00
Output: 180

Input: 23:59
Output: 5.5


2
@FryAmTheEggman "आउटपुट डिग्रियों में दिया जाना चाहिए, रेडियंस नहीं", इसलिए मैं अनुमान नहीं लगाऊंगा
Theo

1
भूल गए कि 5:59 बजे हाथ लगभग 6 पर है
आआआआ कहते हैं कि मोनिका

4
सुझाए गए परीक्षण का मामला: 00:59 -> 35.5(का एक छोटा सा मूल्य का एक बड़ा मूल्य के साथ मीटर कुछ कार्यान्वयन असफल बनाने के लिए की संभावना है)। hm
अरनुलद

1
धन्यवाद, @ अर्नुल्ड, आपने मुझे एक बाइट दिया है! : पी
२२:२५

जवाबों:


14

जावास्क्रिप्ट (ईएस 6),  41 40  39 बाइट्स

इनपुट के रूप में लेता है (h)(m)

h=>m=>((x=4+h/3-m*.55/9)&2?12-x:x)%4*90

इसे ऑनलाइन आज़माएं!

कैसे?

सीमा [0..360] में सीधे काम करने के बजाय , हम सीमा में एक अस्थायी चर x को परिभाषित करते हैं [0..4] :

एक्स=|412+4मीटर60×12-4मीटर60|आधुनिक4
एक्स=|412-44मीटर60×12|आधुनिक4
एक्स=|3-1 1मीटर180|आधुनिक4

डिग्री में कोण द्वारा दिया गया है:

मिनट(4-एक्स,एक्स)×90

हालांकि, जेएस कोड में सूत्र थोड़ा अलग तरीके से लागू किया जाता है, क्योंकि हम निश्चित रूप से लंबा Math.abs()और उपयोग करने से बचना चाहते हैं Math.min()

पूर्ण मान की गणना करने के बजाय, हम कंप्यूटिंग द्वारा [0..12] में एक सकारात्मक मूल्य को बल देते हैं :

एक्स'=4+3-1 1मीटर180

और न्यूनतम गणना करने के बजाय, हम यह निर्धारित करते हैं कि हम किस मामले में केवल एक बिटवाइज़ और 2 साथ कर रहे हैं - और यही कारण है कि हमने पहले स्थान पर 2 शक्ति से बंधे अंतराल को चुना ।


5

जेली , 14 12 बाइट्स

ד<¿‘Iæ%Ø°AH

इसे ऑनलाइन आज़माएं!

एक मोनडिक लिंक जो दो पूर्णांकों की सूची के रूप में समय लेता है: घंटे, मिनट।

2 बाइट बचाने के लिए @JonathanAllan को धन्यवाद!

व्याख्या

ד<¿‘        | Multiply hour by by 60 and minute by 11
     I       | Find difference
      æ%Ø°   | Symmetric mod 360 [equivalent to (x + 360) mod 720 - 360]
          A  | Absolute
           H | Half

सममित मॉड? कैसे काम है?
झबरा

@ शिग्गी बहुत आसानी से, यह अंतराल में मूल्य लौटाता है जो (-180, 180]समतुल्य है (mod 360)। उन बिल्डरों ...
नील

1
आधा डिग्री में काम कर रहे, के उपयोग के साथ द्वारा दो बाइट्स सहेजें Ø°के लिए 360और “<¿‘के लिए 60,11। जैसे ד<¿‘Iæ%Ø°AH टीआईओ
जोनाथन एलन

मैं 12 वर्णों को कहने जा रहा था , लेकिन यह विंडोज़ -1252 (और कुछ अन्य एन्कोडिंग) निकलता है, वास्तव में इसे 12 बाइट्स में एन्कोड कर सकते हैं। विभिन्न गैर-एएससीआईआई पात्रों के बीच, मुझे नहीं लगा कि एक भी गैर-यूनिकोड एन्कोडिंग उन सभी को कवर करेगा, लेकिन, जाहिर है, मैं वहां बहुत गलत हूं।
थानाटोस

@ थानाटोस कोड-गोल्फिंग में विशेषीकृत कुछ भाषाओं में प्रत्येक बाइट में प्रत्येक वर्ण में 256 वर्णों के लिए स्वयं के कोड-पृष्ठ होते हैं। इस कस्टम कोड-पेज के साथ, जेली उनमें से एक है । 05AB1E, चारकोल, मैथगॉल्फ, स्टेक्स आदि अन्य भाषाएं हैं जो कस्टम कोड-पेज हैं। अधिकांश वास्तव में विंडोज -1252 पर आधारित हैं, हालांकि। :)
केविन क्रूज़सेन

4

MATL, 18 बाइट्स

30*i5.5*-t360-|hX<

मिनटों के बाद घंटों के दो इनपुट स्वीकार करता है। इस उत्तर के रूप में उसी विधि का उपयोग करता है

इसे MATL ऑनलाइन पर आज़माएं

व्याख्या

      % Implicitly grab first input (hours)
30*   % Multiply by 30
i     % Explicitly grab second input (minutes)
5.5*  % Multiply by 5.5
-     % Take the difference
t     % Duplicate the result
360-  % Subtract 360
|     % Take the absolute value
h     % Horizontally concatenate
X<    % Determine the minimum value
      % Implicitly display the result

क्या आधी रात के लिए असफल नहीं होगा, 180इसके बजाय outputting 0?
झबरा

4

वोल्फ्राम भाषा (गणितज्ञ) , 30 29 28 बाइट्स

5Abs@Mod[#.{6,-1.1},72,-36]&

इसे ऑनलाइन आज़माएं!

अपंग संस्करण:

Abs[Mod[#.{30,-5.5}, 360, -180]] &

फ़ंक्शन का तर्क # = {h,m}घंटे और मिनट से युक्त है। यह लंबाई-दो सूची एक वेक्टर के रूप में व्याख्या की गई है और इसके साथ डॉट-उत्पाद {30,-5.5}की गणना की गई है #.{30,-5.5} = 30*h-5.5*m:। फिर हम Mod[#.{30,-5.5}, 360, -180]अंतराल -180 .. + 180 में एक कोण देने के साथ 360 के सममित मापांक की गणना करते हैं । Absनिरपेक्ष मूल्य लेता है।

चूंकि सभी शामिल ऑपरेटर रैखिक हैं, हम सभी दिखने वाली संख्याओं को गुणा और विभाजित कर सकते हैं, हालांकि वे सबसे सुविधाजनक हैं। 5अभिव्यक्ति के एक कारक को खींचकर और सभी संख्याओं को 5 से भाग देने पर, बाइट-काउंट कम से कम हो जाता है।


3

अलकेमिस्ट , 134 बाइट्स

_->In_h+In_m+720d+360a+f
h->60d
m+11d->
0m+d+a+0r->b
0a+0x->r
d+b+r->r+a
r+0b->
b+0d+0h+0y->5y
b+0d+5y->x
0b+0d+f->Out_x+Out_"."+Out_y

इसे ऑनलाइन आज़माएं!

व्याख्या

_->In_h+In_m+720d+360a+f

प्रारंभिक व्यवस्था। इनपुट्स घंटे और मिनट में hऔर m, वर्तमान कोण dको 360 डिग्री (720 आधा-डिग्री) पर सेट करता है a, प्रिंसिपल कोण की गणना करने के लिए सेट करता है, और आउटपुट फ्लैग सेट करता है।

h->60d
m+11d->

प्रत्येक घंटे 30 डिग्री जोड़ता है, और प्रत्येक मिनट 5.5 डिग्री घटाता है।

0m+d+a+0r->b
0a+0x->r

जबकि r(रिवर्स) ध्वज सेट नहीं है, प्रत्येक dपरमाणु को एक aपरमाणु को स्थानांतरित करना चाहिए b। यह "रेस की स्थिति" से बचने के लिए मिनटों के उपयोग के बाद होता है। जब कोई aपरमाणु शेष नहीं होते हैं, तो rइस प्रवाह को उलटने के लिए सेट करें।

ध्यान दें कि यह दूसरा नियम कई बार ट्रिगर हो सकता है, और प्रारंभिक सेटअप नियम से पहले भी ट्रिगर हो सकता है। यह कुछ भी नुकसान नहीं पहुंचाता है, इसलिए इसे रोकने की कोई आवश्यकता नहीं है। 0xहालत बढ़त मामले संभालता है: जब इनपुट 6:00 है, वहाँ कोई नहीं है aपरमाणुओं जब कार्यक्रम समाप्त, लेकिन देखते हैं xपरमाणुओं अगर अंतिम परिणाम में कम से कम 1 डिग्री है।

d+b+r->r+a
r+0b->

रिवर्स: जब हस्ताक्षरित कोण 180 डिग्री से अधिक है, तो आउटपुट को कोण को कम bकरने के aलिए परमाणुओं को स्थानांतरित करें । जब कोण "360" पर पहुंच जाए तो पलटना बंद कर दें।

b+0d+0h+0y->5y
b+0d+5y->x

जब सभी डिग्री परमाणुओं का उपयोग किया जाता है, तो कोण को आउटपुट के लिए 2 से विभाजित करें।

0b+0d+f->Out_x+Out_"."+Out_y

इसके बाद किया जाता है, fप्रारंभिक सेटअप से ध्वज का उपयोग करते हुए ठीक एक बार आउटपुट ।


3

पायथन 3.8 (प्री-रिलीज़) , 45 43 बाइट्स

-2 बाइट्स एरिक के लिए धन्यवाद ।

lambda h,m:min(x:=abs(h%12*30-m*5.5),360-x)

इसे ऑनलाइन आज़माएं!

h%12- 12-घंटे के प्रारूप में
h%12*30घंटा
m/2- पूरे घंटे में घंटे के हाथ का कोण - mमिनट में स्थानांतरित किया गया हाथ का घंटा - कोण के रूप में घंटे के हाथ की
h%12*30+m/2वर्तमान स्थिति
m*6- मिनट के हाथ का कोण (360°/60 = 6° )




2

चारकोल , 22 बाइट्स

I↔⁻¹⁸⁰﹪⁻׳⁰⁺⁶N×⁵·⁵N³⁶⁰

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। दो पूर्णांकों के रूप में इनपुट लेता है। स्पष्टीकरण:

             N          First input
           ⁺⁶           Plus literal 6
        ׳⁰             Multiplied by literal 30
       ⁻                Minus
                  N     Second input
              ×⁵·⁵      Multiplied by literal 5.5
      ﹪            ³⁶⁰  Modulo literal 360
  ⁻¹⁸⁰                  Subtracted from literal 180
 ↔                      Absolute value
I                       Cast to string
                        Implicitly print


2

पायथन 3 , 40 बाइट्स

lambda h,m:180-abs(180-(h*30-m*5.5)%360)

इसे ऑनलाइन आज़माएं!

h*30- दोपहर और घंटे के बीच का कोण hजब मिनट होता है 0; यदि घंटा 12 के बराबर या अधिक है, तो यह कोण 360 °
m*6- दोपहर और मिनट के बीच के कोण के बराबर या उससे अधिक हो सकता है
m*.5- घंटे के हाथ पूरे मिनट के बाद पूरे घंटे से आगे चले गए m(जैसे: यदि यह 4:24 है, तो घंटे का हाथ उस स्थिति से 12 डिग्री आगे चला गया जो 4 बजे था)
h*30-m*5.5- घंटे के हाथ और मिनट के बीच दो कोणों में से एक; के लिए गुणांक mहै 5.5क्योंकि m*6-m*.5=m*5.5; यह अभी भी जवाब नहीं है क्योंकि यह 360 ° से अधिक मूल्य हो सकता है (उदाहरण के लिए: ifh,m=13,0 ) या 0 ° से कम का (जैसे: if h,m=12,30)
(h*30-m*5.5)%360- यह मोडुलो उन मामलों को ध्यान में रखता है जहां ऊपर की गणना की गई मान 0 और 360 ° के बीच नहीं है; यह अभी भी जवाब नहीं है क्योंकि यह दो कोणों का आयाम हो सकता है, जबकि हम सबसे संकीर्ण चाहते हैं
180-abs(180-(h*30-m*5.5)%360)- यह अंतिम परिणाम है; सामान्य नियम यह है कि x-abs(x-y)इसके बराबर है min(y,x-y), जो सही परिणाम देगा



1

पायथन 3, 58 57 बाइट्स

-1 / -2 @ शुग्गी को धन्यवाद

h,m=eval(input())
x=(30*h-5.5*m)
print(abs(min(x,360-x)))

Naive कार्यान्वयन, के रूप में इनपुट लेता है [6,32]। कुछ बाइट्स को विशेष रूप से अंतिम पंक्ति से मुंडा जा सकता है।

पायथन 2, 52 50 बाइट्स

h,m=input()
x=(30*h-5.5*m)
print abs(min(x,360-x))

30*h-5.5*mआपको कुछ बाइट्स बचानी चाहिए।
शैगी

1
def-स्टाइल फ़ंक्शन को कुछ बाइट्स को भी बचाना चाहिए।
नकारात्मक सात

@negativeseven चुनौती से यह लग रहा था कि ऐसा लग रहा है कि स्टड / स्टडआउट का उपयोग किया जाना चाहिए
Theo

आप कोष्ठक को दूसरी पंक्ति में छोड़ सकते हैं।
झग्गी

सही ढंग से काम करने के लिए समाधानों को वास्तव में कुछ संशोधनों (पायथन 2) की आवश्यकता होती है। परिणाम 180 से कम या बराबर होना चाहिए, और 0. से अधिक या उससे अधिक होना चाहिए
एरिक आउटगोल्फर



1

जाप , 16 बाइट्स

*FÑ aV*5½
mUa360

कोशिश करो

*FÑ aV*5½     :Implicit input of integers U=h and V=m
*F            :Multiply U by 15
  Ñ           :Multiply by 2
    a         :Absolute difference with
     V*5½     :V multiplied by 5.5
mUa360        :Reassign to U
m             :Minimum of U and
 Ua360        :Absolute difference of U and 360

0

> <> , 17 बाइट्स

b*$6a**-:0)12,-*n

इसे ऑनलाइन आज़माएं! (06:32)

स्टैक पर h, m के रूप में इनपुट लेता है।

व्याख्या

b*$6a**-:0)12,-*n
b*                Multiplies m by 11
  $               Swaps m & h
   6a**           Multiplies h by 60
       -          Subtracts m & h (v)
        :0)       Checks if v > 0 (b=0/1)
           12,-   Subtracts .5 from b (-.5/.5)
               *  Multiplies v by b (halve & abs)
                n Outputs result
b*                Errors

0

05AB1E , 16 बाइट्स

60*+5.5*D(‚360%ß

पहले इनपुट के रूप में घंटे लगते हैं, दूसरे के रूप में मिनट।

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

मूल रूप से निम्नलिखित सूत्र को लागू करता है:

टी=(60+मीटर)×5.5
आर=मीटरमैंn(टीआधुनिक360,-टीआधुनिक360)

60*               # Multiply the (implicit) hours-input by 60
   +              # Add it to the (implicit) minutes-input
    5.5*          # Multiply it by 5.5
        D(‚       # Pair it with it's negative
           360%   # Take modulo-360 on both
               ß  # And then pop and push the minimum of the two
                  # (which is output implicitly as result)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.