var QUESTION_ID=80608,OVERRIDE_USER=49561;function answersUrl(e){return"https://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"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:
Jalea ,
2220 bytesPruébalo en línea!
Cómo funciona
fuente
Julia,
5248 bytesPruébalo en línea!
Antecedentes
En las funciones casadas de On Hofstadter , el autor muestra que
donde φ denota la proporción áurea ,
y F n denota el n º número de Fibonacci .
Además, en Problemas y soluciones avanzadas, H-187: Fibonacci es un cuadrado , el proponente muestra que
donde L n denota el n º número Lucas , y que - por el contrario - si
entonces n es un número de Fibonacci ym es un número de Lucas.
De esto, deducimos que
siempre que n> 0 .
Cómo funciona
Dada la entrada x , construimos una matriz 2 por x , donde | es además en la primera columna y la resta en el segundo, y n itera sobre los números enteros entre 1 y x en las filas.
El primer término de F (n - 1) y M (n - 1) es simplemente
n÷φ
.Calculamos δ (n) y ε (n) calculando 5n² | 4 y probar si el resultado pertenece a la matriz de cuadrados de los enteros entre 2 y 3n . Esto prueba tanto la cuadratura como, dado que 1 no está en el rango, para n> 1 si | es resta.
Finalmente, sumamos o restamos el valor booleano resultante de
5n^2|4∈(2:3n).^2
ay del entero previamente calculado.fuente
Python 2,
7970 bytesIterativo en lugar de recursivo, porque por qué no. La primera línea tiene un espacio final; si no está bien, se puede arreglar para un byte adicional. -9 bytes gracias a @Dennis.
Aquí hay algunas lambdas combinadas que realmente no ayudaron:
Ambos toman
n
y un parámetrok
0 o 1, especificando hombre / mujer. La primera lambda devuelve el enésimo elemento, y la segunda lambda devuelve los primeros n elementos (con tiempo de ejecución exponencial).fuente
MATL , 23 bytes
Pruébalo en línea!
Explicación
Esto funciona de forma iterativa. Cada secuencia se mantiene en una matriz. Para cada índice n, el nuevo término de cada secuencia se calcula y se adjunta a la matriz correspondiente. Se utiliza un
for
bucle con N −1 términos, donde N es el número de entrada.La actualización para la secuencia M debe hacerse primero. Esto se debe a que la secuencia F siempre es mayor o igual que la secuencia M para el mismo índice, por lo que si intentamos actualizar F primero, necesitaríamos un término de M aún no calculado.
Las dos ecuaciones de actualización son las mismas que intercambian F y M. Por lo tanto, el código para la actualización se reutiliza aplicando un
for
bucle con dos iteraciones e intercambiando las secuencias en la pila.fuente
J, 47 bytes
Utiliza la definición recursiva. Las dos primeras líneas definen los verbos
f
ym
representan las funciones masculina y femenina, respectivamente. La última línea es un verbo que toma un solo argumenton
y genera los primerosn
términos de las secuencias femenina y masculina.Uso
fuente
JavaScript (ES6), 75 bytes
Podría guardar 2 bytes si se me permitiera devolver primero la secuencia masculina:
fuente
Haskell, 57 bytes
Ejemplo de uso:
(<$>[v,w]).take $ 5
->[[1,1,2,2,3],[0,0,1,2,2]]
La función auxiliar
#
crea una lista infinita con valor inicials
y una listal
para buscar todos los elementos adicionales (en el índice del valor anterior).v = w#1
es law = v#0
secuencia femenina y masculina. En la función principal tomamos los primerosn
elementos de ambosv
yw
.fuente
Python 2, 107 bytes
Pruébalo en línea
Los valores de entrada más grandes provocan un RuntimeError (demasiada recursividad). Si esto es un problema, puedo escribir una versión donde el error no ocurra.
fuente
Julia, 54 bytes
Pruébalo en línea!
fuente
Pyth, 24 bytes
Probablemente sea imposible de usar
reduce
para reducir el conteo de bytes.Implementación directa.
Pruébalo en línea!
Cómo funciona
fuente
Brachylog , 65 bytes
Mi intento de combinar ambos predicados para hombre y mujer en uno solo hizo que el código fuera más largo.
Puede usar el siguiente revestimiento que tiene el mismo número de bytes:
Nota : Esto funciona con el transpilador Prolog, no con el antiguo Java.
Explicación
Predicado principal:
Predicado 2 (femenino):
Predicado 3 (masculino):
fuente
{:1-:0re.}
usa para crear la lista de rangos.Clojure,
132131 bytesSimplemente construye las secuencias iterativamente de cero a n.
Versión sin golf
fuente
Pyth, 23 bytes
Pruébelo en línea: demostración
Explicación:
Solución alternativa que utiliza una función en lugar de reducir (también 23 bytes):
fuente
Ruby,
104929782 bytesEditar:
f
ym
ahora son una función gracias a HopefullyHelpful . Cambié la segunda función para imprimirf
entoncesm
. El espacio en blanco despuésp
es significativo, ya que de lo contrario la función se imprime en(0...n)
lugar del resultado demap
.La tercera función imprime primero una matriz de los primeros n términos de
f
, seguido de una matriz de los primeros n términos dem
Estas funciones se llaman así:
fuente
n
yi
n>0?n-f(f(n-1,i),-i):i>0?1:0
f
ym
, necesito imprimirlo. De lo contrario, solo obtengo una serie como[[1, 1, 2, 2, 3, 3, 4, 5, 5, 6], [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]]
APL (Dyalog Unicode) ,
4525 bytesFunción tácita anónima. Requiere
⎕IO←0
, que es estándar en muchos sistemas APL.Pruébalo en línea!
Esto funciona combinando F y M en una única función diádica con un argumento izquierdo booleano que selecciona la función a aplicar. Usamos 1 para F y 0 para M para poder usar este selector como valor de retorno para F (0) y M (0). Luego observamos que ambas funciones deben llamarse a sí mismas primero (en el argumento menos uno) y luego la otra función en el resultado de eso, por lo que primero recurrimos con el selector dado y luego con el selector negado lógicamente.
⍳
ɩ ndices; argumento cero a uno menos uno1 0∘.{
...}
"producto" externo (cartesiano) (pero con la siguiente función en lugar de multiplicación) usando[1,0]
como argumentos izquierdos (⍺
) y los índices como argumentos correctos⍵
):×⍵
si el argumento correcto es estrictamente positivo (literalmente, el signo del argumento correcto):⍵-1
reste uno del argumento correcto⍺∇
llamarse a sí mismo con eso como argumento correcto y el argumento izquierdo como argumento izquierdo(~⍺)∇
llamarse a sí mismo con eso como argumento derecho y la negación lógica del argumento izquierdo como argumento izquierdo⍵-
reste eso del argumento correcto y devuelva el resultado⋄
más:⍺
devolver el argumento izquierdofuente
n
) + una nueva línea.ES6,
898583 bytes2 bytes guardados gracias a @ Bálint
Implementación ingenua.
Explicación:
fuente
&&
cortocircuitos, lo que se desea, pero lo eliminé de todos modos porque la sintaxis de llaves es igualmente corta de todos modosMathematica,
6962 bytesGracias a Sp3000 por sugerir un formulario funcional que ahorró 14 bytes.
Esto define una función auxiliar con nombre
f
y luego se evalúa como una función sin nombre que resuelve la tarea real de imprimir ambas secuencias.fuente
Perl 5.10,
8580 bytesNo sé si tengo más ideas para jugar golf ...
Pruébalo en línea!
Tuve que agregar
use 5.10.0
Ideone para que aceptara elsay
función, pero no cuenta para el conteo de bytes.Es una implementación ingenua del algoritmo,
@a
siendo la lista "femenina" y@b
la "masculina".Tachado 85 sigue siendo 85?
fuente
push
término ed ni el punto y coma final antes del paréntesis.Java, 169 bytes en total
F (), M () 56 bytes
recursivo para bucle e impresión de 77 bytes
Salida de las listas en dos líneas diferentes 37 Bytes
entrada: p (
10
)salida:
fuente
C, 166 bytes
Uso:
Salida:
Sin golf (331 Bytes)
fuente
8o , 195 bytes
Código
Uso
Explicación
Este código usa recursividad y palabra diferida
defer: M
- SeM
declara que la palabra se define más tarde. Esta es una palabra diferida: F dup not if 1 nip else dup n:1- recurse M n:- then ;
- DefinirF
recursivamente para generar números femeninos según la definición. Tenga en cuenta queM
aún no se ha definido( dup not if 0 nip else dup n:1- recurse F n:- then ) is M
- DefinirM
recursivamente para generar números masculinos según definición: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ;
- Palabra utilizada para imprimir secuencias de números femeninos y masculinos.fuente