Вызов
Учитывая два целых числа A
и B
как входные данные, вы должны написать программу, которая выводит if A>B
, A==B
или A<B
.
Целые числа будут в любом разумном диапазоне, поддерживаемом вашим языком, который включает не менее 256 значений.
Ваша программа может быть либо полной программой, либо функцией, получающей ввод через STDIN или аргументы функции.
Выходы
Если A>B
выходной
A is greater than B
Если A==B
выходной
A is equal to B
Если A<B
выходной
A is less than B
Где вы заменяете A
и B
их целочисленные значения.
выигрыш
Самая короткая программа в байтах побеждает.
Leaderboard
var QUESTION_ID=55693,OVERRIDE_USER=8478;function answersUrl(e){return"http://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"http://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>
Ответы:
CJam, 47
Попробуйте онлайн
Объяснение:
источник
[A B]
и исключить]
из вашего кода.~_~
...Python 2,
959476 байтВвод должен быть через запятую.
источник
cmp(A,B)
есть и что делает? :)Лабиринт ,
180152149 байтИзменить: удалось сократить 3 байта путем повторного использования
10
между101
,103
и108
(коды символовe
,g
иl
). Приведенное ниже объяснение не отражает этого, но не является существенным изменением.объяснение
Мы мало что можем сделать, чтобы сэкономить байты для печати строк, это просто длинные линейные участки. Таким образом, главная проблема в гольфе состоит в том, чтобы избежать большого количества ненужных пробелов. Это означает, что мы хотим, чтобы линейные части «излучались» из самого левого столбца. Мы также можем сэкономить, повторно используя код, который печатает
than B
. Итак, давайте посмотрим на поток управления здесь:Программа запускается по команде вращения сетки
<
. Это циклически сдвигает текущую строку влево с IP-адресом, поэтому мы получаем это:Теперь IP-адрес находится в изолированной ячейке, поэтому он снова и снова выполняет одну и ту же команду, пока
<
перемещение продолжается влево, пока ...В этот момент IP должен куда-то пойти и выполнить первый линейный участок (второй ряд) справа налево. То, что он делает, это читать
A
, копировать, печатать. Использовать разделительный символ между числами, печататьis
(и пробелы). Затем прочитайтеB
, скопируйте его и вычтитеA
из него на-
.В этот момент мы попали в первую «развилку на дороге». Если разница уступила
0
, IP продолжает двигаться прямо к нижней ветви. Эта ветка просто печатает,equal to
а затемB
.В противном случае, IP идет налево в направлении двух бездействующих
""
. Тогда есть другая вилка. Если разность была отрицательной, IP переходит влево в направлении длинной верхней ветви. Эта ветка просто печатает,greater than
а затемB
.Если разница была положительной, IP получает право на нижнюю ветвь, которая печатает
less
. Теперь мы хотим повторно использоватьthan
из другой ветки. Но в то же время мы не хотим связывать две ветви позже, потому что нам понадобится целый ряд ненужных пробелов. Вместо этого мы используем несколько no-ops, чтобы выровнять нижнюю ветвь с тем, гдеthan
начинается верхняя ветвь, а затем снова начать манипулировать источником с помощью^
:Опять же, это изолирует IP, поэтому
^
выполняется снова, и мы получаемТеперь IP-адрес можно продолжить перемещать вправо и печатать
than
и поB
мере необходимости.источник
JavaScript (ES6), 66 байт
Определяет анонимную функцию. Проверьте, добавив
f=
перед этим, и назовите это какalert(f(4, 5))
К сожалению, от повторяющегося «чем» нельзя сэкономить.
источник
than
.public void c(int a,int b){System.out.print(a+" is "+(a==b?"equal to ":a>b?"greater than ":"smaller than ")+b);}
alert()
следует добавить 7 баллов.alert()
как часть своего кода и подсчет байтовJava,
114113 байт или74 7267, если мы использовали лямбда-нотациюСпасибо Кевину Круйссену за решение на основе карри:
a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b
Старое предварительно лямбда-решение
как пользователь hjk подразумевает в комментарии, если мы использовали лямбду, мы можем значительно сократить до 74 байтов.
источник
than
:)public
если хотите. Я бы предложил превратить это в лямбду. Вы можете удалить один пробел перед{
.a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b
Да, я знаю, это было почти два года. ;) И вы действительно можете использоватьless
вместо того, чтобыsmaller
основываться на описании проблемы, как упомянуто в двух комментариях выше меня. Попробуйте здесь, чтобы увидеть, как делается карри.R, 80 байт
источник
function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)
.Pyth,
5249 байтисточник
Юлия,
6966 байтЭто использует интерполяцию строки для встраивания
A
,B
и трехкомпонентных внутри одной строки.Сохранено 3 байта благодаря Глену О.
источник
Perl,
6463 байта62 байта + 1 байт для
-p
. Принимает данные из STDIN с двумя числами, разделенными одним пробелом:Как это работает:
<=>
оператор возвращает -1, 0 или 1 в зависимости от того , является ли первый операнд меньше, равен или больше , чем второй. Удобно, что Perl допускает отрицательные индексы с массивами и срезами, где последний элемент находится в позиции -1, второй-последний элемент находится в позиции -2 и так далее.В коде
мы используем возвращаемое значение в
<=>
качестве индекса в срезе списка, чтобы получить соответствующую строку, где$`
находится первое число и$'
второе.Чтобы избежать повторения
than
,x
используется в качестве заполнителя и заменяется во второй замене в конце.Альтернативное решение, 63 байта
62 байта + 1 байт для
-p
. Принимает разделенный пробелами ввод из STDIN, как и первое решение.Как это работает:
Это решение также использует срез, но использует тот факт, что в отличие от срезов списка, срезы массива могут быть интерполированы в строки (и RHS замен). Это позволяет нам удалить
/e
модификатор и кавычки в операторе замещения.Настоящий трюк в нижнем индексе среза:
Для разных значений
<=>
это дает:Когда массив или фрагмент массива интерполируются в строку, элементы автоматически объединяются
$"
(по умолчанию один пробел).источник
Мышь , 79 байт
Когда встречаются строки, они сразу записываются в STDOUT, а не помещаются в стек. Стек может содержать только целые числа.
Ungolfed:
источник
GolfScript, 61 байт
Ожидает 2 целых числа в стеке. Попробуйте онлайн .
Как это работает:
\.@.@
- А и Б уже в стеке, и этот кусок кода делает стек выглядеть следующим образом :ABBA
.\
поменяет два верхних элемента в стеке,.
продублирует верхний элемент и@
повернет 3 верхних элемента (1 2 3
->2 3 1
).Затем в стек помещаются три элемента:
=
знак"equal to "
и блок между ними{}
.if
Заявление делает это: если первый аргумент истинно, то выполняется первый блок кода (второй аргумент), в противном случае, второй блок кода (третий аргумент). Таким образом, если A и B равны, он помещает «равный» в стек. Если они не равны, он выполнит код между блоком. Обратите внимание, что=
два верхних элемента извлекаются из стека, поэтому теперь стек выглядит следующим образомAB
.Внутри блока вы впервые видите
.@.@
. До этих команд стек выглядит такAB
, а после стек выглядит такBAAB
. Команды аналогичны приведенным выше.Затем есть еще одно
if
утверждение. На этот раз он проверяет, является ли A> B, и если true, он помещает «больше» в стек. Иначе, это помещает "меньше" в стек. После нажатия одного из этих двух он вставит в стек «чем» и объединит его с предыдущей отправленной строкой.>
также выскакивают два верхних элемента стека, так что теперь стек выглядит следующим образомBA"string"
.Следующие три команды:
" is "\+
." is "
помещает эту строку в стек (выглядит как стекBA"string"" is "
),\
меняет местами два верхних элемента (выглядит как стекBA" is ""string"
) и+
объединяет два верхних элемента (выглядит как стекBA" is string"
).Последняя команда,
@
вращает три элемента стека, так что стек теперь выглядит следующим образом :A" is string"B
. GolfScript автоматически печатает значения стека в STDOUT после завершения программы, так что вы получите желаемый результат.источник
MATLAB, 105 байт
Добавлен разрыв строки перед sprintf, чтобы облегчить чтение. Он работает как с этим разрывом строки, так и без него, поэтому он не включен в число байтов. Должен нажать ввод между двумя входными номерами.
источник
sprintf
!Баш, 76
источник
Фортран, 129
Арифметика Фортрана, если идеально подходит для этой задачи
Тест: идеон
источник
Bash,
9486 байтов (сэкономлено восемь байтов благодаря Digital Trauma)Тест (в Linux):
Использование
[ ]
afterp=greater
позволяет предотвратить||
оценку оператора перед=
в выражении...&&p=greater||(($1<$2))...
(приоритет оператора!).Альтернативой будет использование квадратных скобок
(($1>$2))&&p=greater
и(($1<$2))&&p=less
, но квадратные скобки создают внутреннюю область видимости для переменных, поэтомуp
остаются без изменений.источник
p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2
Машинный код IA-32 + linux, 107 байт
Hexdump кода:
Из-за аппаратных ограничений код работает с числами в диапазоне 0 ... 255.
Исходный код (может быть собран с GCC):
Это серьезное злоупотребление стеком! Код создает выходное сообщение в стеке с конца до начала. Чтобы записать 4 байта, он использует одну
push
инструкцию. Для записи 1 байта используются две инструкции:К счастью, большинство записываемых фрагментов составляют 4 байта. Один из них («gre» в «больший») составляет 3 байта; это обрабатывается нажатием 4 байтов и последующим удалением одного:
Процедура, которая записывает числа в десятичной форме, использует
aam
инструкцию для деленияax
на10
несколько раз. Выгодно, что он вычисляет цифры справа налево!Поскольку нужно написать два числа, в коде используется подпрограмма, которая вызывается дважды. Однако, поскольку подпрограмма записывает результаты в стек, она использует регистр для хранения адреса возврата.
C-код, который вызывает машинный код выше:
Выход:
источник
ShortScript , 98 байт
Этот ответ не является конкурирующим, поскольку после этого конкурса был опубликован ShortScript.
источник
Фурье ,
14774 байтаНе конкурирует, потому что струнная печать новее этой задачи
Попробуйте это на FourIDE!
Не знаю, почему я не разрешил печатать раньше ... Это делает код читабельным и отлично подходит для игры в гольф
источник
101
и116
переменные, верно? Я не уверен, как / если переменная область обрабатывается.C
15513612783 байтаисточник
Haskell, 87 байт
Один байт короче, чем подход Отомо.
источник
Луа, 118 байт
Я не вижу достаточно ответов Луа здесь, так что ...
Ungolfed:
источник
Python 2, 78 байт
Я люблю, как
cmp()
это действительно полезно, но это было удалено в Python 3 .Использование анонимной функции:
Не используется функция (79 байт):
источник
JavaScript,
151 104 100 9592 байтаМне удалось сократить с помощью edc65
источник
var a
объявляет переменную а. Вы должны использовать его в реальном коде по многим веским причинам. Но это необязательно в javascript и избегатьvar
сохранения 4 символовC # 6,
11310310095 байтСпасибо edc65 за сохранение 13 байтов и cell001uk за сохранение 5 байтов с использованием интерполированных строк C # 6 !
источник
void C(int a,int b){System.Console.Write("A is {0} B",a==b?"equal to":a>b?"greater than":"less than");}
Write("{0} is {1:greater than;less than;equal to} {2}",a,a-b,b)
rs , 105 байт
Конечный и предшествующий пробел очень важен!
Живая демоверсия и все тестовые случаи.
источник
Пиф,
575553 байтаЭто в основном делает:
Сохранено 2 байта благодаря предложению @ AlexA. Использовать
A
вместоJ
иK
и еще 2 байта, заменив весь беспорядок на более простое вычитание.Живая демоверсия и тестовые случаи.
55-байтовая версия
Живая демоверсия и тестовые случаи.
57-байтовая версия:
Живая демоверсия и тестовые случаи.
источник
AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
A
вместоJ
иK
, что сэкономило 2 байта.O 67 байтов
Живая демоверсия.
источник
SWI-Пролог, 94 байта
источник
Swift,
10592 байтаеще короче с Swift 2.0 (
10390 байт)источник
Обработка, 92 байта
источник