तेनुहारी थाई कैलेंडर


13

में थाई कैलेंडर 2560 थाई कैलेंडर में साल 2017 मेल खाती है हमेशा 543 साल ग्रेगोरियन कैलेंडर के आगे है।

पर्यवेक्षक कोडर्स ध्यान दें कि 2560 के बराबर है 2^9 * 5, दूसरे शब्दों में इसके 10 प्रमुख कारक हैं। यह फिर से एक और 896 वर्षों के लिए नहीं होगा! यदि हम इसके दस प्रमुख कारक हैं, तो हम एक वर्ष को कठिन बताते हैं।

एक प्रोग्राम लिखें जो एक सत्य मान का उत्पादन करता है यदि सिस्टम घड़ी के आधार पर थाई कैलेंडर का उपयोग कर चालू वर्ष, स्थिर है, और एक गलत मूल्य है अन्यथा।

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

  • यदि कार्यक्रम 2017 के दौरान चलाया जाता है, true
  • यदि कार्यक्रम 2018 से 2912 के दौरान चलाया जाता है, false
  • यदि प्रोग्राम 2913 के दौरान चलाया जाता है, true(2913 + 543 = 2^7 * 3^3)

यदि भाषा का उपयोग करना या सिस्टम क्लॉक के बिना वातावरण में चल रहा है, तो क्या इनपुट के रूप में वर्तमान समय लेना स्वीकार्य है?
टटलमैन

जवाबों:


6

बैश + कोरुटिल्स, 35 बाइट्स

factor $[`date +%Y`+543]|awk NF==11

आउटपुट या तो एक गैर-रिक्त स्ट्रिंग (सत्य) या एक रिक्त स्ट्रिंग (मिथ्या) है।

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

वैकल्पिक संस्करण: 37 बाइट्स।

date -d 543year +%Y|factor|awk NF==11

गोल्फ के रूप में नहीं, लेकिन मुझे यह पसंद है।

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

यह काम किस प्रकार करता है

अंकगणितीय विस्तार की $[तारीख +% Y वर्तमान (पूर्ण) वर्ष प्राप्त करने के लिए +543]निष्पादित करता date +%Yहै और वर्ष में 543 जोड़ता है ।

कारक एक तर्क के रूप में योग लेता है और इसे प्रधान कारक के रूप में प्रिंट करता है: पहले संख्या को फैक्टर किया जाता है, फिर व्यक्तिगत प्रमुख कारकों की एक सूची।

अंत में, awk इनपुट को फ़िल्टर करता है, केवल 11 फ़ील्ड्स (संख्या प्लस 10 प्रमुख कारक) के साथ केवल लाइनें प्रिंट करता है।





4

गणितज्ञ, Mat ३१ बाइट्स

Lanlock4 के कारण 5 बाइट्स बच गए ।

PrimeOmega[#&@@Date[]+543]==10&

अनाम फ़ंक्शन। कोई इनपुट और रिटर्न लेता है Trueया Falseआउटपुट के रूप में।


Nowनिहित है। आप उपयोग कर सकते हैं DateValue@"Year"
मार्टिन एंडर

क्या आपको &अंत में आवश्यकता है ? इसके अलावा, Date[][[1]]बाइट्स की एक जोड़ी से कम है DateValue@"Year"(यदि आप बुरा नहीं है कि Dateअप्रचलित है)।
एक पेड़

1
आप के #&@@Date[]स्थान पर एक बाइट को बचा सकते हैं Date[][[1]]। इसके अलावा, मुझे लगता है कि "गणितज्ञ + आरईपीएल पर्यावरण" यहां एक वैध प्रोग्रामिंग भाषा है, जिसके लिए आपको समाप्ति की आवश्यकता नहीं है &
ग्रेग मार्टिन

@GregMartin ओह ठीक है, मैं उस का एक बड़ा प्रशंसक कभी नहीं रहा हूँ
LegionMammal978


2

जाप , 18 14 13 बाइट्स

543+Ki¹k l ¥A

बच निकले 4 बाइट्स ETHproductions की बदौलत। Obarakon के लिए 1 बाइट का धन्यवाद सहेजा गया।

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


अच्छा उत्तर! यदि आप चीजों को इधर-उधर करते हैं तो आप बाइट बचा सकते हैं: A¥º543+Ki¹k lया543+Ki¹k l ¥A
ओलिवर

@obarakon धन्यवाद! क्यों ¹इस्तेमाल किया जाता है, )वही काम नहीं करेगा ?
टॉम

हां, आप )इसके बजाय उपयोग कर सकते हैं ।
ओलिवर

2

पायथन 2 , 92 89 बाइट्स

जोनाथन एलन को -3 बाइट्स धन्यवाद

import time
y=time.gmtime()[0]+543
c=i=1
exec"i+=1\nwhile 1>y%i:y/=i;c-=1\n"*y
print-9==c

इसे ऑनलाइन आज़माएं!
मुख्य कारकों को निकालने (और कैपिंग) के लिए वर्ष तक Iterate।
निष्पादन रेखा इसके बराबर है:

for i in range(2,y):
 while not(y%i):
  y=y/i
  c=c-1

एक 3 बाइट बचा c=i=1:; c-=1; print-9==c
जोनाथन एलन

1

ऑक्टेव , 31 बाइट्स

nnz(factor(clock()(1)+543))==10

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

यहां इस्तेमाल की जाने वाली दो तरकीबें:

  • clock()(1)के उत्पादन में सीधे सूचकांक clock( clock(1)काम नहीं करता है)
  • nnzइसके बजाय numel, जैसा कि सभी प्रविष्टियों को नॉनजरो होने की गारंटी है।

वैकल्पिक संस्करण, एक ही बाइट गिनती

nnz(factor(max(clock)+543))==10

इस संस्करण का उपयोग केवल वर्षों से अधिक के लिए किया जा सकता है 30, लेकिन स्पष्ट रूप से समय यात्रा की अवहेलना करने पर इसमें वे सभी वर्ष शामिल हैं जिनमें कार्यक्रम निष्पादित किया जा सकता है। यह Matlab में भी काम करता है।


1

PHP, 111 68 66

$a=date(Y)+543;for($i=2;$i<$a;)$b+=$a%$i?!++$i:!!$a/=$i;echo$b==9;

सीधे प्रमुख कारकों की संख्या गिना जाता है।

$a=date(Y)+543;             // current year
for($i=2;$i<$a;)            // while $i lower than the year
$b+=$a%$i?!++$i:!!$a/=$i;   // if $i divides $a: $a/=$i and ++$b | if not: ++$i
echo$b==9;                  // output if it has 10 prime factors

पुराना विचार: 111 90

for($i=1;++$i<1e3;)for($j=1;++$j<1e3;)${$i*$j}=($$i?:1)+($$j?:1);echo${date('Y')+543}==10;

यह एक मुख्य फैक्टरिंग बिल्डिन का उपयोग नहीं करता है, लेकिन मूल रूप से एक गिनती के प्रमुख कारकों की संख्या प्राप्त करने के लिए एक प्रमुख चलनी है <10000। यह 4 अंकों के वर्ष के नक्शे जो PHP का उपयोग करता है date('Y'):

for($i=1;++$i<1e3;)          // for each number smaller sqrt(1e4)
for($j=1;++$j<1e3;)          // do sqrt(1e4) times
${$i*$j}=($$i?:1)+($$j?:1);  // n_factors[i*j] = n_factors[i] + n_factors[j]
echo${date('Y')+543}==10;          // output 1 if the current year has 10 prime factors or nothing if it doesn't

1
-2 बाइट्स: के Yसाथ कोई उद्धरण की जरूरत है -nr
तीतुस

1
अपने पुराने विचार पर: क्यों आरंभ करें? $a[$i*$j]=($a[$i]?:1)+($a[$j]?:1)13 बाइट्स बचाता है। $j=++$i<1e4एक बचाता है। और Yदो के लिए कोई उद्धरण नहीं ।
टाइटस


0

बैच, 123 बाइट्स

@set/ay=%date:~-4%+543,n=d=2
:l
@set/ar=y%%d,d+=1
@if %r%==0 set/ay/=d-=1,n+=1
@if %y% gtr 1 goto l
@if %n%==12 echo 1

आप स्क्रिप्ट को dateचलाने से पहले चर को मैन्युअल रूप से ओवरराइड करके नकली कर सकते हैं ।


0

जे , 18 बाइट्स

कार्यक्रम निकाय:

10=#q:543+{.6!:0''

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

10= के बराबर दस है

# का टैली

q: के प्रमुख कारक

543+ इस संख्या में जोड़ा गया

{. सिर (पहली वस्तु, अर्थात वर्ष)

6!:0'' दिनांक (YMD hms के रूप में)


0

जावास्क्रिप्ट (ईएस 6), 79 75 बाइट्स

f=(y=+Date().slice(11,15)+543,d=2,n=10)=>y>1?y%d?f(y,d+1,n):f(y/d,d,n-1):!n

मेरे बैच जवाब का पोर्ट। यदि आप एक विशिष्ट परीक्षण करना चाहते हैं तो थाई कैलेंडर वर्ष में पास करें । संपादित करें: @dandavis के लिए धन्यवाद 4 बाइट्स सहेजे गए।


कैसे के बारे मेंnew Date().getYear()+2443
मैट

@ मेघ ऊग, यही एमडीएन कहता है कि यह नहीं है ... लेकिन यह पदावनत है, इसलिए मुझे यकीन नहीं है कि मुझे इसे वैसे भी उपयोग करना चाहिए।
नील

2017 पास कर रहा है == false? शॉर्टर्स: +Date().slice(11,15)+543और के y?बजायy>1
dandavis

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