ปฏิทินไทยหวงแหน


13

ในปฏิทินไทยปี 2560 ตรงกับปี 2560 ปฏิทินไทยมักจะอยู่ข้างหน้าปฏิทินเกรกอเรียน 543 ปี

ผู้สังเกตการณ์จะสังเกตเห็นว่า 2560 มีค่าเท่ากับ2^9 * 5ในคำอื่น ๆ มันมี 10 ปัจจัยสำคัญ สิ่งนี้จะไม่เกิดขึ้นอีกในอีก 896 ปี! เราเรียกหนึ่งปีว่าหวงแหนถ้ามันมีปัจจัยสำคัญสิบประการ

เขียนโปรแกรมที่ให้ค่าความจริงถ้าปีปัจจุบันที่ใช้ปฏิทินไทยโดยยึดตามเวลาของระบบคือการยึดติดและค่าความผิดพลาดเป็นอย่างอื่น

กรณีทดสอบ:

  • หากโปรแกรมทำงานระหว่างปี 2560 true
  • หากโปรแกรมทำงานระหว่างปี 2018 ถึง 2912 false
  • หากโปรแกรมทำงานระหว่าง 2913, true(2913 + 543 = 2^7 * 3^3)

หากใช้ภาษาหรือทำงานในสภาพแวดล้อมที่ไม่มีนาฬิการะบบจะสามารถใช้เวลาปัจจุบันเป็นอินพุตได้หรือไม่?
Tutleman

คำตอบ:


6

Bash + coreutils 35 ไบต์

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

เอาต์พุตเป็นสตริงที่ไม่ว่าง (จริง) หรือสตริงว่าง (เท็จ)

ลองออนไลน์!

รุ่นอื่น: 37 ไบต์

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

ไม่เหมือนกอล์ฟ แต่ฉันชอบอันนี้

ลองออนไลน์!

มันทำงานอย่างไร

$[วันที่ขยายเลขคณิต+% Y +543]ดำเนินการdate +%Yเพื่อรับปีปัจจุบัน (เต็ม) และเพิ่ม543ปี

Factor ใช้ผลรวมเป็นอาร์กิวเมนต์และพิมพ์เป็นตัวประกอบเฉพาะ: อันดับแรกให้แยกตัวประกอบจากนั้นจึงแสดงรายการปัจจัยเฉพาะแต่ละตัว

ในที่สุด awk กรองอินพุตพิมพ์เฉพาะบรรทัดที่มี 11 ฟิลด์เท่านั้น (จำนวนบวก 10 ปัจจัยหลัก)


ขอให้เรายังคงอภิปรายนี้ในการแชท
seshoumara



4

Mathematica, 37 31 ไบต์

5 ไบต์บันทึกไว้เนื่องจากlanlock4

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

ฟังก์ชั่นไม่ระบุชื่อ ไม่รับอินพุตและส่งคืนTrueหรือFalseเป็นเอาต์พุต


Nowเป็นนัย DateValue@"Year"คุณสามารถใช้
Martin Ender

คุณต้องการ&ที่สิ้นสุดหรือไม่ นอกจากนี้Date[][[1]]มีสองสามไบต์ที่สั้นกว่าDateValue@"Year"(ถ้าคุณไม่ทราบว่าDateล้าสมัย)
ไม่ใช่ต้นไม้

1
คุณสามารถบันทึกไบต์ที่มีในสถานที่ของ#&@@Date[] Date[][[1]]นอกจากนี้ผมคิดว่า "สภาพแวดล้อม Mathematica + REPL" &เป็นภาษาโปรแกรมที่ถูกต้องที่นี่ที่คุณไม่จำเป็นต้องยุติ
Greg Martin

@ GregMartin โอใช่ฉันไม่เคยเป็นแฟนตัวยงของเรื่องนั้น
LegionMammal978


2

Japté , 18 14 13 ไบต์

543+Ki¹k l ¥A

บันทึกแล้ว 4 ไบต์ด้วย ETHproductions บันทึกแล้ว 1 ไบต์ขอบคุณ obarakon

ลองออนไลน์!


คำตอบที่ดี! คุณสามารถบันทึกไบต์ถ้าคุณย้ายสิ่งต่าง ๆ : A¥º543+Ki¹k lหรือ543+Ki¹k l ¥A
Oliver

@obarakon ขอบคุณ! ทำไมถึง¹ใช้ไม่)ทำแบบเดียวกัน
Tom

ใช่คุณสามารถใช้)แทน
Oliver

2

Python 2 , 92 89 ไบต์

-3 ไบต์ขอบคุณ Jonathan Allan

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

ลองออนไลน์!
ทำซ้ำได้ตลอดทั้งปีแยกปัจจัยที่สำคัญ (และ couting)
บรรทัด exec เทียบเท่ากับ:

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.
Jonathan Allan

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;

สิ่งนี้ไม่ได้ใช้ตัวเลือกแฟคตอริ่งในตัว แต่เป็นตะแกรงสำหรับนับจำนวนเพื่อให้ได้ปัจจัยจำนวนเฉพาะจำนวน <10,000. แผนที่นี้ใช้กับปี 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

J , 18 ไบต์

ร่างกายของโปรแกรม:

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

ลองออนไลน์!

10= เท่ากับสิบ

# นับของ

q: ปัจจัยสำคัญของ

543+ เพิ่มหมายเลขนี้ใน

{. หัว (รายการแรกคือปี) ของ

6!:0'' วันที่ (เป็น YMD hms)


0

JavaScript (ES6), 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

พอร์ตของคำตอบแบทช์ของฉัน ผ่านปีปฏิทินไทยหากคุณต้องการทำแบบทดสอบเฉพาะ แก้ไข: บันทึกแล้ว 4 ไบต์ขอบคุณ @dandavis


แล้วnew Date().getYear()+2443
Matt

@ Matt Ugh นั่นไม่ใช่สิ่งที่ MDN บอกว่าทำ ... แต่มันเลิกใช้แล้วดังนั้นฉันไม่แน่ใจว่าฉันควรจะใช้มันต่อไป
Neil

ผ่านปี 2017 == false? ผู้ชนะ: +Date().slice(11,15)+543และy?แทนy>1
dandavis

@Davavis y?ไม่มีจุดหมายไม่มีyวันเป็นศูนย์
Neil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.