var QUESTION_ID=83873,OVERRIDE_USER=48934;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+(?:\.\d+)?)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
Respuestas:
Cálculo binario lambda , 114 bits = 14.25 bytes
Hexdump:
Binario:
Explicación
Esto es (λ x . (Λ y . X y (λ m . M (λ g . Λ n . N g 1) (λ n . Λ f . X ( n f )) x ) y ) (λ f . Λ z . f ( x f z ))) 3, donde todos los números se representan como números de la Iglesia. Números Iglesia son la representación lambda cálculo estándar de los números naturales, y están bien adaptados a este problema debido a que un número Iglesia se define por iteración función: n g es el n º iterate de la función g .
Por ejemplo, si g es la función λ n . λ f . 3 ( n f ) que multiplica 3 por un número de Iglesia, luego λ n . n g 1 es la función que lleva 3 al poder de un número de Iglesia. Iterar esta operación m veces da
m (λ g . λ n . n g 1) (λ n . λ f . 3 ( n f )) n = u (3, n , m ).
(Usamos la multiplicación u (-, -, 0) en lugar de la exponenciación u (-, -, 1) como el caso base, porque restar 1 del número de la Iglesia es desagradable ).
Sustituir n = 3:
m (λ g . λ n . n g 1) (λ n . λ f . 3 ( n f )) 3 = u (3, 3, m ).
Iterar esa operación 64 veces, comenzando en m = 4, da
64 (λ m . M (λ g . Λ n . N g 1) (λ n . Λ f . 3 ( n f )) 3) 4 = G .
Para optimizar esta expresión, sustituya 64 = 4 ^ 3 = 3 4:
3 4 (λ m . M (λ g λ. N . N g 1) (λ n . Λ f . 3 ( n f )) 3) 4 = G .
Recuerde 4 = succ 3 = λ f . λ z . f (3 f z ) como argumento lambda:
(λ y . 3 y (λ m . m (λ g . λ n . n g 1) (λ n . λ f . 3 ( n f )) 3) y ) (λ f . λ z . f (3 f z )) = G .
Finalmente, recuerde 3 = λ f . λ z . f ( f ( f z )) como argumento lambda:
(λ x . (λ y . x y (λ m . m (λ g . λ n . n g 1) (λ n . λ f . x ( n f )) x ) y ) (λ f . λ z . f ( x f z ))) 3 = G .
fuente
14.25 bytes
parece estar arruinando la clasificación. Se analiza como25 bytes
y, por lo tanto, se coloca como segundo.Haskell, 41 bytes
Explicación:
(`i`1)f n
=i f 1 n
calcula lan
iteración de la funciónf
comenzando en1
. En particular,(`i`1)(*3)n
= 3 ^ n , e iterar esta construcción m veces dai(`i`1)(*3)m n
= u (3, n , m ). Podemos reescribir eso como(($n).i(`i`1)(*3))m
= u (3, n , m ) e iterar esta construcción k veces para obteneri(($3).i(`i`1)(*3))4 k
= g _ k .fuente
Haskell, 43 bytes
Debe haber una mejor manera de voltear en
g
línea.46 bytes:
48 bytes:
Simplemente escribiendo las definiciones.
Los casos base son un poco más limpios respaldados hasta 0, aunque no guarda bytes. Quizás sea más fácil escribir una definición alternativa.
fuente
+
para eliminar los paréntesism-1
?(`g`3)
, no(3`g`)
.Pyth, 25 bytes
La primera parte
M?H.UgbtH*G]3^3G
define un métodog(G,H) = u(3,G,H+1)
.Para probar la primera parte, comprobar que
7625597484987=u(3,3,2)=g(3,1)
:g3 1
.La segunda parte
ug3tG64 4
comienza desder0 = 4
y luego computarn = u(3,3,r(n-1)) = g(3,r(n-1))
64 veces, generando el valor final (r
se elige en lugar deg
evitar confusiones).Para probar esta parte, empezar desde
r0=2
y luego calcularr1
:ug3tG1 2
.fuente
^3
↦*3
,tG
↦G
) y otro byte con.UgbtH*G]3
↦e.ugNtHG1
.*G]3
↦ShG
.Sesos , 30 bytes
Desmontado
O en notación Brainfuck:
Pruebas
Para calcular u (3, n , T (3, n , ... u (3, n , m ) ...)) con k llamadas anidadas para u , reemplace las tres primeras
add
instruccionesadd 4
,add 64
,add 3
conadd m
,add k
,add n
, respectivamente. Debido a que Sesos no puede construir números más rápido que en tiempo lineal, está prácticamente limitado a valores pequeños como u (3, 2, 2) = 27, u (3, 5, 1) = 243 yu (3, 1 , u (3, 1, ... u (3, 1, m ) ...)) = 3.fuente
[-]
con,
ya que EOF es0
.JavaScript (ES7), 63 bytes
fuente
Brachylog , 57 bytes
No espera entrada ni salida y escribe el resultado en
STDOUT
. Esto producirá un desbordamiento de pila en un punto.Para comprobar que esto funciona para valores pequeños (p
u(3,3,2)
. Ej. ), Puede reemplazar el4
con el valor dem
y64
con1
.Explicación
Esto es básicamente una implementación directa de la forma explicada de calcular el número.
Predicado principal:
Predicado 1:
Predicado 2:
fuente
Caramelo , 38 bytes
Este es el azúcar sintáctico para la expresión 64 del cálculo lambda (λ m . M (λ f . Λ n . N f 1) (λ n . Λ f . 3 ( n f )) 3) 4, donde todos los números se representan como Iglesia números .
fuente
(n f->3 (n f))
no debería leern-1
?(n f->3 (n f))
es una función para multiplicar por tres en los números de la Iglesia .Prólogo (SWIPL), 129/137 bytes
Para generar el número de Graham, busque
g(64,G).
(si se van a contar los 8 bytes de esta consulta, la longitud es 137 bytes):Pero como se puede esperar, esto se agota.
Prueba
El retroceso hace que se quede sin pila:
Sin golf
La versión sin golf agrega la notación general de flecha hacia arriba, no solo para 3, y utiliza cortes y comprobaciones para evitar retroceder y situaciones indefinidas.
fuente
64
en ninguna parte de su código?C, 161 bytes
EDITAR: ahorró 11 bytes eliminando pestañas y nuevas líneas. EDITAR: thx auhmann guardó otro byte y arregló mi programa
fuente
g(int a){if(a==1)return u(3,4);return g(a-1);}
ya que no se está utilizando en absoluto ... ¿O estás olvidando algo?return g(a-1)
deberías serreturn u(3,g(a-1))
.u(a,b){return a<2?3:b<2?pow(3,a):u(u(a-1,b),b-1);}g(a){return a<2?u(3,4):u(3,g(a-1));}main(){printf("%d",g(64));}
Mathematica, 59 bytes
Utiliza un operador infijo indefinido
±
que requiere solo 1 byte cuando está codificado en ISO 8859-1. Vea la publicación de @ Martin para más información. Las funciones de Mathematica admiten la coincidencia de patrones para sus argumentos, de modo que los dos casos base se pueden definir por separado.fuente
n_ ±m_:=Nest[#±(m-1)&,3,n]
C,
114109 bytesBasado en la respuesta de @thepiercingarrow ( enlace ), bajé bastante la respuesta. La mayoría de los ahorros se deben al abuso del tipeo predeterminado de los argumentos al realizar funciones de estilo K&R y al reemplazo de declaraciones if con operadores ternarios. Se agregaron nuevas líneas opcionales entre funciones para facilitar la lectura.
Mejorado a 109 gracias a @LeakyNun.
fuente
g(a){return u(3,a<2?4:g(a-1));}
Python, 85 bytes
La
v
función define la misma función que la encontrada en la respuesta de Dennis :v(n,m) = u(3,n+1,m+1)
. Lag
función es una versión cero indexada de la iteración tradicional:g(0) = v(2,3), g(n) = v(2,g(n-1))
. Por lo tanto,g(63)
es el número de Graham. Al establecer el valor predeterminado deln
parámetro de lag
función en63
, la salida requerida se puede obtener llamandog()
(sin parámetros), cumpliendo así con nuestros requisitos para un envío de función que no requiere entrada.Verifique los casos de prueba
v(2,1) = u(3,3,2)
y env(4,0) = u(3,5,1)
línea: Python 2 , Python 3fuente
g
parece estar apagada. ¿No deberíav(2,n-1)
serg(n-1)
o algo similar?u
yv
significa que debería serg(n-1)-1
.Dyalog APL, 41 bytes
Caso de prueba:
fuente
1=⍺:3⋄1=⍵:3*⍺
a just1=⍵:3*⍺
(3=3*1
)Ruby, 64 bytes
Préstamo del algoritmo teórico para calcular el número de Graham .
En pocas palabras,
f a = u(3,3,a)
y se aplica esto 64 veces.fuente
J, 107 bytes
Estoy trabajando para convertirme
u
en una agenda, pero por ahora será suficiente.fuente
u=:3^[`[:(3$:])/[#<:@]@.*@]
(no probado)F #,
111108bytesEditar
Esto está utilizando la función a continuación para calcular el número de Graham
Aquí está mi respuesta anterior que, bueno, no:
Muy claro. Solo una definición de la
u
función.Uso:
Si supuse 3 como el valor de a, podría reducirlo a 60:
Uso:
fuente
u
. Por supuesto, puede incluir cualquier función intermedia que necesite, comou
con o sin su primer argumento fijado en 3.R,
154142128126118 bytesUtilicé la definición de Wikipedia de esta función recursiva porque, por alguna extraña razón, la sugerida no funcionó ... o simplemente apestaba en R golf.
UPD: afeitado 12 + 14 = 26 bytes gracias a un consejo de Leaky Nun . La versión anterior utilizaba el voluminoso y menos eficiente.
UPD: afeitado 2 + 6 + 2 bytes más (nuevamente, felicitaciones a Leaky Nun ) debido a un ingenioso reemplazo con "if (x)" en lugar de "if (x == 0)" porque x <0 nunca se introduce en la función ... ¿verdad?
fuente
u
en la misma tecla que tug
y guardó 6 bytes más, ¡increíble!PHP, 114 bytes
ignorar los saltos de línea; son solo para legibilidad.
Es posible integrar el segundo caso en el primero: para
n=1
,3^n
es igual3
.Esto ahorrará algunos bytes en, por lo que puedo ver, todas las respuestas existentes; guardado dos bytes en mi
versión anterior, 62 + 43 + 11 = 116 bytes
La asociatividad izquierda de PHP del ternario requiere paréntesis ... o un orden específico de pruebas.
Esto ahorró dos bytes en la expresión entre paréntesis.
Probablemente hay un enfoque iterativo, que puede permitir más golf ...
pero no puedo tomarme el tiempo ahora.
fuente