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>
Réponses:
Gelée ,
2220 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Julia,
5248 octetsEssayez-le en ligne!
Contexte
Dans On fonctions mariées de Hofstadter , l'auteur montre que
où φ désigne le nombre d' or ,
et F n désigne le n ème nombre de Fibonacci .
De plus, dans Advanced Problems and Solutions, H-187: Fibonacci est un carré , le proposant montre que
où L n désigne le n ème nombre de Lucas , et que - inversement - si
alors n est un nombre de Fibonacci et m est un nombre de Lucas.
On en déduit que
chaque fois que n> 0 .
Comment ça fonctionne
Compte tenu de l' entrée x , on construit une 2 par x matrice, où | est l'addition dans la première colonne et la soustraction dans la seconde, et n itère sur les entiers compris entre 1 et x dans les lignes.
Le premier terme de F (n - 1) et M (n - 1) est simplement
n÷φ
.On calcule δ (n) et ε (n) en calculant 5n² | 4 et tester si le résultat appartient au tableau de carrés des entiers compris entre 2 et 3n . Cela teste à la fois pour l'équerrage et, puisque 1 n'est pas dans la plage, pour n> 1 si | est la soustraction.
Enfin, nous ajoutons ou soustrayons le booléen résultant de
5n^2|4∈(2:3n).^2
ou de l'entier précédemment calculé.la source
Python 2,
7970 octetsItératif plutôt que récursif, car pourquoi pas. La première ligne a un espace de fin - si ce n'est pas correct, il peut être corrigé pour un octet supplémentaire. -9 octets grâce à @Dennis.
Voici quelques lambdas combinés qui n'ont pas vraiment aidé:
Les deux prennent
n
et un paramètrek
soit 0 ou 1, spécifiant mâle / femelle. Le premier lambda renvoie le nième élément, et le second lambda renvoie les n premiers éléments (avec un temps d'exécution exponentiel).la source
MATL , 23 octets
Essayez-le en ligne!
Explication
Cela fonctionne de manière itérative. Chaque séquence est conservée dans un tableau. Pour chaque indice n, le nouveau terme de chaque séquence est calculé et attaché au tableau correspondant. Une
for
boucle avec N −1 termes est utilisée, où N est le numéro d'entrée.La mise à jour de la séquence M doit être effectuée en premier. C'est parce que la séquence F est toujours supérieure ou égale à la séquence M pour le même index, donc si nous essayions de mettre à jour F d'abord, nous aurions besoin d'un terme de M non encore calculé.
Les deux équations de mise à jour sont les mêmes F et M. interchangeables. Ainsi, le code de mise à jour est réutilisé en appliquant une
for
boucle avec deux itérations et en échangeant les séquences de la pile.la source
J, 47 octets
Utilise la définition récursive. Les deux premières lignes définissent les verbes
f
etm
représentent respectivement les fonctions féminine et masculine. La dernière ligne est un verbe qui prend un seul argumentn
et sort le premiern
termes des séquences féminines et masculines.Usage
la source
JavaScript (ES6), 75 octets
Je pourrais économiser 2 octets si j'étais autorisé à renvoyer la séquence masculine en premier:
la source
Haskell, 57 octets
Exemple d'utilisation:
(<$>[v,w]).take $ 5
->[[1,1,2,2,3],[0,0,1,2,2]]
La fonction d'assistance
#
construit une liste infinie avec la valeur de départs
et une listel
pour rechercher tous les autres éléments (à l'index de la valeur précédente).v = w#1
est law = v#0
séquence féminine et la séquence masculine. Dans la fonction principale, nous prenons les premiersn
éléments des deuxv
etw
.la source
Python 2, 107 octets
Essayez-le en ligne
Des valeurs d'entrée plus grandes provoquent une erreur d'exécution (trop de récursivité). Si c'est un problème, je peux écrire une version où l'erreur ne se produit pas.
la source
Julia, 54 octets
Essayez-le en ligne!
la source
Pyth, 24 octets
Il est probablement impossible d'utiliser
reduce
pour réduire le nombre d'octets.Mise en œuvre simple.
Essayez-le en ligne!
Comment ça fonctionne
la source
Brachylog , 65 octets
Ma tentative de combiner les deux prédicats masculins et féminins en un seul a en fait allongé le code.
Vous pouvez utiliser le liner suivant qui a le même nombre d'octets:
Remarque : Cela fonctionne avec le transpilateur Prolog, pas l'ancien Java.
Explication
Prédicat principal:
Prédicat 2 (femelle):
Prédicat 3 (masculin):
la source
{:1-:0re.}
utilisé pour créer la liste de plages.Clojure,
132131 octetsConstruit simplement les séquences de manière itérative de zéro à n.
Version non golfée
la source
Pyth, 23 octets
Essayez-le en ligne: Démonstration
Explication:
Solution alternative qui utilise une fonction au lieu de réduire (également 23 octets):
la source
Rubis,
104929782 octetsEdit:
f
etm
sont désormais une fonction grâce à HopefullyHelpful . J'ai changé la seconde fonction d'imprimerf
ensuitem
. L'espace aprèsp
est significatif, sinon la fonction s'imprime(0...n)
au lieu du résultat demap
.La troisième fonction imprime d'abord un tableau des n premiers termes de
f
, suivi d'un tableau des n premiers termes dem
Ces fonctions sont appelées comme ceci:
la source
n
eti
n>0?n-f(f(n-1,i),-i):i>0?1:0
f
etm
, je dois l'imprimer. Sinon, je reçois juste un tableau comme[[1, 1, 2, 2, 3, 3, 4, 5, 5, 6], [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]]
APL (Dyalog Unicode) ,
4525 octetsFonction tacite anonyme. Requiert
⎕IO←0
, qui est standard sur de nombreux systèmes APL.Essayez-le en ligne!
Cela fonctionne en combinant F et M en une seule fonction dyadique avec un argument gauche booléen qui sélectionne la fonction à appliquer. Nous utilisons 1 pour F et 0 pour M afin de pouvoir utiliser ce sélecteur comme valeur de retour pour F (0) et M (0). Nous observons ensuite que les deux fonctions doivent s'appeler d'abord (sur l'argument moins un) et ensuite l'autre fonction sur le résultat de cela, donc nous récursions d'abord avec le sélecteur donné, puis avec le sélecteur nié logiquement.
⍳
ɩ ndices; zéro à travers l'argument moins un1 0∘.{
…}
"Produit" externe (cartésien) (mais avec la fonction ci-dessous au lieu de la multiplication) en utilisant[1,0]
comme arguments de gauche (⍺
) et les indices comme arguments de droite (⍵
):×⍵
si le bon argument est strictement positif (allumé le signe du bon argument):⍵-1
soustraire un du bon argument⍺∇
appeler soi avec cela comme argument de droite et l'argument de gauche comme argument de gauche(~⍺)∇
appeler soi avec cela comme arg de droite et la négation logique de l'arg de gauche comme arg de gauche⍵-
soustrayez cela du bon argument et retournez le résultat⋄
autre:⍺
retourner l'argument de gauchela source
n
) + plus une nouvelle ligne.ES6,
898583 octets2 octets économisés grâce à @ Bálint
Mise en œuvre naïve.
Explication:
la source
&&
courts-circuits, ce qui est voulu, mais je l'ai quand même supprimé car la syntaxe des accolades est tout aussi courte de toute façonMathematica,
6962 octetsMerci à Sp3000 d'avoir proposé une forme fonctionnelle qui a permis d'économiser 14 octets.
Cela définit une fonction d'assistance nommée
f
, puis s'évalue en fonction sans nom qui résout la tâche réelle d'imprimer les deux séquences.la source
Perl 5.10,
8580 octetsMeh, ne sais pas si j'ai plus d'idées pour jouer au golf ...
Essayez-le en ligne!
J'ai dû ajouter
use 5.10.0
Ideone pour qu'il accepte lesay
fonction, mais cela ne compte pas dans le nombre d'octets.C'est une implémentation naïve de l'algorithme,
@a
étant la liste "féminine" et@b
la "masculine".Barré 85 est toujours 85?
la source
push
terme éd, ni du point-virgule final avant l'accolade.Java, 169 octets au total
F (), M () 56 octets
récursif pour boucle et impression 77 octets
sortie des listes sur deux lignes différentes 37 octets
entrée: p (
10
)sortie:
la source
C, 166 octets
Usage:
Production:
Non golfé (331 octets)
la source
8ème , 195 octets
Code
Usage
Explication
Ce code utilise la récursivité et le mot différé
defer: M
- Le motM
est déclaré défini ultérieurement. C'est un mot différé: F dup not if 1 nip else dup n:1- recurse M n:- then ;
- DéfinirF
récursivement pour générer des nombres féminins selon la définition. Veuillez noter queM
n'a pas encore été défini( dup not if 0 nip else dup n:1- recurse F n:- then ) is M
- DéfinirM
récursivement pour générer des nombres masculins selon la définition: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ;
- Mot utilisé pour imprimer des séquences de nombres féminins et masculinsla source