var QUESTION_ID=59192,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/61321/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://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+)(?=[^\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:
J, 5 bytes
Pruébelo en línea en J.js .
Cómo funciona
/\
es un adverbio (función que toma un argumento izquierdo) que se reduce acumulativamente por su argumento.Así
+/\
es el verbo de suma acumulativa .^:
es la conjunción de poder ;(f ^: n) y
aplicaf
un total den
veces ay
.El tren verbo-conjunción
+/\^:
forma un adverbio que se repite+/\
tantas veces como se especifica en su argumento (izquierdo).x (+/\^:) y
se analiza como(x (+/\^:)) y
, lo que equivale a ejecutar(+/\^:x) y
.Gracias a @Zgarb por su ayuda con la explicación.
fuente
Mathematica, 19 bytes
Bueno, si los complementos están bien ...
Define una función con la misma firma que los ejemplos en el desafío. Sin
Accumulate
embargo, estoy bastante seguro, gracias al largo nombre de que esto será fácilmente superado por los idiomas de golf y la familia APL. :)Para elaborar el comentario de LegionMammal978 para aquellos que no tienen Mathematica:
##
representa una secuencia de los parámetros de la función (que es como una lista que "salpica" automáticamente donde sea que se inserte, si está más familiarizado con ese término del idioma de su elección). El~
son azúcar sintáctica para invocación de la función infija, por lo que si llamamos a la función con parámetroslist
yn
y ampliar todo, obtenemos:Que resulta ser exactamente el orden de argumento esperado por
Nest
.fuente
SlotSequence
...Haskell,
2623 bytesEsto define una función anónima, invocada de la siguiente manera:
Gracias a @nimi por guardar 3 bytes.
Explicación
fuente
(!!).iterate(scanl1(+))
.APL,
98 bytesEsto define una función diádica que acepta las iteraciones y la lista como argumentos izquierdo y derecho.
¡Gracias a @NBZ por jugar golf en 1 byte!
Pruébelo en línea en TryAPL .
Cómo funciona
⍺
y⍵
son los argumentos izquierdo y derecho de la función.+\
es acumulativo reducir por suma.⍣⍺
repite los⍺
tiempos de operador anteriores .⊢⍵
aplica la función de identidad a⍵
.Esta es una forma más corta de analizar el código en
(+\⍣⍺)⍵
lugar de+\⍣(⍺⍵)
.En conjunto, aplicamos
+\
un total de⍺
veces a⍵
fuente
+\⍣⎕⊢⎕
sería aceptable? (⎕
Es como Pythoninput()
).⎕
después.Matlab, 41 bytes
Bastante sencillo. Todavía creo que es bastante molesto no tener una forma integrada de hacer funciones anónimas definidas por partes, o anclas en las recursiones.
Sin golf:
fuente
JavaScript (ES6) 38
Sorprendentemente pequeño usando .map recursivamente
fuente
K,
73 bytesMuy similar a la solución J.
+\
realiza con precisión una suma parcial, y cuando/
se le proporciona un verbo monádico y un argumento entero a la izquierda, itera un número específico de veces, como un bucle "for". El resto es simplemente envolverlo perfectamente para adaptarse al orden de los argumentos.Probado en Kona y OK .
Editar:
Si se me permite revertir los argumentos, como determinó @ kirbyfan64sos, puedo prescindir completamente de la función:
Invocado como:
Esto funciona correctamente tanto en k2.8 como en k5. No funciona en OK ya que ese intérprete aún no admite adverbios curry (también conocido como "proyectado"), y no parece funcionar correctamente en Kona por razones menos claras.
editar : Desde hace unos días, la
+\/
formulación también funciona en OK.fuente
3 +\/ -3 4 7 -1 15
funciona bien en Kona, pero no puede asignarlo a una función. Extraño ...3+\/-3 4 7 -1 15
lo mismo que+\/[3;-3 4 7 -1 15]
... me hace preguntarme si manejan el primero como un caso sintáctico especial.Pyth, 9 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación
fuente
Julia, 29 bytes
Esto realmente no necesita mucha explicación. Es una función recursiva, si
y==0
solo emite x. De lo contrario, disminuya y, realice un cumsum y recurse. Probablemente no sea la solución de Julia más golfizada posible, todavía estoy trabajando en ello.fuente
Laberinto , 73 bytes
Ha pasado un tiempo desde que respondí algo en Labyrinth, y esto parecía factible. :)
El formato de entrada es una lista plana con el número de iteraciones primero (y luego la lista para aplicar las sumas parciales). Los delimitadores no importan todos, siempre que no haya caracteres después del último entero, por lo que puede usar algo legible como:
La salida está separada por nueva línea:
fuente
R, 75 bytes
Es largo pero una toma diferente ... calcular la secuencia deseada directamente en lugar de sumas acumulativas:
Observando que los coeficientes de los términos de xi para cumsum ^ n (x) son diagonales del triángulo de Pascal. es decir
editar: para hacer una función
fuente
Pitón 2, 67
Utiliza el mismo resumen que Anthony Roitman y la misma recursión que Morgan Thrapp .
Desarrollé esta solución antes de ver la suya, y luego me pareció más fácil publicarla como una respuesta en lugar de un comentario para uno o ambos.
fuente
Python,
113938976 bytesFunciona para ambos casos de prueba. Gracias a Status, Morgan Thrapp y Ruth Franklin por ayudarme a jugar golf en el programa hasta 93, 89 y 76 bytes respectivamente.
fuente
k=[sum(l[:j+1])for j in range(len(l))]
. Luego, con;k=l
el extremo clavado al final, puede empujar todo esto en una línea con elfor i
bucle.k=[sum(l[:j+1])for j in range(len(l))];l=k
a la misma línea que el bucle for para guardar 2 bytes y eliminar el espacio entre los argumentos de f para guardar otro byte.i
, puede reemplazarfor i in range(n)
confor i in[0]*n
(porque lo único que le importa es la longitud, no los elementos de la lista). Y creo que puedes hacerlo sin usar la lista auxiliark
, solo modificando el argumentol
.Gol> <> 0.3.10 , 22 bytes
Se considera que el primer entero es el número de iteración y el resto forma la lista. La lista final se muestra separada por una nueva línea.
El lenguaje aún es bastante joven e inestable, pero como estoy bastante concentrado en estos operadores, pensé que estaría bien.
Explicación
Para ver por qué esto funciona, intentemos con un pequeño ejemplo
[5 2 1]
:fuente
Python, 52 bytes
Una función recursiva que se repite tanto en la lista
l
como en el número de iteracionesn
. Vamos a desglosarlo.Primero, consideremos una función recursiva
g
que itera la suma parcial solo una vez.Para una lista vacía
l
, esto se devuelve al
sí mismo, la lista vacía. De lo contrario, la última entrada de las sumas parciales del
es la suma total del
, que se agrega al resultado recursivo para todos menos el último elemento del
.Ahora, veamos una función
f
que se aplicag
a lasn
iteraciones.Cuando
n
es así0
, esto devuelve la listal
sin cambios, y de lo contrario, se aplicag
una vez, luego llamaf
recursivamente con una iteración menos restante.Ahora, veamos nuevamente el código real, que combina las dos recursiones en una sola función. La idea es tratar
g(l)
como el caso especialf(l,1)
.Llevamos a
f(g(l),n-1)
partir de la definición anterior, se expandióg(l)
eng(l[:-1])+[sum(l)]
, y luego reemplazadog(_)
conf(_,1)
que limita las llamadas recursivas af
.Para el caso base, queremos volver
l
cuandon==0
ol==[]
. Combinamos esto notando que cualquiera de los dosn*l
es la lista vacía, que es Falsy. Por lo tanto, recurrimos cuandon*l
no está vacío y regresamos de lol
contrario.Aunque hay dos llamadas recursivas a
f
, esto no causa una explosión exponencial de la definición recursiva de los números de Fibonacci, pero sigue siendo cuadrática.fuente
C ++ (61 + 17 = 78 bytes)
Caso de prueba:
Esto toma un poco de libertad con la especificación: utiliza una matriz de estilo C, pasando punteros al principio y al final de la matriz. Internamente, como puede ver, es solo un envoltorio extremadamente delgado alrededor
std::partial_sum
de la biblioteca estándar. En lugar de devolver el valor resultante, simplemente modifica la matriz que se pasa.Si no nos importa llevar las definiciones de las cosas al límite (y, posiblemente, un poco más allá) podemos definir una "función" en una expresión lambda:
Esto reduce la definición de la función (objeto similar) a esta pieza:
... para 40 bytes (+17 para el
#include
).fuente
CJam, 13 bytes
Pruébalo aquí.
fuente
Haskell,
5247 bytesPrimer código de 'intento' de golf, y soy un principiante de Haskell, ¡así que los comentarios son bienvenidos! No estaba claro en la pregunta sobre el formato necesario de la llamada a la función, o si fue tomada por un argumento al programa, por lo que utilicé el signo de exclamación como el identificador de la función para guardar un par de espacios.
Uso (GHCi):
fuente
0!a=a
i!a=...
.sum(take j a)
, puede evitar los pares haciendosum$take j a
, usando la alta prioridad de$
.$
tendría prioridad sobre la sintaxis (y tratar de evaluar el resto de la línea tal como está). Por supuesto, eso ni siquiera tendría sentido.R, 41 bytes
fuente
C #, 52 + 85 =
148137bytesy
Utiliza prácticas poco ortodoxas (
v=>t+=v
), pero esto es PPCG. También tenga en cuenta la restricción de profundidad de pila.fuente
Pitón 3, 73
Probablemente podría jugar golf un poco más lejos.
Esta versión usa numpy, que se siente un poco como hacer trampa, pero aquí está:
Python 3 (con numpy), 72
fuente
C ++ 14,
10210394 + 17 (incluir) = 111 bytesSin golf, con caso de prueba
Se basa en el orden de evaluación. No estoy seguro si es UB o no, pero funciona.Es dependiente del compilador, así que lo cambié.fuente
j
de 0 a n, cuentan
regresiva hasta 0. Da 97 bytes por mi cuenta.Octava, 24 bytes
fuente
Burlesque, 10 bytes
No es muy eficiente en general, pero funciona.
fuente
C ++ 14, 67 bytes
Como lambda sin nombre modificando su entrada, requiriendo
c
como un contenedor de acceso aleatorio comovector<int>
.fuente
05AB1E , 4 bytes (probablemente no compite)
Pruébalo en línea!
fuente
Jalea , 3 bytes
Pruébalo en línea!
Este es mi método (del Sr. Xcoder ).
Jalea , 3 bytes
Pruébalo en línea!
Esta es la solución de caird coinheringaahing .
Método 1
Método 2
fuente
Axiom
21347 bytesungolf y algún ejemplo
fuente