업데이트 : 시간 제한이 제거되었습니다. 출력을 설명 할 수 있어야합니다 (새 규칙 참조).
팬 그램은 같은 적어도 한 번 알파벳의 모든 문자를 사용 문장입니다 :
완벽한 팬 그램은 정확히 한 번씩 편지를 사용합니다.
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{|}~
9876543210
10 개의 인쇄 가능한 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 ↑↑↑ 4 등 h (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 ↑↑↑ n 은 n 이 커질수록 말도 안되는 속도로 자랍니다 . ↑↑↑ 2 4 : 2 = 2 ↑↑ ↑↑ ↑↑ 2 2 2 = 2 ↑↑ ↑↑ ↑↑ 4 = 2 65536 의 우측 연관 전력 타워, 65536 개 사본 2 :
마찬가지로, 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 문자 제외 포함 "
하고 '
.