Pi Günü, Pi Dakika veya Pi Saniye?


16

Bu meydan okumada Pi Günü, Pi Dakika veya Pi Saniye olup olmadığını belirlemeniz gerekir.

Pi mantıksız olduğu için kodunuzun olabildiğince kısa olmasını ister.

Örnekler

Hiçbir girdi sağlanmadı , programınız sistem saatini kullanmalıdır. Az önce netlik için ekledim

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 Günü / Dakika / Saniye Nedir

  • Pi Day ayın Mart ve tarihin 14
  • Pi Minute saat 3, dakika 14
  • Pi Second dakika 3, ikincisi 14
  • Pi DayBunun yerine tercih edilmelidir Pi Minuteya da Pi Second, ve Pi Minuteyerine tercih edilmelidir Pi Second.
  • Bu meydan okuma için 12 saatlik zaman kullanmalısınız (15:14 == 3:14). Belirlemek için kullanılan tarih / saat Pi Day/Minute/Second, sistem saatine dayalı olmalıdır .

Puanlama ve Bonus

-15 bayt Bonus:"No Pi Time" Pi zamanı olmadığında yazdırırsanız .


Her zaman olduğu gibi, standart boşluklara izin verilmez. Bu bayt kazanır kod kısa kod!


6
Costco'nun yılın herhangi bir zamanında matematiksel sabit pi'yi satın almanıza izin verdiğini düşünmüyorum.
Alex A.

2
Düzenli turta ile değiştirdin. Bu da yanlış çünkü bütün yıl Costco'dan pasta alabilirsiniz.
Alex A.

1
@AlexA. Hmm, garip yazın asla bulamıyorum ...
Downgoat

1
Pi sonsuz uzun olduğu ve pasif-agresif olmak istediğiniz için mi?
Arcturus

8
Bugün Costco'ya gittim - kapalıydılar.
Dijital Travma

Yanıtlar:


4

CJam, 41 bayt

et[3E]#"
Pi Day

Pi Minute
Pi Second
"N/=

Burada test edin. Alternatif olarak, daha kolay test için sonucunu saplamak amacıyla bu bağlantıyı kullanın et.

açıklama

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

JavaScript (ES6), 114 112-15 = 97 bayt

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 bytes için teşekkürler @ edc65


Olabilir Date()yerinenew Date
edc65

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

@ wizzwizz4 bu işe yaramaz. Pi zamanı değilse, geri döner"Pi undefined"
nderscore

Undefined için bir kontrol 6 karakterden daha kısa olur mu?
wizzwizz4

1
@nderscore Söylemesi nderscoredaha az bayt underscore.
wizzwizz4

5

Yakut, 125 124 karakter

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]

Ne yazık ki, zeki %i[month day hour min sec].map{|x|Time.new.send x}daha uzun.

Buradaki anahtar, each_constekrarı önlemek için kullanılmasıdır ( aşağıdaki açıklamanın son birkaç satırına bakın).

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)

Yaptığınız 'Pi'gibi dışarı çekerek birkaç karakter kaydedebilirsiniz t, değil mi?
Cole Johnson

@Kole İkinci elemanla ne yapacaksınız?
nicael

Pi Hour neden bir şey değil. Yarın öğleden sonra 2 ile ilgili sorun nedir?
Bay Lister

@ColeJohnson Hayır, [(p='Pi ')+Day','',p+'Minute',p+'Second']daha uzun.
Kapı tokmağı

4

Piton 2, 219 186 183 bayt (198-15)

denedim

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()daha kısadır. Ayrıca, sabit dizeler yazdırırken diziyi dizine eklemenin bir anlamı yoktur.
Kapı tokmağı

@Doorknob 冰 Bu doğru :)
Zizouz212

Daha da kısa: paste.ee/p/ebcSh
Rɪᴋᴇʀ

İf / elses [else, if] [ifadesi] ile değiştirilerek yapılır.
Rɪᴋᴇʀ

1
Sonraki sayılar yanlış (3:14 yerine 2:13) ve 12 saatlik saat gereksinimi karşılanmıyor. (Diğer bazı cevaplar için de geçerli gibi görünüyor) Ayrıca sonucu dizine alarak daha kısa alabilirsiniz time.localtime(); 148-15 bayta kadar düşüyor (12 saatlik düzeltme olmadan). 12 saatlik şey talihsiz bir durum; bu olmadan kolayca 129-15 bayta düşebilirsin: 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')(ve Python 3'te 118-15 bayt, baytlara dönüştürerek ve bulmayı kullanarak işleri kolaylaştırır)
Aleksi Torhamo

4

Japt, 78-15 = 63 bayt

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

Oldukça basit - her vaka için tarihi kontrol eder.

Açıklama:

  • D=Ð)ggeçerli tarihi ( Ð) alın, değişkende saklayın Dve month'ı ( g) alın. Zaten tek harfli ise neden değişkende saklanmalı? Çünkü o zamandan beri tarihin herhangi bir bölümünü , işlevi Danerede a, geri dönen yıl, ay, tarih, vb. İle giydirebilirsiniz Ð a.

  • ¥3, ==3ayın Mart olup olmadığını kontrol etmektir.

  • ©ise &&, yani "ve".
  • Df ayın günüdür.
  • E 14
  • ?...:... - tipik üçlü operatör setleri
  • Dd %Csaati ( Dd) 12'ye ( C) bölme hatırlatıcısı
  • Dc dakikalar
  • Db saniye

Çevrimiçi deneyin!


Pi Günü'nü taklit etmek için:

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

Pi Dakika öykünmek için :

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

Pi Second'ı taklit etmek için :

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 bayt

Birkaç bayt tıraş ettiği için FlagAsSpam'a teşekkürler.

"→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

Kullandığınız i(hayali birimi) ve ekısayol olarak (Euler sabiti)? Değilse, bu size bazı baytlar kazandırabilir.
Addison Crump

@FlagAsSpam Bunları kullanmayı düşündüm, ama önemli olup olmadığından emin değildim.
Conor O'Brien

@FlagAsSpam Burada geçerli olup olmadıkları easlında iki bayttır!
lirtosiast

@ThomasKwa Oh, doğru.
Conor O'Brien

@FlagAsSpam Artık geçersiz. ^ _ ^
Conor O'Brien

3

Perl, 80-15 = 65 bayt

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

2, dize temsilini ayrıştırmak localtime. Şu anda, bu şuna benziyor:

Sun Jan  3 15:14:15 2016

Eşleşen dizenin konumu doğru Pi Süresini belirlemek için kullanılır.


Perl, 100 bayt

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

localtimeendeksli ayları, dolayısıyla ihtiyacı döndürür 3-/3/.


2

Python 3, 137-15 = 122 bayt

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 saatlik gereksinim talihsizdi, çünkü bu onsuz 118-15 = 103 bayt olurdu:

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 bayt

Ne de olsa bu o kadar da kötü değil.

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

Aslında AppleScript'in yöntem çağrısı için bir kullanım buldum. Git şekil. Hayır! Sadece ortaya çıkıyor I'm an idiot. Değişken ayarlamak daha kısadır.

(merak edenler için, geçerli tarih komutu içerik "Saturday, January 2, 2016 at 2:46:01 PM"veya benzeri bir tarih türü döndürür )


1

PHP, 85-15 = 70 bayt

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

Buradaki ana hüner kullanımıdır Ymdhi_is tarih biçimini yazma sırasında, date('Ymdhi_is')getiriler 201501030258_5828.

  • md, hiVe isyerini alacaktır değerlerdir 0314o Pi-bir şey buysa. Tüm bu dizelerin her zaman 4 karakter uzunluğunda bir dize ile değiştirileceğini unutmayın.
  • strposİğnenin ilk oluşumunda aramayı durduracağı için bu belirli sıraya konurlar, bu yüzden bunları öncelik sırasına koyarız.
  • Arasında bir ayıraç hive isbiz istemiyoruz çünkü gereklidir strpos(sayesinde hem çakışacak bir değeri eşleştirmek için primo burada bayt kaydetmek için).
  • İğne olduğu 0314, çünkü 314yanlış Pi-İkinci olarak 10:31:42 eşleşir.

Y kısmı en zor olanıdır. Pi-bir şeyin ilk oluşumunu dengelemek için bir ön eke ihtiyacımız var, bu da bizim strposdönüş değerlerini false(bulunamadı, Pi-hiçbiri) ve 0(indeks 0, Pi-gününde bulundu ) arasında ayırt etmemizi sağlıyor .

Ve bu önekin 4 veya 5 karakter uzunluğunda olmasını istiyoruz, çünkü strposdönüş değerini 4'e bölmeyi planlıyoruz .

Y 4 karakter uzunluğunda, ancak:

  • bir gün 5 karakter uzunluğunda olacak ve bu programı kıracak (10314 yılını düşünün): PHP belgeleriY 4 basamakla değiştirileceğini söylüyor , ancak bu doğru değil .
  • zamanda geri gelirseniz, 314 yılında programı kırar.

PHP 314 yılında mevcut olmadığından ve 10314 yılında artık mevcut olmayacağından, bu hataların güvenli bir şekilde göz ardı edilebileceğini düşünüyorum.

0314Şunlardan Ymdberi çakışabileceğini unutmayın :

  • Ymmd yapılandırma: 31. ay yok.
  • YYmm yapılandırma: 14. ay yok.
  • YYYm yapılandırma: 40 aydan az var.

Ayrıca, yılla ilgili hataların bulunmadığı bir sürüm var - 86 - 15 = 71 bayt :

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

Mükemmel cevap. Nokta yerine alt çizgi kullanıyorsanız tırnak işaretlerini bırakabilirsiniz Ymd_hi_is. Ayrıca, bir ayırıcı arasındaki gerekli olduğunu düşünmüyorum mdve hi12 saat olarak h14 olamaz, ve 3 veya 4 ile başlar asla
primo

0

Python 3, 179 bayt

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(" "))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.