So sánh quyền hạn.


13

So sánh hai số N 1 = a b c , N 2 = d e f bằng cách xây dựng hàm f (a, b, c, d, e, f) rằng:

  • trả về 1 nếu N 1 > N 2
  • trả về -1 nếu N 1 <N 2

Lưu ý: Bạn không bắt buộc phải trả lại bất kỳ giá trị nào cho bất kỳ mối quan hệ nào khác giữa N 1 và N 2 . ví dụ khi chúng bằng nhau hoặc khi quan hệ của chúng không xác định (số phức).

các ràng buộc khác:

  • tất cả các số là số nguyên
  • a, b, c, d, e, f có thể dương hoặc âm nhưng không bằng không.
  • | a |, | d | <1000
  • | b |, | c |, | e |, | f | <10 10
  • thời gian chạy ít hơn vài giây

Ví dụ:

f(100,100,100,50,100,100) = 1
f(-100,100,100,50,100,100) = 1
f(-100,99,100,50,100,100) = -1
f(100,-100,-100, -1, 3, 100) = 1
f(535, 10^9, 10^8, 443, 10^9, 10^9) = -1

Đây là mã golf. Mã ngắn nhất sẽ thắng.


3
Nếu chúng bằng nhau thì nó có trả về 0 không? Hoặc bạn cho rằng không có cách nào N1 sẽ bằng N2?
Jonathan M Davis

Chúng tôi có thể nhận được một số mẫu đầu vào / đầu ra?
Dogbert

@Jonathan: Tôi không chỉ định trường hợp "bình đẳng" trên mục đích. Làm như bạn muốn. Bạn thậm chí có thể cho rằng chúng không bao giờ bằng nhau.
Eelvex

@Dogbert: xong rồi.
Eelvex

| b |, | c |, | e |, | f | <10 ^ 10 dường như mâu thuẫn với ví dụ cuối cùng của bạn
Tiến sĩ belisarius

Câu trả lời:


3

Toán học, 110 ký tự

z[a_,b_,c_,d_,e_,f_]:=With[{g=Sign[a]^(b^c),h=Sign[d]^(e^f)},If[g!=h,g,g*Sign[Log[Abs[a]]b^c-Log[Abs[d]]e^f]]]

Bạn sử dụng loại Mathicala nào ở đó và câu thần chú nào phải được sử dụng để thực sự làm cho nó hoạt động? Đưa phần trên vào Mathicala 8 chỉ mang lại »Cú pháp :: bktwrn:" z (a_, b_, c_, d_, e_, f_) "đại diện cho phép nhân; sử dụng "z [a_, b_, c_, d_, e_, f_]" để biểu diễn một hàm. «và» Cú pháp :: sntxf: "z (a_" không thể theo sau bởi ", b_, c_, d_, e_, f_ ): = sgn (ln (abs a) b ^ c-ln (abs d) e ^ f) ".«
Joey

Thất bại trong bản thử nghiệm 3,-3,3,-4,1,1, nếu tôi không hoàn toàn nhầm lẫn (không có Mathicala ở đây, nhưng Wolfram Alpha dường như đồng ý ).
Ventero

Ok z[a_,b_,c_,d_,e_,f_]:=Sign[Log[Abs[a]]b^c-Log[Abs[d]]e^f], mặc dù nó hoạt động với thời gian dài hơn đáng kể so với những gì bạn có ở đó. Tôi có lẽ đang thiếu một cái gì đó ở đây.
Joey

@Joey, tôi thực sự không có Mathematica, vì vậy tôi đã thử nghiệm với giao diện Wolfram Alpha. Có vẻ như nó hào phóng hơn nhiều với những gì nó chấp nhận. À - ưu tiên là @Ventero chỉ ra một lỗi chính xác với logic.
Peter Taylor

Nó sẽ "chạy trong ít hơn một vài giây" cho z[535, 10^9, 10^8, 443, 10^9, 10^9]?
Eelvex

7

Ruby 1.9, 280 227 189 171 ký tự

z=->a,b,c,d,e,f{l=->a{Math.log a}
u=->a,b{[a.abs,a][b&1]}
a=u[a,b=u[b,c]]
d=u[d,e=u[e,f]]
d*a<0?a<=>d :b*e<0?b<=>e :(l[l[a*q=a<=>0]/l[d*q]]<=>f*l[e*r=b<=>0]-c*l[b*r])*q*r}

Tôi biết đây là một chút dài hơn các giải pháp khác, nhưng ít ra phương pháp này nên làm việc mà không tính toán một b c , d e f , b c hoặc e f .

Biên tập:

  • (279 -> 280) Đã sửa lỗi khi a**b**c < 0d = 1.
  • (280 -> 227) Đã xóa một kiểm tra không cần thiết cho trường hợp đặc biệt.
  • (227 -> 192) Đã xóa một số kiểm tra không cần thiết với các tiêu chí đã cho (số nguyên khác không, không cần đầu ra cho các giá trị phức tạp)
  • (192 -> 189) Do tất cả các kiểm tra khác, tôi có thể tính toán một cách an toàn log(log(a)/log(d))thay vì log(log(a))-log(log(d)).
  • (189 -> 171) Cách đơn giản hóa để chuyển đổi các vấn đề tương đương sang nhau.

Testcase:

z[100, 100, 100, 50, 100, 100] == 1
z[-100, 100, 100, 50, 100, 100] == 1
z[-100, 99, 100, 50, 100, 100] == -1
z[100, -100, -100, -1, 3, 100] == 1
z[535, 10**9, 10**8, 443, 10**9, 10**9] == -1
z[-1, -1, 1, 2, 2, 2] == -1
z[1, -5, -9, 2, -1, 2] == -1
z[1, -5, -9, 2, -1, 3] == 1
z[3, -3, 3, -4, 1, 1] == 1
z[-2, 1, 1, 1, 1, 1] == -1
z[1, 1, 1, -1, 1, 1] == 1
z[1, 1, 1, 2, 3, 1] == -1
z[1, 1, 1, 2, -3, 2] == -1
z[1, 1, 1, 2, -3, 1] == 1
z[-1, 1, 1, 1, 1, 1] == -1
z[2, 3, 1, 1, 1, 1] == 1
z[2, -3, 2, 1, 1, 1] == 1
z[2, -3, 1, 1, 1, 1] == -1

1

ShortScript , 89 byte

{CP
$M^ η1 η2
$M^ ζ η3
↑Αζ
$M^ η4 η5
$M^ ζ η6
↔α>ζ↑Ζ1
↔α<ζ↑Ζ-1}

Việc thực hiện không chính xác như mô tả, nhưng nó hoạt động.

Câu trả lời này không cạnh tranh, vì ShortScript đã được xuất bản sau thử thách này.


0

Python 2.6 (cái này không thực sự hoạt động)

import cmath
g=cmath.log
f=lambda a,b,c,d,e,f:-1+2*((c*g(b)+g(g(a))-f*g(e)-g(g(d))).real>0)

hôm nay tôi học python có chức năng đăng nhập phức tạp. vì vậy, mù đôi đăng nhập cả hai bên và nhìn vào thành phần thực. làm việc cho 4 trong số 5 bài kiểm tra. không chắc chắn những gì đang xảy ra với cái thứ tư.

print f(100,100,100,50,100,100) == 1
print f(-100,100,100,50,100,100) == 1
print f(-100,99,100,50,100,100) == -1
print f(100,-100,-100, -1, 3, 100) == 1 # failure, sadness.
print f(535, 10^9, 10^8, 443, 10^9, 10^9) == -1

Chà, chính là tôi đã làm hỏng ví dụ đó là sai: / Xin lỗi ... đã sửa nó ...
Mười

mã của tôi vẫn trả về -1 cho ví dụ thứ tư sai khi a = 100
roobs

So sánh chỉ là phần thực sự là không chính xác.
Eelvex

yeah, phần đó là một vết đâm trong bóng tối. đây là nơi tôi rất tiếc khi bỏ qua khóa học đó trong phân tích phức tạp
roobs

-1

Con trăn (99)

from math import*
from numpy import*
l=log
def f(a,b,c,d,e,f):return sign(l(a)*l(b)*c-l(d)*l(e)*f)

8
Thất bại về tiêu cực.
JB

-2

Haskell, 44 ký tự

n True=1
n _=1-2
g a b c d e f=n$a^b^c>d^e^f

Chạy dưới một giây cho tất cả các ví dụ thử nghiệm trên máy của tôi .


Tôi có một siêu nhân từ tương lai.
Thomas Eding

Ngoài ra mã máy được tối ưu hóa cao. Kiểm tra mã được biên dịch, nó thực hiện logarit và các hoạt động khác. THC (Trình biên dịch Trinithis Haskell) là một trình biên dịch thông minh !!! Ai nói tôi phải sử dụng GHC hay Hugs? Trong thực tế, tôi có thể cung cấp mã nguồn thực cho trình biên dịch của mình có phụ thuộc GHC. Nó sẽ xuất mã nhanh cho mã nguồn này ngay cả trên / your / machine. Hơn nữa, nó sẽ biên dịch chương trình BẤT K H Haskell với độ chính xác tương tự như GHC (GHC là phụ trợ).
Thomas Eding

@downvoters: Tôi sẽ cung cấp toàn bộ mã nguồn vào cuối tuần này (tôi sẽ không ở nhà một lúc) để trình biên dịch của tôi chứng minh với bạn rằng nó chạy nhanh. Nói về tốc độ ngôn ngữ là vô nghĩa, vì tất cả đều tập trung vào trình biên dịch / trình thông dịch.
Thomas Eding

Và tôi thậm chí không nói về tốc độ / hiệu quả nhảm nhí. Tôi đã đề cập đến cách (TRƯỚC KHI bạn đã chỉnh sửa bài đăng và thay đổi chức năng bthành n) loại chức năng f được đưa ra bởi f :: (Ord a, Num a, Integral b2, Integral (Bool -> t), Integral b, Integral b1) => a -> (Bool -> t) -> b -> a -> b1 -> b2 -> tnhững thứ khá lạ, phải không?
everalmatt
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.