Keluarkan Nomor Graham

16

Tulis program yang menampilkan semua 64 lapisan representasi nomor Graham ini dari Wikipedia:

  Nomor Graham

Keluaran Anda harus sama persis dengan versi ASCII ini (di mana ^mewakili panah atas Knuth dan kombinasi garis miring dan garis bawah mewakili tanda kurung keriting horizontal besar):

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

Perhatikan bahwa ada 64 lapisan, bahwa tidak ada spasi tambahan, dan dua ^terjadi sebelum titik dan hanya satu yang terjadi setelahnya.

The hash MD5 output Anda harus tepat menjadi c84d0e20eac2a7f891ab42a8eb77759f, atau 1ad3b10d06e38693436c14958b2c47a8jika ada baris baru Trailing (yang ok).

Kode terpendek dalam byte menang. Output ke stdout. Tidak ada input.

Hobi Calvin
sumber
3
Mengapa titik-titik itu bukan panah-atas? Saya cukup yakin tujuan elips di gambar itu hanya untuk menunjukkan panah yang hilang.
raptortech97
4
@ raptortech97 Karena ada BANYAK panah yang hilang. Jumlah Graham berdarah masif. Saya sangat penasaran untuk melihat bahasa apa yang sebenarnya bisa menanganinya.
fuandon
4
Elips mewakili jumlah panah yang bahkan tidak dapat diwakili tanpa menggunakan notasi panah atas
Eric Tressler
2
@ fuandon Anda tidak akan mendapatkan bahasa apa pun untuk benar-benar menghitung angka, bahkan jika Anda mengizinkan komputer berukuran semesta, itu terlalu besar. Saya kira Anda bisa menghitung jumlah sewenang-wenang dalam jumlah besar, tetapi itu tidak sama.
Tally
10
Mungkin perlu membagikan hash MD5 untuk verifikasi cepat: 1ad3b10d06e38693436c14958b2c47a8seperti yang diberikan oleh grc, atau c84d0e20eac2a7f891ab42a8eb77759fjika karakter baris baru akhir dapat dihilangkan.
comperendinous

Jawaban:

9

Python, 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'

Contoh:

$ python grahams.py | md5
1ad3b10d06e38693436c14958b2c47a8
grc
sumber
Apa artinya output itu?
fuandon
13
Itu berarti dia tidak ingin mengirim spam jawaban dengan reproduksi output ascii besar di atas, saya pikir.
Eric Tressler
1
Ah, cukup adil. Saya mengerti sekarang, hasilnya di-hash.
fuandon
Pengganti for for yang bagus dengan loop sementara.
qwr
8

Perl - 113 (112 + 1 untuk -E)


Golf:

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

Tidak Disatukan:

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

EDIT: Ada kesalahan dalam interpolasi string di mana perl berpikir $ m3 adalah variabel, jadi saya harus menambahkan 2 karakter untuk memperbaikinya. Dipecahkan dengan mengubah $ m menjadi $.

NINJA EDIT: Diganti instance dari "" dengan $ ". Menghemat 2 karakter

NINJA EDIT 2: Terima kasih @chememagic untuk menunjukkan bahwa saya dapat menggunakan say bukannya mencetak dengan -E untuk menyimpan karakter.

TIDAK-SO-NINJA EDIT 3: @ Solusi Nax mengalahkan solusi lama saya, jadi saya gosok sedikit untuk menahannya.

mematikan
sumber
Saya benar-benar baru akan mengirim jawaban Perl (beberapa karakter lebih lama, meskipun) ketika Anda menggeser halaman ke bawah. Saya suka bagaimana Anda menggunakan $ m di dalam dan di luar loop untuk mengurangi redundansi.
Comperendinous
1
Anda dapat menggunakan saysebagai ganti printdan kemudian menjalankannya dengan -Ealih - alih -e(jika versi Perl Anda cukup tinggi). Tampak hebat!
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
sinar
sumber
1
Sial! Itu dua kali saya sudah ninja dalam hitungan detik. Saya pikir saya mungkin menyelamatkan Anda karakter, jika Anda menghapus +1dan tambahkan saja titik sebelumnya "^3".
comperendinous
@comperendinous Bagus, terima kasih.
Ray
Anda dapat mengganti "\\" ++ dengan '\\':
haskeller bangga
4

C 161 182

(saya pikir saya maksimalkan metode ini, mungkin saya harus menemukan yang baru yang dapat diturunkan lebih lanjut)
kompilasi sebagai 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");}

JS 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,'')))
bebe
sumber
3

Bash + coreutils, 150

Saya pikir saya mungkin bisa melakukan lebih baik dari ini. Baiklah.

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

Keluaran:

$ ./graham.sh | md5sum
1ad3b10d06e38693436c14958b2c47a8  -
$ 
Trauma Digital
sumber
1

STATA 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"
tanda
sumber
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')

Uji di konsol browser Anda atau di http://jsfiddle.net/2qwvrvcw/ .

NinjaBearMonkey
sumber
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")

Tidak Disatukan:

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");
kitcar2000
sumber
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 (sepertinya mengharuskan kelas dan metode Utama bersifat publik)

Sedikit tidak berbulu:

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");
  }
}
Lauri Helkkula
sumber
1

Perl, 116 112 109 108 (termasuk -E)

Upaya pertama saya bermain golf. Silakan anggap seperti ini:

Golf:

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

Sangat sedikit ungolfed (tidak dipertahankan ...):

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

Pada dasarnya ini bekerja seperti ini: untuk setiap baris 3s dan penjepit (ini ditangani bersama-sama), ia menulis urutan mereka yang dikodekan dengan RLE , kemudian menerjemahkannya. Aturannya sederhana: setiap karakter diikuti oleh angka diperluas ke karakter itu beberapa kali. Karakter tanpa nomor dibiarkan sendiri. Akhirnya, karakter !menunjukkan 3 dan aN berarti baris baru (3 harus dikodekan karena nomor dan akan bersemangat berpartisipasi sebagai jumlah pengulangan).

Setiap baris 3s dan brace-nya mendapatkan elemen dalam array 64-elemen yang dihasilkan peta. Katakanlah, seperti cetak, dapat menampilkan array - jika diberi array, ia mencetak semua elemen (tanpa pemisah apa pun).

Saya menggunakan trik chilemagic dengan -E . Terimakasih untuk ini.

Bala bantuan: Dua solusi 113 byte mulai mengintai di sini. RLE tidak akan menyerah tanpa perlawanan!

Pembersihan Umpan : Saya sekarang menyadari bahwa saya tidak memerlukan transliterasi khusus \ n, karena semua string di Perl secara otomatis berganda! Jadi RLE menempel lebih dekat ke punggung Ruby! Sekarang pada 109 byte.

Agonizing Enlightment : Menghitung karakter dengan benar lebih sulit dari yang saya kira. Setelah beberapa kesulitan, saya memutuskan

echo $ (( wc -c <<<'golf'-1))
(-1, karena itu menghitung LF di bagian paling akhir skrip). Selain itu saya telah mengatur ulang tugas saya dan menyelamatkan 1 karakter, dengan ini menetapkan pada 108 byte.

Ramillies
sumber
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))

ungolfed:

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

ungolfed:

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))
Minar Ashiq Tishan
sumber
0

PHP 214

Kupikir aku baik-baik saja sampai aku menghitung karakter, toh ini dia -

<?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;
Peter
sumber
Hanya mengubah output ke konsol Anda dapat menyimpan hingga 11 karakter ( &nbsp;-> ' ', <br>-> \n)
avall
Juga, Anda harus menambahkan <?di awal kode - itu harus program yang valid, bukan fungsi.
avall
Ah benar terima kasih, dan tips yang Anda sarankan, saya mendasarkan hasil keluaran halaman saya sebagai lawan dari kode sumber, (/ n tidak akan melanggar garis dan dua '' di sebelah satu sama lain masih membuat hanya 1 ruang), jadi Saya kira kode sumber juga harus baik-baik saja :)
Peter
Bermain golf hingga 194 karakter:<?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;
avall
md5 cek: php grahams.php | md5sum:c84d0e20eac2a7f891ab42a8eb77759f -
Avall
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")

Sebelum itu, saya mendapat dua solusi yang berbeda secara algoritmik (keduanya 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")
Adriweb
sumber