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>
Ответы:
Желе ,
2220 байтПопробуйте онлайн!
Как это устроено
источник
Юлия,
5248 байтовПопробуйте онлайн!
Фон
В книге «О женатых функциях Хофштадтера» автор показывает, что
где φ обозначает золотое сечение ,
и F n обозначает n- е число Фибоначчи .
Кроме того, в « Продвинутых задачах и решениях» H-187: Фибоначчи - это квадрат , предлагающий показывает, что
где L n обозначает n- е число Лукаса , и это - наоборот - если
тогда n - это число Фибоначчи, а m - это число Лукаса.
Из этого мы выводим, что
всякий раз, когда п> 0 .
Как это устроено
С учетом вводом х , мы строим 2 по й матрице, где | это сложение в первом столбце и вычитание во втором, и n перебирает целые числа от 1 до x в строках.
Первое слагаемое как F (n - 1), так и M (n - 1) просто
n÷φ
.Мы вычисляем δ (n) и ε (n) , вычисляя 5n² | 4 и проверка, принадлежит ли результат массиву квадратов целых чисел от 2 до 3n . Это проверяет и на прямоугольность, и, поскольку 1 не находится в диапазоне, для n> 1, если | это вычитание.
Наконец, мы добавляем или вычитаем логическое значение, полученное из
5n^2|4∈(2:3n).^2
или из ранее вычисленного целого числа.источник
Python 2,
7970 байтИтеративный, а не рекурсивный, потому что почему бы и нет. Первая строка имеет завершающий пробел - если это не хорошо, это можно исправить для дополнительного байта. -9 байт благодаря @Dennis.
Вот несколько комбинированных лямбд, которые не очень помогли:
Обе принимают
n
и параметрk
либо 0 или 1, указывая мужской / женский. Первая лямбда возвращает n-й элемент, а вторая лямбда возвращает первые n элементов (с экспоненциальным временем выполнения).источник
MATL , 23 байта
Попробуйте онлайн!
объяснение
Это работает итеративно. Каждая последовательность хранится в массиве. Для каждого индекса n вычисляется новый член каждой последовательности и присоединяется к соответствующему массиву. Используется
for
цикл с N -1 членами, где N - входное число.Обновление для последовательности M должно быть сделано в первую очередь. Это связано с тем, что последовательность F всегда больше или равна последовательности M для одного и того же индекса, поэтому, если мы попытаемся сначала обновить F, нам понадобится член M, который еще не вычислен.
Два уравнения обновления одинаковы, меняя F и M. Таким образом, код для обновления используется повторно, применяя
for
цикл с двумя итерациями и меняя последовательности в стеке.источник
J, 47 байт
Использует рекурсивное определение. Первые две строки определяют глаголы
f
иm
которые представляют женские и мужские функции, соответственно. Последняя строка - это глагол, который принимает один аргументn
и выводит первыеn
члены женской и мужской последовательности.использование
источник
JavaScript (ES6), 75 байт
Я мог бы сохранить 2 байта, если бы мне было разрешено сначала вернуть последовательность Male:
источник
Haskell, 57 байт
Пример использования:
(<$>[v,w]).take $ 5
->[[1,1,2,2,3],[0,0,1,2,2]]
Вспомогательная функция
#
создает бесконечный список с начальным значениемs
и спискомl
для поиска всех дальнейших элементов (по индексу предыдущего значения).v = w#1
это женская иw = v#0
мужская последовательность. В основной функции мы берем первыеn
элементы обоихv
иw
.источник
Python 2, 107 байт
Попробуйте онлайн
Большие входные значения вызывают RuntimeError (слишком много рекурсии). Если это проблема, я могу написать версию, где ошибка не возникает.
источник
Юлия, 54 байта
Попробуйте онлайн!
источник
Pyth, 24 байта
Возможно, невозможно использовать
reduce
для уменьшения количества байтов.Простая реализация.
Попробуйте онлайн!
Как это устроено
источник
Брахилог , 65 байт
Моя попытка объединить оба предиката для мужчины и женщины в один на самом деле удлинила код.
Вы можете использовать следующий один лайнер, который имеет такое же количество байтов:
Заметка : это работает с транспорером Prolog, а не со старым Java.
объяснение
Основной предикат:
Предикат 2 (женский):
Предикат 3 (мужчина):
источник
{:1-:0re.}
используется для создания списка диапазонов.Clojure,
132131 байтПросто строит последовательности итеративно от нуля до n.
Неуправляемая версия
источник
Pyth, 23 байта
Попробуйте онлайн: демонстрация
Объяснение:
Альтернативное решение, которое использует функцию вместо Redu (также 23 байта):
источник
Рубин,
104929782 байтаРедактировать:
f
иm
теперь одна функция благодаря HopefullyHelpful . Я изменил вторую функцию для печатиf
тогдаm
. Пробел послеp
является значительным, так как в противном случае функция печатает(0...n)
вместо результатаmap
.Третья функция печатает сначала массив первых n членов
f
, а затем массив первых n членовm
Эти функции называются так:
источник
n
иi
n>0?n-f(f(n-1,i),-i):i>0?1:0
f
иm
, мне нужно было распечатать. В противном случае, я просто получаю массив, как[[1, 1, 2, 2, 3, 3, 4, 5, 5, 6], [0, 0, 1, 2, 2, 3, 4, 4, 5, 6]]
APL (Dyalog Unicode) ,
4525 байтАнонимная молчаливая функция. Требуется
⎕IO←0
, что является стандартным для многих систем APL.Попробуйте онлайн!
Это работает путем объединения F и M в одну двоичную функцию с логическим левым аргументом, который выбирает функцию для применения. Мы используем 1 для F и 0 для M, чтобы мы могли использовать этот селектор в качестве возвращаемого значения для F (0) и M (0). Затем мы видим, что обе функции должны сначала вызывать себя (для аргумента минус один), а затем другую функцию в результате этого, поэтому сначала мы выполняем рекурсивный поиск с заданным селектором, а затем с логически отрицательным селектором.
⍳
nd ndice; ноль через аргумент минус один1 0∘.{
...}
Внешний (декартовый) «продукт» (но с функцией ниже вместо умножения), использующий в[1,0]
качестве левых аргументов (⍺
) и индексы в качестве правых аргументов (⍵
):×⍵
если правильный аргумент строго положительный (обозначен знаком правильного аргумента):⍵-1
вычесть одно из правильного аргумента⍺∇
вызвать себя с этим в качестве правого аргумента и левый аргумент в качестве левого аргумента(~⍺)∇
называть себя с этим в качестве правого аргумента и логическим отрицанием левого аргумента в качестве левого аргумента⍵-
вычтите это из правильного аргумента и верните результат⋄
еще:⍺
вернуть левый аргументисточник
n
) + плюсES6,
898583 байта2 байта сохранены благодаря @ Bálint
Наивная реализация.
Объяснение:
источник
&&
короткое замыкание, которое желательно, но я все равно удалил его, потому что синтаксис скобки в любом случае одинаково коротокMathematica,
6962 байтаСпасибо Sp3000 за предложение функциональной формы, которая сэкономила 14 байтов.
Это определяет именованную вспомогательную функцию,
f
а затем оценивает безымянную функцию, которая решает реальную задачу печати обеих последовательностей.источник
Perl 5,10,
85байтМех, не знаю, если у меня будет больше идей поиграть в гольф ...
Попробуйте онлайн!
Я должен был добавить
use 5.10.0
на Ideone, чтобы он принялsay
функцию, но она не байтов.Это наивная реализация алгоритма,
@a
будучи «женским» списком и@b
«мужского» списка.Вычеркнуто 85 все еще 85?
источник
push
термина, ни последняя точка с запятой перед закрывающей скобкой.Java, всего 169 байт
F (), M () 56 байт
рекурсивный цикл и печать 77 байт
вывод списков в две разные строки 37 байт
вход: p (
10
)выход:
источник
C 166 байт
Использование:
Выход:
Ungolfed (331 байт)
источник
8-е , 195 байт
Код
использование
объяснение
Этот код использует рекурсию и отложенное слово
defer: M
- СловоM
объявлено, чтобы быть определенным позже. Это отложенное слово: F dup not if 1 nip else dup n:1- recurse M n:- then ;
- ОпределитьF
рекурсивно для создания женских чисел в соответствии с определением. Обратите внимание, чтоM
еще не определено( dup not if 0 nip else dup n:1- recurse F n:- then ) is M
- ОпределитьM
рекурсивно для создания мужских чисел в соответствии с определением: FM n:1- dup ( F . space ) 0 rot loop cr ( M . space ) 0 rot loop cr ;
- Слово используется для печати последовательностей женских и мужских чиселисточник