태그 보관물: code-challenge

code-challenge

인쇄 가능한 ASCII와 관련된 완벽한 퍼펙트 팬 그램 프로그램 한 번, 순서에 관계없이 정확히 95

업데이트 : 시간 제한이 제거되었습니다. 출력을 설명 할 수 있어야합니다 (새 규칙 참조).

팬 그램은 같은 적어도 한 번 알파벳의 모든 문자를 사용 문장입니다 :

빠른 갈색 여우는 게으른 개 위로 뛰어 넘습니다.

완벽한 팬 그램은 정확히 한 번씩 편지를 사용합니다.

95 개의 인쇄 가능한 ASCII 문자 (16 진 코드 20-7E)를 알파벳으로 사용하여 완벽한 팬 그램 인 프로그램을 작성하십시오 .

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

이러한 프로그램에는 인쇄 가능한 각 ASCII 문자가 정확히 한 번, 순서에 관계없이 정확히 95 자 여야합니다. (따라서 95! = 1.03 × 10 148 가능성이 있습니다.)

당신의 임무는 stdout에 인쇄 가능한 인쇄 가능한 ASCII 문자의 수가 가능한 한 많도록 (즉, 많은)이 프로그램을 작성하는 것입니다.

당신의 점수는 인쇄 가능한 ASCII 문자 프로그램 출력의 수입니다 합니다 ( 금액이 아닌 별개 : 양 AABC반면 점수 네 ABC점수 3) . 가장 높은 점수가 이깁니다.

세부

  • 출력에는 모든 문자 (중복 포함)가 포함될 수 있지만 95 개의 인쇄 가능한 ASCII 문자 인스턴스 만 점수에 포함됩니다.
    • 이 JSFiddle 을 사용 하여 문자열에서 인쇄 가능한 ASCII 문자 수를 계산할 수 있습니다 .
  • 귀하의 언어에 stdout이 없으면 가장 적합한 대안을 사용하십시오.
  • 프로그램 …
    • 런타임이 유한해야합니다 (시간 제한이 제거되었습니다)
    • 유한 한 출력이 있어야합니다
    • 주석이 포함되어있을 수 있습니다
    • (잡히지 않은) 오류없이 컴파일하고 실행해야합니다.
    • 입력을 요구하거나 요구하지 않아야 함
    • 시간이 변하지 않고 결정 론적이어야 함
    • 외부 라이브러리를 사용해서는 안됩니다
    • 네트워크 연결이 필요하지 않아야합니다
    • 외부 파일을 사용해서는 안됩니다
      • (파일 이름을 변경해도 프로그램의 동작이 변경되지 않는 한 프로그램 파일 자체를 사용할 수 있습니다)
  • 이 작업이 불가능하다면 너무 나쁜 언어도 있습니다.
  • 게시물에 맞추기에는 너무 큰 경우 정확한 결과를 제공 하거나 정확하게 설명해야합니다 . 실제로 프로그램을 실행할 필요는 없습니다. 만큼이 같은 메모리의 억제 할 수없는 양의 컴퓨터에서 일정한 시간에 실행이 유효합니다.

이 간단한 Python 2 프로그램은 가능한 솔루션입니다.

print 9876543210#!"$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmoqsuvwxyz{|}~

987654321010 개의 인쇄 가능한 ASCII 문자가 포함 된 10 점을 출력 합니다.



답변

GolfScript, 2 ↑↑↑ (9871 ↑↑ 2) 자 이상

2 9871.?,{;0$[45)63]n+*~}/
#!"%&'(-:<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ\^_`abcdefghijklmopqrstuvwxyz|

정수를 인쇄합니다. 무제한 CPU 레지스터 크기 (루비에서 최대 문자열 길이를 결정), 메모리 및 런타임을 활용하십시오. 줄 바꿈은 단지 가독성을위한 것입니다.

코드

2             # Push 2.
9871.?        # Push b := 9871↑↑2 = 9871↑9871 = 9871**9871.
,{            # For each i from 0 to b - 1:
  ;0$         #   Discard i and duplicate the integer on the stack.
  [45)63]n+*  #   Replicate ".?\n" that many times.
  ~           #   Evaluate.
 }/           #

점수

b = 9871 ↑↑ 2를 정의합니다 ( Knuth의 위쪽 화살표 표기법 참조 ).

  • .? 이 실행 F : ↦ X X X ↑ .

  • 내부 블록은 g : x ↦ f x (x)를 실행 합니다.

    이후 F (X) = X X X = ↑ ↑↑ 2 , F (2) (X) = (X ↑ x)에 ↑ (↑ X X)> ↑ X X X X = ↑ ↑↑ (3) ,
    F (3) (X) = ((x ↑ x) ↑ (x ↑ x)) ↑ ((x ↑ x) ↑ (x ↑ x))> (x ↑ x ↑ x) ↑ (x ↑ x ↑ x)> x ↑ x ↑ x ↑ x = x ↑↑ 4 등등,
    g (x)> x ↑↑ (x + 1)> x ↑↑ x가 있습니다.

  • 외부 블록은 h : x ↦ g b (x)를 실행 합니다.

    이후 g (X) = X ↑↑ ↑↑↑ X = X (2) , g (2) (X) = (X X ↑↑) ↑↑ (X ↑↑ X)> ↑↑ X X X X = ↑↑ ↑↑↑ 3 ,
    g 3 (x) = ((x ↑↑ x) ↑↑ (x ↑↑ x)) ↑↑ ((x ↑↑ x) ↑↑ (x ↑↑ x))> (x ↑↑ x ↑↑ x) ↑ (x ↑↑ x ↑↑ x)> x ↑↑ x ↑↑ x ↑↑ x = x ↑↑↑ 4h (x)> x ↑↑↑ (b + 1)이 있습니다.

  • 스택 에서 정수 2로 시작 하므로 코드는 h (2)> 2 ↑↑↑ (b + 1)을 계산합니다.

  • 점수는 h (2) 의 소수점 이하 자릿수 이며 log (h (2)) + 1> log (2 ↑↑↑ (b + 1))> 2 ↑↑↑ b 입니다.

따라서 점수가 2 ↑↑↑ (9871 ↑↑ 2) 보다 큽니다 .

2 ↑↑↑ nn 이 커질수록 말도 안되는 속도로 자랍니다 . ↑↑↑ 2 4 : 2 = 2 ↑↑ ↑↑ ↑↑ 2 2 2 = 2 ↑↑ ↑↑ ↑↑ 4 = 2 65536 의 우측 연관 전력 타워, 65536 개 사본 2 :

                                                                2 ↑↑↑ 4                                                                 

마찬가지로, 2 ↑↑↑ 5 = 2 ↑↑ (2 ↑↑↑ 4) 의 전원 타워 인 2 개 ↑↑↑ 4 사본 2 .

이제, 점수가 아닌 2 ↑↑↑ 4 또는 2 ↑↑↑ 5 , 그것보다 큰의 2 ↑↑↑ B , B> 2 × 10 39 428 . 그것은 큰 숫자입니다 …


답변

펄, 70 * 18446744073709551615 * 10 ^ 987654320

say q{!"#%&'+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_`bcdfghijklmnoprtuvwz|}x(1e987654320*~$[)

산출:

!"#%&'+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\]^_`bcdfghijklmnoprtuvwz|

18446744073709551615 * 10 ^ 987654320 번 반복 되었습니다.

$[기본적 0으로이므로 ~$[와 같습니다 18446744073709551615.

참고로, number을 만들려는 메모리가 부족합니다 10^987654320.


기존 답변 (7703703696) :

say qw(!"#$%&'*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdefghijklmnoprtuvz{|}~10)x98765432

출력은 다음과 같습니다

!"#$%&'*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdefghijklmnoprtuvz{|}~10

98765432 번 반복되었습니다.

참고 : 모든 샘플을 perl -Mbignum -E


답변

Bash + coreutils, 151,888,888,888,888,905 (1.5 * 10 ^ 17)

seq 9E15;#\!%*+,-./2346780:=@ABCDFGHIJKLMNOPQRSTUVWXYZ]^_abcdfghijklmnoprtuvwxyz~"'$&()?<>`{}|[

한 줄에 하나씩 정수 1-9×10 15 를 출력 합니다. 오랜 시간이 걸립니다.

9E15? GNU seq는 내부적으로 64 비트 float (double)을 사용하는 것으로 나타 났습니다 . 정밀도 부족으로 인해 1 스톱 씩 증가하기 전에이 유형으로 나타낼 수있는 최대 정수는 2 53 또는 9007199254740992입니다. 지수 표기법으로 가장 가까운 정수는 9E15 또는 9000000000000000입니다.

점수를 계산하기 위해 각 숫자 사이에 줄 바꿈이 있기 때문에 주어진 자릿수로 모든 숫자를 더하고 9E15를 추가하는 것을 사용하고 있습니다.

8000000000000001*16 + 900000000000000*15 + 90000000000000*14 + 9000000000000*13 + 900000000000*12 + 90000000000*11 + 9000000000*10 + 900000000*9 + 90000000*8 + 9000000*7 + 900000*6 + 90000*5 + 9000*4 + 900*3 + 90*2 + 9 + 9000000000000000

나는이 출력을 od약간의 순서로 파이프 할 수 있지만, 그로 인해 점수 계산이 훨씬 어려워집니다.


사전 규칙 변경 답변 :

배쉬 + 코어 유틸리티, 18,926,221,380

seq 1592346780;#\!%*+,-./:=@ABCDEFGHIJKLMNOPQRSTUVWXYZ]^_abcdfghijklmnoprtuvwxyz~"'$&()?<>`{}|[

출력 1에서 1592346780. 2012 년 중반 맥북 (링크 된 벤치 마크와 크게 다르지 않음)에는 약 9m45가 걸립니다.

의미가 없지만 아마 조금 더 최적화하는 것에 저항 할 수 없었습니다.

산출:

$ time ./pangram.sh | wc
 1592346780 1592346780 18926221380

real    9m46.564s
user    11m7.419s
sys 0m10.974s
$


답변

GolfScript, ≈ 3 * 10 ^ (2 * 10 ^ 7) 즉 ≈ 3×10 20000000

 87 9654321?,`0${;.p}/#!"%&'()*+-9:<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnoqrstuvwxyz|~

작동 원리

87 9654321?                "Pushes 87^9654321 to stack";
           ,               "Pushes an array [0, 1, 2 ... (87^9654321) - 1] to stack";
            `              "Creates a string representation of the array like "[0 1 2...]";
             0$            "Copies the string";
               {;.p}/      "Print the string wrapped in quotes X times";
                     #...  "This is all comment";

여기서 X배열의 문자열 표시의 문자 수 (길이)는 [0, 1, 2..,(87^9654321) - 1]같은 것[0 1 2 3 4 ... (87^9654321) - 1]

X내 점수를 찾기 위해 여기 에서 계산하려고합니다 .
(87^9654321) - 1약이다 10^(10^7.272415829713899)18724742진수.

X약입니다 3*10^(2*10^7)그래서 X*X또한 단지 동일합니다. 참고 이러한 값의 계산에 의한 제한으로 아주 낮은쪽에 있는지 (짝수) wolframa , I는 계산할 수 없었다 sum (floor(log10(x)) + 1) for x = 1 to (87^9654321 - 1)참값 인X


답변

MATLAB, 95

암호

char(37-5:126)% !"#$&'*+,./0489;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefgijklmnopqstuvwxyz{|}~

산출

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

출력에는 지정된 ASCII 문자가 모두 정확히 한 번, 순서대로 포함됩니다.


답변

루비, 89

p %q{!"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnorstuvwxyz|~}

산출:

"!\"\#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnorstuvwxyz|~"

모든 ASCII 문자 제외 포함, p, , %, q, {,와 }.


답변

골프 스크립트, 93

{ !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|~}

산출:

{ !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz|~}
}

모든 ASCII 문자 제외 포함 "하고 '.