Số học Tock số lượt đánh dấu


15

Câu hỏi này mang đến cho bạn bởi một trò chơi tôi thích chơi khi bị mắc kẹt trong các cuộc họp điện thoại dài.

Cho bất kỳ hai lần nào từ đồng hồ 24 giờ (từ 00:00 đến 23:59), có thể tạo ra bao nhiêu phương trình toán học hợp lệ với tất cả các lần ở giữa chỉ sử dụng các phép tính số học cơ bản?

Đầu vào: hai chuỗi bốn chữ số (không có dấu hai chấm) biểu thị thời gian hợp lệ trong chu kỳ 24 giờ.

Ví dụ:

Đối với đầu vào = 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.

Các hoạt động hợp lệ là:

  • thêm vào
  • phép trừ
  • phép nhân
  • bộ phận (điểm nổi)
  • lũy thừa
  • yếu tố

Biểu tượng cho phép khác

  • Dấu ngoặc đơn
  • Dấu bằng

Mã ngắn nhất sẽ thắng.

Ghi chú

  • Mục tiêu là tìm số lượng biểu thức hợp lệ giữa hai lần, không phải số lần chứa biểu thức hợp lệ.
  • Hai lần được đưa ra làm đầu vào được bao gồm trong phạm vi thời gian.
  • Bạn có thể nhóm các chữ số theo bất kỳ cách nào có thể, vì vậy "1223" có thể là "12 23" hoặc "1 2 23" hoặc "1 223", v.v.
  • Bạn có thể sử dụng nhiều dấu ngoặc đơn khi cần thiết.
  • Bạn có thể sử dụng nhiều hơn một =dấu hiệu. Ví dụ, thời gian 11:11có biểu thức hợp lệ 1=1=1=1.
  • Nếu lần đầu tiên xảy ra theo trình tự thời gian sau lần thứ hai, phạm vi thời gian sẽ bao trùm như thể vượt qua vào ngày hôm sau.
  • Các số phải duy trì theo thứ tự ban đầu - bạn không được sắp xếp lại các chữ số.
  • Khi phân cụm số, số 0 hoàn toàn có thể là chữ số phía trước nhất, trong trường hợp đó, chúng bị bỏ qua ("0303" được phân cụm là "03 03" chỉ là hai chữ số có giá trị là 3.)
  • Bạn KHÔNG THỂ sử dụng dấu trừ làm phủ định đơn phương. Do đó, "12:01" KHÔNG tạo ra "1-2 = - (01)", nhưng KHÔNG tạo ra "1-2 = 0-1".
  • Bạn KHÔNG THỂ thêm điểm thập phân vào chữ số. Do đó, "12:05" KHÔNG tạo ra "1/2 = 0,5".
  • Không có chuỗi các giai thừa - một chữ số có thể được theo sau bởi nhiều nhất một "!", Không còn nữa, nếu không, nhiều lần sẽ có các giải pháp vô hạn. Vd: "5!" là hợp lệ nhưng "5 !!" không hợp lệ


4
" Các hoạt động hợp lệ bao gồm " dường như ngăn bạn có thể thêm các trường hợp thử nghiệm. Sẽ là một câu hỏi tốt hơn nếu bạn thay đổi thành " Hoạt động hợp lệ " và thêm một số trường hợp thử nghiệm. Nó cũng sẽ hữu ích để chính xác về các điểm cuối: đối với đầu vào 0000 1300nên các phương trình xuất phát từ 00001300được bao gồm trong số đếm?
Peter Taylor

1
Cho các chữ số "1423", làm "1 + 4 = 2 + 3", "(1 + 4) = (2 + 3)", "(1 + 4) = 2 + 3" và "1 + 4 = (2 +3) "được tính là một hoặc bốn phương trình? Và ... tất cả các phương trình của "0000" là gì? Tôi nghĩ về khoảng 100 khả năng, hoặc thậm chí nhiều hơn ... Đây có thể là?
bobbel

2
Có bất kỳ hạn chế về việc sử dụng các nhà khai thác đơn nguyên? Không có sự hạn chế như vậy trong các quy tắc, giai thừa có thể được áp dụng nhiều lần và do đó một giải pháp hoàn hảo có thể chứng minh là không thể.
Michael Stern

1
Michael, đó là một quan sát tuyệt vời. Vì vậy, vì lợi ích của câu đố, tôi nghĩ rằng tôi sẽ giới hạn nó ở một giai thừa cho mỗi "chữ số", nếu điều đó có ý nghĩa. Do đó, 5! là hợp lệ nhưng 5 !! không hợp lệ
nobillygreen

Câu trả lời:


1

Python3, 363 ký tự

Vì không có câu trả lời nào được đưa ra cho đến ngày hôm nay, tôi đưa ra những gì tôi nhận được. Đáng buồn thay, khối thử / ngoại trừ quá béo, tôi đã không tìm được cách lưu ký tự ở đó. Nó thực sự khó khăn với các vòng lặp lồng nhau ở đó, không phải tất cả đều có thể được thực hiện với sự hiểu biết danh sách mà tôi nghĩ, nhưng có lẽ ai đó có thể cho tôi biết làm thế nào.

Tuy nhiên, bản thân tôi đã hạn chế thử thách chỉ sử dụng toán học cơ bản '+ - * /' và không có dấu ngoặc đơn.

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)

Mã đầy đủ của tôi (hy vọng điều gì đó giải thích) trên CodeGolf này có thể được tìm thấy trên pastebin của tôi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.