Số đầu ra của Graham


16

Viết chương trình xuất ra tất cả 64 lớp biểu diễn số Graham này từ Wikipedia:

  Số của Graham

Đầu ra của bạn phải khớp chính xác với phiên bản ASCII này (trong đó ^đại diện cho mũi tên lên của Knuth và sự kết hợp của dấu gạch chéo và dấu gạch dưới đại diện cho dấu ngoặc nhọn ngang lớn):

3^^...............................................................................................................................^3
 \_______________________________________________________________  _______________________________________________________________/
                                                                 \/
 3^^.............................................................................................................................^3
  \______________________________________________________________  ______________________________________________________________/
                                                                 \/
  3^^...........................................................................................................................^3
   \_____________________________________________________________  _____________________________________________________________/
                                                                 \/
   3^^.........................................................................................................................^3
    \____________________________________________________________  ____________________________________________________________/
                                                                 \/
    3^^.......................................................................................................................^3
     \___________________________________________________________  ___________________________________________________________/
                                                                 \/
     3^^.....................................................................................................................^3
      \__________________________________________________________  __________________________________________________________/
                                                                 \/
      3^^...................................................................................................................^3
       \_________________________________________________________  _________________________________________________________/
                                                                 \/
       3^^.................................................................................................................^3
        \________________________________________________________  ________________________________________________________/
                                                                 \/
        3^^...............................................................................................................^3
         \_______________________________________________________  _______________________________________________________/
                                                                 \/
         3^^.............................................................................................................^3
          \______________________________________________________  ______________________________________________________/
                                                                 \/
          3^^...........................................................................................................^3
           \_____________________________________________________  _____________________________________________________/
                                                                 \/
           3^^.........................................................................................................^3
            \____________________________________________________  ____________________________________________________/
                                                                 \/
            3^^.......................................................................................................^3
             \___________________________________________________  ___________________________________________________/
                                                                 \/
             3^^.....................................................................................................^3
              \__________________________________________________  __________________________________________________/
                                                                 \/
              3^^...................................................................................................^3
               \_________________________________________________  _________________________________________________/
                                                                 \/
               3^^.................................................................................................^3
                \________________________________________________  ________________________________________________/
                                                                 \/
                3^^...............................................................................................^3
                 \_______________________________________________  _______________________________________________/
                                                                 \/
                 3^^.............................................................................................^3
                  \______________________________________________  ______________________________________________/
                                                                 \/
                  3^^...........................................................................................^3
                   \_____________________________________________  _____________________________________________/
                                                                 \/
                   3^^.........................................................................................^3
                    \____________________________________________  ____________________________________________/
                                                                 \/
                    3^^.......................................................................................^3
                     \___________________________________________  ___________________________________________/
                                                                 \/
                     3^^.....................................................................................^3
                      \__________________________________________  __________________________________________/
                                                                 \/
                      3^^...................................................................................^3
                       \_________________________________________  _________________________________________/
                                                                 \/
                       3^^.................................................................................^3
                        \________________________________________  ________________________________________/
                                                                 \/
                        3^^...............................................................................^3
                         \_______________________________________  _______________________________________/
                                                                 \/
                         3^^.............................................................................^3
                          \______________________________________  ______________________________________/
                                                                 \/
                          3^^...........................................................................^3
                           \_____________________________________  _____________________________________/
                                                                 \/
                           3^^.........................................................................^3
                            \____________________________________  ____________________________________/
                                                                 \/
                            3^^.......................................................................^3
                             \___________________________________  ___________________________________/
                                                                 \/
                             3^^.....................................................................^3
                              \__________________________________  __________________________________/
                                                                 \/
                              3^^...................................................................^3
                               \_________________________________  _________________________________/
                                                                 \/
                               3^^.................................................................^3
                                \________________________________  ________________________________/
                                                                 \/
                                3^^...............................................................^3
                                 \_______________________________  _______________________________/
                                                                 \/
                                 3^^.............................................................^3
                                  \______________________________  ______________________________/
                                                                 \/
                                  3^^...........................................................^3
                                   \_____________________________  _____________________________/
                                                                 \/
                                   3^^.........................................................^3
                                    \____________________________  ____________________________/
                                                                 \/
                                    3^^.......................................................^3
                                     \___________________________  ___________________________/
                                                                 \/
                                     3^^.....................................................^3
                                      \__________________________  __________________________/
                                                                 \/
                                      3^^...................................................^3
                                       \_________________________  _________________________/
                                                                 \/
                                       3^^.................................................^3
                                        \________________________  ________________________/
                                                                 \/
                                        3^^...............................................^3
                                         \_______________________  _______________________/
                                                                 \/
                                         3^^.............................................^3
                                          \______________________  ______________________/
                                                                 \/
                                          3^^...........................................^3
                                           \_____________________  _____________________/
                                                                 \/
                                           3^^.........................................^3
                                            \____________________  ____________________/
                                                                 \/
                                            3^^.......................................^3
                                             \___________________  ___________________/
                                                                 \/
                                             3^^.....................................^3
                                              \__________________  __________________/
                                                                 \/
                                              3^^...................................^3
                                               \_________________  _________________/
                                                                 \/
                                               3^^.................................^3
                                                \________________  ________________/
                                                                 \/
                                                3^^...............................^3
                                                 \_______________  _______________/
                                                                 \/
                                                 3^^.............................^3
                                                  \______________  ______________/
                                                                 \/
                                                  3^^...........................^3
                                                   \_____________  _____________/
                                                                 \/
                                                   3^^.........................^3
                                                    \____________  ____________/
                                                                 \/
                                                    3^^.......................^3
                                                     \___________  ___________/
                                                                 \/
                                                     3^^.....................^3
                                                      \__________  __________/
                                                                 \/
                                                      3^^...................^3
                                                       \_________  _________/
                                                                 \/
                                                       3^^.................^3
                                                        \________  ________/
                                                                 \/
                                                        3^^...............^3
                                                         \_______  _______/
                                                                 \/
                                                         3^^.............^3
                                                          \______  ______/
                                                                 \/
                                                          3^^...........^3
                                                           \_____  _____/
                                                                 \/
                                                           3^^.........^3
                                                            \____  ____/
                                                                 \/
                                                            3^^.......^3
                                                             \___  ___/
                                                                 \/
                                                             3^^.....^3
                                                              \__  __/
                                                                 \/
                                                              3^^...^3
                                                               \_  _/
                                                                 \/
                                                               3^^^^3

Lưu ý rằng có 64 lớp, không có dấu cách, và hai lớp ^xuất hiện trước dấu chấm và chỉ có một lớp xuất hiện sau.

Các MD5 hash sản lượng của bạn nên được một cách chính xác c84d0e20eac2a7f891ab42a8eb77759f, hoặc 1ad3b10d06e38693436c14958b2c47a8nếu có một ký tự dòng mới (đó là ok).

Mã ngắn nhất tính bằng byte thắng. Đầu ra cho thiết bị xuất chuẩn. Không có đầu vào.


3
Tại sao chúng là dấu chấm và không phải là mũi tên lên? Tôi khá chắc chắn rằng mục đích của các hình elip trong ảnh chỉ là để hiển thị các mũi tên bị thiếu.
raptortech97

4
@ raptortech97 Vì có rất nhiều mũi tên bị thiếu. Số lượng của Graham là rất lớn. Tôi rất tò mò muốn xem ngôn ngữ nào thực sự có thể xử lý nó.
fuandon

4
Các hình elip đại diện cho số lượng mũi tên thậm chí không thể biểu diễn mà không sử dụng ký hiệu mũi tên lên
Eric Tressler

2
@fuandon Bạn sẽ không có bất kỳ ngôn ngữ nào để thực sự tính toán con số, ngay cả khi bạn cho phép một máy tính có kích thước vũ trụ, nó chỉ đơn giản là quá lớn. Tôi cho rằng bạn có thể tính toán một lượng lớn tùy ý các chữ số ngoài cùng bên phải, nhưng điều đó không giống nhau.
Kiểm đếm

10
Có thể đáng để đưa ra các giá trị băm MD5 để xác minh nhanh: 1ad3b10d06e38693436c14958b2c47a8như được đưa ra bởi grc hoặc c84d0e20eac2a7f891ab42a8eb77759fnếu ký tự dòng mới cuối cùng có thể được bỏ qua.
ý

Câu trả lời:



9

Con trăn, 122

i=63
while i:
 for s in'3^^'+'..'*i+'.^3','\%s  %s/'%(('_'*i,)*2),'\/':print' '*(66-len(s)/2)+s
 i-=1
print' '*63+'3^^^^3'

Thí dụ:

$ python grahams.py | md5
1ad3b10d06e38693436c14958b2c47a8

Sản lượng đó có nghĩa là gì?
fuandon

13
Điều đó có nghĩa là anh ta không muốn spam các câu trả lời với sự sao chép sản lượng ascii khổng lồ ở trên, tôi nghĩ vậy.
Eric Tressler

1
Ah, đủ công bằng. Tôi nhận được nó bây giờ, kết quả đã được băm.
fuandon

Đẹp thay thế một vòng lặp for với một vòng lặp while.
qwr

8

Perl - 113 (112 + 1 cho -E)


Chơi gôn

$.=$"x63,$y="_"x($!=63-$_),$x.=($z=$"x$_)."3^^".".."x$!.".^3$/ $z\\$y  $y/$/ $. \\/$/"for 0..62;say"$x$.3^^^^3"

Ung dung:

for(0..62) {
    $.=$"x63;
    $!=63-$_;
    $y="_"x$_;
    $z=$"x$!;
    $x.=$z."3^^".".."x$!.".^3$/ $z\\$y  $y/$/ $. \\/$/";
}
say"$x$.3^^^^3"

EDIT: Có một lỗi trong phép nội suy chuỗi trong đó perl nghĩ $ m3 là một biến, vì vậy tôi phải thêm 2 ký tự để sửa lỗi đó. Giải quyết bằng cách thay đổi $ m thành $.

NINJA EDIT: Các trường hợp thay thế của "" bằng $ ". Lưu 2 ký tự

NINJA EDIT 2: Cảm ơn @chilemagic vì đã chỉ ra rằng tôi có thể sử dụng nói thay vì in bằng -E để lưu ký tự.

KHÔNG-SO-NINJA EDIT 3: Giải pháp của @ Nax đã đánh bại giải pháp cũ của tôi, vì vậy tôi đã đệm nó lên một chút để giữ vững lập trường của nó.


Tôi thực sự chỉ định đăng một câu trả lời Perl (mặc dù dài hơn một vài ký tự) khi bạn chuyển trang xuống. Tôi thích cách bạn sử dụng $ m bên trong và bên ngoài vòng lặp để giảm sự dư thừa.
ý

1
Bạn có thể sử dụng saythay vì printvà sau đó chạy nó -Ethay vì -e(nếu phiên bản Perl của bạn đủ cao). Trông thật tuyệt!
hmatt1

7

Haskell, 152

(?)=replicate
g 0=["3^^^^3"]
g i=("3^^"++(i*2)?'.'++".^3"):map(' ':)(("\\"++i?'_'++"  "++i?'_'++"/"):((i+1)?' '++"\\/"):g(i-1))
main=putStr.unlines.g$63

1
Chết tiệt! Đó là hai lần tôi đã từng là ninja trong vài giây. Tôi nghĩ rằng tôi có thể cứu bạn một nhân vật, tuy nhiên, nếu bạn loại bỏ +1và chỉ cần thêm dấu chấm trước đó "^3".
ý

@comperendinous Điểm tốt, cảm ơn.
Ray

Bạn có thể thay thế "\\" ++ bằng '\\':
tự hào

4

C 161 182

(tôi nghĩ rằng tôi đã tối đa hóa phương pháp này, có lẽ tôi nên tìm một phương pháp mới có thể được đánh golf nhiều hơn)
biên dịch thành C99!

main(i){for(char d[]={[0 ...126]=46,i=0},l[]={[0 ...62]=95,0};i<63;)printf("3^^%s^3\n%*s\\%s  %s/\n%*s\n%*s",d+2*i++,i,"",l+i,l+i,67,"\\/",i,"");puts("3^^^^3");}

Mã số 158

r="repeat";o="";u="_";s=" ";(f=i=>i?"3^^"+"."[r](i*2+1)+"^3\n"+s[r](64-i)+"\\"+u[r](i)+s[r](2)+u[r](i)+"/\n"+s[r](65)+"\\/\n"+s[r](64-i)+f(i-1):"3^^^^3")(63);

xem.github.io/obfuscatweet/ 124:

eval(unescape(escape('𬠽𘡲𩑰𩑡𭀢𞱯🐢𘠻𭐽𘡟𘠻𬰽𘠠𘠻𚁦👩🐾𪐿𘠳𧡞𘠫𘠮𘡛𬡝𚁩𚠲𚰱𚐫𘡞𜱜𫠢𚱳𦱲𧐨𝠴𛑩𚐫𘡜𧀢𚱵𦱲𧐨𪐩𚱳𦱲𧐨𜠩𚱵𦱲𧐨𪐩𚰢𛱜𫠢𚱳𦱲𧐨𝠵𚐫𘡜𧀯𧁮𘠫𬱛𬡝𚀶𝀭𪐩𚱦𚁩𛐱𚐺𘠳𧡞𧡞𜰢𚐨𝠳𚐻').replace(/uD./g,'')))

3

Bash + lõi, 150

Tôi nghĩ rằng tôi có thể có thể làm tốt hơn thế này. Ồ tốt

r()(yes "${2:- }"|head -$[$1]|tr -d '
')
for i in {63..1};{
r 63-$i
echo "3^^`r 2*$i .`.^3
`r 64-$i`\\`r $i _`  `r $i _`/
`r 65`\/"
}
r 63
echo 3^^^^3

Đầu ra:

$ ./graham.sh | md5sum
1ad3b10d06e38693436c14958b2c47a8  -
$ 

1

SỐ LIỆU 135

forv x=63(-1)1{
di _d(63-`x')" ""3^^"_d(2*`x'+1)".""^3"_n_d(64-`x')" ""\"_d(`x')"_""  "_d(`x')"_"_n-d(65)" ""\/"
}
di _d(63)"3^^^^3"

1

JavaScript 179

n='';a=Array;for(b=64;b>1;)n+=(c=a(65-b).join(' '))+'3^^'+a(2*b).join('.')+'^3\n'+c+' \\'+(u=a(b--).join('_'))+'  '+u+'/\n'+(d=a(64).join(' '))+'  \\/\n'
console.log(n+d+'3^^^^3')

Kiểm tra nó trong bảng điều khiển trình duyệt của bạn hoặc tại http://jsfiddle.net/2qwvrvcw/ .


1

Javascript (203)

u="_";s=" ";for(i=64;i>1;i--)console.log(s.repeat(64-i)+"3^^"+".".repeat(i*2-1)+"^3\n"+s.repeat(64-i)+"\\"+u.repeat(i)+s.repeat(2)+u.repeat(i)+"/\n"+s.repeat(65)+"\\/");console.log(s.repeat(63)+"3^^^^3")

Ung dung:

underscore = "_";
space = " ";
for (i = 64; i > 1; i--) console.log(space.repeat(64 - i) + "3^^" + ".".repeat(i * 2 - 1) + "^3\n" + 
                                     space.repeat(64-i) + "\\" + underscore.repeat(i) + space.repeat(2) + underscore.repeat(i) + "/\n" + 
                                     space.repeat(65) + "\\/");
console.log(space.repeat(63) + "3^^^^3");

1

C # (212211)

using C=System.Console;class P{static void Main(){for(int i=64;i>1;)C.Write(@"{0}3^^{2}.^3
{0} \{1}  {1}/
{3,65}\/
",new string(' ',64-i),new string('_',--i),new string('.',i*2),"");C.Write("{0,69}","3^^^^3");}}

.Net Fiddle (dường như yêu cầu lớp và phương thức Main là công khai)

Hơi vô dụng:

using C = System.Console;
class Program {
  static void Main() {
    for (int i = 64; i > 1; ) {
      C.Write("{0}3^^{2}.^3\n{0} \\{1}  {1}/\n{3,65}\\/\n",
 new string(' ', 64 - i),
 new string('_', --i),
 new string('.', i * 2), "");
    }
    C.Write("{0,69}", "3^^^^3");
  }
}

1

Perl, 116 112 109 108 (bao gồm -E)

Nỗ lực đầu tiên của tôi tại golf. Hãy lấy nó như vậy:

Chơi gôn

perl -E'map{$_=" $_!^".(($b=63-$_)?"2.$b.$b.^!
 $_ \\_$b 2_$b/
 65\\/":"4!");s#(.)(\d+)#"$1"x$2#eg;y/!/3/;say}0..63'

Rất hơi vô dụng (không được duy trì ...):

map
{
    $b = 63 - $_;
    $_ = " $_!^".($b
        ? "2.$b.$b.^!N $_ \\_$b 2_$b/N 65\\/"
        : "4!");
    s#(.)(\d+)#"$1"x$2#eg;    # behaves exactly as $_ =~ s/(.)(\d+)/"$1"x$2/eg
    y/!N/3\n/;                  # y == tr, so this does $_ =~ tr/!N/3\n/
    say;                        # once more $_ completion, this does say $_ == print "$_\n"
} (0..63);

Về cơ bản, nó hoạt động như thế này: với mỗi dòng 3 giây và một dấu ngoặc (chúng được xử lý cùng nhau), nó viết chuỗi RLE được mã hóa , sau đó giải mã nó. Quy tắc rất đơn giản: mỗi char theo sau là một số được mở rộng thành char đó với số lần đó. Nhân vật không có số được để lại một mình. Cuối cùng, ký tự !biểu thị 3 và aN có nghĩa là một dòng mới (3 phải được mã hóa vì nó là số và sẽ háo hức tham gia dưới dạng số lần lặp lại).

Mỗi dòng 3 giây và nẹp của nó có được một phần tử trong mảng 64 phần tử mà bản đồ đang tạo. Nói, giống như in, có thể xuất ra các mảng - nếu được cung cấp một mảng, nó sẽ in tất cả các phần tử (không có bất kỳ dấu phân cách nào).

Tôi đã sử dụng thủ thuật của chilemagic với -E. Cảm ơn cho nó.

Củng cố: Hai giải pháp 113 byte bắt đầu ẩn nấp ở đây. RLE sẽ không chịu thua nếu không chiến đấu!

Dọn dẹp nguồn cấp dữ liệu : Bây giờ tôi đã nhận ra rằng tôi không cần phiên âm đặc biệt của \ n, bởi vì tất cả các chuỗi trong Perl đều được tự động đa tuyến! Do đó, RLE bám sát vào lưng của Ruby! Bây giờ ở mức 109 byte.

Khai sáng Agonizing : Để đếm nhân vật đúng cách khó hơn tôi nghĩ. Sau một vài lần vật lộn, tôi đã ổn định

tiếng vang $ (( wc -c <<<'golf'-1))
(-1, vì nó tính một LF ở cuối đoạn script). Ngoài ra, tôi đã sắp xếp lại các bài tập của mình và lưu 1 ký tự, qua đó giải quyết trên 108 byte.


0

MATLAB (325)

m=127:-2:0;n=0:63;p='UniformOutput';q=false;f=@ones;g=@arrayfun;a=g(@(x,y)[f(1,y)*' '  '3^^' f(1,x)*'.'  '^3'],m,n,p,q);b=g(@(x,y)[f(1,y+1)*' '  '\' f(1,(x-1)/2)*'_' '  ' f(1,(x-1)/2)*'_' '/'],m,n,p,q);a{64}(a{64}=='.')='^';g(@(x,y)fprintf('%s\n%s\n%s\n',x{:},y{:},[f(1,65)*' ' '\/']),a,b),fprintf(repmat('\b',1,137))

vô dụng:

m=127:-2:0;
n=0:63;
p='UniformOutput';
q=false;
f=@ones;
g=@arrayfun;
a=g(@(x,y)[f(1,y)*' '  '3^^' f(1,x)*'.'  '^3'],m,n,p,q);
b=g(@(x,y)[f(1,y+1)*' '  '\' f(1,(x-1)/2)*'_' '  ' f(1,(x-1)/2)*'_' '/'],m,n,p,q);
a{64}(a{64}=='.')='^';
g(@(x,y)fprintf('%s\n%s\n%s\n',x{:},y{:},[f(1,65)*' ' '\/']),a,b),fprintf(repmat('\b',1,137))

MATLAB (252)

n=0;f=@ones;g=@arrayfun;for i=127:-2:0 if n~=63 y=f(1,i)*'.';else y='^';z='';end;fprintf('%s\n%s\n%s\n',[f(1,n)*' '  '3^^' y  '^3'],[f(1,n+1)*' '  '\' f(1,(i-1)/2)*'_' '  ' f(1,(i-1)/2)*'_' '/'],[f(1,65)*' ' '\/']);n=n+1;end;fprintf(repmat('\b',1,137))

vô dụng:

n=0;  
f=@ones;
g=@arrayfun;
for i=127:-2:0 
    if n~=63 
        y=f(1,i)*'.';
    else y='^';
        z='';
    end
    fprintf('%s\n%s\n%s\n',[f(1,n)*' '  '3^^' y  '^3'],[f(1,n+1)*' '  '\' f(1,(i-1)/2)*'_' '  ' f(1,(i-1)/2)*'_' '/'],[f(1,65)*' ' '\/']);
    n=n+1;
end
fprintf(repmat('\b',1,137))

0

PHP 214

Nghĩ rằng tôi đã làm ổn cho đến khi tôi đếm các nhân vật, dù sao thì đây là -

<?function a($n,$v=" "){for($j=0;$j<$n;$j++){$r.=$v;}return $r;}for($i=64;$i>1;$i--){$b=a($i-1,"_");$v.=a(64-$i)."3^^".a($i*2-1,".")."^3\n".a(64-$i+1)."\\".$b.a(2).$b."/\n".a(65)."\/\n";}$v.=a(63)."3^^^^3";echo $v;

Chỉ thay đổi đầu ra thành bàn điều khiển, bạn có thể lưu tối đa 11 ký tự ( &nbsp;-> ' ', <br>-> \n)
trong

Ngoài ra, bạn phải thêm <?vào lúc bắt đầu mã - nó phải là một chương trình hợp lệ, không phải là một chức năng.
trước

À đúng rồi, cảm ơn, và những lời khuyên mà bạn gợi ý, tôi đã dựa vào đầu ra của trang trái ngược với mã nguồn, (/ n sẽ không ngắt dòng và hai '' cạnh nhau vẫn chỉ tạo 1 khoảng trắng), vì vậy Tôi đoán mã nguồn cũng sẽ ổn thôi :)
Peter

<?function a($n,$v=" "){return str_repeat($v, $n);}for($i=64;$i>1;){$b=a($i-1,"_");$v.=a(64-$i)."3^^".a($i*2-1,".")."^3\n".a(65-$i--)."\\$b".a(2)."$b/\n".a(65)."\/\n";}$v.=a(63)."3^^^^3";echo$v;
Chơi gôn

kiểm tra md5 php grahams.php | md5sum::c84d0e20eac2a7f891ab42a8eb77759f -
vào

0

Lua - 174

p=print a=" "b="_"for i=0,62 do j=63-i p(a:rep(i).."3^^."..(".."):rep(j).."^3")p(a:rep(i+1).."\\"..b:rep(j).."  "..b:rep(j).."/")p(a:rep(65).."\\/")end p(a:rep(63).."3^^^^3")

Trước đó, tôi đã nhận được hai giải pháp khác nhau về mặt thuật toán (cả 182!):

a=" "b="_"for i=0,62 do j=63-i print(a:rep(i).."3^^."..(".."):rep(j).."^3")print(a:rep(i+1).."\\"..b:rep(j).."  "..b:rep(j).."/")print(a:rep(65).."\\/")end print(a:rep(63).."3^^^^3")

a=" "b="_"i=63 while i>0 do c=b:rep(i/2)for _,s in pairs{"3^^."..(".."):rep(i/2).."^3","\\"..c.."  "..c.."/","\\/"}do print(a:rep(66-#s/2)..s)i=i-1 end end print(a:rep(63).."3^^^^3")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.