पाई डे, पाई मिनट या पीआई सेकेंड?


16

इस चुनौती में आपको यह निर्धारित करने की आवश्यकता होगी कि क्या यह पीआई दिवस, पाई मिनट या पीआई सेकेंड है।

क्योंकि पाई तर्कहीन है, यह चाहता है कि आपका कोड यथासंभव छोटा हो।

उदाहरण

कोई इनपुट प्रदान नहीं किया गया है , आपके प्रोग्राम को सिस्टम समय का उपयोग करना चाहिए। मैंने अभी इसे स्पष्टता के लिए जोड़ा है

March 14, 2016 0:00:00
Pi Day
December 25, 2015 3:14:45
Pi Minute
December 29, 2015 0:03:14
Pi Second
January 1, 2016 0:00:00
<No Output>

Pi Day / मिनट / दूसरा क्या है

  • Pi Day जब माह मार्च होता है, और तारीख 14 तारीख होती है
  • Pi Minute जब घंटा 3 होता है, और मिनट 14 होता है
  • Pi Second जब मिनट 3 होता है, और दूसरा 14 होता है
  • Pi Dayके बजाय पसंद किया जाना चाहिए , Pi Minuteया के बजाय पसंद किया जाना चाहिए ।Pi SecondPi MinutePi Second
  • इस चुनौती के लिए आपको 12 घंटे का समय (15:14 == 3:14) का उपयोग करना चाहिए। सिस्टमPi Day/Minute/Second तिथि के आधार पर निर्धारित करने के लिए उपयोग की जाने वाली तारीख / समय होना चाहिए ।

स्कोरिंग और बोनस

-15 बाइट बोनस: यदि आप "No Pi Time"पीआई समय नहीं होने पर प्रिंट करते हैं।


हमेशा की तरह, मानक खामियों को अस्वीकार कर दिया जाता है। यह बाइट्स जीत में सबसे छोटा कोड है!


6
मुझे नहीं लगता कि कॉस्टको आपको वर्ष के किसी भी समय गणितीय निरंतर पीआई खरीदने की अनुमति देता है।
एलेक्स ए।

2
आपने इसे नियमित पाई में बदल दिया है। यह भी गलत है क्योंकि आप कॉस्टको से पूरे साल पाई प्राप्त कर सकते हैं।
एलेक्स ए।

1
@AlexA। हम्म, अजीब है मैं इसे गर्मियों में कभी नहीं पा सकता ...
डाउनगेट

1
क्योंकि पाई असीम रूप से लंबी है और आप निष्क्रिय-आक्रामक होना चाहते हैं?
आर्कटुरस

8
मैं आज कॉस्टको में गया - वे बंद थे।
डिजिटल ट्रामा

जवाबों:


4

CJam, 41 बाइट्स

et[3E]#"
Pi Day

Pi Minute
Pi Second
"N/=

इसका परीक्षण यहां करें। वैकल्पिक रूप से इस लिंक का उपयोग etआसान परीक्षण के परिणाम को स्टब करने के लिए करें।

व्याख्या

et   e# Get the current datetime as an array with the following elements:
     e#   - Year
     e#   - Month
     e#   - Day
     e#   - Hour
     e#   - Minute
     e#   - Second
     e#   - Millisecond
     e#   - Weekday
     e#   - Tickrate or something.
[3E] e# Push the array [3 14].
#    e# Find the position of this subarray in the current datetime array. Let's see
     e# what results we can get:
     e#   - Year 3 is in the past and there is no 14th month, so we can't get 0.
     e#   - Pi day will give result 1.
     e#   - Day 3, hour 14 would give 2.
     e#   - Pi minute will give result 3.
     e#   - Pi second will give result 4.
     e#   - Second 3, millisecond 14 would give 5.
     e#   - Weekday and tickrate won't be 14, so we'll never get 6 or 7.
     e#   - If [3 14] isn't found at all we get -1.
"\Pi Day\\Pi Minute\Pi Second\"
     e# Push this string (with linefeeds instead of backslashes.
N/   e# Split into lines.
=    e# Select the corresponding element. The non-existent "pi hour" and "pi millisecond"
     e# would map to empty strings as well as the -1.

8

जावास्क्रिप्ट (ईएस 6), 114 112 - 15 = 97 बाइट्स

x=>['Pi Day','Pi Minute','Pi Second'].find((x,i)=>[/ar 14/,/(03|15):14:/,/03:14/][i].test(Date()))||'No Pi Time'

Ungolfed:

x=>
['Pi Day', 'Pi Minute', 'Pi Second']  // array of outputs
.find(                                // find first element in the array
    (x, i)=>                          // which returns truthy for this function
    [/ar 14/, /(03|15):14:/, /03:14/] // array of regex patterns
    [i]                               // get corresponding regex based on index
    .test(Date())                     // test it against current date, date is automatically cast to string
) || 'No Pi Time'                     // if no result, then return "No Pi Time"

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


हो सकता है Date()के बजायnew Date
edc65

'Pi '+['Day','Minute','Second'].find((x,i)=>................
wizzwizz4

@ wizzwizz4 यह काम नहीं करेगा। यदि यह पीआई समय नहीं है, तो यह वापस लौटता है"Pi undefined"
अंडर

अपरिभाषित के लिए एक चेक 6 वर्णों से कम होगा?
wizzwizz4

1
@nderscore यह कहने की nderscoreतुलना में कम बाइट्स है underscore
wizzwizz4

5

रूबी, 125 124 चर

i=[*[(t=Time.new).month,t.day,t.hour,t.min,t.sec].each_cons(2)].index [3,14];i&&$><<['Pi Day','','Pi Minute','Pi Second'][i]

काश, चालाक %i[month day hour min sec].map{|x|Time.new.send x}ज्यादा लंबा होता है।

यहां कुंजी each_consदोहराव से बचने का उपयोग है (नीचे स्पष्टीकरण की अंतिम कुछ पंक्तियां देखें)।

i=                          # send i (index) to...
[*                          # convert to array (splat)...
 [
  (t=Time.new).month,       # the current month...
  t.day,t.hour,t.min,t.sec  # etc... (duh)
 ]
 .each_cons(2)              # each consecutive two elements
]                           # [[month, day], [day, hour], [hour, min], etc]
.index [3,14];              # first occurrence of [3, 14]
i&&                         # shorthand for "if i"...
$><<                        # output...
[
 'Pi Day',                  # [month=3, day=14] is Pi Day
 '',                        # [day=3, hour=14] isn't anything
 'Pi Minute',               # [hour=3, min=14] is Pi Minute
 'Pi Second'                # [min=3, sec=14] is Pi Second
][i]                        # index by index (obviously)

आप के रूप में 'Pi'आप के साथ बाहर खींच कर कुछ आकर्षण बचा सकता है t, नहीं?
कोल जॉनसन

@Cole और आप दूसरे तत्व के साथ क्या करेंगे?
निकेल

क्यों पी घंटे कुछ भी नहीं है दोपहर में 2, कल क्या हुआ?
मिस्टर लिस्टर

@ColeJohnson नहीं, [(p='Pi ')+Day','',p+'Minute',p+'Second']लंबा है।
दरवाज़े

4

अजगर 2, 219 186 183 बाइट्स (198-15)

मैंने कोशिश की

Ungolfed:

from datetime import datetime

now = datetime.now()
output = ['Pi Day', 'Pi Minute', 'Pi Second', 'No Pi Time']

if now.month == 3 and now.day == 14:
    print output[0]
elif now.hour == 2 and now.minute == 13:
    print output[1]
elif now.minute = 2 and now.second == 13:
    print output[2]
else:
    print output[3]

golfed:

from datetime import *
n=datetime.now()
a=n.minute
if n.month==3and n.day==14:print'Pi Day'
elif n.hour==2and a==13:print'Pi Minute'
elif a==2and n.second==13:print'Pi Second'
else:print'No Pi Time'

4
from datetime import*;n=datetime.now()छोटा है। जब आप निरंतर स्ट्रिंग्स को प्रिंट कर रहे हों, तो भी, सरणी में अनुक्रमित करने का कोई मतलब नहीं है।
दरवाज़े

@Doorknob :) यह सच है :)
Zizouz212

छोटा यहां तक ​​कि: paste.ee/p/ebcSh
R

[/, अगर] [बयान] के साथ अगर / elses स्वैपिंग द्वारा बनाया गया।
Rɪᴋᴇʀ

1
बाद की संख्या गलत हैं (3:13 के बजाय 2:13), और 12-घंटे की घड़ी की आवश्यकता पूरी नहीं हुई है। (कुछ अन्य उत्तरों पर भी लागू होता है) आप इसका परिणाम अनुक्रमित करके भी प्राप्त कर सकते हैं time.localtime(); यह 148-15 बाइट्स (12 घंटे के फिक्स के बिना) के लिए नीचे आता है। हालांकि 12 घंटे की बात दुर्भाग्यपूर्ण है; इसके बिना आप इसे आसानी से 129-15 बाइट्स तक ले जा सकते हैं: import time;x=3,14;T=time.localtime();print{1:'Pi Day',3:'Pi Minute',4:'Pi Second'}.get((zip(T,T[1:])+[x]).index(x),'No Pi Time')(और पायथन 3 पर 118-15 बाइट्स, बाइट्स में कनवर्ट करके और मिल का उपयोग करके, जो चीजों को सरल बनाता है)
एलेक्सी तोरहामो

4

जाप, 78 - 15 = 63 बाइट्स

D=Ð)g ¥3©Df ¥E?"Pi Day":Dd %C¥3©Dc ¥E?`Pi M©e`:Dc ¥3©Db ¥E?`Pi SeÖ:No Pi Te

बहुत सरल - बस हर मामले के लिए तारीख की जाँच करता है।

स्पष्टीकरण:

  • D=Ð)gवर्तमान तिथि प्राप्त करें ( Ð), इसे चर में संग्रहीत करें Dऔर माह प्राप्त करें ( g)। इसे चर में क्यों स्टोर करें, अगर यह पहले से ही एक अक्षर है? क्योंकि तब से आप डेट के किसी भी हिस्से को तैयार कर सकते हैं Da, जहां aफ़ंक्शन है, वर्ष, माह, दिनांक, आदि Ð a

  • ¥3यह ==3जाँच कर रहा है कि क्या महीना मार्च है।

  • ©है &&, अर्थात् "और"।
  • Df महीने का दिन है।
  • E 14 है
  • ?...:... - टर्नरी ऑपरेटरों के विशिष्ट सेट
  • Dd %Cघंटे ( Dd) को 12 से विभाजित करने की अनुस्मारक ( C)
  • Dc मिनट है
  • Db सेकंड हैं

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


पाई दिवस का अनुकरण करने के लिए:

D=Ð"3/14/11 11:11:11";
Dg ¥2©Df ¥E?"Pi Day":Dd %C¥3©Dc ¥E?`Pi M©e`:Dc ¥3©Db ¥E?`Pi SeÖ:No Pi Te

पाई मिनट का अनुकरण करने के लिए :

D=Ð"11/11/11 3:14:11";
Dg ¥2©Df ¥E?"Pi Day":Dd %C¥3©Dc ¥E?`Pi M©e`:Dc ¥3©Db ¥E?`Pi SeÖ:No Pi Te

पाई दूसरा अनुकरण करने के लिए :

D=Ð"11/11/11 00:3:14";
Dg ¥2©Df ¥E?"Pi Day":Dd %C¥3©Dc ¥E?`Pi M©e`:Dc ¥3©Db ¥E?`Pi SeÖ:No Pi Te

3

TI-BASIC, 124 बाइट्स

कुछ बाइट्स शेविंग करने के लिए FlagAsSpam को धन्यवाद।

"→Str1
getTime
If min({3,14}={Ans(2),Ans(3
"Pi Second→Str1
getTime
If Ans(2)=14 and max(Ans(1)={3,14
"Pi Minute→Str1
getDate
If min({3,14}={Ans(2),Ans(3)
"Pi Day→Str1
Str1

क्या आप i(काल्पनिक इकाई) और e(यूलर के स्थिरांक) शॉर्टकट के रूप में उपयोग कर रहे हैं ? यदि नहीं, तो यह आपको कुछ बाइट्स भी बचा सकता है।
Addison Crump

@FlagAsSpam मैंने उन का उपयोग करने के बारे में सोचा था, लेकिन मुझे यकीन नहीं था कि यह मायने रखता है।
कॉनर ओ'ब्रायन

@FlagAsSpam यहाँ वैध हैं या नहीं, eवास्तव में दो बाइट्स हैं!
२०:

@ThomasKwa ओह, ठीक है।
कॉनर ओ'ब्रायन

@FlagAsSpam यह अब अमान्य नहीं है। ^ _ ^
कॉनर ओ'ब्रायन

3

पर्ल, 80 - 15 = 65 बाइट्स

print'No 'x localtime!~/(ar | 15:|03:)14/,'Pi ',(Time,Day,Minute,Second)["@-"/4]

2 ले लो, स्ट्रिंग प्रतिनिधित्व के पार्सिंग localtime। वर्तमान में, यह कुछ इस तरह दिखता है:

Sun Jan  3 15:14:15 2016

मिलान किए गए स्ट्रिंग की स्थिति का उपयोग सही Pi समय निर्धारित करने के लिए किया जाता है।


पर्ल, 100 बाइट्स

@t=localtime;$t[2]%=12;3-/3/^{@t[$_,$_+1]}->{14}||exit!print'Pi ',(Second,Minute,_,Day)[$_]for 3,1,0

localtimeमहीनों को शून्य अनुक्रमित करता है, इसलिए इसकी आवश्यकता है 3-/3/


2

पायथन 3, 137 - 15 = 122 बाइट्स

import time
T=list(time.localtime())
T[3]%=12
print({1:'Pi Day',3:'Pi Minute',4:'Pi Second'}.get(bytes(T[1:6]).find(b'\x03\x0e'),'No Pi Time'))

12-घंटे की आवश्यकता दुर्भाग्यपूर्ण थी, क्योंकि इसके बिना 118-15 = 103 बाइट्स होती:

import time
print({1:'Pi Day',3:'Pi Minute',4:'Pi Second'}.get(bytes(time.localtime()[1:6]).find(b'\x03\x0e'),'No Pi Time'))

2

AppleScript, 202 190 187 183 181 बाइट्स

अरे, यह सब के बाद इतना बुरा नहीं है।

set n to current date
set b to n's time string
if n's date string contains"March 14"
log"Pi Day"
else if b contains"3:14:"
log"Pi Minute"
else if b contains"3:14"
log"Pi Second"
end

मुझे वास्तव में AppleScript की विधि कॉलिंग के लिए एक उपयोग मिला। जाओ पता लगाओ।नहीं। बस वही निकलता हैI'm an idiot । एक चर की स्थापना कम है।

(उन लोगों के लिए, वर्तमान तिथि आदेश सामग्री "Saturday, January 2, 2016 at 2:46:01 PM"या इस तरह की तिथि प्रकार लौटाता है )


1

PHP, 85 - 15 = 70 बाइट्स

<?=['No Pi Time','Pi Day','Pi Minute','Pi Second'][strpos(@date(Ymdhi_is),'0314')/4];

लेखन, रिटर्न के समय मुख्य ट्रिक का उपयोग Ymdhi_is तारीख प्रारूपdate('Ymdhi_is') है 201501030258_5828

  • md, hiऔरis मान हैं जो 0314अगर यह Pi- कुछ है द्वारा प्रतिस्थापित किया जाएगा । ध्यान दें कि उन सभी तारों को हमेशा 4-वर्ण लंबी स्ट्रिंग द्वारा प्रतिस्थापित किया जाएगा।
  • उन्हें उस विशिष्ट क्रम में रखा गया है strpos सुई की पहली घटना को खोजना बंद हो जाएगा, इसलिए हमने उन्हें प्राथमिकता के क्रम में रखा।
  • के बीच एक विभाजक hiऔर isआवश्यक है क्योंकि हम strposएक मूल्य से मेल नहीं खाना चाहते हैं जो दोनों को ओवरलैप करेगा ( यहां बाइट बचाने के लिए प्राइमो के लिए धन्यवाद )।
  • सुई 0314इसलिए क्योंकि 314गलत तरीके से 10:31:42 पी-सेकंड के रूप में मेल खाता है।

Y भाग पेचीदा है। हमें पाई-कुछ की पहली घटना को ऑफसेट करने के लिए एक उपसर्ग की आवश्यकता होती है, जिससे हमें (नहीं पाया गया, पाई-कुछ भी नहीं) और के strposबीच वापसी मूल्यों को भेद करने की अनुमति मिलती हैfalse0 (इंडेक्स 0, पाई-डे पर पाया ।

और हम चाहते हैं कि यह उपसर्ग 4 या 5-वर्ण लंबा हो, क्योंकि हम विभाजित करने की योजना बना रहे हैं strpos 4 के रिटर्न मान ।

Y 4-वर्ण लंबा है, लेकिन:

  • यह किसी दिन 5-वर्ण लंबा होगा, और यह कार्यक्रम को तोड़ देगा (वर्ष 10314 के बारे में सोचें): PHP प्रलेखन कहता है कि Yइसे 4 अंकों से बदल दिया जाएगा, लेकिन यह सच नहीं है
  • यदि आप समय पर वापस आते हैं, तो वर्ष 314 में, यह कार्यक्रम को तोड़ देगा।

चूंकि PHP वर्ष 314 में मौजूद नहीं थी, और संभवतः 10314 में अब मौजूद नहीं होगी, मुझे लगता है कि इन बगों को सुरक्षित रूप से अनदेखा किया जा सकता है।

ध्यान दें कि कब से 0314ओवरलैप Ymdहो सकता है:

  • Ymmd कॉन्फ़िगरेशन: कोई 31 वां महीना नहीं है।
  • YYmm कॉन्फ़िगरेशन: कोई 14 वां महीना नहीं है।
  • YYYm विन्यास: 40 महीने से कम हैं।

इसके अलावा, वर्ष से संबंधित बग के बिना एक संस्करण है, जो 86 है - 15 = 71 बाइट्स :

<?=['No Pi Time','Pi Day','Pi Minute','Pi Second'][strpos(@date(D_mdhi_is),'0314')/4];

बहुत बढ़िया जवाब। यदि आप डॉट्स के बजाय अंडरस्कोर का उपयोग करते हैं, तो आप कोट्स को चारों ओर छोड़ सकते हैं Ymd_hi_is। इसके अलावा, मुझे नहीं लगता कि बीच में एक विभाजक आवश्यक है mdऔर hiजैसा कि 12-घंटे h14 कभी नहीं हो सकता है, और 3 या 4 के साथ कभी भी शुरू न करें
प्रिमो

0

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

import functools as F,datetime as D
T,G=D.datetime.now(),getattr
F.reduce(lambda i,j:print("Pi "+i.title())if G(T,i)/G(T,j)==3/14else j,"month day hour minute second".split(" "))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.