เลขคณิต… tock …ติ๊ก… tock


15

คำถามนี้นำมาให้คุณโดยเกมที่ฉันชอบเล่นเมื่อติดอยู่ในการประชุมทางโทรศัพท์ที่ยาวนาน

ให้สองเท่าจากนาฬิกา 24 ชั่วโมง (จาก 00:00 ถึง 23:59) จะสามารถสร้างสมการทางคณิตศาสตร์ที่ถูกต้องได้กี่ครั้งโดยใช้การดำเนินการทางคณิตศาสตร์พื้นฐานเท่านั้น

อินพุต:สตริงสองสี่หลัก (ไม่มีโคลอน) แทนเวลาที่ถูกต้องในรอบ 24 ชั่วโมง

ตัวอย่าง:

สำหรับอินพุต = 0000, 1300

03:26 produces: "0+3*2=6" and "03*2=6" etc.
11:10 produces quite a few, including: "1*1=1+0" and "1=1=1^0" and  "1=11^0" etc.
12:24 produces: "1/2=2/4" and "1=(2*2)/4" etc.

การดำเนินการที่ถูกต้องคือ:

  • ส่วนที่เพิ่มเข้าไป
  • การลบ
  • การคูณ
  • ส่วน (จุดลอย)
  • การยกกำลัง
  • ปัจจัย

สัญลักษณ์อื่น ๆ ที่อนุญาต

  • วงเล็บ
  • สัญญาณที่เท่าเทียมกัน

รหัสที่สั้นที่สุดชนะ

หมายเหตุ

  • เป้าหมายคือการค้นหาจำนวนของนิพจน์ที่ถูกต้องระหว่างสองครั้งไม่ใช่จำนวนครั้งที่มีนิพจน์ที่ถูกต้อง
  • สองครั้งที่ได้รับเป็นอินพุตจะรวมอยู่ในช่วงเวลา
  • คุณสามารถจัดกลุ่มตัวเลขในวิธีที่เป็นไปได้ดังนั้น "1223" จึงอาจเป็น "12 23" หรือ "1 2 23" หรือ "1 223" ฯลฯ เป็นต้น
  • คุณสามารถใช้วงเล็บได้มากเท่าที่ต้องการ
  • คุณสามารถใช้มากกว่าหนึ่ง=สัญญาณ ยกตัวอย่างเช่นเวลาที่มีการแสดงออกที่ถูกต้อง11:111=1=1=1
  • หากครั้งแรกเกิดขึ้นตามลำดับหลังจากครั้งที่สองช่วงเวลาควรตัดเหมือนกับว่าข้ามไปในวันถัดไป
  • หมายเลขจะต้องอยู่ในลำดับเดิม - คุณไม่สามารถสั่งซื้อตัวเลขได้อีก
  • เมื่อตัวเลขการจัดกลุ่มศูนย์อาจเป็นเลขหน้าหลักที่สุดซึ่งในกรณีนี้จะถูกละเว้น ("0303" ที่จัดกลุ่มเป็น "03 03" เป็นเพียงตัวเลขสองหลักโดยมีค่าเป็น 3)
  • คุณอาจไม่ใช้เครื่องหมายลบเป็นปฏิเสธคู่กัน ดังนั้น "12:01" จึงไม่สร้าง "1-2 = - (01)" แต่จะสร้าง "1-2 = 0-1"
  • คุณไม่สามารถเพิ่มจุดทศนิยมให้เป็นตัวเลข ดังนั้น "12:05" จึงไม่สร้าง "1/2 = 0.5"
  • ไม่มีการผูกมัดของแฟคทอเรียล - ตัวเลขอาจถูกตามด้วยอย่างน้อยหนึ่ง "!" ไม่มากไปกว่านั้นมิฉะนั้นหลายครั้งก็จะมีคำตอบไม่สิ้นสุด เช่น: "5!" ถูกต้อง แต่ "5 !!" ไม่ถูกต้อง


4
" การทำงานที่ถูกต้องรวมถึง " ดูเหมือนจะป้องกันคุณจากการเพิ่มกรณีทดสอบ มันจะเป็นคำถามที่ดีกว่าถ้าคุณเปลี่ยนเป็น " การดำเนินการที่ถูกต้อง " และเพิ่มกรณีทดสอบ มันจะมีประโยชน์ที่จะแม่นยำเกี่ยวกับจุดสิ้นสุด: สำหรับการป้อนข้อมูล0000 1300ควรสมการที่ได้มาจาก0000และ1300จะรวมอยู่ในการนับ?
Peter Taylor

1
ตัวเลขที่กำหนด "1423" ทำ "1 + 4 = 2 + 3", "(1 + 4) = (2 + 3)", "(1 + 4) = 2 + 3" และ "1 + 4 = (2 +3) "นับเป็นหนึ่งหรือสี่สมการหรือไม่ และ ... สมการทั้งหมดของ "0000" คืออะไร? ฉันคิดถึงความเป็นไปได้ประมาณ 100 ครั้งหรือมากกว่านั้น ...
bobbel

2
มีข้อ จำกัด ในการใช้งานของผู้ประกอบการเอกหรือไม่? ไม่มีข้อ จำกัด ดังกล่าวในกฎเหล่านี้แฟกทอเรียลสามารถนำไปใช้ซ้ำ ๆ ได้ดังนั้นวิธีการแก้ปัญหาที่สมบูรณ์แบบอาจเป็นไปไม่ได้
Michael Stern

1
ไมเคิลนั่นเป็นข้อสังเกตที่ยอดเยี่ยม ดังนั้นเพื่อประโยชน์ของปริศนาฉันคิดว่าฉันจะ จำกัด มันให้เป็นหนึ่งแฟคทอเรียลต่อ "หลัก" ถ้ามันสมเหตุสมผล ดังนั้น 5! ถูกต้อง แต่ 5 !! ไม่ถูกต้อง
โนเบิลกรีน

คำตอบ:


1

Python3, 363 ตัวอักษร

เนื่องจากไม่มีคำตอบจนกระทั่งทุกวันนี้ฉันจึงมอบสิ่งที่ฉันได้รับ น่าเสียดายที่ลอง / ยกเว้นบล็อกอ้วนเกินไปฉันไม่พบวิธีบันทึกตัวอักษรที่นั่น มันเป็นเรื่องยากมากที่มีลูปซ้อนกันอยู่ที่นั่นไม่สามารถทำได้ด้วยความเข้าใจในรายการที่ฉันคิด แต่อาจมีบางคนบอกฉันได้ว่า

อย่างไรก็ตามฉัน จำกัด การท้าทายให้ตัวเองใช้คณิตศาสตร์พื้นฐาน '+ - * /' เท่านั้นและไม่มีวงเล็บ

a,b = input().split()
r=0
for time in [c for c in range(int(a),int(b)) if c/10%10<6]:
 t,*ts='%04d'%time
 e=[t]
 for d in ts:
  e=[(n+o+d,n+d)[o==' '] for o in ' -+*/=' for n in e]
 for h in [g for g in [e.split('=') for e in e if '='in e] if len(g)>1]:
  for k in h:
   try:
    if eval(h[0]) != eval(k):
     break
   except:
    break
  else:
   r+=1
print(r)

โค้ดเต็มรูปแบบของฉัน (ความหวังบางสิ่งบางอย่างที่อธิบาย) บน CodeGolf นี้สามารถพบได้บนของPastebin

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