Bốn câu đố


21

Câu đố Four fours là một câu đố toán học giải trí phổ biến bao gồm sử dụng chính xác bốn 4s (và không có số nào khác) và một tập hợp các thao tác xác định để đạt được mọi số từ 0 đến tối đa nhất định.

Trong phiên bản này, các toán tử sau chỉ được phép:

  • Bất kỳ biểu tượng nhóm có thể được sử dụng
  • Ngoài ra ( +), Trừ ( -), Nhân ( *), Division ( /)
  • Yếu tố ( !), hàm Gamma ( Γ)
  • Số mũ ( ^), Căn bậc hai ( )
  • Ghép (ví dụ: 44hai 4s)
  • Điểm thập phân (ví dụ: 4.4là hai 4s), Overbar (ví dụ .4~ = 4/9:)

Thứ tự tiêu chuẩn của hoạt động áp dụng.

Chương trình của bạn sẽ tạo ra, đưa ra một đầu vào từ 0 đến 100, bao gồm một giải pháp chính xác cho đầu vào đó. Nếu chương trình đưa ra một giải pháp không hợp lệ cho bất kỳ đầu vào nào, chương trình đó không hợp lệ.

Ví dụ: với đầu vào là 0, chương trình của bạn có thể tạo 44-44.

Việc sử dụng các mô-đun bên ngoài không được phép. Chỉ _.4~được phép cho toán tử thanh ngang - nghĩa là, chỉ một người 4có thể đứng sau dấu thập phân.

Đây là mã golf, vì vậy giải pháp ngắn nhất sẽ thắng.


Chỉnh sửa : Để rõ ràng hơn, chương trình phải xuất ra một tập hợp các thao tác trên được áp dụng cho chính xác bốn 4giây - không hơn, không kém. Ngoài ra, .4 = 4/10là một thuật ngữ hợp lệ và được tính là chỉ sử dụng một 4.


không làm tròn số? :-(
John Dvorak

@JanDvorak err, không, điều đó sẽ không được phép.
Biến động

gamma và giai thừa đều được phép?
John Dvorak

@JanDvorak mọi thứ được liệt kê (nhưng chỉ những thứ được liệt kê) có thể được sử dụng.
Biến động

chúng ta có được phép xuất giai thừa như một hàm tiền tố ( !(4)chứ không phải (4)!) không?
John Dvorak

Câu trả lời:


6

GolfScript (129 ký tự *)

[4.`2'√4'24'4!'6'Γ4'1'Γ√4'120'ΓΓ4']2/:F{.F=[[44.`]]*\{`{+{'+*-'1/{:^;.[~@[\]{'()'1/*}%^*@@^~\]\}/}:|~2/~\+|;}+F/}%+}3*\{\0==}+?1=

Thời gian chạy là 4 phút trên PC của tôi. Tăng tốc độ vừa phải có thể đạt được bằng chi phí của hai ký tự bằng cách thêm một thao tác duy nhất .&ngay sau %+.

Tôi sử dụng các biểu trước mã cho 1, 2, 4, 6, 24, 120, và 44, và xây dựng các phần còn lại tăng so với những người chỉ sử dụng +, *-. Bằng cách này, tôi không cần phải thực hiện bất kỳ số học không nguyên nào trong chính chương trình. Tôi đã cố gắng để có được các biểu thức đơn giản hơn bằng cách đặt các giá trị tiền mã hóa đơn giản hơn khi bắt đầu.

Tất cả những giá trị được yêu cầu , và đó là cần thiết để hỗ trợ cả hai chiều của phép trừ ( complex_expression - simple_expressionvà ngược lại). Cũng cần bao gồm một số thao tác yêu cầu dấu ngoặc đơn (cụ thể, a*(b-c)), vì vậy tôi đóng khung tất cả các biểu hiện phụ một cách bừa bãi.

* Tôi đang đếm các điểm mã Unicode giả sử chương trình được mã hóa UTF-8 và thực tế là trừ khi bạn sử dụng phiên bản gần đây của Ruby để chạy trình thông dịch, nó thực sự coi nó là ký tự ASCII. Nếu bạn rất lo lắng về điều này, hãy sử dụng Gcho Gamma và vcho sqrt.

Vâng, đúng tôi có thể loại bỏ 44để đổi lấy 11như 44/471như √(Γ√4+(ΓΓ4+Γ√4)!), nhưng đó không phải là một sự đánh đổi tốt.


7

Python 155 byte

h={4:'4',24:'4!',6:'â4',.4:'.4',1:'âû4',4/9.:'.4~'}
f={}
def g(r,s='24',y='4!'):f[eval(s)]=y;[g(r-1,s+o+`k`,y+o+h[k])for k in h for o in'/*-+'if r]
g(3)

Ba byte đầu tiên ( \xEF\xBB\xBF) là dấu thứ tự byte UTF-8, mặc dù tệp phải được lưu ở định dạng ANSI. Các ûâsẽ được giải thích như Γtương ứng trong cp437cp850 , sẽ hoạt động trên bất kỳ hộp Windows nào.

Thời gian chạy là khoảng 0,4 giây trên máy tính của tôi.

Sử dụng mẫu (đặt tên tệp four_fours.py):

$ python
>>> from four_fours import f
>>> f[39]
'4!+4!/.4/4'
>>> f[87]
'4!*4-4/.4~'
>>> for i in range(101): print i, f[i]
0 4!+4!-4!-4!
1 4!+4!/4!-4!
2 4!-4!+Γ4-4
3 4!-4!+4-Γ√4
4 4!+4!/Γ4-4!
.
.
.
96 4!+4!+4!+4!
97 4!*4!/Γ4+Γ√4
98 4!*4+Γ4-4
99 4!*4+4-Γ√4
100 4!*4!/Γ4+4

Kết quả cho 0..100 . Do cách băm được lặp đi lặp lại, nó thích sử dụng 4!thường xuyên nhất có thể.

Chỉnh sửa: đã lưu một số byte bằng cách thêm Γ√4 = 1, giúp loại bỏ sự cần thiết của bất kỳ nhóm nào và bằng cách loại bỏ √4 = 2, điều này không còn cần thiết nữa.


4

J, 175 161 ký tự

   f=.')',~'(',;@((<;._2'+ - * % .4 .4~ g(r(4)) r(4) 4 g(4) 4! ( ) '){~(143402 A.i.9)
      /:~(12,11,0,6$0 4 4)+(9$4 7 7)#:((,@(+/,-/,*/,%/)~)^:2,0.4 4r9 1 2 4 6 24)&i.)

   f 1
(.4+.4)+(.4%r(4))

   f 42
(r(4)+4)+(g(4)*g(4))

   f 100
(r(4)+r(4))+(4*4!)

Định dạng đã kiểm tra là (v op v) op (v op v)ở đâu v={0.4 4/9 1 2 4 6 24}op={+ - * /}

đầy đủ 0..100 kết quả


Tôi không nghĩ .4là một con số hợp lệ cho trò chơi này.
John Dvorak

@JanDvorak là vậy - có lẽ tôi nên nói rõ hơn
Biến động
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.