var QUESTION_ID=133109,OVERRIDE_USER=69148;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} /* font fix */ body {font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;} /* #language-list x-pos fix */ #answer-list {margin-right: 200px;}
<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>
Ответы:
Pyth , 2 байта
Попробуйте онлайн! Неявный ввод.
S
1-индексированный диапазон иs
является суммой.источник
Шелуха , 1 байт
Попробуйте онлайн!
Builtin!
Σ
в Husk обычно используется для получения суммы всех элементов списка, но применительно к числу он возвращает точноn*(n+1)/2
.источник
Σ
является двухбайтовым символом Unicode на моей машине. Я полагаю, вы используете кодовую страницу 1253? msdn.microsoft.com/en-us/library/cc195055.aspxПит , 161 байт / 16 кодов
Вы можете интерпретировать его с помощью этого интерпретатора Piet или загрузить изображение на этот веб-сайт и запустить его там. Не уверен насчет количества байтов, могу ли я по-другому его кодировать, чтобы уменьшить размер.
Уменьшенная версия исходного изображения:
объяснение
В
highlighted
тексте показывает текущий стек (выращивание слева направо), предполагая , пользовательский ввод5
:Введите число и поместите его в стек
Дублируйте этот номер в стеке
Нажмите 1 (размер темно-красной области) на стек
Добавьте два верхних числа
Умножьте два верхних числа
Черная область гарантирует, что курсор перемещается вниз прямо к светло-зеленому коделю. Этот переход толкает 2 (размер темно-зеленый) на стек
Разделите второе число в стеке на первое
Выскочить и вывести верхнее число (интерпретируется как число)
Вставляя белую область, мы получаем переход
nop
, черный захватывает наш курсор. Это завершает выполнение программы.источник
Brain-Flak , 16 байтов
Попробуйте онлайн!
Это одна из немногих вещей, в которых умственные способности действительно хороши.
Так как это одна из самых простых вещей, которую вы можете сделать в мозговом духе, и она имеет много наглядности, вот подробное объяснение:
источник
Оазис , 3 байта
Попробуйте онлайн!
Как это устроено
источник
Mathematica, 9 байт
Mathematica, 10 байт
Mathematica, 11 байт
Mathematica, 12 байт
Mathematica, 14 байтов
(@ user71546)
Mathematica, 15 байт
Mathematica, 16 байтов
Mathematica, 17 байт
(не @ деревом)
Mathematica, 18 байт
Mathematica, 19 байт
Mathematica, 20 байтов
(не @ деревом)
источник
Array[Boole[#2>=#]
&,{#,#}]~Total~2
&JavaScript (ES6), 10 байт
пример
Показать фрагмент кода
источник
n*-~n/2
также работает, но только дляn < 2**31
машинный язык x86_64 (Linux),
98 байтДля того, чтобы попробовать его в Интернете! скомпилируйте и запустите следующую C-программу.
Спасибо @CodyGray и @Peter за -1.
источник
shr
вместоsar
, чтобы рассматривать ваш вывод как без знака (без изменения размера кода). (Заметил @CodyGray и указал в своем 7-байтномadd
+loop
ответе ).mul %edi
илиimul %edi
(каждый 2B) вместо формы с двумя операндами 3B. Он забивает EDX с высоким результатом, но это нормально. Мульти-операндimul
был введен позже, чем форма с одним операндом, и имеет 2-байтовый код операции с0F
escape-байтом. Любой из трех вариантов всегда будет приводить к одному и тому же результатуeax
, только верхняя половина зависит от подписи против неподписания.Python 2 ,
2416 байт-8 байт благодаря FryAmTheEggman.
Попробуйте онлайн!
источник
C # (.NET Core) , 10 байт
Попробуйте онлайн!
источник
Java (OpenJDK 8) , 10 байт
Попробуйте онлайн!
источник
Октава ,
2219 байтПотому что арифметические операции скучны ...
Попробуйте онлайн!
объяснение
Учитывая
n
, это создаетn
×n
матрицу со всеми записями, равными числу e ; делает записи ниже диагонали ноль; и выводит количество ненулевых значений.источник
@(n)sum(1:n)
sum
.Желе , 2 байта
Попробуйте онлайн!
объяснение
Сумма Гаусса, 3 байта
объяснение
источник
APL, 3 байта
Попробуйте онлайн!
+/
- сумма (уменьшение+
),⍳
- диапазон.источник
1+
1
поэтому я не указал. его обычно здесь указывать только при использовании⎕IO←0
(и это не входит в число байтов)Haskell , 13 байт
Это самое короткое (
думаю,подумалось):Попробуйте онлайн!
Direct,
1713 байтовСпасибо @WheatWizard за
-4
байты!Попробуйте онлайн!
Pointfree direct, 15 байт
Спасибо @nimi за идею!
Попробуйте онлайн!
Pointfree via
sum
, 16 байтовПопробуйте онлайн!
Рекурсивно,
22-18 байтСпасибо @maple_shaft за идею и @Laikoni за игру в гольф!
Попробуйте онлайн!
Стандарт
fold
, 19 байтПопробуйте онлайн!
источник
Звездный ,
2722 байта5 байтов сэкономлено благодаря @miles !
Попробуйте онлайн!
объяснение
источник
05AB1E , 2 байта
Попробуйте онлайн!
Как это устроено
Сумма Гаусса, 4 байта
Попробуйте онлайн!
Как это устроено
источник
ÝO
также работает и значитhello
.Java (OpenJDK 8) , 10 байт
Попробуйте онлайн!
Потребовалось время, чтобы начать играть в гольф,
n->n*(n+1)/2
потому что я медленный.Но это не настоящий ответ Java. Это определенно недостаточно многословно.
Неплохо, но мы можем добиться большего.
Я люблю Яву.
источник
Проверьте , 5 байтов
Чек даже не является языком игры в гольф, но все же превосходит CJam!
Попробуйте онлайн!
Объяснение:
Введенный номер помещается в стек.
:
дублирует это, чтобы датьn, n
. Затем увеличивается с)
, даваяn, n+1
.*
умножает их вместе, а затем$
делит результат на 2.p
печатает результат, и программа завершается.источник
MATL , 2 байта
Попробуйте онлайн!
Не счастливый смайлик.
источник
Такси , 687 байтов
Попробуйте онлайн!
Без гольфа с комментариями:
Это на 22,6% меньше байтов, чем нужно использовать
x*(x+1)/2
источник
Юлия, 10 байт
Попробуйте онлайн!
11 байт (работает также на Julia 0.4)
Попробуйте онлайн!
источник
Brainfuck, 24 байта.
Ввод / вывод обрабатывается как байты.
Разъяснения
источник
,,, 6 байт
объяснение
Если я реализую диапазон в ближайшее время ...
источник
Сетчатка , 13 байт
Попробуйте онлайн! Пояснение: Первый и последний этапы - это просто одинарное ⇔ десятичное преобразование. Средняя ступень заменяет каждую
1
на число1
s слева от нее плюс другую1
для самого1
себя, таким образом, считая от1
доn
, суммируя значения неявно.источник
> <> , 7 + 3 = 10 байт
Вычисляет n (n + 1) / 2 .
3 байта добавлены для флага -v
Попробуйте онлайн!
Или, если ввод может быть принят как код символа:
> <> , 9 байт
Попробуйте онлайн!
источник
(n^2+n)/2
) также занимает 7 байт:::*+2,n
постоянный ток , 7 байтов
ИЛИ ЖЕ
ИЛИ ЖЕ
Попробуйте онлайн!
источник
PHP, 19 байт
используя встроенные функции, 29 байт:
цикл, 31 байт:
источник
for(;$argn;$s+=$argn--);echo$s;
Cubix ,
1210 байтПервоначальный вариант
Попробуйте онлайн!
объяснение
Развернутый на куб код выглядит так:
Указатель инструкций (IP) начинается с
I
, двигаясь на восток. Он продолжает двигаться на восток, пока не наткнется на/
зеркало, которое отражает его на север. Когда IP достигает вершины кода, он.
переходит к последнему на третьей строке, двигаясь на юг. Затем он подходит к предпоследней.
на последней линии, двигаясь на север. Затем он/
снова достигает зеркала, которое отражает его на восток, только для следующего,/
чтобы снова отразить его на север. На этот раз IP переходит к предпоследней.
в третьей строке, а затем к последней.
в последней строке.Инструкции выполняются в следующем порядке.
источник
Машинный код x86-64, 7 байт
Вышеуказанные байты определяют функцию, которая принимает один параметр
n
и возвращает значение, содержащее сумму всех целых чисел от 1 доn
.Он записывается в соглашение о вызовах Microsoft x64 , которое передает параметр в
ECX
регистр. Возвращаемое значение сохраняетсяEAX
, как и все соглашения о вызовах x86 / x86-64.Неуправляемая сборка мнемоники:
Попробуйте онлайн!
(Вызов функции C там помечен атрибутом, который заставляет GCC вызывать его, используя соглашение о вызовах Microsoft, которое использует мой ассемблерный код. Если бы TIO предоставил MSVC, в этом не было бы необходимости.)
По необычным стандартам кода гольфа вы видите, что этот итеративный циклический подход предпочтительнее подходов, использующих более разумную математическую формулу (
n(n+1) / 2
), хотя он, очевидно, значительно менее эффективен с точки зрения скорости выполнения.Используя теорию чисел, реализация потолочной системы все еще может быть побита одним байтом. Каждая из этих инструкций важна, но есть немного более короткая кодировка, в
IMUL
которойEAX
неявно используется операнд-адресат (фактически, он используетEDX:EAX
, но мы можем просто игнорировать старшие 32 бита результата). Это только 2 байта для кодирования, по сравнению с 3.LEA
также занимает три байта, но на самом деле нет никакого способа обойти это, потому что нам нужно увеличивать при сохранении исходного значения. Если бы мы сделалиMOV
копию, тоINC
у нас было бы 4 байта. (В x86-32, гдеINC
только 1 байт, мы будем с теми же 3 байтами, что иLEA
.)Окончательное смещение вправо необходимо, чтобы разделить результат пополам, и оно, безусловно, более компактно (и более эффективно), чем умножение. Однако код должен действительно использоваться
shr
вместоsar
, поскольку предполагается, что входное значениеn
является целым числом без знака . (Конечно, это допущение является действительным в соответствии с правилами, но если вы знаете, что входные данные являются беззнаковыми, то вам не следует делать арифметическое смещение со знаком, поскольку старший бит, установленный в большом значении без знака, приведет к результату. быть неверным.)Сейчас всего 8 байтов (спасибо Петру Кордесу). Тем не менее, 8> 7.
источник
imul ecx
илиmul ecx
будет работать и сохранить байт в реализации закрытой формы. Я не сразу заметил это; Я собирался прокомментировать, что это было оптимально как для производительности, так и для размера кода, прежде чем я понял, что неявныйeax
операнд в порядке.add
+loop
короче, чемimul
при взгляде на другой ответ. Удобно, что есть стандартное соглашение о вызовах, которое передает первый аргументecx