Numéro de Graham de sortie

16

Écrivez un programme qui génère les 64 couches de cette représentation du nombre de Graham à partir de Wikipedia:

  Le numéro de Graham

Votre sortie doit correspondre exactement à cette version ASCII (dans laquelle ^représentent les flèches vers le haut de Knuth et les combinaisons de barres obliques et de soulignements représentent les grands crochets horizontaux):

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

Notez qu'il y a 64 couches, qu'il n'y a pas d'espaces de fin et que deux ^se produisent avant les points et qu'un seul se produit après.

Le hachage MD5 de votre sortie devrait être précisément c84d0e20eac2a7f891ab42a8eb77759f, ou 1ad3b10d06e38693436c14958b2c47a8s'il y a une nouvelle ligne de fin (ce qui est correct).

Le code le plus court en octets gagne. Sortie vers sortie standard. Il n'y a aucune entrée.

Loisirs de Calvin
la source
3
Pourquoi sont-ils des points et non plus des flèches vers le haut? Je suis à peu près sûr que le but des ellipses dans l'image était juste de montrer les flèches manquantes.
raptortech97
4
@ raptortech97 Parce qu'il y a BEAUCOUP de flèches manquantes. Le nombre de Graham est sanglant. Je suis curieusement curieux de voir quelles langues peuvent réellement le gérer.
fuandon
4
Les ellipses représentent des nombres de flèches qui ne sont même pas représentables sans utiliser la notation de flèche vers le haut
Eric Tressler
2
@fuandon Vous n'aurez aucune langue pour calculer réellement le nombre, même si vous avez autorisé un ordinateur de taille universelle, c'est tout simplement trop grand. Je suppose que vous pourriez calculer un montant arbitrairement élevé sur les chiffres les plus à droite, mais ce n'est tout simplement pas la même chose.
Tally
10
Il peut être utile de distribuer les hachages MD5 pour une vérification rapide: 1ad3b10d06e38693436c14958b2c47a8comme indiqué par grc, ou c84d0e20eac2a7f891ab42a8eb77759fsi le caractère de nouvelle ligne final peut être omis.
compérendin

Réponses:

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'

Exemple:

$ python grahams.py | md5
1ad3b10d06e38693436c14958b2c47a8
grc
la source
Que signifie cette sortie?
fuandon
13
Cela signifie qu'il ne voulait pas spammer les réponses avec une reproduction de l'énorme sortie ascii ci-dessus, je pense.
Eric Tressler
1
Ah, assez bien. Je comprends maintenant, le résultat a été haché.
fuandon
Joli remplacement d'une boucle for par une boucle while.
qwr
8

Perl - 113 (112 + 1 pour -E)


Golfé:

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

Non golfé:

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

EDIT: Il y avait une erreur d'interpolation de chaîne où perl pensait que $ m3 était une variable, j'ai donc dû ajouter 2 caractères pour corriger cela. Résolu en changeant $ m en $.

NINJA EDIT: Instances remplacées de "" par $ ". Enregistre 2 caractères

NINJA EDIT 2: Merci @chilemagic d'avoir indiqué que je peux utiliser say au lieu d'imprimer avec -E pour enregistrer un caractère.

NOT-SO-NINJA EDIT 3: La solution de @ Nax a battu mon ancienne solution, je l'ai donc un peu améliorée pour la maintenir.

killmous
la source
J'étais littéralement sur le point de publier une réponse en Perl (quelques caractères de plus, cependant) lorsque la vôtre a déplacé la page vers le bas. J'aime la façon dont vous avez utilisé $ m à l'intérieur et à l'extérieur de la boucle pour réduire la redondance.
compérendin
1
Vous pouvez utiliser sayau lieu de printpuis l'exécuter avec -Eau lieu de -e(si votre version Perl est suffisamment élevée). Ça a l'air super!
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
Rayon
la source
1
Bon sang! Ça fait deux fois que je suis ninja par seconde. Je pense que je pourrais peut-être vous sauver un personnage, si vous supprimez +1et ajoutez simplement le point avant "^3".
compérendin
@comperendinous Bon point, merci.
Ray
Vous pouvez remplacer "\\" ++ par '\\':
fier haskeller
4

C 161 182

(Je pense que j'ai optimisé cette méthode, je devrais peut-être en trouver une nouvelle qui peut être étudiée plus bas)
compiler en 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,'')))
être
la source
3

Bash + coreutils, 150

J'ai pensé que je pourrais faire mieux que ça. Tant pis.

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

Production:

$ ./graham.sh | md5sum
1ad3b10d06e38693436c14958b2c47a8  -
$ 
Traumatisme numérique
la source
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"
bmarks
la source
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')

Testez-le dans la console de votre navigateur ou sur http://jsfiddle.net/2qwvrvcw/ .

NinjaBearMonkey
la source
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")

Non golfé:

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
la source
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 (il semble que la classe et la méthode Main soient publiques)

Légèrement non golfé:

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
la source
1

Perl, 116 112 109 108 (dont -E)

Ma première tentative de golf. Veuillez le prendre comme tel:

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'

Très légèrement non golfé (non entretenu ...):

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

Essentiellement, cela fonctionne comme ceci: pour chaque ligne de 3 et une accolade (ceux-ci sont traités ensemble), il écrit leur séquence encodée en RLE , puis la décode. La règle est simple: chaque caractère suivi d'un nombre est étendu à ce caractère ce nombre de fois. Les caractères sans numéro sont laissés seuls. Enfin, le caractère !désigne un 3 et unN signifie une nouvelle ligne (3 devait être encodé car il est un nombre et participerait avec impatience comme le nombre de répétitions).

Chaque ligne de 3 et son accolade obtiennent un élément dans le tableau de 64 éléments généré par la carte. Disons que, comme print, peut produire des tableaux - si un tableau est donné, il imprime tous les éléments (sans séparateurs).

J'ai utilisé le truc de chilemagic avec -E . Merci pour ça.

Renforts: Deux solutions de 113 octets ont commencé à se cacher ici. RLE ne succombera pas sans combat!

Nettoyage des flux : je me suis maintenant rendu compte que je n'ai pas besoin d'une translittération spéciale de \ n, car toutes les chaînes en Perl sont automagiquement à lignes multiples! Ainsi, RLE s'accroche plus près du dos du Ruby! Maintenant à 109 octets.

Illumination angoissante : Compter correctement les personnages est plus difficile que je ne le pensais. Après quelques difficultés, je me suis installé

écho $ (( wc -c <<<'golf'-1))
(-1, car il compte un LF à la toute fin du script). De plus, j'ai réorganisé mes affectations et enregistré 1 caractère, ce qui me donne 108 octets.

Ramillies
la source
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))

non golfé:

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

non golfé:

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
la source
0

PHP 214

Je pensais que j'allais bien jusqu'à ce que je compte les personnages, de toute façon c'est ici -

<?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
la source
Changeant seulement la sortie console , vous pouvez économiser jusqu'à 11 caractères ( &nbsp;-> ' ', <br>-> \n)
Avall
De plus, vous devez ajouter <?au début du code - ce doit être un programme valide, pas une fonction.
avall
Ah bon merci, et les conseils que vous avez suggérés, je basais le mien sur la sortie de la page par opposition au code source, (/ n ne cassera pas la ligne et deux '' l'un à côté de l'autre ne font toujours qu'un espace), donc Je suppose que le code source devrait bien aussi :)
Peter
Golfé à 194 caractères: <?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
vérification 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")

Avant cela, j'ai obtenu deux solutions algorithmiquement différentes (toutes deux 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
la source