9 바이트의 40 개 숫자


40

있다 40 가지 방향성 해밀턴 경로 : 3 × 3 격자에 배치 될 수있다
3 & times3의 무 방향 해밀턴 경로 20 개 모두;  그리드
이 그림 ( 감사 SP3000! ) 쇼에만 20 개 방향성 경로. 40 개의 지시 된 경로에 대해 각 컬러 선을 양방향으로 이동합니다.

도전

인쇄 가능한 ASCII 만 사용하여 다음과 같은 3 × 3 문자 그리드를 작성하십시오.

ABC
DEF
GHI

40 개 감독 경로의 각 40 한 줄, 9 문자 프로그램으로이 그리드에서 읽을 때, 목표에 대해 이렇게 40 일에서 고유 한 정수 각각의 프로그램 출력하는 것입니다 모두 40 개 경로가 어렵고 아닌 것 같습니다를, 따라서 가능한 많은 경로에서만 작동하도록해야합니다.

40 개의 경로 프로그램이 1에서 40까지 가장 뚜렷한 숫자를 출력 한 제출물이 승자가됩니다. Tiebreaker는 이전 제출로 이동합니다.

오류가 있거나 1에서 40까지의 정수를 출력하지 않거나 다른 경로 프로그램이 이미 적용한 정수를 출력하지 않는 경로 프로그램은 계산되지 않습니다. 구체적으로 :

  • 컴파일, 실행 또는 종료 중 오류가 발생한 프로그램은 계산되지 않습니다. 경고는 괜찮습니다.
  • 1에서 40까지의 정수를 출력하지 않거나 약간 잘못 표시 -35되거나 35 36계산되지 않는 것을 출력하는 프로그램 .
  • 출력을 생성하기 위해 사용자 입력이 필요한 프로그램은 계산되지 않습니다.
  • 끝나지 않는 프로그램은 계산되지 않습니다.
  • 지금 부터 결정적이지 않은 프로그램은 계산되지 않습니다.
  • 그렇지 않으면 다른 유효한 프로그램이 이미 출력 한 1에서 40까지의 정수를 출력하는 유효한 프로그램은 계산되지 않습니다. (첫 번째 프로그램 계산됩니다.)
  • 1에서 40까지의 정수 표현을 출력하는 프로그램 만 합계에 포함됩니다. 해당 언어의 표준이 아닌 경우 숫자는 일반적인 1,, 2... 39,, 40형식 이어야 합니다. (출력의 후행 줄 바꿈이 좋습니다.)
  • 프로그램이 출력하는 숫자와 순서는 중요하지 않습니다. 유효한 프로그램과 구별되는 정수만 중요합니다.

모든 경로 프로그램은 동일한 언어로 실행해야합니다. 그러나 "프로그램"은 실제로 목표 정수를 인쇄하거나 리턴하는 전체 프로그램뿐만 아니라 함수 (필수 인수 없음) 또는 REPL 명령 일 수 있습니다. 기능, REPL 명령 및 전체 프로그램을 혼합하여 사용할 수 있습니다.

9 개의 인쇄 가능한 ASCII 문자는 고유하지 않아도됩니다.

3 × 3 격자가

ABC
DEF
GHI

40 개의 프로그램과 출력은 다음과 같습니다.

ABCFEDGHI -> 26
ABCFIHEDG -> 90
ABCFIHGDE -> 2
ABEDGHIFC -> syntax error
ADEBCFIHG -> prints 40 but then errors
ADGHEBCFI -> 6
ADGHIFCBE -> 6
ADGHIFEBC -> 6
CBADEFIHG -> runtime error
CBADGHEFI -> 3
CBADGHIFE -> 4
CFEBADGHI -> -32
CFIHEBADG -> 38.0
CFIHGDABE -> "36"
EDABCFIHG -> 33
EFCBADGHI -> no output
EHGDABCFI -> compilation error
EHIFCBADG -> 8
GDABCFEHI -> 22
GHEDABCFI -> 41
IHGDEFCBA -> 0
GDEHIFCBA -> '9'
EDGHIFCBA -> +10
CFIHGDEBA -> 11
GHIFCBEDA -> error
IFCBEHGDA -> error
EBCFIHGDA -> prints 23 but then loops infinitely
CBEFIHGDA -> randomly prints either 24 or 44
GHIFEDABC -> error
IFEHGDABC -> 30
EFIHGDABC -> 39
IHGDABEFC -> 7
GDABEHIFC -> 29
EBADGHIFC -> -1
GHIFCBADE -> 26
IHGDABCFE -> 1
IFCBADGHE -> error
GDABCFIHE -> no output
IHEFCBADG -> no output
IFCBADEHG -> "quack"

1에서 40까지 유효하게 출력되는 14 개의 고유 정수가 있기 때문에 점수는 14 26 2 6 3 4 33 8 22 11 30 39 7 29 1입니다.


14
-1, 챌린지에는 깃발에 대한 언급이 없습니다
Alex A.

@ Sp3000 이미지의 배열이 특정 순서로되어 있습니까? (나는 도전이 순서대로 중요하지 않다고 가정하지만 이미지에 대한 호기심으로 죽어 가고 있습니다. 특히 힐버트 공간 곡선의 L- 시스템에서 시드로 사용 된 경우 set?)
luser droog

@luserdroog 음, Sp는 이미지를 만들었 습니다.
Calvin 's Hobbies

@luserdroog 1에서 9까지의 셀에 번호를 매길 경우 사전 식 순서로 정렬 해야 합니다. 예를 들어 첫 번째는123654789
Sp3000

@luserdroog (즉, 각 지시 된 경로 쌍의 사전 어휘 초기 대표를 선택한 다음 20 개의 대표 어휘 사전을 정렬합니다.)
mathmandan

답변:


27

파리 / GP-24

1%1
 8
2+3

PARI / GP는 숫자 사이의 공백을 무시하므로 1 8 2예를 들어로 처리됩니다 182. 공백을 밑줄로 바꾸면 펄에도 효과가 있습니다. 전체 검색 공간을 다 사용하지 않았으므로 더 나은 후보자가있을 수 있습니다.

프로그램은 gp로 gp -q -f program.gp또는 대화식으로 대화식 으로 제공 될 수 있습니다 .


산출

1%1 8 2+3 -> 4
1%1 3+8 2 -> 83 # invalid
1%1 3+2 8 -> 29
1%8 2+3 1 -> 32
1 8%1 3+2 -> 7
1 2+8%1 3 -> 20
1 2+3 1%8 -> 19
1 2+3 8%1 -> 12
1%1 8 3+2 -> 3
1%1 2+8 3 -> 84 # invalid
1%1 2+3 8 -> 39
1 8%1 2+3 -> 9
1 3+8%1 2 -> 21
1 3+2 1%8 -> 18
8 1%1 3+2 -> 5
8 1%1 2+3 -> 12 # dup
8+2 1%1 3 -> 16
8+3 1%1 2 -> 15
2 1%1 8+3 -> 6
2+8 1%1 3 -> 5  # dup
3+2 8 1%1 -> 3  # dup
2 8+3 1%1 -> 28
8 2+3 1%1 -> 82 # invalid
1 3+2 8%1 -> 13
2+3 1%8 1 -> 33
3 1%8+2 1 -> 28 # dup
8%1 3+2 1 -> 29 # dup
1%8 3+2 1 -> 22
2+3 8 1%1 -> 2
3 8+2 1%1 -> 38
8 3+2 1%1 -> 83 # invalid
3+2 1%8 1 -> 24
2 1%8+3 1 -> 36
8%1 2+3 1 -> 39 # dup
2+3 1%1 8 -> 15 # dup
3+2 1%1 8 -> 6  # dup
3 1%1 2+8 -> 15 # dup
2 1%1 3+8 -> 16 # dup
3+8 1%1 2 -> 12 # dup
3 1%1 8+2 -> 15 # dup

4 개의 값을 제외한 모든 값은 12 개의 중복 항목으로 필요한 범위 내에 있습니다.


최신 정보

나는 크 런칭을 마쳤으며 6 개의 23 개가 있고 24 개만 있습니다 (행으로 읽음).

23 1%1 6 2+3 [2, 3, 4, 5, 7, 8, 11, 12, 13, 14, 16, 17, 18, 19, 22, 24, 26, 27, 32, 33, 34, 36, 37]
23 1 2%3+2*8 [2, 5, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 22, 23, 25, 26, 29, 31, 32, 37, 40]
23 2 3%1+8 2 [2, 4, 6, 7, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 28, 29, 30, 31, 32, 33, 34, 40]
23 4%6%5*7+6 [2, 4, 5, 6, 7, 8, 9, 12, 13, 19, 21, 23, 24, 26, 29, 31, 32, 33, 34, 37, 38, 39, 40]
23 5%6%4*7+6 [2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 25, 26, 29, 31, 33, 34, 37, 38, 39, 40]
23 5%6%4*8+6 [1, 3, 5, 6, 8, 9, 10, 12, 14, 15, 18, 22, 24, 25, 27, 29, 30, 32, 34, 36, 37, 39, 40]

24 1%1 8 2+3 [2, 3, 4, 5, 6, 7, 9, 12, 13, 15, 16, 18, 19, 20, 21, 22, 24, 28, 29, 32, 33, 36, 38, 39]

크 런칭에 사용한 프로그램은 다음과 같습니다. PARI / GP는 문자열 처리 기능이 제한되어 있으므로 주로 char 배열 (일명 Vecsmall)을 처리합니다. 테스트 연산자는 +, -, *, \(바닥 DIV) %, ;(식 분리기 본질적 그것을 폐기하기 전에 다)와 (상술 한 바와 같이 공간). 지수 연산자 ^도 추가 할 수 있지만 철저하게 테스트하기에는 너무 느립니다.

perms = {[
  [1, 2, 3, 6, 5, 4, 7, 8, 9], [1, 2, 3, 6, 9, 8, 5, 4, 7], [1, 2, 3, 6, 9, 8, 7, 4, 5], [1, 2, 5, 4, 7, 8, 9, 6, 3],
  [1, 4, 5, 2, 3, 6, 9, 8, 7], [1, 4, 7, 8, 5, 2, 3, 6, 9], [1, 4, 7, 8, 9, 6, 3, 2, 5], [1, 4, 7, 8, 9, 6, 5, 2, 3],
  [3, 2, 1, 4, 5, 6, 9, 8, 7], [3, 2, 1, 4, 7, 8, 5, 6, 9], [3, 2, 1, 4, 7, 8, 9, 6, 5], [3, 6, 5, 2, 1, 4, 7, 8, 9],
  [3, 6, 9, 8, 5, 2, 1, 4, 7], [3, 6, 9, 8, 7, 4, 1, 2, 5], [5, 4, 1, 2, 3, 6, 9, 8, 7], [5, 6, 3, 2, 1, 4, 7, 8, 9],
  [5, 8, 7, 4, 1, 2, 3, 6, 9], [5, 8, 9, 6, 3, 2, 1, 4, 7], [7, 4, 1, 2, 3, 6, 5, 8, 9], [7, 8, 5, 4, 1, 2, 3, 6, 9],
  [9, 8, 7, 4, 5, 6, 3, 2, 1], [7, 4, 5, 8, 9, 6, 3, 2, 1], [5, 4, 7, 8, 9, 6, 3, 2, 1], [3, 6, 9, 8, 7, 4, 5, 2, 1],
  [7, 8, 9, 6, 3, 2, 5, 4, 1], [9, 6, 3, 2, 5, 8, 7, 4, 1], [5, 2, 3, 6, 9, 8, 7, 4, 1], [3, 2, 5, 6, 9, 8, 7, 4, 1],
  [7, 8, 9, 6, 5, 4, 1, 2, 3], [9, 6, 5, 8, 7, 4, 1, 2, 3], [5, 6, 9, 8, 7, 4, 1, 2, 3], [9, 8, 7, 4, 1, 2, 5, 6, 3],
  [7, 4, 1, 2, 5, 8, 9, 6, 3], [5, 2, 1, 4, 7, 8, 9, 6, 3], [7, 8, 9, 6, 3, 2, 1, 4, 5], [9, 8, 7, 4, 1, 2, 3, 6, 5],
  [9, 6, 3, 2, 1, 4, 7, 8, 5], [7, 4, 1, 2, 3, 6, 9, 8, 5], [9, 8, 5, 6, 3, 2, 1, 4, 7], [9, 6, 3, 2, 1, 4, 5, 8, 7]
]}

ops = Vecsmall("+-*\\%; ")

ms = 1

for(c = 48, 57, {
 for(d = c, 57,
  for(f = d, 57,
   for(g = c, 57,
    for(e = 48, 57,
     print1(Strchr([c,d,e,f,g,13]));
     for(h = 1, #ops,
      for(i = 1, #ops,
       for(j = 1, #ops,
        for(k = 1, #ops,
         a = Vecsmall([c, ops[h], d, ops[i], e, ops[j], f, ops[k], g]);
         s = Set();
         for(m = 1, #perms,
          v = Strchr(vecextract(a, perms[m]));
          iferr(b = eval(v), E, b = 0);
          if(b >= 1 && b <= 40, s = setunion(s, [b]))
         );
         if(#s >= ms, ms = min(23, #s); print(#s, " ", Strchr(a), " ", s));
        )
       )
      )
     )
    )
   )
  )
 )
})

아아, Perl 프로그램은 마지막 값을 출력하지 않습니다. Perl 서브 루틴은 수행하지만 서브 루틴에는 중괄호가 있습니다. ( "서명은 서브 루틴의 본문의 일부입니다. 일반적으로 서브 루틴의 본문은 단순한 코드 블록입니다." ) 따라서 이것이 Perl에서 가능하다고 생각하지 않습니다.
msh210

29

죽은 물고기 , 18

이것은 실제로 연산자를 고려하기 전에 시도한 첫 번째 언어였습니다. Deadfish가 무언가에 유용 할 수 있다는 아이디어의 엄청나게 많은 성실성을 위해 지금 게시하고 있습니다.

iii
ios
sii

Deadfish를 모르는 사람들 i은 증가하고, s정사각형이며 o, 누산기가 0에서 시작하여 출력 d됩니다 (여기서는 감소에 대한 네 번째 명령도 사용되지 않음). 자동 인쇄 기능이없고 사용 o이 필요하다는 사실 은 큰 단점이지만 놀랍게도 Deadfish는 여기에서 끔찍하게 수행하지 않습니다. 출력 연산자의 최적 배치는 중간에 있습니다.

iiisoisii 9
iiisiiois 11
iiisiisio 122
iioisiisi 2
iioiisiis 2
iisioiisi 5
iisiisiio 38
iisiisoii 36
iiiiosiis 4
iiiisiosi 17
iiiisiiso 324
isoiiisii 1
isiioiiis 3
isiisiiio 12
oiiiisiis 0
osiiiisii 0
oisiiiisi 0
oiisiiiis 0
siiiisoii 16
sioiiiisi 1
iisiosiii 5
sioiisiii 1
oisiisiii 0
isiisioii 10
siisiioii 6
isiioisii 3
oiisiisii 0
iiosiisii 2
siisoiiii 4
isoisiiii 1
osiisiiii 0
iisiiiosi 7
siiioiisi 3
oiiisiisi 0
siisiiiio 8
iisiiiiso 64
isiiiisio 26
siiiisiio 18
iiosiiiis 2
isiiiiois 5

25

파이썬 REPL과 더 많은 것, 22 23

6+7
*5%
6%4

주요 관찰 : 바둑판처럼 격자에 색상을 지정하면 경로는 격자 색상이 바뀌면서 동일한 색상으로 시작하고 끝나는대로 그리드 색상을 번갈아 표시합니다.

여전히 더 나은 강요. 불행히도 +*%(그리고 지수가있는 **언어 조차도) 시도해 ^도 더 좋은 결과는 없었습니다. 또한 비트 연산자를 던지려고 시도했지만 ^(xor) 만 약간 도움이되는 것처럼 보였지만 검색이 너무 오래 걸리므로 포기했습니다.

6+7%5*6%4 6
6+7%4%5*6 24
6+7%4%6*5 21
6+5*6%4%7 8
6*5+7%4%6 33
6*6%5+7%4 4
6*6%4%7+5 5
6*6%4%5+7 7
7+6*5%4%6 9
7+6*6%5%4 8
7+6*6%4%5 7
7%5+6*6%4 2
7%4%5+6*6 39
7%4%6*6+5 23
5*6+7%4%6 33
5%7+6*6%4 5
5%6*6+7%4 33
5%4%7+6*6 37
6*6+7%5%4 38
6%5*6+7%4 9
4%6*5%7+6 12
6*5%4%7+6 8
5*6%4%7+6 8
7%4%6*5+6 21
6%4%7+5*6 32
4%7+5%6*6 34
5+7%4%6*6 23
7+5%4%6*6 13
6%4%5*6+7 19
4%5%6*6+7 31
5%4%6*6+7 13
4%6*6+5%7 29
6*6+5%4%7 37
5+6*6%4%7 5
6%4%7+6*5 32
4%6*6+7%5 26
4%7+6*6%5 5
6*6+7%4%5 39
4%5%7+6*6 40
4%7+6*5%6 4

5
다음 작업 : 가장 고유 한 값으로 프로그램을 생성하는 프로그램을 작성하십시오. 그런 다음 해당 프로그램을 골프화하십시오. :)
Reto Koradi

@RetoKoradi 첫 번째 부분은 내가 한 일입니다. 두 번째 ... 나중 : P
Sp3000

@ Sp3000 나는 이런 스타일의 솔루션의 무차별 강제를 마쳤다. 없다 6+7*5%6%4, 6+7*4%6%5그리고 6+8*4%6%5(왼쪽에서 오른쪽, 위쪽에서 아래쪽), 그리고 아무것도.
isaacg

1
당신이 및처럼, 좀 더 사업자에 던져 @isaacg보다 23 포인트 솔루션이 있습니다 | ^
Sparr

그냥 임의의 생각 : 당신이 허용하는 시도 되세요 +-모서리 / 중앙에? 그것들은 이항 연산자 일뿐만 아니라 단항이기 때문에, 여전히 모든 유효한 표현식이되어야합니다. 그렇지 않으면 더 나은 솔루션이 될 수 있지만 적어도 검색 공간이 확장됩니다. 흠, 실제로는 일련의 연산자로 끝날 수 있기 때문에 문제가 될 수 있습니다.
Reto Koradi

13

J, 15

2 + 1
* 3 *
2 + 3

이것은 유효한 숫자 만 출력하지만 많은 것은 중복입니다. 고유 한 값은 17 11 16 28 31 23 13 10 21 33 18 24 22 29 27입니다. 연산자와 관련된 정수를 변경하면 더 나은 결과를 얻을 수 있습니다.

2+1*3*2+3 -> 17
2+1*3+3*2 -> 11
2+1*3+2*3 -> 11
2+3*2+3*1 -> 17
2*3+1*3+2 -> 16
2*2+3+1*3 -> 16
2*2+3*1+3 -> 28
2*2+3*3+1 -> 28
1+2*3*3+2 -> 31
1+2*2+3*3 -> 23
1+2*2+3*3 -> 23
1*3+2*2+3 -> 13
1*3+3+2*2 -> 10
1*3+2*2+3 -> 13
3*2+1*3+2 -> 21
3*1+2*2+3 -> 33
3+2*2+1*3 -> 13
3+3*1+2*2 -> 18
2*2+1*3+3 -> 16
2+3*2+1*3 -> 17
3+2*3*1+2 -> 21
2*3+3*1+2 -> 24
3*2+3*1+2 -> 33
1*3+2*3+2 -> 13
2+3*1+3*2 -> 23
3*1+3+2*2 -> 24
3+1*3+2*2 -> 10
1+3*3+2*2 -> 22
2+3*3*2+1 -> 29
3*3+2*2+1 -> 27
3*3+2*2+1 -> 27
3+2*2+3*1 -> 13
2*2+3+3*1 -> 16
3+2*2+3*1 -> 13
2+3*1+2*3 -> 23
3+2*2+1*3 -> 13
3*1+2*2+3 -> 33
2*2+1*3+3 -> 16
3+3*1+2*2 -> 18
3*1+2*3+2 -> 33

그건 그렇고, 1K 담당자를 치신 것을 축하합니다! :)
Alex A.

@AlexA. Prolog 만 대답하면 J 답변에 1k를칩니다. 부정한 ...
치명적인

8
괜찮습니다. 프롤로그가 이해할 것입니다.
Alex A.

3
@AlexA. Yes.
John Dvorak

@JanDvorak Prolog를 대표하여 말씀하십니까?
Alex A.

11

> <>, 36 *

운이 좋으면!

x;x
lxl
xnx

도전 과제는 코드가 결정 론적이어야 할 필요가 없으므로 36 개 숫자를 반환하는 것이 가능하다는 것을 증명해야합니다. 그것은 내가 추측했던 동안 좋았다.

(> <>에 익숙하지 않은 사람들은 여기 에서 훌륭한 소개를 찾을 수 있습니다 )

> <>는 스택 기반 2D 언어입니다. 이는 명령어가 대부분의 기존 언어와 같이 선형으로 실행되지 않음을 의미합니다. 프로그램 흐름은 위, 아래, 왼쪽 또는 오른쪽 일 수 있습니다!

> <>에서 "x"명령어를 사용하기로 결정했습니다.이 명령어는 명령어 포인터 방향을 위, 아래, 왼쪽 또는 오른쪽으로 임의로 변경합니다. 우리의 코드는 한 줄에 불과하므로 포인터가 위나 아래로 이동하면 "x"명령을 다시 누르기 때문에 오른쪽이나 왼쪽으로 갈 때만 볼 수 있습니다.

"n"명령어는 스택 맨 위에 숫자를 표시하고 인쇄합니다. 그러나 스택이 비어 있고 팝할 것이 없으면 오류가 발생합니다.

"l"명령어는 단순히 스택의 길이를 스택으로 푸시합니다 (그리고 스택이 비어 있으면 오류를 보내지 않습니다). 예를 들어 스택이 비어 있고 "l"이 호출되면 스택에 0을 넣습니다. 이제 다시 "l"을 호출하면 스택에 하나의 요소 (0)가 있으므로 스택의 맨 위로 1을 밀어 넣습니다. 이제 스택에 두 가지가 있음을 의미합니다. "l"을 다시 호출하면 스택 등에 2를 넣습니다. 따라서 "l"을 사용하여 앞에서 설명한 방법을 통해 임의의 숫자를 스택에 넣을 수 있습니다.

";" 명령은 프로그램을 종료합니다.

"x"를 사용하는 아이디어는 예를 들어 코드에 "x"가 하나만있는 경우 (A, B, C, D는 일부 명령어 임)입니다.

ABCx;D

프로그램은 A, B, C를 실행하고 "x"에 도달하면 두 가지 가능성이 있습니다. 코드가 계속 올바르게 진행되고 ";" 종료하거나 왼쪽으로 이동하여 C, B, A, D를 실행 한 다음 종료합니다. 따라서 코드에 "x"가 하나 있으면 프로그램에 가장 적합한 프로그램을 선택할 수있는 두 가지 프로그램 흐름이 생깁니다.

"x"가 두 개 이상 있으면 가능한 많은 프로그램 흐름을 얻을 수 있습니다.

우리의 코드에는 5 개의 "x"가 있으며, 더 나아가 각각의 프로그램은 Hamiltonian 경로의 "시작 셀"에 있습니다. 즉, 모든 단일 프로그램은 "x"로 시작하고 모든 프로그램은 구조를 갖습니다.

xAxBxCxDx

A, B, C, D는 {에 속한다. , n, l, l} 이는 12 개의 고유 한 프로그램 만 있음을 의미합니다. 또한 항상 "x"로 시작하므로 프로그램이 종료되는 경우를 볼 수 있으므로 대칭 프로그램도 동일하게 간주 할 수 있습니다. 대칭까지는 6 가지 가능한 프로그램 만 있습니다. 이 중 4 개만이 해밀턴 경로로 생성 된 프로그램에서 발생합니다.

xnxlxlx;x
xlxnxlx;x
xnxlx;xlx
xlxnx;xlx

첫 번째 단계 "xnxlxlx; x"에서 첫 번째 프로그램을 살펴보면 print 명령을 실행하면 스택에 아무것도 없기 때문에 오류가 발생합니다. 우리가 왼쪽으로 가면 프로그램 종료 명령을칩니다. 따라서이 프로그램에서 숫자출력수 없습니다 .

두 번째 프로그램 인 "xlxnxlx; x"는 시작 부분에서 0을 시작하면 바로 스택에 놓이므로 다음 희망하는 "x"에서 왼쪽으로 이동하면 스택이 1을 얻으므로 훨씬 더 희망적입니다. 다시 우리는 2를 가지고 인쇄하고 프로그램을 끝내기 위해 계속 갈 수 있습니다. 우리는 실제로 짝수를 출력 할 수 있다는 것을 알 수있다 . 처음에 "xlx"부분에서 우리는 특정 횟수만큼 오른쪽에서 왼쪽으로 그리고 다시 오른쪽으로 가서 임의의 크기에 도달 할 수 있기 때문이다.

비슷하게, 세 번째 프로그램 xnxlx; xlx는 처음에 왼쪽으로 이동 한 다음 "xlx"루틴을 왼쪽에서 오른쪽, 왼쪽으로 반복하여 홀수를 출력 할 수 있음을 알 수 있습니다 .

그리고 네 번째 프로그램은 두 번째 프로그램과 본질적으로 동일하며 짝수를 출력 할 수 있습니다.

필요한 프로그램을 위해 다음이 있습니다.

x;xlxlxnx (none)
x;xlxnxlx (any even number)
x;xlxnxlx (any even number)
x;xlxnxlx (any even number)
xlx;xlxnx (any odd number)
xlxnx;xlx (any even number)
xlxnxlx;x (any even number)
xlxnxlx;x (any even number)
x;xlxlxnx (none)
x;xlxnxlx (any even number)
x;xlxnxlx (any even number)
xlx;xlxnx (any odd number)
xlxnx;xlx (any even number)
xlxnxlx;x (any even number)
xlx;xlxnx (any odd number)
xlx;xlxnx (any odd number)
xnxlx;xlx (any odd number)
xnxlx;xlx (any odd number)
xlx;xlxnx (any odd number)
xnxlx;xlx (any odd number)
xnxlxlx;x (none)
xlxnxlx;x (any even number)
xlxnxlx;x (any even number)
xlxnxlx;x (any even number)
xnxlx;xlx (any odd number)
xlx;xnxlx (any even number)
x;xlxnxlx (any even number)
x;xlxnxlx (any even number)
xnxlxlx;x (none)
xlxnxlx;x (any even number)
xlxnxlx;x (any even number)
xnxlx;xlx (any odd number)
xlx;xnxlx (any even number)
x;xlxnxlx (any even number)
xnxlx;xlx (any odd number)
xnxlx;xlx (any odd number)
xlx;xlxnx (any odd number)
xlx;xlxnx (any odd number)
xnxlx;xlx (any odd number)
xlx;xlxnx (any odd number)

숫자를 출력 할 수없는 4 개의 프로그램, 짝수를 출력 할 수있는 20 개, 홀수를 출력 할 수있는 16 개의 프로그램입니다. 1에서 40 사이의 범위에 정확히 20 개의 짝수와 16 개의 홀수가 있기 때문에, 특정 확률로이 코드 블록에 의해 출력 된 1에서 40의 범위에서 36 개의 다른 숫자가있을 가능성이 있습니다.


11
36은 허점 남용이라는 효과적인 답변에 대해
끔찍

때때로 나는 물고기가 "마지막으로 물건을 쌓고 나갈 때"에 대한 하나의 지시가 큰 도움이되기를 바랍니다. 그러나 곧 완전히 최적의 허점 답을 얻을 수 있습니다.
cirpis

나는 비 결정적 프로그램을 세지 않는 것에 대한 규칙을 정직하게 잊어 버렸습니다. 지금 추가했습니다. 당신은 이것을 영리하고 잘 설명했기 때문에 이것을 유지하는 것을 환영하지만, 나는이 대답을 받아들이지 않을 것입니다.
Calvin 's Hobbies

1
물론,이 답변은 어쨌든 경쟁 답변이 아니 었습니다.이 도전을 읽고 물고기 대답을 생각할 때 무릎을 꿇는 반응이었습니다.
cirpis

9

골프 스크립트, 8

192
6#7
281

현재 최고 점수 솔루션입니다. : P 지속되는 동안 좋았다.

프로그램들

1927#6281 1927
192718#62 192718
19271826# 19271826
19#628172 19
16#927182 16
1628#9271 1628
16281729# 16281729
162817#92 162817
2916#7182 2916
291628#71 291628
29162817# 29162817
27#916281 27
2718#9162 2718
27182619# 27182619
#61927182 
#72916281 
#82619271 
#81729162 
261927#81 261927
28#619271 28
1826#7291 1826
26#817291 26
#62817291 
271826#91 271826
281729#61 281729
1729#8261 1729
#92718261 
29#718261 29
2817#6192 2817
17#826192 17
#71826192 
182619#72 182619
2619#8172 2619
#91628172 
28172916# 28172916
18261927# 18261927
17291628# 17291628
26192718# 26192718
18#729162 18
172916#82 172916

1
30 분 동안 지속되었습니다.
Optimizer

2
GolfScript 0)1#2#3(4에서 찾을 수있는 최고 는 15 세입니다. 아름다운 대칭도 있습니다.
primo

1
@primo : 영리합니다. 더 많은 의견이 실제로 점수를 향상시킬 것이라고 생각하지 않았습니다.
Dennis

8

CJam, 14

3(4
;];
0)1

작업 프로그램 아래 :

3(4;];0)1 = 11
3(4;1)0;] = 22
3(];0)1;4 = 14
3;0)](4;1 = 11
3;0)1;4(] = 13
3;0)1;](4 = 14
4(3;];1)0 = 20
4(3;0)];1 = 1
4(3;0)1;] = 31
4;1)](3;0 = 20
4;1)0;3(] = 22
0;3(4;])1 = 21
0)];3(4;1 = 21
1)0;];4(3 = 33
4;1)0;](3 = 23
0)1;4(];3 = 3
1;4(])0;3 = 33
4(];1)0;3 = 23
0)1;];3(4 = 24
1)0;3(];4 = 4
0;3(])1;4 = 24
0)1;4(3;] = 13
1)0;3(4;] = 22
1;4(3;0)] = 31
0;3(4;1)] = 22
1)];4(3;0 = 30
1;4(3;])0 = 30

생성 된 값은 다음과 같습니다. [1, 3, 4, 11, 13, 14, 20, 21, 22, 23, 24, 30, 31, 33]


이 코드는 수동으로 작성 했습니까? 아니면 코드 변형을 체계적으로 열거하고 평가 했습니까? 접두사 표기법이있는 언어가 본질적으로 더 나은지 또는 스택 기반 골프 언어로 @ Sp3000의 접근 방식을 능가 할 수 있는지 궁금합니다.
Reto Koradi

@Reto 나는 4 개의 숫자 매개 변수에 대해 모든 0..9 값을 시도하는 프로그램을 작성했습니다. 또한 일부 연산자를 수동으로 변경하려고했습니다. 스택 기반 언어의 문제점은 대부분의 연산자가 스택에 2 개의 매개 변수를 필요로하므로 많은 오류가 있다는 것입니다. 삽입 언어는 Sp3000의 게시물에서 설명한 체커 구조의 이점을 제공합니다.
Arnaud

예, 기본 접근 방식을 보았을 때의 느낌이었습니다. 유효한 모든 표현식을 생성 할 수있는 간단한 레이아웃을 갖는 것이 큰 이점입니다. CJam의 유일한 장점은 문자 연산자가 훨씬 많다는 것입니다.
Reto Koradi

5

직류 (20)

2+3
*p+
4+5
ABCFEDGHI -> 2+3+p*4+5 -> 5     $ **
ABCFIHEDG -> 2+3+5+p*4 -> 10    $ **
ABCFIHGDE -> 2+3+5+4*p -> 40    $ **
ABEDGHIFC -> 2+p*4+5+3 -> 2     $ **
ADEBCFIHG -> 2*p+3+5+4 -> 2       **
ADGHEBCFI -> 2*4+p+3+5 -> 6     $ **
ADGHIFCBE -> 2*4+5+3+p -> 14    $ **
ADGHIFEBC -> 2*4+5+p+3 -> 11    $ **
CBADEFIHG -> 3+2*p+5+4 -> 6       **
CBADGHEFI -> 3+2*4+p+5 -> 10      **
CBADGHIFE -> 3+2*4+5+p -> 15    $ **
CFEBADGHI -> 3+p+2*4+5 -> 3     $ **
CFIHEBADG -> 3+5+p+2*4 -> 8     $ **
CFIHGDABE -> 3+5+4*2+p -> 34    $ **
EDABCFIHG -> p*2+3+5+4 -> 
EFCBADGHI -> p+3+2*4+5 -> 
EHGDABCFI -> p+4*2+3+5 -> 
EHIFCBADG -> p+5+3+2*4 -> 
GDABCFEHI -> 4*2+3+p+5 -> 9     $ **
GHEDABCFI -> 4+p*2+3+5 -> 4     $ **
IHGDEFCBA -> 5+4*p+3+2 -> 20    $ **
GDEHIFCBA -> 4*p+5+3+2 -> 4       **
EDGHIFCBA -> p*4+5+3+2 -> 
CFIHGDEBA -> 3+5+4*p+2 -> 32    $ **
GHIFCBEDA -> 4+5+3+p*2 -> 12    $ **
IFCBEHGDA -> 5+3+p+4*2 -> 8       **
EBCFIHGDA -> p+3+5+4*2 -> 
CBEFIHGDA -> 3+p+5+4*2 -> 3       **
GHIFEDABC -> 4+5+p*2+3 -> 9       **
IFEHGDABC -> 5+p+4*2+3 -> 5       **
EFIHGDABC -> p+5+4*2+3 -> 
IHGDABEFC -> 5+4*2+p+3 -> 22    $ **
GDABEHIFC -> 4*2+p+5+3 -> 6       **
EBADGHIFC -> p+2*4+5+3 -> 
GHIFCBADE -> 4+5+3+2*p -> 24    $ **
IHGDABCFE -> 5+4*2+3+p -> 25    $ **
IFCBADGHE -> 5+3+2*4+p -> 20      **
GDABCFIHE -> 4*2+3+5+p -> 14      **
IHEFCBADG -> 5+p+3+2*4 -> 5       **
IFCBADEHG -> 5+3+2*p+4 -> 16    $ **

32 개 출력, 20 개 구분 (으로 표시 $)

2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 20, 22, 24, 25, 32, 34, 40

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.