var QUESTION_ID=84260,OVERRIDE_USER=8478;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>
5 16
, вводится как005 016
Ответы:
Желе , 1 байт
Попробуйте онлайн!
Также работает в 05AB1E, на самом деле, APL, Braingolf, ,,, (Commata), Factor, Forth, Implicit, J, Джулия, K, kdb +, Keg, Ly, MATL, Pyke, Deorst и Q.
источник
Minecraft 1.10, 221 персонажа (не конкурирует)
Видите ли, это то, с чем нам приходится иметь дело, когда мы делаем карты Minecraft.
Кроме того: в Minecraft нет способа получить строковый ввод, поэтому я немного изменяю, заставляя вас вводить числа в саму программу. (Это несколько оправданно, потому что довольно много карт, таких как Minecraft Bingo от Lorgon111, требуют, чтобы вы копировали и вставляли команды в чат, чтобы ввести число.)
Спасибо, abrightmoore, за фильтр меток блоков MCEdit.
Не конкурирует из-за трудностей ввода, и я понятия не имею, как подсчитать байты в этой вещи (система blytes имеет недостатки для командных блоков).
источник
0,1,2
Другое решение состояло бы в том, чтобы взять 2 байта и выходной на 9 провода, но будет намного меньше в гольфе.Двоичное лямбда-исчисление , 4,125 байта
Ввод и вывод в виде церковных цифр .
В лямбда-исчислении это λ m . λ н . λ ф . λ x . m f ( n f x ).
Индекс де Брейна : λ λ λ λ 4 2 (3 2 1)
Лямбда-исчисление - это краткий способ описания отображения (функции).
Например, эта задача может быть записана как λ x . λ y . х + у
Следует отметить, что это не лямбда (функция), которая принимает два аргумента. Это на самом деле вложенная лямбда. Тем не менее, он ведет себя как лямбда, которая принимает два аргумента, поэтому его можно неофициально описать как таковой. Каждая лямбда формально принимает только один аргумент.
Например, если мы применим эту лямбду к 3 и 4:
Итак, первая лямбда фактически возвращает другую лямбду.
Церковные цифры - это способ избавиться от лишних знаков, оставляя только лямбда-символы и переменные.
Каждое число в церковной системе на самом деле является лямбда-выражением, которое указывает, сколько раз функция применяется к элементу.
Пусть функция будет f, а элемент x .
Итак, число 1 будет соответствовать λ f . λ x . f x , что означает применение f к x ровно один раз.
Число 3, например, будет λ f . λ x . f ( f ( f x )), что означает применение f к x ровно три раза.
Поэтому, чтобы сложить две церковные цифры (скажем, m и n ) вместе, это то же самое, что применить f к x , m + n раз.
Мы можем заметить, что это то же самое, что сначала применить f к x , n раз, а затем применить f к результирующему элементу m раз.
Например, 2 будет означать
f(f(x))
и 3 будет означатьf(f(f(x)))
, так что 2 + 3 будетf(f(f(f(f(x)))))
.Чтобы применить f к x , n раз, мы имеем n f x .
Вы можете просматривать m и n как функции, принимающие два аргумента, неформально.
Затем мы снова применяем f к этому результирующему элементу, m раз: m f ( n f x ).
Затем мы добавляем обратно шаблон для получения λ m . λ н . λ ф . λ x . m f ( n f x ).
Теперь мы должны преобразовать его в индекс Де Брюина .
Во-первых, мы подсчитываем «относительное расстояние» между каждой переменной до лямбда-объявления. Например, m будет иметь расстояние 4, потому что оно объявлено 4 лямбда "назад". Аналогично, n будет иметь расстояние 3, f будет иметь расстояние 2, а x будет иметь расстояние 1.
Итак, запишем это как промежуточную форму: λ m . λ н . λ ф . λ x . 4 2 (3 2 1)
Затем мы удаляем объявления переменных, оставляя нас с: λ λ λ λ 4 2 (3 2 1)
Теперь мы конвертируем его в двоичное лямбда-исчисление .
Правила таковы:
00
.01 m n
.1
я раз +0
, например 4 становится11110
.λ λ λ λ 4 2 (3 2 1)
≡ λ λ λ λ
11110
110
(1110
110
10
)≡ λ λ λ λ
11110
110
0101 111011010
≡ λ λ λ λ
0101
111101100101111011010
≡
00
00
00
00
0101
111101100101 111011010
≡
000000000101111101100101111011010
источник
Common Lisp, 15 байт
источник
(+(read)(read))
Стека кошек , 8 + 4 = 12 байт
Беги с
-mn
флагами. Попробуйте онлайн!Гольф в Stack Cats крайне противоречит интуиции, поэтому эта программа, описанная выше, была найдена за несколько дней грубого форсирования. Для сравнения, более интуитивное, написанное человеком решение с использованием
*(...)>
шаблона на два байта длиннеес
-ln
флагами вместо этого (см. объяснение в нижней части этого поста).объяснение
Вот учебник по Stack Cats:
-m
или-l
. Здесь используется-m
флаг, поэтому приведенная выше половина программы фактически расширяется до]_:]_!<X>!_[:_[
.<
и>
перемещает одну стопку влево и одну стопку вправо соответственно.-n
обозначает числовой ввод / вывод.А вот и след расширенной полной программы
]_:]_!<X>!_[:_[
:a+b
затем выводится, а база -1 игнорируется. Обратите внимание, что самая хитрая часть этого решения заключается в том, что выходной стек должен иметь-1
внизу, иначе выходной стек просто[-1]
проигнорирует основание -1, а выходной стек[0]
вызовет проглатывание базового нуля (но выходной стек[2]
, например, вывел бы2
просто отлично).Просто для удовольствия, вот полный список связанных решений той же длины (список может быть не полным):
*(>-_:[:)>
Решение больше, но более интуитивный писать , так как он использует*(...)>
шаблон. Этот шаблон расширяется до<(...)*(...)>
использования с-l
флагом, что означает:Таким образом,
*(...)>
шаблон означает, что первый цикл пропущен, а второй выполнен. Это позволяет осуществлять более простое программирование, поскольку нам не нужно беспокоиться о последствиях цикла в другой половине программы.В этом случае внутренняя часть цикла:
Финал
>
в шаблоне затем возвращает нас к стеку ввода, гдеa+b
выводится.источник
Brain-flak , 6 байтов
Попробуйте онлайн!
Brain-flak - действительно интересный язык с двумя основными ограничениями.
Единственными допустимыми символами являются скобки, то есть любой из этих символов:
Набор скобок, между которыми ничего нет, называется «ниладой». Нилада создает определенное числовое значение, и все эти нилады рядом друг с другом складываются. Набор скобок с чем-то между ними называется «монадой». Монада - это функция, которая принимает числовой аргумент. Таким образом, скобки внутри монады оцениваются, и это аргумент для монады. Вот более конкретный пример.
()
Nilad равен 1. Итак следующий мозга зенитной код:Оценивается как 3.
()
Монада помещает значение внутри него в глобальный стек. Итак, следующеенажимает 3.
{}
nilad выскакивает значение на вершине стека. Так как последовательные nilads всегда добавляются, строка{}
сумм всех верхних элементов в стеке. Так что мой код по сути:источник
Minecraft 1.10.x,
924512 байтСпасибо @ quat за сокращение blytecount на 48 пунктов и bytecount на 412.
Итак, я взял некоторые идеи из этого ответа и сделал свою собственную версию, за исключением того, что эта способна принять неотрицательный вклад. Версия может быть найдена здесь в формате структурного блока.
(новая версия выглядит скучно)
Подобные команды как другой ответ:
Для ввода чисел, порождайте количество коров и свиней. Коровы будут представлять значение «n», а свиньи будут представлять значение «m». Система командных блоков будет постепенно убивать коров и свиней и назначать значения по мере необходимости.
Этот ответ предполагает, что вы находитесь в мире без естественных коров или свиней и что значения, сохраненные в «n» и «m», очищаются при каждом запуске.
источник
execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1
, так что вам не нужны никакие формы часов.Сетчатка , 42 байта
Попробуйте онлайн!
объяснение
Добавление чисел в унарное - это самая простая вещь в мире, но как только вы вводите отрицательные числа, все становится сложнее ...
Начнем с преобразования чисел в одинарные. Это делается путем сопоставления каждого числа с
\d+
и замены его на$*
. Это специфичная для Retina функция замещения. Полный синтаксис естьcount$*character
и вставляетcount
копииcharacter
. Оба из них могут быть опущены там, где поcount
умолчанию$&
(т.е. само совпадение) и поcharacter
умолчанию1
. Таким образом, для каждого вводаn
мы получаемn
единицы, и у нас все еще есть потенциальные минус, а также пробел. Например, вход8 -5
дает:Теперь для работы с отрицательными числами проще всего использовать отдельную
-1
цифру. Мы будем использовать-
для этой цели.Этот этап делает две вещи. Он избавляется от пробела, ведущих минус, и превращает буквы
1
s после минуса в-
себя. Это делается путем сопоставления|-1+
(т. Е. Либо пробела, либо отрицательного числа) и выполнения над ним транслитерации. Транслитерация идет от1p
до-_
, но здесьp
распространяется на все печатные символы ASCII и_
означает удаление. Поэтому1
s в этих матчах превращаются в-
s, а минусы и пробелы удаляются. Наш пример теперь выглядит так:Этот этап обрабатывает случай, когда на входе есть одно положительное и одно отрицательное число. Если это так, в строке будут
1
s и-
s, и мы хотим, чтобы они отменились. Это делается путем сопоставления двух символов с границей слова между ними (поскольку1
s считается символом слова, а-
не символом ) и заменой соответствия ничем. В+
инструктирует Retina сделать это несколько раз , пока строка не перестанет изменяться.Теперь мы остались только
1
с или только-
с.Чтобы преобразовать это обратно в десятичное, мы сопоставляем весь ввод, но если возможно, мы записываем
-
в группу1
. Мы записываем группу обратно1
(чтобы добавить a-
к отрицательным числам), а затем записываем длину совпадения с помощью$.&
(также специфичной для Retina функции подстановки).источник
range
в Retina. Я пробовал несколько раз, но негативы - это боль.Домино , 38 000 байт или 37 тайлов
Это создано в Tabletop Simulator . Вот видео и вот файл . Это стандартная половина сумматора, состоящая из
and
шлюза для2^1
значения места иxor
шлюза для2^0
значения места.Детали
2^1
а справа -2^0
[Черный] .100%
источник
Haskell, 3 байта
Скобки здесь, потому что это должна быть префиксная функция. Это то же самое, что взять часть функции +, но аргументы не применяются. Он также работает с широким диапазоном типов, таких как правильно реализованные векторы, матрицы, комплексные числа, числа с плавающей запятой, двойные числа, рациональные числа и, конечно, целые числа.
Поскольку это Haskell, вот как это сделать на уровне типов. Это будет сделано во время компиляции, а не во время выполнения:
Код адаптирован из Haskell Wiki
источник
Mathematica,
42 байтаВычеркнуто
4все еще регулярно 4 ...Tr
применяется к одномерному списку берет сумму элементов указанного списка.источник
Язык программирования Шекспира ,
155152 байтаUngolfed:
Я использую компилятор SPL drsam94 для компиляции этого. Тестировать:
источник
Брахилог , 2 байта
Ожидается список с двумя числами в качестве ввода
В качестве альтернативы, если вы хотите получить ответ
STDOUT
:источник
постоянный ток, 2 байта
Добавляет два верхних элемента в стек (ранее взятые из
stdin
), а затем выгружает содержимое стека вstdout
.РЕДАКТИРОВАТЬ: После дальнейшего рассмотрения, кажется, есть несколько способов, которыми это может быть реализовано, в зависимости от желаемого поведения ввода / вывода.
Я полагаю, что наиболее полная форма суммы будет такой:
Подождите! Два числа могут быть взяты на одной строке, разделенные пробелом! Это дает нам:
источник
+f
,dc -e "?+p"
здесь все в порядке.+f
Версия работает, если вы уже положили (ровно два) числа в стек. Я действительно не знал, должен лиdc
I / O бытьstd(in|out)
или стек. Оглядываясь назад, это был наименее разумный вариант, чтобы поставить его наверх. : /JavaScript (ES6), 9 байт
источник
PHP, 20 байт
Удивительно короткое время:
Запускается из командной строки, например:
источник
php sum.php 1 2 3 4 5 6
поэтому я не уверен на 100%, все ли в порядке.-r
флаг - тогда это больше не проблема.Чеддер, 3 байта
Это отличная особенность чеддера, называемая «функционализированные операторы». Кредит на эту идею идет к @ CᴏɴᴏʀO'Bʀɪᴇɴ.
Вот еще примеры функционализированных операторов:
источник
Python,
113 байтаint.__add__
Простой специальный оператор.
источник
Геометрия тире - 15 объектов
Наконец, сделали.
15 объектов не так много, но это все еще было кошмаром (особенно из-за отрицательных чисел).
Поскольку мне нужно вставить 15 изображений, чтобы воспроизвести это, я только что загрузил уровень. Идентификатор уровня: 5216804. В описании рассказывается, как его запустить, и вы можете скопировать его, так как он является копируемым.
Объяснение:
Верхний левый триггер (Instant Count 2) проверил, было ли первое добавление 0. Если это было так, то он проверил, было ли второе добавление положительным или отрицательным. Если оно было положительным, оно переводило значение из второго сложения в сумму (в стиле BF, используя циклы) и, если оно было отрицательным, оно делало бы то же самое.
Причина, по которой нам нужно проверить, является ли второе добавление положительным или отрицательным, состоит в том, что нам нужно вычесть одно из второго сложения и добавить одно к сумме или добавить одно во второе добавление и вычесть одно из суммы соответственно.
Если первое добавление не равно нулю, оно проверяет, является ли оно положительным или отрицательным, используя вышеописанный процесс. После одной итерации в цикле while он проверяет, является ли первое добавление нулевым, и если да, то выполняет процесс, описанный в начале объяснения.
Поскольку Geometry Dash очень похож на BF, вы можете сделать из этого решение BF.
источник
MATL, 1 байт
Принимает массив из двух целых чисел в качестве входных данных и суммирует их. Хотя простая программа
+
также работает, это уже было показано для других языков.Попробуйте онлайн
источник
Perl 5,10, 8 байт
Два числа, которые нужно добавить, должны быть на двух отдельных строках, чтобы этот работал:
Попробуйте это здесь.
Один с вводом в той же строке ( 14 + 1 байт для флага -a )
Попробуй это здесь!
Один с вводом в той же строке ( 19 + 1 байт для флага -a )
Попробуйте это здесь.
Еще один, изменяя разделитель по умолчанию для массива ( 19 + 1 байт для флага -a )
Попробуйте это здесь!
источник
-p
флага.say$F[0]+$F[1]
,say pop()+pop
работает (проверено в Strawberry 5.20.2 с-E
) и экономит байт.Нечеткое окто гуакамоле , 1 байт
Функция, которая принимает входные данные с вершины стека и выводит их, передавая их в стек.
Пример работы в REPL:
источник
Пакет,
251816 байтовРедактировать: сохранено
79 байт, используя мой трюк из Alternating Sign Sequence .источник
PowerShell v2 +, 17 байт
Принимает ввод как два отдельных аргумента командной строки, которые предварительно заполняются в специальный массив
$args
. Мы формируем строку с-join
оператором, объединяя их вместе с a+
посередине, а затем направляем эту строкуInvoke-Expression
(аналогичноeval
).Спасибо @DarthTwon за напоминание о том, что при работе с такими минимальными программами существует несколько способов получения входных данных с одинаковым количеством байтов.
PowerShell - ничто, если не гибкий.
источник
$args[0]+$args[1]
иparam($a,$b)$a+$b
> <> ,
763 байтаОнлайн переводчик
Или попробуйте на TIO с флагом -v.
Попробуйте онлайн
источник
+
было бы достаточно: оно извлекало бы два числа из стека и помещало результат их сложения обратно в стек. Также-v
можно было бы избежать затрат , так как считывание чисел могло быть сделано заранее до вызова функции.C 35 байт
То, что я сделал здесь, это определенное сложение без использования логических или арифметических операторов. Это рекурсивно делает x суммой битов на «xor», а y - битами переноса на «и», пока не будет переноса. Вот негольфированная версия:
источник
MATLAB, 4 байта
1 байт удален благодаря @LeakyNun
Это анонимная функция, которая принимает массив и выдает сумму. Пример использования:
источник
sum
?@sum
правильный ответ. Или есть другой мета-консенсус?GoLScript , 1 байт (неконкурентный)
Добавляет 2 верхних числа в стек. Вот и все.
Теперь , как толкать их на стеку, я не имею ни малейшего понятия. Я не думаю, что это возможно .. кашель @ CᴏɴᴏʀO'Bʀɪᴇɴ кашель
источник
Explanation soon to be coming.
- Райкер 3 июля 16 годаЯзык программирования Шекспира (SPL),
137135 байтовПолная программа, игра в гольф:
И краткое объяснение:
Я не уверен, что это самый короткий путь. Проверьте официальную страницу для получения дополнительной информации.
Редактировать 1: Убрал
:
послеAct I
и,Scene I
как кажется, все, что после римской цифры, игнорируется, сохраняя 2 байта.источник
машинный код x86_32, 2 байта
Предполагая, что эти два значения уже находятся в регистрах ecx и eax, выполнение инструкции add добавит значения двух регистров и сохранит результат в регистре назначения.
Вы можете увидеть полную программу, написанную на C, и встроенную сборку здесь . Написание оболочки на C облегчает предоставление входных данных и выполнение тестирования, но фактическая функция add может быть уменьшена до этих двух байтов.
источник
ret
инструкция (один байт). И это при условии, что пользовательское соглашение о вызовахeax
используется как регистр передачи аргументов. (Учебная библиотека asv Irvine32 делает это, но никакие стандартные соглашения о вызовах для x86-32 или x86-64 не делают этого, в отличие от ARM, где регистр возвращаемого значенияr0
также является первым регистром передачи аргументов.) Пользовательские соглашения о вызовах хороши в Хотя asm работает, вам не нужно менять его на 3 байтаlea (%ecx, %edx), %eax
+ 1 байтret
для Microsoft__fastcall
или gcc-mregparm
.pop
только 1 байт, но дляesp
режимов относительной адресации требуется байт SIB. Таким образом, соглашение о вызове вызывающего абонента можетpop %ecx
(адрес возврата),pop %eax
/pop %edx
/add %edx, %eax
(2 байта) /jmp *%ecx
(2 байта) = всего 7 байтов. противmov 4(%esp), %eax
(4B) /add 8(%esp), %eax
(4B) /ret
= 9 байт или 11 байт для версии с использованием вызывающего абонентаret imm16
, если я сделал это правильно. Это дополнительный 1 байт для SIB с ESP в качестве базы и дополнительный 1 байт для disp8 в каждом insn.