Wyjście Liczba Grahama

16

Napisz program, który wypisuje wszystkie 64 warstwy tej reprezentacji liczby Grahama z Wikipedii:

  Numer Grahama

Twoje wyniki muszą dokładnie odpowiadać tej wersji ASCII (w której ^reprezentują strzałki w górę Knutha, a kombinacje ukośników i podkreślników reprezentują duże poziome nawiasy klamrowe):

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

Zauważ, że istnieją 64 warstwy, że nie ma końcowych spacji, i że dwie ^występują przed kropkami, a tylko jedna występuje później.

MD5 hash swojego wyjścia powinien być precyzyjnie c84d0e20eac2a7f891ab42a8eb77759f, lub 1ad3b10d06e38693436c14958b2c47a8jeśli nie ma końcowego znaku nowej linii (co jest ok).

Najkrótszy kod w bajtach wygrywa. Wyjście na standardowe wyjście. Brak danych wejściowych.

Hobby Calvina
źródło
3
Dlaczego są to kropki, a nie więcej strzałek w górę? Jestem prawie pewien, że elipsy na zdjęciu miały po prostu pokazać brakujące strzały.
raptortech97
4
@ raptortech97 Ponieważ brakuje DUŻO strzał. Liczba Grahama jest cholernie duża. Jestem niezmiernie ciekawy, jakie języki mogą sobie z tym poradzić.
fuandon
4
Elipsy reprezentują liczbę strzałek, które nawet nie są reprezentowalne bez zapisu w górę
Eric Tressler
2
@fuandon Nie dostaniesz żadnego języka do obliczenia liczby, nawet jeśli pozwolisz na komputer wielkości wszechświata, jest po prostu zbyt duży. Przypuszczam, że można obliczyć dowolnie dużą liczbę cyfr po prawej stronie, ale to nie jest to samo.
Tally
10
Może warto wydać skróty MD5 w celu szybkiej weryfikacji: 1ad3b10d06e38693436c14958b2c47a8podanej przez grc lub c84d0e20eac2a7f891ab42a8eb77759fjeśli można pominąć końcowy znak nowej linii.
wszechstronny

Odpowiedzi:

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'

Przykład:

$ python grahams.py | md5
1ad3b10d06e38693436c14958b2c47a8
grc
źródło
Co oznacza ten wynik?
fuandon
13
To znaczy, że nie chciał spamować odpowiedzi z reprodukcją ogromnej produkcji ascii powyżej, tak myślę.
Eric Tressler,
1
Ach, w porządku. Rozumiem teraz, wynik został zaszyfrowany.
fuandon
Ładne zastąpienie pętli for z pętlą while.
qwr
8

Perl - 113 (112 + 1 dla -E)


Gra w golfa:

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

Nie golfowany:

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

EDYCJA: Wystąpił błąd w interpolacji łańcucha, w którym Perl myślał, że $ m3 jest zmienną, więc musiałem dodać 2 znaki, aby to naprawić.Rozwiązany przez zmianę $ m na $.

EDYCJA NINJA: Zamieniono wystąpienia „” na $ ”. Zapisuje 2 znaki

NINJA EDIT 2: Dzięki @chilemagic za zwrócenie uwagi, że mogę użyć powiedz zamiast drukować z -E, aby zapisać znak.

NOT-SO-NINJA EDIT 3: Rozwiązanie @ Nax pobiło moje stare rozwiązanie, więc trochę go ulepszyłem, aby utrzymać swoją pozycję.

zabójca
źródło
Miałem dosłownie zamiar opublikować odpowiedź Perla (kilka znaków dłuższą), kiedy twoja strona przesunęła się w dół. Podoba mi się, jak wykorzystałeś $ m wewnątrz i na zewnątrz pętli, aby zmniejszyć nadmiarowość.
wszechstronny
1
Możesz użyć sayzamiast, printa następnie uruchomić go -Ezamiast -e(jeśli twoja wersja Perla jest wystarczająco wysoka). Wygląda świetnie!
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
Promień
źródło
1
Cholera! To dwa razy byłem ninja sekundą. Myślę jednak, że mógłbym ocalić ci postać, jeśli usuniesz +1i po prostu dodasz kropkę wcześniej "^3".
wszechstronny
@comperendinous Dobry punkt, dzięki.
Ray
Możesz zamienić „\\” ++ na „\\”:
dumny haskeller
4

C 161 182

(myślę, że zmaksymalizowałem tę metodę, może powinienem znaleźć nową, którą można by bardziej pograć w golfa)
skompilować jako 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
źródło
3

Bash + coreutils, 150

Pomyślałem, że mogę być w stanie zrobić to lepiej. No cóż.

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

Wynik:

$ ./graham.sh | md5sum
1ad3b10d06e38693436c14958b2c47a8  -
$ 
Cyfrowa trauma
źródło
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"
znaczniki
źródło
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')

Przetestuj w konsoli przeglądarki lub na stronie http://jsfiddle.net/2qwvrvcw/ .

NinjaBearMonkey
źródło
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")

Nie golfowany:

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
źródło
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 (wydaje się, że wymaga, aby klasa i metoda Main były publiczne)

Nieznacznie nie golfista:

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
źródło
1

Perl, 116 112 109 108 (w tym -E)

Moja pierwsza próba gry w golfa. Weź to jako takie:

Gra w golfa:

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

Bardzo nieznacznie pozbawiony golfa (nieutrzymywany ...):

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

Zasadniczo działa tak: dla każdej linii 3s i nawiasu klamrowego (są one obsługiwane razem), zapisuje ich sekwencję zakodowaną w RLE , a następnie dekoduje. Zasada jest prosta: każdy znak, po którym następuje liczba, jest rozszerzany do tego znaku tyle razy. Znaki bez numeru są pozostawione same sobie. Wreszcie znak !oznacza 3 i aN oznacza nowy wiersz (3 musiał zostać zakodowany, ponieważ jest liczbą i chętnie brałby udział jako liczba powtórzeń).

Każda linia 3s i jej nawias klamrowy otrzymują element w 64-elementowej tablicy generowanej przez mapę. Powiedzmy, podobnie jak print, może generować tablice - jeśli otrzyma tablicę, drukuje wszystkie elementy (bez żadnych separatorów).

Użyłem sztuczki chilemagic -E. Dzięki za to.

Wzmocnienia: zaczęły się tutaj czaić dwa 113-bajtowe rozwiązania. RLE nie ulegnie bez walki!

Oczyszczanie kanałów : Teraz zdałem sobie sprawę, że nie potrzebuję specjalnej transliteracji \ n, ponieważ wszystkie ciągi w Perlu są automagicznie wielowarstwowe! W ten sposób RLE przylega bliżej grzbietu Ruby! Teraz ma 109 bajtów.

Bolesne oświecenie : Prawidłowe policzenie postaci jest trudniejsze niż myślałem. Po kilku zmaganiach zdecydowałem się na

echo $ (( wc -c <<<'golf'-1))
(-1, ponieważ liczy LF na samym końcu skryptu). Ponadto przestawiłem swoje zadania i zapisałem 1 znak, niniejszym osiadając na 108 bajtach.

Ramillies
źródło
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))

bez golfa:

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

bez golfa:

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
źródło
0

PHP 214

Myślałem, że wszystko w porządku, dopóki nie policzyłem bohaterów, w każdym razie tutaj jest -

<?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;
Piotr
źródło
Zmieniając wyjście tylko na konsolę, możesz zapisać do 11 znaków ( &nbsp;-> ' ', <br>-> \n)
avall
Ponadto należy dodać <?na początku kodu - musi to być poprawny program, a nie funkcja.
avall
Ach, właśnie dzięki, i wskazówki, które zasugerowałeś, opierałem mój wynik na stronie w przeciwieństwie do kodu źródłowego (/ n nie łamie linii, a dwa obok siebie wciąż robią tylko 1 spację), więc Myślę, że kod źródłowy też powinien być w porządku :)
Peter,
Grał w golfa do 194 znaków:<?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
Check MD5: 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")

Wcześniej otrzymałem dwa algorytmicznie różne rozwiązania (oba 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
źródło