Ausgabe von Grahams Nummer

16

Schreiben Sie ein Programm, das alle 64 Ebenen dieser Darstellung von Grahams Zahl aus Wikipedia ausgibt :

  Grahams Nummer

Die Ausgabe muss exakt übereinstimmen diese ASCII - Version (in denen ^stellt Knuth Aufwärtspfeile und Kombinationen von Schrägstrichen und Unterstrichen repräsentieren die große horizontale geschweifte Klammern):

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

Beachten Sie, dass 64 Ebenen vorhanden sind, dass keine nachgestellten Leerzeichen vorhanden sind und dass zwei ^vor den Punkten und nur eine nach den Punkten auftreten.

Der MD5-Hash Ihrer Ausgabe sollte genau sein c84d0e20eac2a7f891ab42a8eb77759f, oder 1ad3b10d06e38693436c14958b2c47a8wenn es eine nachgestellte Newline gibt (was in Ordnung ist).

Der kürzeste Code in Bytes gewinnt. Ausgabe auf Standardausgabe. Es erfolgt keine Eingabe.

Calvins Hobbys
quelle
3
Warum sind es Punkte und keine Aufwärtspfeile? Ich bin mir ziemlich sicher, dass der Zweck der Ellipsen auf dem Bild nur darin bestand, die fehlenden Pfeile anzuzeigen.
Raptortech97
4
@ raptortech97 Weil es VIELE fehlende Pfeile gibt. Grahams Nummer ist blutig massiv. Ich bin sehr gespannt, welche Sprachen damit umgehen können.
Fuandon
4
Die Ellipsen stellen die Anzahl der Pfeile dar, die ohne die Verwendung der Aufwärtspfeilnotation nicht einmal darstellbar sind
Eric Tressler
2
@fuandon Sie erhalten keine Sprache, um die Zahl tatsächlich zu berechnen, selbst wenn Sie einen universell großen Computer zulassen, ist dieser einfach zu groß. Ich nehme an, Sie könnten einen beliebig großen Betrag für die am weitesten rechts stehenden Stellen berechnen, aber das ist einfach nicht dasselbe.
Tally
10
Es könnte sich lohnen, die MD5-Hashes zur schnellen Überprüfung 1ad3b10d06e38693436c14958b2c47a8auszugeben : wie von grc angegeben, oder c84d0e20eac2a7f891ab42a8eb77759fwenn das letzte Zeilenumbruchzeichen weggelassen werden kann.
Super

Antworten:

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'

Beispiel:

$ python grahams.py | md5
1ad3b10d06e38693436c14958b2c47a8
grc
quelle
Was bedeutet diese Ausgabe?
Fuandon
13
Das heißt, er wollte die Antworten nicht mit einer Reproduktion der riesigen ASCII-Ausgabe oben spammen, denke ich.
Eric Tressler
1
Ah, fair genug. Ich verstehe es jetzt, Ergebnis wurde gehasht.
Fuandon
Schöner Ersatz einer for-Schleife durch eine while-Schleife.
Qwr
8

Perl - 113 (112 + 1 für -E)


Golf gespielt:

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

Ungolfed:

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

BEARBEITEN: Es gab einen Fehler bei der String-Interpolation, bei der Perl dachte, $ m3 sei eine Variable, deshalb musste ich 2 Zeichen hinzufügen, um das zu beheben. Gelöst durch Ändern von $ m in $.

NINJA EDIT: Ersetzt Instanzen von "" durch $. Speichert 2 Zeichen

NINJA EDIT 2: Vielen Dank an @chilemagic, dass ich sagen kann, anstatt mit -E zu drucken, um ein Zeichen zu speichern.

NOT-SO-NINJA EDIT 3: @Naxs Lösung hat meine alte Lösung geschlagen, also habe ich sie etwas aufpoliert, um mich zu behaupten.

tödlich
quelle
Ich wollte buchstäblich gerade eine Perl-Antwort veröffentlichen (allerdings ein paar Zeichen länger), als Ihre Seite nach unten verschoben wurde. Mir gefällt, wie Sie $ m innerhalb und außerhalb der Schleife verwendet haben, um die Redundanz zu reduzieren.
Super
1
Sie können sayanstelle von verwenden printund es dann mit -Eanstelle von ausführen -e(wenn Ihre Perl-Version hoch genug ist). Sieht aber gut aus!
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
Strahl
quelle
1
Verdammt! Das ist das Doppelte, was ich durch Sekunden ninja'd habe. Ich denke, ich könnte dir einen Charakter retten, wenn du +1den Punkt vorher entfernst und einfach hinzufügst "^3".
comperendinous
@comperendinous Guter Punkt, danke.
Ray
Sie können "\\" ++ durch "\\" ersetzen:
stolzer Haskeller
4

C 161 182

(Ich denke, ich habe diese Methode ausgereizt, vielleicht sollte ich eine neue finden, die mehr Golf gespielt werden kann)
Kompilieren Sie als 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
quelle
3

Bash + Coreutils, 150

Ich dachte, ich könnte es besser machen. Naja.

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

Ausgabe:

$ ./graham.sh | md5sum
1ad3b10d06e38693436c14958b2c47a8  -
$ 
Digitales Trauma
quelle
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"
Markierungen
quelle
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')

Testen Sie es in Ihrer Browserkonsole oder unter http://jsfiddle.net/2qwvrvcw/ .

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

Ungolfed:

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
quelle
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 (es scheint erforderlich zu sein, dass die Klasse und die Main-Methode öffentlich sind)

Leicht ungolfed:

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
quelle
1

Perl, 116 112 109 108 (einschließlich -E)

Mein erster Golfversuch. Bitte nimm es als solches:

Golf gespielt:

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

Sehr leicht ungolfed (nicht gepflegt ...):

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

Im Wesentlichen funktioniert es so: Für jede 3er-Zeile und eine geschweifte Klammer (diese werden zusammen behandelt) schreibt es ihre Sequenz RLE-codiert und decodiert sie dann. Die Regel ist einfach: Jedes Zeichen, auf das eine Zahl folgt, wird so oft zu diesem Zeichen erweitert. Zeichen ohne Nummer bleiben allein. Schließlich bezeichnet das Zeichen !eine 3 und Nbedeutet eine neue Zeile (3 musste codiert werden, weil es eine Nummer ist und eifrig an der Anzahl der Wiederholungen teilnehmen würde).

Jede Dreierzeile und ihre geschweifte Klammer erhalten ein Element in dem 64-Elemente-Array, das die Karte generiert. Sprich, wie print, kann Arrays ausgeben - wenn ein Array angegeben wird, werden alle Elemente (ohne Trennzeichen) gedruckt.

Ich habe mit chilemagic's Trick gespielt -E. Danke dafür.

Verstärkung: Hier lauerten zwei 113-Byte-Lösungen. RLE soll nicht ohne Kampf erliegen!

Bereinigung von Feeds : Ich habe jetzt festgestellt, dass ich keine spezielle Transliteration von \ n benötige, da alle Strings in Perl automatisch mehrzeilig sind! So klammert sich RLE näher an den Rücken des Rubins! Jetzt bei 109 Bytes.

Qualvolle Aufklärung : Charaktere richtig zu zählen ist schwieriger als ich dachte. Nach einigem Ringen entschied ich mich

echo $ (( wc -c <<<'golf'-1))
(-1, weil es ganz am Ende des Skripts ein LF zählt). Außerdem habe ich meine Zuordnungen neu geordnet und 1 Zeichen gespeichert, wobei ich mich auf 108 Bytes festgelegt habe.

Ramillies
quelle
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
quelle
0

PHP 214

Dachte, mir geht es gut, bis ich die Charaktere gezählt habe, jedenfalls ist es hier -

<?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
quelle
&nbsp;' '<br>\n
Wenn
Außerdem müssen Sie <?am Anfang des Codes hinzufügen - es muss ein gültiges Programm sein, keine Funktion.
Avall
Ah, richtig, danke, und die Tipps, die Sie vorgeschlagen haben, ich habe meine von der Seitenausgabe im Gegensatz zum Quellcode abgeleitet (/ n bricht die Zeile nicht und zwei nebeneinander machen immer noch nur 1 Leerzeichen), also Ich denke, der Quellcode sollte auch in Ordnung sein :)
Peter
Golf bis zu 194 Zeichen:<?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 - Check: 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")

Zuvor hatte ich zwei algorithmisch unterschiedliche Lösungen (beide 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
quelle