var QUESTION_ID=124242,OVERRIDE_USER=61474;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:+r.match(SCORE_REG)[0],language:r.match(LANG_REG)[0].replace(/<\/?[^>]*>/g,"").trim(),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=/\d+((?=$)|(?= Bytes))/i,OVERRIDE_REG=/^Override\s*header:\s*/i;LANG_REG=/^[^,(\n\r]+/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/Sites/codegolf/all.css?v=617d0685f6f3"> <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>
42
в нем два раза.Ответы:
Mathematica, 15 байт
Число байтов предполагает кодировку Windows ANSI (CP-1252).
Определяет бинарный оператор,
±
который решает проблему. Мы просто определяем6±9=42
как особый случай, который имеет приоритет, а затем добавляем запасное определение, которое±
равно умножению. Последний использует довольно интересную игру в гольф. Причина, по которой это работает, на самом деле довольно сложна, и нам нужно разобраться в последовательности . Последовательность похожа на то, что в других языках называется сплатом . Это в основном «список» без какой-либо обертки вокруг него. Например,f[1, Sequence[2, 3, 4], 5]
это действительно простоf[1, 2, 3, 4, 5]
. Другая важная концепция заключается в том, что все операторы являются просто синтаксическим сахаром. В частности,±
может использоваться как унарный или бинарный оператор и представляет собой головуPlusMinus
. Так±x
естьPlusMinus[x]
иa±b
естьPlusMinus[a,b]
.Теперь у нас есть определение
±n__
. Это сокращение для определенияPlusMinus[n__]
. Ноn__
представляет собой произвольную последовательность аргументов. Так что это фактически добавляет определение для двоичного (и n-арного) использованияPlusMinus
. Значение этого определения1n
. Как это умножить аргументы? Ну,1n
использует неявное умножение Mathematica на сопоставление, так что это эквивалентно1*n
. Но*
это также просто стенография дляTimes[1,n]
. Теперь,n
последовательность аргументов. Так что, если мы призываем,a±b
тогда это действительно станетTimes[1,a,b]
. И это толькоa*b
.Я думаю, что это очень хорошо, как это злоупотребление синтаксисом позволяет нам определять бинарный оператор, используя унарный синтаксис. Теперь мы можем даже делать
PlusMinus[2,3,4]
вычисления24
(которые также могут быть записаны как±##&[2,3,4]
или,2±Sequence[3,4]
но это просто сходит с ума в этот момент).источник
*
это встроенный оператор, так что вам нужноUnprotect
добавить дополнительные определения, но онUnprotect[Times];6*9=42
должен работать (хотя сейчас не могу проверить).Haskell , 14 байтов
Попробуйте онлайн!
источник
C
32312928 байт-2 благодаря Digital Trauma
-1 благодаря musicman523
Довольно просто Объявляет макрофункцию,
f
которая принимает два аргумента,a
иb
.Если
a
есть6
иb
есть9
, вернуть42
. В противном случае вернитеa
xb
.Попробуйте онлайн!
источник
^
вместо==
и немного измените логику:#define f(a,b)a^6||b^9?a*b:42
- экономит 2 байта.|
вместо того,||
чтобы сохранить другой байт, так как он по-прежнему имеет более низкий приоритет, чем^
JavaScript (ES6), 20 байт
Объяснение:
Если x == 6 и y == 9,
x-6|y-9
будет 0 (ложь), а 42 будет результатом.Отрывок:
источник
Python 2 ,
3029 байтСпасибо Джонатану Аллану за сохранение байта!
Попробуйте онлайн!
источник
lambda x,y:x*[y,7][6==x==y-3]
05AB1E ,
15119 байт-4 байта благодаря @Emigna
-2 байта благодаря @Adnan
Попробуйте онлайн!
Как это устроено
источник
‚D96SQi42ëP
,
в начале?6Qs9Q*
что работал бы так же для того же количества байтов.P¹69SQi42
Java (OpenJDK 8) ,
2422 байта-2 байта благодаря @ OlivierGrégoire
Попробуйте онлайн!
источник
System.out.println()
вызов и просто позволить функции вернуть результат?(a^6|b^9)==0
поскольку не существует неявного сравнения «отличается от 0». Полученный фрагмент кода будет иметь длину 27 байт. В любом случае, спасибо за предложение, и, пожалуйста, скажите мне, если я неправильно понял ваш совет.int a = 5; if (a) do_some_stuff(); else do_other_stuff();
даетType mismatch: cannot convert from int to boolean
ошибку компиляции. Они должны быть сделаны явно с логическими значениями; обратитесь к ТАК и ORACLE .a->b->a==6&b==9?42:a*b
.Рубин, 24 байта
источник
a^6|b^9<1
может работать как логическое. Трудно проверить на моем смартфоне.(((a^6)|b)^9)
, то естьa.^(6).|(b).^(9)
, поэтому оно не будет работать правильно.a-6|b-9==0
будет работать, но это не короче.a,b==6,9
было бы хорошо, но это также не работает.Brain-Flak ,
158154148140138126 байтПопробуйте онлайн!
объяснение
Этот код довольно прост. Мы делаем копии двух верхних элементов в стеке, вычитаем 6 из одного и 9 из другого. Затем мы берем одно
not
из двух значений. Мыand
эти значения, умножьте результат на 12. Умножьте входные данные и вычтите два результата.источник
not
иand
(или помешать им), прочитав ваше описание, скорее, сбило меня с толку.Factorio, 661 байт, 6 комбинаторов с 9 подключениями
Существует один комбинатор констант, настроенный на выход A и B. Измените их, чтобы установить вход.
Строка чертежа (0.15.18):
Выходной сигнал является сигналом Z и должен быть взят из верхнего и нижнего решателей.
источник
Желе ,
87 байтВходные данные представляют собой массив из двух целых чисел: сначала правый операнд, затем левый.
Попробуйте онлайн!
Как это устроено
источник
Factorio, 581 байт, 3 комбинатора с 4-мя подключениями
Строка чертежа (0.16.36):
Нижний левый постоянный комбинатор должен быть настроен на вывод A и B в качестве входа. Выходной сигнал Z из нижнего правого арифметического комбинатора.
источник
MATL , 11 байт
Ввод представляет собой массив с двумя числами.
Попробуйте онлайн!
объяснение
источник
GW-BASIC , 55 байтов
Выход:
Первая машина на pcjs имеет IBM BASIC, что практически то же самое. Чтобы проверить это, зайдите туда, нажмите Runна машину, нажмите Enter- Enterи введите,
BASICA
чтобы войти в режим BASIC. Затем введите исходный код (он автоматически печатается для вас), введитеRUN
, введите два целых числа и готово!источник
INPUT
, закодированы в меньшем количестве байтов, чем можно предположить из символов, которые их составляют. Таким образом, счет кажется мне высоким.wc
и получил 55 ... Вставил копию в мой эмулятор, и у него было ожидаемое поведение.OUT.BAS
: i.stack.imgur.com/32eH1.png Bytecount - это среднее значение.R , 33 байта
Возвращает функцию.
Попробуйте онлайн!
источник
Чек ,
3433 байтаПроверьте мой новый esolang. Он использует комбинацию 2D и 1D семантики.
Ввод - это два числа, передаваемых через аргументы командной строки.
объяснение
Стек начинается с аргументов командной строки. Давайте назовем аргументы
a
иb
.Первая часть, по
.:+&
сути, дублирует стек, оставляя его какa, b, a, b
.>
толкает 0 к стеку (это часть числового литерала, завершенного9
).#
переключается на 2D семантику иv
перенаправляет IP вниз. IP немедленно наталкивается на a#
, который снова переключается на семантику 1D.9-!
проверяет,b
равен ли он 9 (вычитая 9 и принимая логическое НЕ).\>6-!
затем проверяет,a
равен ли 6. Стек теперь содержитa, b, 1, 1
тогда и только тогда, когдаb==9
иa==6
. Умножение на*
принимает логическое И этих двух значений, давая,a, b, 1
если входы были6
и9
, иa, b, 0
иначе.После этого IP сталкивается с
?
. Это переключится в режим 2D, если значение верхнего стека отличное от нуля, и в противном случае будет продолжено в режиме 1D.Если значение верхнего стека было
1
, это означает, что другими значениями стека являются6
и9
, поэтому мы помещаем 42 в стек с помощью>42
и затем перемещаемся вниз ко второму#
в последней строке.Если значение верхнего стека было
0
, то выполнение перемещается вниз на следующую строку.d
удаляет0
(как?
не делает), а затем мы умножаем два входа на*
. В##
Выключатели и из 2D - режиме, ничего не делая.Филиалы теперь присоединились снова. Стек либо содержит
6, 9, 1, 42
, либоa*b
.p
печатает верхнее значение стека, а затем программа завершается, отбрасывая оставшуюся часть стека.источник
JavaScript (ES6), 25 байт
источник
Python 3 ,
3633 байтаПопробуйте онлайн!
источник
lambda x:x[0]*x[1]if x!=(6,9)else 42
. Разница лишь в типе ввода.f=lambda x,y:42if6==x==y-3else x*y
APL (Дьялог) , 10 байт
Попробуйте онлайн!
×
продукт (аргументов)-
минус12×
двенадцать раз6 9≡
совпадает ли (6,9) с,
конкатенация (аргументов)источник
R, 41 Я думаю, я не знаю, как считать байты, я новичок: D
Я определяю функцию, аргументы которой a и b в этом порядке . Если a равно 6, а b равно 9, возвращается 42, в противном случае a
источник
ifelse(a==6&b==9,42,a*b)
function(a,b)`if`(a-6|b-9,a*b,42)
.SPL , 356 байт
С символами новой строки и пробелами:
источник
Japt ,
131112 байтПопробуйте онлайн
21 байт сэкономлено благодаря obarakon.источник
N¬¥69?42:N×
для 11 байтовСтандартный ML (MLton) ,
2220 байтовСохранено 2 байта благодаря @Laikoni!
Попробуйте онлайн!
Это то, для чего предназначен SML, поэтому он лучше, чем shortC и Python.
Старая версия выглядела намного лучше. :П
источник
$
в качестве идентификатора! Почему это не компилируется, если вы удалите пробел между|
и$
?|$
анализируется как один символический идентификатор, поэтому все ломается. Я планирую вскоре написать вопрос с подсказками для SML и добавить ответ об этих двух типах идентификаторов.Pyth, 12 байт
Попробуйте онлайн
объяснение
источник
AQ?&q6Gq9G42*GH
Сетчатка , 36 байт
Попробуйте онлайн! Стандартное унарное умножение, просто изменяет ввод для обработки специального случая.
источник
Желе , 10 байт
Монадическая ссылка, содержащая список из двух чисел.
Попробуйте онлайн!
Как?
источник
?
, как я сделал. ;),
особенным является то, что он является частью буквального шаблона регулярных выражений, поэтому6,9
анализируется как один токен, и быстрый$
может объединить его с⁼
. Вы рассуждали об этом или просто попробовали и заметили, что это сработало?Желе , 9 байт
Попробуйте онлайн!
Принимает список чисел в качестве входных данных.
источник
SILOS ,
8167 байтПопробуйте онлайн!
В некотором смысле дополнение функционирует как интересный NAND-шлюз в SILOS.
-14 байтов благодаря @Leaky Nun
По сути, мы создаем число «a», равное 0 (ложь), если j равно 6 и i = 9, затем мы делим его на одно, вычитаем единицу и умножаем на 12, чтобы добавить к нашему продукту.
Если «a» равнялось 1 после вычитания единицы и умножения, оно становится неактивным, однако в случае, когда a равно 0, 0/0 молча выдает ошибку (которая автоматически фиксируется), a становится 0, а затем становится -1 и в итоге мы вычитаем 12 из нашего продукта.
источник
0/0
становится0
.Выпуклый ,
161413 байтПопробуйте онлайн!
источник
shortC , 23 байта
Попробуйте онлайн!
источник