포 포 퍼즐


21

네 발로 퍼즐은 주어진 최대 0에서 모든 수에 도달 정확히 네 정 (그리고 다른 번호) 및 운영의 정의 세트를 사용하여 포함 인기있는 레크리에이션 수학 퍼즐입니다.

이 버전에서는 다음 연산자 만 허용됩니다.

  • 모든 그룹화 기호를 사용할 수 있습니다
  • 더하기 ( +), 빼기 ( -), 곱하기 ( *), 나누기 ( /)
  • 계승 ( !), 감마 함수 ( Γ)
  • 지수 ( ^), 제곱근 ( )
  • 연결 (예 : 442 4초)
  • 소수점 (예. 4.4두 가지이다 4, 오버 바를들) (예. .4~ = 4/9)

표준 작업 순서가 적용됩니다.

프로그램은 0에서 100 사이의 입력에 대해 해당 입력에 대한 올바른 솔루션을 생성해야합니다. 프로그램이 유효하지 않은 솔루션을 입력에 출력하면 해당 프로그램은 유효하지 않습니다.

예를 들어,을 입력하면 0프로그램이을 생성 할 수 있습니다 44-44.

외부 모듈을 사용할 수 없습니다. _.4~오버 바 연산자 에만 허용됩니다. 즉 4, 소수점 뒤에 하나만 있을 수 있습니다.

이것은 코드 골프이므로 가장 짧은 솔루션이 승리합니다.


편집 : 명확하게하기 위해 프로그램은 정확히 4 4초에 적용된 위의 일련의 작업을 더 이상, 더 이상 출력하지 않아야합니다. 또한 .4 = 4/10유효한 용어이며 하나만 사용하는 것으로 계산됩니다 4.


반올림 작업이 없습니까? :-(
John Dvorak

@ JanDvorak err, 아니, 그건 허용되지 않습니다.
변동성

감마와 계승이 모두 허용됩니까?
John Dvorak

@JanDvorak 나열된 모든 것 (그러나 나열된 것만)을 사용할 수 있습니다.
변동성

우리는 (접두사 함수로 출력 계승에 허용 !(4)보다는 (4)!)?
John Dvorak

답변:


6

GolfScript (129 자 *)

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

내 PC에서 실행 시간은 4 분 정도입니다. . .&바로 뒤에 고유성 작업을 추가하여 두 문자의 비용으로 적당한 속도 향상을 얻을 수 있습니다 %+.

나는에 대한 사전 코딩 된 표현을 사용 1, 2, 4, 6, 24, 120,와 44,와 만 사용하는 사람들로부터 휴식을 구축 +, *-. 이렇게하면 프로그램 자체에서 정수가 아닌 산술을 수행 할 필요가 없습니다. 더 간단한 사전 코딩 된 값을 시작 부분에 배치하여 더 간단한 표현을 얻으려고 노력했습니다.

이러한 모든 값은 가 필요 하며 빼기의 두 방향을 지원해야합니다 ( complex_expression - simple_expression그 반대도 가능). 또한 괄호 (특히 a*(b-c)) 가 필요한 일부 연산을 포함해야 하므로 모든 하위 표현식을 무차별 적으로 묶습니다 .

* 프로그램이 UTF-8로 인코딩되었다고 가정하면 유니 코드 코드 포인트를 계산하고 카펫 아래에서 브러시를 사용하여 최신 버전의 Ruby를 사용하여 인터프리터를 실행하지 않으면 실제로 ASCII 문자로 취급합니다. 이 문제가 매우 걱정된다면 GGamma 및 vsqrt에 사용하십시오.

글쎄, as 및 as 와 44교환하여 제거 할 수는 있지만 좋은 절충안은 아닙니다.1144/471√(Γ√4+(ΓΓ4+Γ√4)!)


7

파이썬 155 바이트

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)

\xEF\xBB\xBF파일은 ANSI 형식으로 저장해야하지만 처음 3 바이트 ( )는 UTF-8 바이트 순서 표시입니다. û와는 â같은 해석된다됩니다 Γ각각의 CP437CP850 단지 모든 Windows 상자에 대해에 작동합니다.

내 컴퓨터에서 런타임은 약 0.4 초입니다.

샘플 사용법 (파일 이름 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

0..100 결과입니다 . 해시가 반복되는 방식으로 인해 4!가능한 한 자주 사용 하는 것이 좋습니다.

편집 :을 추가하여 Γ√4 = 1그룹을 만들 필요 √4 = 2가없고 더 이상 필요하지 않은 을 제거 하여 많은 바이트를 절약했습니다 .


4

J, 175161

   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!)

검사 형식은 (v op v) op (v op v)어디에 v={0.4 4/9 1 2 4 6 24}op={+ - * /}

전체 0..100 개 결과


.4이 게임에 유효한 숫자 라고 생각하지 않습니다 .
John Dvorak

@ JanDvorak 그것은-아마 내가 분명하게해야했을 것입니다
변동성
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.