힘 비교.


13

함수 f (a, b, c, d, e, f)를 구성하여 두 개의 숫자 N 1 = a b c , N 2 = d e f 를 비교합니다.

  • N 1 > N 2 이면 1을 반환
  • N 1 <N 2 이면 -1을 반환합니다

참고 : N 1 과 N 2 사이의 다른 관계에 대한 값을 반환하지 않아도됩니다 . 예를 들어 동일하거나 관계가 정의되지 않은 경우 (복소수)

다른 구속 조건 :

  • 모든 숫자는 정수입니다
  • a, b, c, d, e, f는 양 또는 음일 수 있지만 0은 아닐 수 있습니다.
  • | a |, | d | <1000
  • | b |, | c |, | e |, | f | <10 10
  • 몇 초 미만의 실행 시간

예 :

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

이것은 코드 골프입니다. 가장 짧은 코드가 승리합니다.


3
그들이 같으면 0을 반환해야합니까? 아니면 N1이 N2와 같을 방법이 없다고 가정합니까?
조나단 M 데이비스

샘플 입 / 출력을 얻을 수 있습니까?
Wile E. Coyote

@Jonathan : 의도적으로 "균등 한"사례를 지정하지 않았습니다. 당신이 원하는대로하십시오. 그것들이 결코 평등하지 않다고 가정 할 수도 있습니다.
Eelvex

@Dogbert : 끝났습니다.
Eelvex

| b |, | c |, | e |, | f | <10 ^ 10은 마지막 예와 모순되는 것 같습니다
Dr. belisarius

답변:


3

매스 매 티카, 110 자

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]]]

어떤 종류의 Mathematica를 사용하고 있으며 실제로 이것을 사용하려면 어떤 마법의 주문을 사용해야합니까? 위를 Mathematica 8에 넣으면»Syntax :: bktwrn : "z (a_, b_, c_, d_, e_, f_)"는 곱셈을 나타냅니다. 함수를 나타내려면 "z [a_, b_, c_, d_, e_, f_]"를 사용하십시오.«및»Syntax :: sntxf : "z (a_"뒤에 ", b_, c_, d_, e_, f_ ) : = sgn (ln (abs a) b ^ c-ln (abs d) e ^ f) ".«
Joey

3,-3,3,-4,1,1내가 완전히 착각하지 않으면 테스트 케이스가 실패합니다 (Mathematica가 없지만 Wolfram Alpha 는 동의하는 것 같습니다 ).
Ventero

좋아, 지금 가지고 z[a_,b_,c_,d_,e_,f_]:=Sign[Log[Abs[a]]b^c-Log[Abs[d]]e^f]있는 것보다 훨씬 긴 작업을하십시오 . 여기에 뭔가 빠졌을 것입니다.
Joey

@Joey, 나는 실제로 Mathematica를 가지고 있지 않기 때문에 Wolfram Alpha 인터페이스로 테스트하고있었습니다. 그것이 받아들이는 것에 훨씬 관대 해 보입니다. 아 잘-우선 순위는 @Ventero가 로직의 버그를 올바르게 지적하는 것입니다.
피터 테일러

"몇 초 안에 실행 z[535, 10^9, 10^8, 443, 10^9, 10^9]됩니까? "
Eelvex

7

루비 1.9, 280 227 189 171 자

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}

나는 이것이 다른 솔루션보다 조금 길다 는 것을 알고 있지만 적어도이 접근법은 b c , d e f , b c 또는 e f 를 계산하지 않고 작동해야합니다 .

편집하다:

  • (279-> 280) a**b**c < 0및 의 버그를 수정했습니다 d = 1.
  • (280-> 227) 특별한 경우에 대한 불필요한 점검을 제거했습니다.
  • (227-> 192) 주어진 기준에 필요하지 않은 일부 검사를 제거했습니다 (0이 아닌 정수, 복잡한 값에는 출력이 필요하지 않음)
  • (192-> 189) 다른 모든 검사로 인해 log(log(a)/log(d))대신 대신 안전하게 계산할 수 있습니다 log(log(a))-log(log(d)).
  • (189-> 171) 동등한 문제를 서로 변환하는 단순화 된 방법.

테스트 케이스 :

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 바이트

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

구현은 정확하게 설명 된 것은 아니지만 작동합니다.

이 도전 후에 ShortScript가 발표되었으므로이 답변은 경쟁이 아닙니다.


0

파이썬 2.6 (실제로는 작동하지 않습니다)

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)

오늘 저는 파이썬에 복잡한 로그 기능이 있다는 것을 배웠습니다. 따라서 맹목적으로 양면을 두 번 기록하고 실제 구성 요소를 살펴보십시오. 5 테스트 중 4에서 작동합니다. 네 번째 문제는 확실하지 않습니다.

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

글쎄, 그것은 내가 틀린 예를 엉망으로 만드는 것입니다 : / 죄송합니다 ... 그것을 고치십시오 ...
Eelvex

a = 100
roobs

실제 부분 만 비교하는 것은 올바르지 않습니다.
Eelvex

그래, 그 부분은 어둠 속에서 찌르고 있었다. 이것은 복잡한 분석에서 그 과정을 건너 뛰는 것을 후회하는 곳입니다.
roobs

-1

파이썬 (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
부정에 실패합니다.
JB

-2

하스켈, 44 자

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

컴퓨터의 모든 테스트 예제에 대해 1 초 이내에 실행됩니다 .


미래의 슈퍼 머신이 있습니다.
Thomas Eding

또한 머신 코드는 고도로 최적화되어 있습니다. 컴파일 된 코드를 검사하면 로그 및 기타 작업이 수행됩니다. THC (Trinithis Haskell Compiler)는 하나의 스마트 컴파일러입니다 !!! 내가 GHC 또는 포옹을 사용해야한다고 누가 말했습니까? 실제로 GHC 의존성을 가진 컴파일러에 실제 소스 코드를 제공 할 수 있습니다. / your / 컴퓨터에서도이 소스 코드에 대한 빠른 코드를 출력합니다. 또한, 모든 HASSKELL 프로그램을 GHC와 동일한 정확도로 컴파일합니다 (GHC는 백엔드).
Thomas Eding

@ downvoters : 컴파일러가 빨리 실행된다는 것을 증명할 수 있도록 이번 주말에 전체 소스 코드를 제공 할 것입니다. 언어 속도에 대해 이야기하는 것은 모두 컴파일러 / 통역사로 요약되므로 말이되지 않습니다.
Thomas Eding

그리고 나는 헛소리 속도 / 효율성에 대해서도 이야기하지 않았습니다. 나는 꽤 이상한 것들에 의해 주어진 함수 f의 유형 을 어떻게 (포스트를 편집하고 함수 b를으로 변경하기 전에) 언급 했습니까? nf :: (Ord a, Num a, Integral b2, Integral (Bool -> t), Integral b, Integral b1) => a -> (Bool -> t) -> b -> a -> b1 -> b2 -> t
eternalmatt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.