Сравнивая два числа


25

Вызов

Учитывая два целых числа 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>


Сегодня о программировании Puzzles & Code Golf: троичные заявления!
Требушетт

Могут ли функции просто вернуть решение вместо распечатки решения?
TheNumberOne

@TheNumberOne Нет, они должны напечатать решение
Beta Decay

Ответы:


11

CJam, 47

q~_~-g"is
equal greater less
to than"N/Sf/f=*S*

Попробуйте онлайн

Объяснение:

q~     read and evaluate the input (array of 2 numbers)
_      duplicate the array
~-     dump one array on the stack and subtract the numbers
g      get signum (-1 for <, 0 for ==, 1 for >)
"…"    push that string
N/     split into lines
Sf/    split each line by space
f=     get the corresponding word (for the signum) from each line
*      join the array of 2 numbers by the array of words
        it effectively inserts the words between the numbers
S*     join everything with spaces

Похоже, CJam на один байт короче
Pyth

В соответствии с настройками по умолчанию для чтения нескольких частей ввода , вы можете прочитать вход как [A B]и исключить ]из вашего кода.
Деннис

@ Денис спасибо, я думал об этом, но не был уверен.
aditsu

@ orlp 2 байта сейчас, и это повод улыбаться, а не хмуриться :)
aditsu

Уместно, что ваш код на самом деле содержит смайлик в виде ~_~...
Даррел Хоффман

19

Python 2, 95 94 76 байт

Ввод должен быть через запятую.

A,B=input();print A,'is',['equal to','greater than','less than'][cmp(A,B)],B

Я заинтригован, вы можете объяснить, что cmp(A,B)есть и что делает? :)
Beta Decay

2
@BetaDecay, docs.python.org/2/library/functions.html#cmp . «Сравните два объекта x и y и верните целое число в соответствии с результатом. Возвращаемое значение является отрицательным, если x <y, нулевым, если x == y, и строго положительным, если x> y.». В cPython 2.7.6 эти целые значения равны -1, 0, 1 соответственно. Определение функции не диктует этого, поэтому педант может настаивать на том, что здесь указана точная реализация и версия python, а не просто «Python 2», но я ожидаю, что большинство реализаций будут вести себя здесь одинаково.
Ymbirtt

Я просто хочу, чтобы вы знали, что я не скопировал ваш ответ, чтобы придумать мой . Я только сейчас видел, как близко они были. Когда я писал свой, у меня были проблемы с запуском фрагмента, и я мог поклясться, что ответа на Python уже не было (должно быть, пропустил 2-ю страницу). Я написал это совершенно независимо, как ни странно.
mbomb007

@ Sp3000 Я проверил это, и он отлично работает в Python 2.7.6
ML

1
@ML Мой комментарий имел отношение к прошлой ревизии, но так как она устарела, я удалил комментарий
Sp3000

10

Лабиринт , 180 152 149 байт

<
?01.23.511.501.23};,!:?
:
= ;3.114.101.97.116.101.114.32.116.104.97.110.32.{!@
-""
; ;8.101.115:..""""""""""""^
1
.113.117.97.108.32.116.111.32.{!@

Изменить: удалось сократить 3 байта путем повторного использования 10между 101, 103и 108(коды символов e, gиl ). Приведенное ниже объяснение не отражает этого, но не является существенным изменением.

объяснение

Мы мало что можем сделать, чтобы сэкономить байты для печати строк, это просто длинные линейные участки. Таким образом, главная проблема в гольфе состоит в том, чтобы избежать большого количества ненужных пробелов. Это означает, что мы хотим, чтобы линейные части «излучались» из самого левого столбца. Мы также можем сэкономить, повторно используя код, который печатаетthan B . Итак, давайте посмотрим на поток управления здесь:

Программа запускается по команде вращения сетки <. Это циклически сдвигает текущую строку влево с IP-адресом, поэтому мы получаем это:

                                                     <
?.23.511.501.23};,!:?
:
= ;103.114.101.97.116.101.114.32.116.104.97.110.32.{!@
-""
1 ;108.101.115:..""""""""""""^
0
1.113.117.97.108.32.116.111.32.{!@

Теперь IP-адрес находится в изолированной ячейке, поэтому он снова и снова выполняет одну и ту же команду, пока <перемещение продолжается влево, пока ...

                    <
?.23.511.501.23};,!:?
:
= ;103.114.101.97.116.101.114.32.116.104.97.110.32.{!@
-""
1 ;108.101.115:..""""""""""""^
0
1.113.117.97.108.32.116.111.32.{!@

В этот момент IP должен куда-то пойти и выполнить первый линейный участок (второй ряд) справа налево. То, что он делает, это читать A, копировать, печатать. Использовать разделительный символ между числами, печатать is(и пробелы). Затем прочитайте B, скопируйте его и вычтите Aиз него на- .

В этот момент мы попали в первую «развилку на дороге». Если разница уступила 0, IP продолжает двигаться прямо к нижней ветви. Эта ветка просто печатает, equal toа затем B.

В противном случае, IP идет налево в направлении двух бездействующих "". Тогда есть другая вилка. Если разность была отрицательной, IP переходит влево в направлении длинной верхней ветви. Эта ветка просто печатает, greater thanа затемB .

Если разница была положительной, IP получает право на нижнюю ветвь, которая печатает less. Теперь мы хотим повторно использовать thanиз другой ветки. Но в то же время мы не хотим связывать две ветви позже, потому что нам понадобится целый ряд ненужных пробелов. Вместо этого мы используем несколько no-ops, чтобы выровнять нижнюю ветвь с тем, где thanначинается верхняя ветвь, а затем снова начать манипулировать источником с помощью ^:

                    <
?.23.511.501.23};,!:?
:                            .
= ;103.114.101.97.116.101.114 32.116.104.97.110.32.{!@
-""                          ^
1 ;108.101.115:..""""""""""""
0                            2
1.113.117.97.108.32.116.111.3 .{!@

Опять же, это изолирует IP, поэтому ^выполняется снова, и мы получаем

                    <
?.23.511.501.23};,!:?        .
:
= ;103.114.101.97.116.101.114^32.116.104.97.110.32.{!@
-""
1 ;108.101.115:..""""""""""""2
0
1.113.117.97.108.32.116.111.3 .{!@

Теперь IP-адрес можно продолжить перемещать вправо и печатать thanи по Bмере необходимости.


8

JavaScript (ES6), 66 байт

(a,b)=>a+` is ${a<b?"less than":a>b?"greater than":"equal to"} `+b

Определяет анонимную функцию. Проверьте, добавив f=перед этим, и назовите это какalert(f(4, 5))


К сожалению, от повторяющегося «чем» нельзя сэкономить.


Вы уверены? Java-ответ, кажется, обходит чем;)
Beta Decay

3
@ BetaDecay хорошо, нет. Даже ответ Java будет такой же длины, повторяя than. public void c(int a,int b){System.out.print(a+" is "+(a==b?"equal to ":a>b?"greater than ":"smaller than ")+b);}
edc65

@BetaDecay Это правильный ответ, если он на самом деле не выводит текст? В качестве альтернативы alert()следует добавить 7 баллов.
curiousdannii

@curiousdannii О, я вижу, да, это недопустимо, если вы не учитываете alert()как часть своего кода и подсчет байтов
Beta Decay

@ BetaDecay о, я не понимал, что ответ должен был быть напечатан, а не только возвращен. Если предположить, что среда REPL в порядке, это можно запустить в консоли FireFox бесплатно, в противном случае, я думаю, что до 73.
jrich

8

Java, 114 113 байт или 74 72 67, если мы использовали лямбда-нотацию

Спасибо Кевину Круйссену за решение на основе карри:

a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b

Старое предварительно лямбда-решение

public void c(int a,int b){System.out.print(a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b);}

как пользователь hjk подразумевает в комментарии, если мы использовали лямбду, мы можем значительно сократить до 74 байтов.

(a,b)->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b;

1
Умный способ сжатия than:)
TheNumberOne

4
Вы можете удалить, publicесли хотите. Я бы предложил превратить это в лямбду. Вы можете удалить один пробел перед {.
TheNumberOne

1
И пока вы на нем, добавьте запятую после #Java, чтобы быть в списке лидеров. ;)
TNT

2
Официальный вопрос заключается в том, чтобы сказать «меньше», а не «меньше». Вы могли бы также сделать это и потерять три байта! Я не знаю Java, но будет ли лямбда-код печатать текст или просто возвращать его? Если он не печатает, то это, вероятно, неверный ответ.
curiousdannii

2
@hjk Короче лямбда, используя карри: a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+bДа, я знаю, это было почти два года. ;) И вы действительно можете использовать lessвместо того, чтобы smallerосновываться на описании проблемы, как упомянуто в двух комментариях выше меня. Попробуйте здесь, чтобы увидеть, как делается карри.
Кевин Круйссен,

7

R, 80 байт

function(A,B)cat(A,"is",c("less than","equal to","greater than")[2+sign(A-B)],B)

1
Вы можете сэкономить 3 байта, изменив «меньше чем» на «меньше чем», чтобы следовать спецификации выше. +1 за неиспользование тернарного оператора.
закладки

ах спасибо, я этого не уловил! исправлено!
flodel

@bmarks R не имеет троичного оператора. : P
Алекс А.

@AlexA. Я знаю. Я имел в виду, что использование списка и функции знака очень отличалось от других ответов (большинство из которых использовали троичные операторы или подобные).
отметки

Правильно. Для сравнения, моя первая попытка использования , если / еще было 83: function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B).
Флодель


7

Юлия, 69 66 байт

f(A,B)="$A is $(A>B?"greater than":A<B?"less than":"equal to") $B"

Это использует интерполяцию строки для встраивания A, Bи трехкомпонентных внутри одной строки.

Сохранено 3 байта благодаря Глену О.


6

Perl, 64 63 байта

#!/usr/bin/perl -p
s/ /" is ".("equal to ",greaterx,lessx)[$`<=>$']/e;s/x/ than /

62 байта + 1 байт для -p. Принимает данные из STDIN с двумя числами, разделенными одним пробелом:

$ echo 1 2 | ./cmp
1 is less than 2
$ echo 42 -17 | ./cmp
42 is greater than -17
$ echo 123456789 123456789 | ./cmp
123456789 is equal to 123456789

Как это работает:

<=> оператор возвращает -1, 0 или 1 в зависимости от того , является ли первый операнд меньше, равен или больше , чем второй. Удобно, что Perl допускает отрицательные индексы с массивами и срезами, где последний элемент находится в позиции -1, второй-последний элемент находится в позиции -2 и так далее.

В коде

("equal to ",greaterx,lessx)[$`<=>$']

мы используем возвращаемое значение в <=>качестве индекса в срезе списка, чтобы получить соответствующую строку, где $`находится первое число и$' второе.

Чтобы избежать повторения than, xиспользуется в качестве заполнителя и заменяется во второй замене в конце.


Альтернативное решение, 63 байта

#!/usr/bin/perl -p
@a=(equal,greater,than,to,less);s/ / is @a[$i=$`<=>$',!$i+2] /

62 байта + 1 байт для -p. Принимает разделенный пробелами ввод из STDIN, как и первое решение.

Как это работает:

Это решение также использует срез, но использует тот факт, что в отличие от срезов списка, срезы массива могут быть интерполированы в строки (и RHS замен). Это позволяет нам удалить /eмодификатор и кавычки в операторе замещения.

Настоящий трюк в нижнем индексе среза:

@a[$i=$`<=>$',!$i+2]

Для разных значений <=>это дает:

$i  !$i+2  $a[$i]  $a[!$i+2]
----------------------------
-1    2     less      than
 0    3     equal     to
 1    2     greater   than

Когда массив или фрагмент массива интерполируются в строку, элементы автоматически объединяются $"(по умолчанию один пробел).


5

Мышь , 79 байт

?A:?B:A.!" is "A.B.<["less than"]A.B.>["greater than"]A.B.=["equal to"]" "B.!$

Когда встречаются строки, они сразу записываются в STDOUT, а не помещаются в стек. Стек может содержать только целые числа.

Ungolfed:

? A:                            ~ Read an integer A from STDIN
? B:                            ~ Read an integer B from STDIN
A. !                            ~ Write A to STDOUT
" is "
A. B. < [ "less than" ]         ~ If A < B
A. B. > [ "greater than" ]      ~ If A > B
A. B. = [ "equal to" ]          ~ If A == B
" "
B. !                            ~ Write B to STDOUT
$                               ~ End of program

4

GolfScript, 61 байт

\.@.@="equal to "{.@.@>"greater""less"if" than "+}if" is "\+@

Ожидает 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 после завершения программы, так что вы получите желаемый результат.


4

MATLAB, 105 байт

x=input('');y=input('');t={'less than','greater than','equal to'};
sprintf('%i is %s %i',x,t{(x>=y)+(x==y)+1},y)

Добавлен разрыв строки перед sprintf, чтобы облегчить чтение. Он работает как с этим разрывом строки, так и без него, поэтому он не включен в число байтов. Должен нажать ввод между двумя входными номерами.


2
Очень умное использование sprintf!
Луис Мендо


4

Фортран, 129

Арифметика Фортрана, если идеально подходит для этой задачи

Тест: идеон

read(*,*)i,j
if(i-j)1,2,3
1 print*,i," is less than",j
stop
2 print*,j," is equal to",j
stop
3 print*,i," is greater than",j
end

3

Bash, 94 86 байтов (сэкономлено восемь байтов благодаря Digital Trauma)

p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2

Тест (в Linux):

echo 'p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2' > cmp.sh
chmod +x cmp.sh
./cmp.sh 10 12
10 is less than 12

Использование [ ]after p=greaterпозволяет предотвратить ||оценку оператора перед =в выражении...&&p=greater||(($1<$2))... (приоритет оператора!).

Альтернативой будет использование квадратных скобок (($1>$2))&&p=greaterи (($1<$2))&&p=less, но квадратные скобки создают внутреннюю область видимости для переменных, поэтому pостаются без изменений.


1
p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2
Цифровая травма

3

Машинный код IA-32 + linux, 107 байт

Hexdump кода:

60 89 e5 89 d0 e8 51 00 00 00 4c c6 04 24 20 38
d1 74 20 68 74 68 61 6e 4c c6 04 24 20 72 0d 68
61 74 65 72 68 20 67 72 65 44 eb 11 68 6c 65 73
73 eb 0a 68 6c 20 74 6f 68 65 71 75 61 68 20 69
73 20 88 c8 e8 12 00 00 00 89 ea 29 e2 89 e1 31
db 43 8d 43 03 cd 80 89 ec 61 c3 5b d4 0a 4c 04
30 88 04 24 c1 e8 08 75 f3 ff e3

Из-за аппаратных ограничений код работает с числами в диапазоне 0 ... 255.

Исходный код (может быть собран с GCC):

    .globl print_it
    .text
    .align 16
print_it:
    pushal;
    mov %esp, %ebp; // save esp (stack pointer)
    mov %edx, %eax; // put second number in al
    call prepend;   // convert al to string

    dec %esp;       // write ...
    movb $' ', (%esp); // ... a space
    cmp %dl, %cl;   // compare the numbers
    je equal;       // if equal, goto there

    push $0x6e616874; // write "than"
    dec %esp;       // write ...
    movb $' ', (%esp); // ... a space
    jb less;        // if below, goto there

greater:
    push $0x72657461; // write "ater"
    push $0x65726720; // write " gre"
    inc %esp;         // remove a space
    jmp finish;     // bypass the code for "less than"

less:
    push $0x7373656c; // write "less"
    jmp finish;     // bypass the code for "equal"

equal:
    push $0x6f74206c; // write "l to"
    push $0x61757165; // write "equa"

finish:
    push $0x20736920; // write " is "

    mov %cl, %al;   // put first number in al
    call prepend;   // convert al to string

    mov %ebp, %edx; // calculate the length ...
    sub %esp, %edx; // ... of the output message
    mov %esp, %ecx; // address of the message
    xor %ebx, %ebx; // set ebx to ...
    inc %ebx;       // ... 1 (i.e. stdout)
    lea 3(%ebx), %eax; // set eax=4 (syscall "write")
    int $0x80;      // do the system call
    mov %ebp, %esp; // restore the stack pointer
    popal;          // restore other registers
    ret;            // return

prepend:            // writes al converted to string
    pop %ebx;       // remove return address from the stack
appendloop:
    aam;            // calculate a digit in al, rest in ah
    dec %esp;
    add $'0', %al;  // convert the digit to ASCII
    mov %al, (%esp);// write the digit
    shr $8, %eax;   // replace al by ah; check if zero
    jnz appendloop; // nonzero? repeat
    jmp *%ebx;      // return

Это серьезное злоупотребление стеком! Код создает выходное сообщение в стеке с конца до начала. Чтобы записать 4 байта, он использует одну pushинструкцию. Для записи 1 байта используются две инструкции:

dec %esp
mov %al, (%esp);

К счастью, большинство записываемых фрагментов составляют 4 байта. Один из них («gre» в «больший») составляет 3 байта; это обрабатывается нажатием 4 байтов и последующим удалением одного:

inc %esp

Процедура, которая записывает числа в десятичной форме, использует aam инструкцию для деления axна 10несколько раз. Выгодно, что он вычисляет цифры справа налево!


Поскольку нужно написать два числа, в коде используется подпрограмма, которая вызывается дважды. Однако, поскольку подпрограмма записывает результаты в стек, она использует регистр для хранения адреса возврата.


C-код, который вызывает машинный код выше:

include <stdio.h>

void print_it(int, int) __attribute__((fastcall));

int main()
{
    print_it(90, 102);
    puts("");
    print_it(78, 0);
    puts("");
    print_it(222, 222);
    puts("");
    return 0;
}

Выход:

90 is less than 102
78 is greater than 0
222 is equal to 222

3

ShortScript , 98 байт

←Α
←Β
↑Γαis
↔α>β→γgreater thanβ
↔α<β→γless thanβ
↔α|β→γequal toβ

Этот ответ не является конкурирующим, поскольку после этого конкурса был опубликован ShortScript.


3

Фурье , 147 74 байта

Не конкурирует, потому что струнная печать новее этой задачи

I~AoI~B` is `<A{1}{`greater than`}A<B{1}{`less than`}A{B}{`equal to`}` `Bo

Попробуйте это на FourIDE!

Не знаю, почему я не разрешил печатать раньше ... Это делает код читабельным и отлично подходит для игры в гольф


Вы должны быть в состоянии сохранить, назначая общие буквы, такие как 101и 116переменные, верно? Я не уверен, как / если переменная область обрабатывается.
Geobits

@ Geobits В Фурье нет местных прицелов, так что да, я над этим поработаю
Beta Decay

@Geobits немного поиграл с помощью переменных
Beta Decay

2

C 155 136 127 83 байта

f(a,b){printf("%d is %s %d\n",a,a>b?"greater than":a<b?"less than":"equal to",b);}

5
Вы можете сделать это намного короче - переименовать argc и argv, определить a и b в одной строке, пропустить проверку argc и многое другое.
Угорен

1
Обратите внимание, что требование является либо полной программой, либо функцией. Функция была бы намного короче.
Угорен

@ugoren Я не был уверен, может ли это быть функцией, поэтому я решил написать полную программу. Я собираюсь рефакторинг это. Еще раз спасибо!
Морен

2

Haskell, 87 байт

Один байт короче, чем подход Отомо.

a?b=show a++" is "++["less than ","equal to ","greater than "]!!(1+signum(a-b))++show b

Хорошее решение. :)
Отомо

2

Луа, 118 байт

Я не вижу достаточно ответов Луа здесь, так что ...

function f(a,b)print(a>b and a.." is greater than "..b or a==b and a.." is equal to "..b or a.." is less than "..b)end

Ungolfed:

function f(a,b)
    print(a>b and a.." is greater than "..b or a==b and a.." is equal to "..b or a.." is less than "..b)
end

Добро пожаловать в PPCG!
Деннис

2

Python 2, 78 байт

Я люблю, как cmp()это действительно полезно, но это было удалено в Python 3 .

Использование анонимной функции:

lambda a,b:`a`+' is '+['equal to ','greater than ','less than '][cmp(a,b)]+`b`

Не используется функция (79 байт):

a,b=input();print a,'is %s'%['equal to','greater than','less than'][cmp(a,b)],b

Разве это не обман @ TheNumberOne ответа ?
бета-распад

@BetaDecay Нет. Они разные. Прочитайте мой комментарий к этому ответу.
mbomb007

2

JavaScript, 151 104 100 95 92 байта

a+=prompt()
b+=prompt()
alert(a+" is "+(a>b?"greater than ":a<b?"lesser than ":"equal to ")+b)

Мне удалось сократить с помощью edc65


Я новичок в JavaScript ...
Kritixi Lithos

Могу ли я спросить, что вы используете, чтобы найти свой счет?
Бета-распад

Не сломано (синтаксическая ошибка). Просто попробуйте перед публикацией
edc65

Есть ли ошибка сейчас?
Kritixi Lithos

1
а = выражение. Это инициализация. var aобъявляет переменную а. Вы должны использовать его в реальном коде по многим веским причинам. Но это необязательно в javascript и избегать var сохранения 4 символов
edc65

2

C # 6, 113 103 100 95 байт

void C(int a,int b){System.Console.Write($"{a} is {a-b:greater than;less than;equal to} {b}");}

Спасибо edc65 за сохранение 13 байтов и cell001uk за сохранение 5 байтов с использованием интерполированных строк C # 6 !


Сохранить 10 байтовvoid C(int a,int b){System.Console.Write("A is {0} B",a==b?"equal to":a>b?"greater than":"less than");}
edc65

@ edc65 Отлично, спасибо!
ProgramFOX

Я люблю форматирование C #:Write("{0} is {1:greater than;less than;equal to} {2}",a,a-b,b)
edc65

@ edc65 Воу, это круто! Благодарность! Также спасибо, что напомнили мне, что A и B должны быть заменены их значениями, я полностью упустил из виду, что> _>
ProgramFOX



1

Пиф, 57 55 53 байта

AQjd[G"is"@c"equal to
greater than
less than"b._-GHH)

Это в основном делает:

["less than", "greater than", "equal to"][sign_of(A-B)]

Сохранено 2 байта благодаря предложению @ AlexA. Использовать AвместоJ и Kи еще 2 байта, заменив весь беспорядок на более простое вычитание.

Живая демоверсия и тестовые случаи.

55-байтовая версия

AQjd[G"is"@c"less than
greater than
equal to"b+gGHqGHH)

Живая демоверсия и тестовые случаи.

57-байтовая версия:

jd[JhQ"is"@c"less than
greater than
equal to"b+gJKeQqJKK)

Живая демоверсия и тестовые случаи.


На один байт короче:AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
Алекс А.

@AlexA. Я просто использовал предложение Aвместо Jи K, что сэкономило 2 байта.
kirbyfan64sos


1

SWI-Пролог, 94 байта

a(A,B):-(((A>B,C=greater;A<B,C=less),D=than);C=equal,D=to),writef("%t is %t %t %t",[A,C,D,B]).

1

Swift, 105 92 байта

func c(a:Int, b:Int){println("A is",(a==b ?"equal to":(a<b ?"less":"greater")," than"),"B")}

еще короче с Swift 2.0 ( 103 90 байт)

func c(a:Int, b:Int){print("A is",(a==b ?"equal to":(a<b ?"less":"greater")," than"),"B")}

1

Обработка, 92 байта

void c(int a,int b){print(a+" is "+(a>b?"greater than ":a<b?"lesser than ":"equal to ")+b);}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.