ทำสมการทางคณิตศาสตร์นับจากวันที่


19

ในชั้นเรียนวิชาเศรษฐศาสตร์เพื่อนของฉันและฉันชอบคิดหาวิธีจัดเรียงตัวเลขใหม่ในรูปแบบวันที่ (เป็น MM / DD / YY) เพื่อสร้างสมการทางคณิตศาสตร์ที่ถูกต้อง ส่วนใหญ่เราได้รับอนุญาตให้ใช้การบวกการลบการคูณการหารวงเล็บและการยกกำลังนอกเหนือไปจากการต่อข้อมูล

โปรแกรมของคุณควรทำสิ่งที่คล้ายกัน โปรแกรมควรนำเข้าวันที่ปัจจุบันและตัวดำเนินการแทรกเพื่อพิมพ์นิพจน์ตามกฎต่อไปนี้

  • ต้องใช้ตัวเลขตามลำดับ ไม่อนุญาตให้จัดเรียงตัวเลข
  • การแสดงออกที่เกิดขึ้นจะต้องถูกต้องทางคณิตศาสตร์
  • อนุญาตการบวกการลบการคูณการหารการยกกำลังและการใช้วงเล็บได้ ดังนั้นการต่อกันของตัวเลข อย่างไรก็ตามการดำเนินการบางอย่างไม่จำเป็นต้องมี คุณไม่สามารถใช้เครื่องหมายลบเพื่อสร้างตัวเลขลบ (เช่น-1+1+11=10วันที่ 11 พฤศจิกายน 2010)
  • โปรแกรมจะต้องทำงานใน 60 วินาทีบนเครื่องมาตรฐาน

ตัวอย่างเช่นความท้าทายนี้เขียนเมื่อวันที่ 10 พฤศจิกายน 2558 โปรแกรมจะตีความสิ่งนี้เป็น 11/10/15 (1+1)/10=1/5การส่งออกจะเป็นตัวอย่าง


โบนัส

คุณอาจคูณจำนวนไบต์ในรหัสของคุณด้วย 0.9 สำหรับแต่ละรายการของโปรแกรมของคุณที่สนับสนุน

  • โปรแกรมพิมพ์นิพจน์ที่เป็นไปได้ทั้งหมดที่สามารถจัดรูปแบบคั่นด้วยบรรทัดใหม่ คูณด้วย 0.95 เพิ่มเติมหากนิพจน์แสดงรายการตามลำดับที่เพิ่มขึ้นของสัญลักษณ์เพิ่มเติม
  • โปรแกรมนี้ยังใช้งานได้กับวันที่ MM / DD / YYYY พิมพ์ความเป็นไปได้ด้วยตัวเลขสองหลักแรกของปีนอกเหนือจากความเป็นไปได้โดยไม่ต้อง หากโบนัสนี้รวมกับโบนัสแรกจะต้องพิมพ์ความเป็นไปได้ทั้งหมดที่มีตัวเลขสองหลักแรกของปี
  • โปรแกรมนี้ยังพิมพ์สมการเมื่อมีหลาย equalities (ตัวอย่างเช่นเมื่อวันที่ 11 พฤศจิกายน 2011, 1=1=1=1=1=1จะได้รับการตีพิมพ์ในนอกเหนือไปจากความเป็นไปได้เช่น1*1=1=1=1=1, 1*1*1=1=1=1และ1*1*1*1=1=1. กรณีดังกล่าวทุกคนจะต้องพิมพ์สำหรับโบนัสแรกที่จะทำได้
  • โปรแกรมรองรับการแปลงเป็นฐานระหว่าง 2 ถึง 16 โปรดทราบว่าหากฐานไม่ใช่ 10 ตัวเลขทั้งหมดในนิพจน์จะต้องเขียนในฐานเดียวกันและ (Base b)ต้องเขียนหลังนิพจน์ ( bแทนที่ด้วย)

นี่คือรหัสกอล์ฟดังนั้นจึงใช้กฎมาตรฐาน รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ


1
อนุญาตการดำเนินงานใดบ้าง
anOKsquirrel

1
@FryAmTheEggman มีความคล้ายคลึงกันพอที่จะเรียกสิ่งนี้ว่าซ้ำซ้อนได้หรือไม่? ฉันไม่คิดอย่างนั้นเพราะความท้าทายนี้ไม่ได้ใช้เพียงหนึ่งหลักเท่านั้นและไม่มี RHS ที่เฉพาะเจาะจงในใจ (ความเท่าเทียมกันเท่านั้น)
Arcturus

17
DD / MM / YYYY> MM / DD / YYYY
orlp

3
ฉันคิดว่าคุณต้องการใช้สมการในคำถามของคุณที่คุณเขียนนิพจน์ (การแสดงออกเป็นเพียงด้านหนึ่งของสมการแล้วคำถามของคุณก็ไม่สมเหตุสมผล)
Paŭlo Ebermann

1
สิ่งนี้พิสูจน์ได้ว่าเป็นไปได้สำหรับวันใดก็ตาม
Zach Gates

คำตอบ:


6

Python 3, 424 420 369 363 ไบต์

import time as t
r=range
x=len
d=list(t.strftime('%m%d%y'))
o=([[x,x+'(',x+')']for x in ['']+"+ - == * / **".split()])
n=[]
for l in o:
    n=l+n
o=n
for p in r(x(o)**(x(d)-1)):
    e=''
    for i in r(x(d)-1):
        e+=str(d[i])+o[(p//(x(o)**i))%x(o)]
    e+=str(d[-1])
    try:
        if eval(e)and e.find('=')!=-1:
            print(e.replace('==','=').replace('**','^'))
            break
    except:pass

เดรัจฉานกองกำลังทั้งหมดที่เป็นไปได้รวมกันของการดำเนินงานในตัวเลขและหยุดเมื่อพบ

แก้ไข: บันทึกแล้ว 4 ไบต์ด้วย @NoOneIsHere

แก้ไข 2: บันทึก 51 (!) ไบต์ขอบคุณ @ValueInk


1
สวัสดีและยินดีต้อนรับสู่ PPCG! คุณสามารถแทรกและลบพื้นที่ในexcept:pass [ (p//(len(o)**i))%len(o)]
NoOne อยู่ที่นี่

หากคุณกำลังนำเข้าการแบ่งจากการ__future__อัปเกรดเป็น Python 3 จะทำงานได้ดีขึ้นสำหรับสถานการณ์ของคุณหรือไม่ นอกจากนี้ฉันไม่เข้าใจว่าทำไมคุณย้อนกลับoเมื่อคุณสร้างรายชื่อผู้ประกอบการที่คุณมี
หมึกมูลค่า

@ คุ้มค่าใช่ฉันอาจเปลี่ยนเป็น python 3 และบันทึกได้ไม่กี่ไบต์ เมื่อฉันเริ่มทำสิ่งที่ท้าทายฉันไม่ได้มุ่งเน้นไปที่การเล่นกอล์ฟเลยดังนั้นมันจึงสามารถทำให้สั้นลงได้ นอกจากนี้เนื่องจากโปรแกรมกำลังเดรัจฉานบังคับให้ชุดค่าผสมทั้งหมดจนกว่าจะพบหนึ่งความเร็วเป็นปัญหาและฉันพบว่ามันมีแนวโน้มที่จะทำงานได้เร็วขึ้นหากคุณใช้การย้อนกลับของ o ฉันอาจจะเล่นกอล์ฟนี้ลงอีกเล็กน้อยเพื่อให้มันเป็นคู่แข่งที่ร้ายแรง
Theo

o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])for 2 bytes
Jonathan Allan

1
@JonathanAllan Huh ขอบคุณสำหรับการชี้ให้เห็นเหล่านี้ ฉันจะทำงานซ้ำของรหัสเมื่อฉันมีเวลา (อาจจะพรุ่งนี้)
Theo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.