var QUESTION_ID=106182,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>
Ответы:
Brachylog V1, 05AB1E, J, K, Underload, MATL, Forth, PigeonScript, Stacked, Implicit, Jolf, Clojure, Braingolf, 8-й, Common Lisp, Julia, Pyt, Appleseed, Stax, Reality, постоянный ток 1 байт
Вы можете редактировать этот ответ, чтобы добавить другие языки, для которых
*
правильный ответ.источник
*(5,16)
C (GCC), 13 байтов
Не работает на всех реализациях, но это нормально.
Попробуйте это на TIO!
источник
a
? Я не понимаю ...a
является локальной переменной стека дляf()
- почему возвращается ее значение?). +1, кстати - очень умное злоупотребление ABI.return
Ключевое слово просто помещает повторение аргумента в регистр EAX. В этом случае сгенерированный исполняемый файл выполняет вычисленияa*b
в этом регистре, поэтомуreturn
ничего не делает.f(a,b){a*=b;}
часть на,1##&
а затем просто изменив язык на Mathematica.Битник , 888 байт
Попробуйте онлайн!
Я использую интерпретатор C, потому что интерпретатор Python в TIO раздражающе выполняет адрес, если не выполнено условие перехода назад. Простой обходной путь для интерпретатора Python - добавить несколько nops, чтобы сделать адрес nop. Я считаю, что ни один не является правильным
Входные данные должны быть двумя целыми числами, разделенными пробелом, без завершающих строк.
Этот ответ теоретически работает для всех целых чисел, если каждая ячейка может хранить произвольно большое значение, не ограниченное 0 - 255. Но оно переполняется, если | A | + | B | > 22. И он работает очень медленно, если | A | + | B | > 6. Таким образом, существует не так много случаев, которые вы можете на самом деле протестировать, и решение if-else для этих случаев может быть еще короче.
Идея состоит в том, чтобы вычислить треугольные числа T (N) = N (N + 1) / 2, уменьшив значение до 0 и суммируя все промежуточные значения. Тогда мы можем получить ответ A * B = T (A + B) - T (A) - T (B).
Но сложно вычислить все 3 значения. Он делает это, сначала вычисляя T (A + B) - A, оставляя копию A в стеке для последующего добавления обратно и используя вход B. Затем рекурсивно находят наибольшее треугольное число, меньшее, чем то, которое является T ( A + B-1) за исключением нулевых особых случаев. Мы можем получить обратно B = T (A + B) - A - T (A + B-1) и вычислить T (B) оттуда.
Число N является треугольным числом, если оно равно наибольшему треугольному числу, меньшему, чем N, плюс число неотрицательных треугольных чисел, меньших, чем N. Это выполняется в O (2 ^ (T (A + B) -A)) и самая медленная часть в программе.
источник
Mathematica, 4 байта
Пример использования:
1##&[7,9]
возврат63
. Действительно, эта же функция умножает любое количество аргументов любого типа вместе.Как знают программисты Mathematica, это работает, потому что
##
относится ко всей последовательности аргументов функции, а конкатенация в Mathematica (часто) представляет умножение; так1##
относится к (1 раз) произведение всех аргументов функции. Это&
просто сокращение отFunction
команды, которая определяет чистую (безымянную) функцию.Внутри другого кода общий символ
*
действует как умножение. Так же как и пробел, который7 9
интерпретируется как7*9
(действительно, текущая версия Mathematica для REPL фактически отображает такие пробелы как знаки умножения!). Еще лучше, однако, если Mathematica может определить, где начинается один токен, а другой заканчивается, тогда для оператора умножения вообще не требуется никаких байтов:5y
автоматически интерпретируется как5*y
, и3.14Log[9]
как3.14*Log[9]
.источник
##&
недействительным?##&
возвращает свой список аргументов в виде объекта 'Sequence' - подходит для подключения к другим функциям, которые принимают несколько аргументов. В этом контексте##&
ничего не делает со своим списком аргументов; мы хотим, чтобы этот список был умножен вместе.Retina ,
383731 байтАбсолютно новый подход, старый ниже.
Попробуйте онлайн!
объяснение
Сначала мы имеем дело со знаком:
сопоставляет все
-
в строке и возвращает их через новую строку(со следующей пустой строкой)
*\)
означает, что результат этого и предыдущих этапов должен быть напечатан без новой строки, а затем строка возвращается к тому, что было раньше (входная строка). Оставшаяся часть удаляет два,-
разделенных новой строкой.Затем мы конвертируем первое число в одинарное:
(в конце первой строки есть пробел). В
_
этом случае мы используем нашу унарную цифру, потому что стандартная цифра1
может присутствовать во втором числе, и это будет конфликтовать позже.Теперь перейдем к фактическому умножению:
Каждый
_
заменяется унарным представлением всего, что следует за ним (все еще используя_
в качестве унарной цифры). Поскольку преобразование в унарное число игнорирует нецифровые символы, это будет повторять унарное представление второго числа для раз «первого числа». Второе число останется в десятичном представлении в конце строки.В конце, с одним
_
мы возвращаем число_
в строке, которое будет результатом умножения.Предыдущий ответ: (предупреждение: выводит пустую строку, когда она должна выводиться
0
)Retina ,
454241 байтДавай сыграем в игру! Умножьте относительные числа на язык, в котором нет арифметических операторов и ограничена поддержка только натуральных чисел ... Звучит смешно :)
объяснение
Первые три строки имеют дело со знаком:
Это сортирует
O
и затем переворачивает^
все строки, соответствующие регулярному выражению^|-
. На практике это соответствует пустой строке в начале и возможному знаку минус перед вторым числом, и переупорядочивает их, помещая пустую строку вместо минуса. После этого все-
находятся в начале строки, и пару из них можно легко удалить с помощью следующих двух строк.После этого мы используем встроенную функцию для преобразования чисел в унарное представление, а затем происходит фактическое умножение:
Мы подбираем любой
1
и заменяем каждый из них1
после следующего пробела. Каждая цифра первого числа будет заменена полным вторым номером, а каждая цифра второго номера будет заменена пустой строкой.Последняя часть снова является встроенной для преобразования обратно из унарного в десятичное.
Попробуйте онлайн!
источник
$*
должен быть_
.).+,(.+)
до$.($1**
), но это на самом деле больше байтов здесь.Царапина , 1 байт
Использование: Поместите числа в обе стороны
*
знакаПримечание. Поскольку Scratch - это визуальный язык, я не мог понять, сколько байт он потребляет, пока @ mbomb007 не обратил внимание на метод подсчета байтов для скретча.
источник
Brain-Flak , 56 байт
Это должно быть выполнено как полная программа, так как она не чистая, а входные данные должны быть единственными элементами в любом стеке.
Попробуйте онлайн!
Пояснение: (вызовите входы x и y)
Часть 1:
На данный момент у нас есть [x, y] в одном стеке и [-x, -y] в другом.
Часть 2:
источник
JavaScript (ES6), 9 байт
ES6 имеет специальную функцию для 32-разрядных целых чисел, которая быстрее, чем более общий
*
оператор.Кстати, это так же долго, как:
источник
Brain-Flak ,
565452 байта2 байта сохранены благодаря ошибке, пойманной Нитродоном
Попробуйте онлайн!
Стек чистая версия,
6260 байтПопробуйте онлайн!
объяснение
Это объяснение является скорее объяснением задействованного алгоритма и не учитывает фактический код. Предполагается, что вы знаете, как умело читать Brain-Flak. Если вам нужна помощь в понимании кода или алгоритма, я буду рад отредактировать или ответить, если вы оставите комментарий.
Это немного странно и использует какую-то странную математику, которая едва работает. Первым делом я сделал цикл, который всегда заканчивался бы за O (n) шагов. Обычный способ сделать это - положить n и -n в разные стеки и добавлять по одному в каждый, пока один не достигнет нуля, однако я сделал это немного страннее. В моем методе я помещаю счетчик под входом, и на каждом шаге я увеличиваю счетчик, добавляя его к n и меняя знак n .
Давайте пройдемся по примеру. Скажи п = 7
Я не буду доказывать это здесь, но это всегда завершится для любого ввода и сделает это за 2n шагов. Фактически, он завершится за 2n шагов, если n положительно, и 2n-1 шагов, если n отрицательно. Вы можете проверить это здесь .
Теперь у нас есть около 2n шагов в нашем цикле, как мы умножаем на n ? Ну, здесь есть немного математической магии. Вот что мы делаем: мы создаем аккумулятор, на каждом шаге процесса мы добавляем второй вход ( m ) к аккумулятору и переворачиваем знак их обоих, затем мы помещаем сумму по всем возникающим циклам, это продукт.
С какой стати это так?
Хорошо, давайте рассмотрим пример, и, надеюсь, это станет ясно. В этом примере мы умножаем 5 на 3 , я покажу только важные значения
Надеюсь, механизм здесь очевиден. Мы перебираем все кратные m в порядке их абсолютных значений. Вы обратите внимание на то , что 2n - й член всегда т * п и член , прежде чем всегда -m * п . Это делает так, чтобы наш цикл идеально соответствовал желаемым результатам. Немного счастливого совпадения;)
источник
Дьялог АПЛ , 1 байт
×
занимает один номер слева, а другой справа×
... или даже несколько чисел слева или справа или с обеих сторон×/
умножает все числа в списке×/¨
умножает пары в данном списке×/∊
умножает все числа в массивеЭто относится ко всем арифметическим функциям, массивам всех размеров и рангов и числам всех типов данных.
источник
R, 3 байта
Это функция, которая принимает ровно два аргумента. Беги как
'*'(a,b)
.Смотрите также,
prod
что делает то же самое, но может принимать произвольное количество аргументов.источник
'*'
.ArnoldC , 152 байта
Попробуйте онлайн!
источник
Гексагония , 9 байт
Попробуйте онлайн!
Это на самом деле довольно просто. Вот развернутая версия:
/
Просто перенаправить поток управления на вторую линию , чтобы сохранить байты на трети. Это сводит код к этой линейной программе:Этот линейный код сам по себе был бы правильным решением, если бы ввод был ограничен строго положительными числами, но из-за возможности неположительных результатов это не гарантировано завершается.
Программа использует три края памяти в форме Y:
Указатель памяти начинается с края,
A
указывающего на центр.Я выполнил поиск методом перебора 7-байтовых решений (то есть тех, которые соответствуют длине стороны 2), и если я не ошибся (или есть решение «занят-бобер-у», выполнение которого занимает много времени, что я сомневаюсь) тогда 7-байтовое решение не существует. Возможно, существует 8-байтовое решение (например, путем повторного использования
?
или использования только одной команды перенаправления вместо двух/
), но это выходит за рамки того, что может сделать мой поиск методом перебора, и я пока не нашел его вручную.источник
Пит , 16 байтов
Онлайн переводчик доступен здесь.
объяснение
Для запуска вставьте приведенный выше код в текстовое поле с правой стороны связанной страницы. Ниже приведено графическое представление этого кода с размером кода 31. Сетка предназначена для удобства чтения и может мешать традиционным интерпретаторам Piet.
Код выполняется линейно слева направо, проходя вдоль верхней части изображения до первого зеленого блока, где поток программы перемещается в средний ряд кодов. Белый одинокий белый кодел необходим для выполнения программы. Его можно заменить кодеком любого цвета, кроме зеленого или темно-синего, но я выбрал белый для удобства чтения.
Если вы считаете, что текст не является наилучшим способом представления программы Piet или у вас есть проблема с размером байтов в программах Piet в целом, пожалуйста, сообщите свое мнение в обсуждении мета .
источник
BitCycle
-U
, 68 байтПопробуйте онлайн!
Умножение двух чисел не является тривиальной проблемой в BitCycle, особенно когда нужно обрабатывать знаки! Это моя вторая попытка; первый (по сути, тот же алгоритм, другой макет) был 81 байт, так что вполне возможно, что этот тоже можно сократить.
Программа принимает два числа в качестве аргументов командной строки и выводит на стандартный вывод. Этот
-U
флаг предназначен для преобразования десятичных чисел в унарные со знаком, поскольку BitCycle знает только 0 и 1.объяснение
Это объяснение предполагает, что вы понимаете основы BitCycle (см. Esolangs или readme GitHub). Я основываю свои объяснения по этому ungolfed версии, видели здесь вычислительном
-2
раз3
:обзор
Унарные числа со знаком состоят из знака (
0
для неположительного, пустого для положительного), за которым следует величина (число1
s, равное абсолютному значению числа). Чтобы умножить два из них, нам нужно XOR знаков (вывести a,0
если точно один из них0
, или ничего, если оба или ни один из них ), а затем умножить величины (и вывести столько1
s). Мы добьемся умножения путем повторного сложения.Биты знака
Исходя из двух источников
?
, мы отделили знаки от величин+
.0
s (знаковые биты) поворачиваются влево и направлены вдоль верхнего ряда, в то время как1
s (величины) поворачиваются направо и оказываются в двухB
коллекторах.Раздел, который обрабатывает знаки, выглядит следующим образом:
Если оба числа неположительны, два
0
бита приходят сверхуv
. Первый отражается сверху\
, отправляется на юг и отражается от/
. Между тем, второй бит проходит через деактивированную верхнюю часть\
и отражается от нижней\
. Два бита проходят друг через друга, проходят прямо через деактивированные разделители в нижнем ряду и уходят с игрового поля.Если только одно из чисел неположительно, оно
0
приходит сверху. Он прыгает вокруг всех трех сплиттеров и в конечном итоге снова направляется на север, пока не достигнетv
и снова отправится на юг. На этот раз он проходит через деактивированные сплиттеры и достигает<
, который отправляет его в раковину!
.Петли для хранения величин
Величина первого числа уходит в
B
коллектор в этом разделе:Перед тем, как
B
коллектор открывается, онA
выпускает сингл,0
который был помещен в него, который затем идет в конец очередиB
. Мы будем использовать его в качестве значения флага, чтобы завершить цикл, когда все1
битыB
исчезнут.Каждый раз, когда
B
коллекторы открываются,\
разветвитель снимает первый бит с очереди и отправляет его в логику обработки посередине. Остальные биты входят вC
, и когдаC
коллекторы открываются, они отправляются обратноB
.Величина второго числа уходит в
B
коллектор в этом разделе:Когда
B
коллекторы открываются, биты уходят в нижний дупнег~
. Исходные1
биты поворачиваются направо и отправляются на запад в логику обработки в середине. Отрицаемые копии0
поворачиваются налево и сразу же попадают в другого дупнега. Здесь0
s поворачивают направо и уходят с игрового поля, в то время как (теперь вдвойне) отрицают1
s поворот налево и отправляются вC
. КогдаC
открывается, они возвращаются вB
.Повторное сложение
Центральная логика обработки - это часть:
Биты из обеих петель (одна с западной стороны и все с восточной стороны) отправляются на юг в коммутатор
=
. Время должно быть настроено так, чтобы бит из западного цикла получался первым. Если это1
, переключатель переключается на}
, отправляя следующие биты на восток в приемник!
для вывода. Как только все1
s ушли, мы получаем0
, который меняет переключатель на{
. Это отправляет следующие биты в@
, который завершает программу. Короче говоря, мы выводим (унарную) величину второго числа столько раз, сколько1
s в (унарной) величине первого числа.источник
Python 3 , 11 байт
Попробуйте онлайн!
Также работает для целых чисел
2**32
в Python 2.источник
Java 8,
109 байтПопробуй это здесь.
Java 7, 31 байт
Попробуй это здесь.
Как полная программа (
9990 байт) :Попробуй это здесь.
источник
*
рассказать+
.a,b
в лямбда-выражении.Pyth, 2 байта
Попробуй это здесь!
Автоматическая оценка Pyth мешает здесь. Чтобы обойти это, я использую явную оценку для одного из аргументов
источник
TI-Basic, 2 байта
Очень просто.
источник
Ans
не разрешен метод ввода / вывода .PHP, 21 байт
принимает входные данные из аргументов командной строки. Также работает с поплавками.
источник
Сетчатка ,
3935 байтСпасибо Лео за то, что он позволил мне использовать его идею, которая в итоге сэкономила 4 байта.
Ввод разделен переводом строки.
Попробуйте онлайн! (Разделенный пробелами набор тестов для удобства.)
объяснение
Первые два этапа выводят знак минус, если ровно один из двух входов является отрицательным. Они делают это без фактического изменения ввода. Это делается путем группировки их на втором этапе
)
и превращения их в пробный запуск*
.\
Вариант на втором этапе печати предотвращает заднюю подачу листа.Сначала мы удаляем все, кроме знаков минус.
Затем мы отменяем знаки минус, если их осталось два.
Теперь мы конвертируем каждую строку в унарное представление ее абсолютного значения. Это избавит от знака минус, потому что
$*
только ищет первое неотрицательное число в матче (т.е. он не знает о знаках минус и игнорирует их).Первая строка конвертируется в
_
путем сопоставления отдельных1
s до тех пор, пока они соседствуют с предыдущим соответствием (следовательно, мы не можем сопоставить1
s во второй строке, потому что перевод строки разрывает эту цепочку).Это выполняет фактическое умножение. Мы заменяем каждую
_
(в первой строке), а также всю вторую строку всем после этого совпадения. Поэтому_
совпадения будут включать в себя всю вторую строку (умножая ее на число0
s в первой строке), и вторая строка будет удалена, поскольку после этого совпадения ничего нет. Конечно, результат также будет включать в себя некоторое количество мусора в виде_
s и перевода строки, но это не будет иметь значения.Мы заканчиваем простым подсчетом числа
1
s в результате.источник
MATLAB,
54 байтаdot
принимает скалярное произведение двух векторов одинаковой длины. Если мы будем кормить его двумя скалярами, он просто умножит два числа.prod
принимает произведение значений во всех строках каждого столбца матрицы. Если матрица одномерна (т. Е. Вектор), то она действует вдоль не-одиночного измерения, беря произведение всех элементов в векторе.dot
на один байт короче, чем наprod
один байт короче, чем еще более очевидный встроенныйtimes
.Назовите это так:
источник
PigeonScript , 1 байт
Объяснение:
*
смотрит в стек, чтобы увидеть, есть ли там что-нибудь. Если нет, он запрашивает ввод и умножает входы вместеисточник
Perl 6 , 4 байта
Это обычный оператор инфиксного умножения
*
, выраженный в виде обычной функции. В качестве бонуса, если дано одно число, оно возвращает это число, а если не дано ни одного числа, оно возвращает1
мультипликативную идентичность.источник
*×*
> <>, 5 байт
Принимает ввод как символ ascii, выводит число.
Объяснение:
Вы могли бы также сделать
Но я чувствую , что мое решение waaay прохладнее.
Другая возможность - сбросить точку с запятой, что приведет к отскоку указателя от зеркала, выполнению команды print и выдаче ошибки, поскольку стек пуст.
источник
Машинный код Intel 8080 , MITS Altair 8800 , 28 байт
Это реализует двоичное умножение на процессоре Intel 8080 (c. 1974), который не имел инструкций умножения или деления. Входы - это 8-битные значения, а произведение - это 16-битное значение, возвращаемое в
BC
паре регистров.Вот машинный код вместе с пошаговыми инструкциями для загрузки программы в Altair 8800 с помощью переключателей на передней панели.
Попробуйте онлайн!
Если вы все правильно ввели, на панели состояния машины в симуляторе содержимое вашей оперативной памяти будет выглядеть так:
вход
Множитель в
C
регистре и умножение наD
. В наличии у Altair нет,STDIN
поэтому ввод осуществляется только с помощью переключателей на передней панели.Выход
Результат отображается на индикаторе
D7
-D0
(верхний правый ряд) в двоичном виде.5 x 16 = 80 (0101 0000)
4 x 5 = 20 (0001 0100)
7 x 9 = 63 (0011 1111)
8 x -9 = -72 (1011 1000)
Примечание о совместимости: это также должно работать на IMSAI 8080 , хотя в настоящее время не проверено.
источник
C #, 10 байт
Это просто умножение.
источник
Желе , 1 байт
Попробуйте онлайн!
Обязательное желе подачи.
источник
Clojure, 1 байт
: P В качестве бонуса это работает на любое количество аргументов:
Интересно, что вы можете легко получить его исходный код:
источник
Owk , 11 байт
Это может быть назначено на функцию как это:
и называется так:
источник