두 숫자 비교


25

도전

두 정수를 감안 A하고 B입력으로, 당신은 경우에 출력하는 프로그램을 작성해야합니다 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그 정수 값.

승리

바이트 단위의 최단 프로그램이 이깁니다.

리더 보드

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>


오늘 프로그래밍 퍼즐 & 코드 골프 : 삼진 진술!
Trebuchette

함수가 솔루션을 인쇄하는 대신 솔루션을 반환 할 수 있습니까?
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보다 1 바이트 짧아 보입니다 :(
orlp

여러 입력을 읽는 기본값에 따르면 입력을 코드에서 읽 [A B]거나 제거 할 ]수 있습니다.
Dennis

@ 데니스 감사, 나는 그것에 대해 생각했지만 확실하지 않았다.
aditsu

@orlp 2 바이트 지금, 그리고 미소 짓는 이유입니다, 눈살을 찌푸 리지
말고

코드가 실제로 형태의 웃는 포함되어 있음을 적절한 ~_~...
대럴 호프만에게

19

파이썬 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이면 0이고 x> y이면 엄격하게 양수입니다." cPython 2.7.6에서 정수 값은 각각 -1, 0, 1입니다. 함수의 정의가 이것을 지시하지 않기 때문에, pedant는 "Python 2"가 아닌 정확한 파이썬 구현과 버전이 여기에 주어 졌다고 주장 할 수 있지만 대부분의 구현은 여기에서 동일하게 작동 할 것으로 기대합니다.
ymbirtt

난 그냥 당신이 내가 가지고 올 답변을 복사하지 않았 음을 알고 싶어 . 나는 지금 그들이 얼마나 가까이 있는지 보았다. 내가 글을 쓸 때 스 니펫을 실행하는 데 문제가 있었고 이미 파이썬 답변이 없었 음을 맹세 할 수있었습니다 (2 페이지를 놓쳐 야합니다). 나는 이상하게도 완전히 독립적으로 썼습니다.
mbomb007

@ SP3000 나는 그것을 확인하고, 파이썬 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, gl). 아래 설명은이를 반영하지 않지만 실질적인 변화는 아닙니다.

설명

문자열을 인쇄하기 위해 바이트를 절약하는 방법으로 할 수있는 일은 많지 않습니다. 긴 선형 섹션 일뿐입니다. 따라서 골프의 주된 과제는 불필요한 불필요한 공백을 피하는 것입니다. 즉, 우리는 선형 부분이 가장 왼쪽 열에서 "방사"되기를 원합니다. 또한 인쇄하는 코드를 재사용함으로써 더 많은 비용을 절약 할 수 있습니다 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가 두 no-ops쪽으로 좌회전합니다 "". 그리고 또 다른 포크가 있습니다. 차이가 음수 인 경우 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

자바 스크립트 (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 10

@BetaDecay 실제로 텍스트를 출력하지 않으면 이것이 올바른 대답입니까? 또는 7을 alert()점수에 추가해야합니다.
curiousdannii

@curiousdannii 아, 그렇습니다. alert()코드와 바이트 수의 일부로 계산하지 않으면 유효하지 않습니다.
Beta Decay

@BetaDecay 아, 나는 대답이 방금 반환되는 대신 인쇄 될 것으로 예상되지 않았다. REPL 환경이 정상이라고 가정하면 FireFox 콘솔에서 무료로 실행할 수 있습니다. 그렇지 않으면 최대 73 일 것입니다.
jrich

8

자바 114 113 바이트 74 72 67 사용한 경우 우리 람다 표기법

커리 기반 솔루션에 대한 Kevin Cruijssen에게 감사드립니다.

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
공식적인 질문 사양은 "작은"이 아니라 "작은"이라고 말하는 것입니다. 당신도 그렇게하고 3 바이트를 잃을 수도 있습니다! Java를 모르지만 람다 코드가 텍스트를 인쇄하거나 반환합니까? 인쇄되지 않으면 올바른 대답이 아닐 수 있습니다.
curiousdannii

2
@hjk 커링을 사용한 짧은 람다 : a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b예, 거의 2 년이 걸렸습니다. ;) 그리고 위의 두 의견에서 언급했듯이 도전 설명 lesssmaller기반 으로하는 대신 실제로 사용할 수 있습니다 . 카레가 어떻게 이루어지는 지 보려면 여기를 시도하십시오.
Kevin Cruijssen

7

R, 80 바이트

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

1
위의 사양을 따르기 위해 "작게"를 "작게"로 변경하여 3 바이트를 절약 할 수 있습니다. 삼항 연산자를 사용하지 않는 경우 +1
bmarks

아 고마워, 나는 그것을 잡지 않았다! 결정된!
flodel

@bmarks R에는 삼항 연산자가 없습니다. : P
Alex A.

@AlexA. 알아. 나는 목록과 부호 기능을 사용하는 것이 지금까지 다른 답변과는 매우 다르다는 것을 의미했습니다 (대부분 삼항 연산자 또는 유사한 것을 사용했습니다).
bmarks

권리. 비교를 위해 if / else를 사용한 첫 번째 시도는 83 : function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)이었습니다.
flodel

7

Pyth, 52 49 바이트

jdm@cd)._-FQcj"
is
equal greater less
to than
"Qb

7

줄리아, 69 66 바이트

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

이것은 삽입하는 문자열 보간을 사용하여 A, B하나의 문자열 내부 및 삼원.

Glen O 덕분에 3 바이트 절약


6

펄, 64 63 바이트

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

용 1 바이트 + 62 바이트 -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] /

용 1 바이트 + 62 바이트 -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에 즉시 기록됩니다. 스택은 정수만 포함 할 수 있습니다.

언 골프 드 :

? 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 개의 정수가 필요합니다. 온라인으로 사용해보십시오 .

작동 방식 :

  • \.@.@-A와 B는 이미 스택에 있으며이 코드 조각은 스택을 다음과 같이 만듭니다 ABBA. \스택에서 맨 위 두 항목을 교체하고 맨 위 항목을 .복제하고 맨 위 항목 @3 개를 회전시킵니다 ( 1 2 3-> 2 3 1).

  • 그런 다음 =기호 "equal to ", 및 블록 사이의 세 항목이 스택으로 푸시됩니다 {}. if문은 다음을 수행 첫번째 인수가 참으로 평가되면, 그 첫 번째 코드 블록 (두 번째 인자)을 실행하고, 그렇지 않으면 두 번째 코드 블록 (세 번째 인수). 따라서 A와 B가 같으면 스택에서 "같음"을 누릅니다. 동일하지 않으면 블록 사이의 코드를 실행합니다. 참고 =이제 스택 외모와 같은 스택에서 두 개의 상위 항목을, 아빠 AB.

  • 블록 안에는 먼저을 참조하십시오 .@.@. 이러한 명령을 실행하기 전에 AB스택은 다음과 같고 스택은 다음과 같습니다 BAAB. 명령은 위에서 언급 한 것과 유사합니다.

  • 그리고 또 다른 if진술이 있습니다. 이번에는 A> B인지 확인하고, 참이면 스택에서 "더 크게"푸시합니다. 그렇지 않으면 스택에서 "덜"밀립니다. 이 두 가지 중 하나를 누르면 스택에서 "보다"를 누르고 이전에 푸시 한 문자열과 연결합니다. >또한 스택의 최상위 두 항목을 표시하므로 스택은 다음과 같습니다 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 앞에 줄 바꿈을 추가했습니다. 이 줄 바꿈 유무에 관계없이 작동하므로 바이트 수에 포함되지 않습니다. 두 입력 숫자 사이에 enter를 쳐야합니다.


2
매우 영리한 사용 sprintf!
Luis Mendo


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 덕분에 8 바이트 절약)

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
Digital Trauma

3

IA-32 머신 코드 + 리눅스, 107 바이트

코드의 16 진 덤프 :

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 바이트를 푸시하고 나중에 1 바이트를 제거하여 처리됩니다.

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에서 사용해보십시오!

Dunno 내가 전에 인쇄를 허용하지 않은 이유는 ... 코드를 읽을 수 있고 골프에 적합합니다.


변수 101와 같은 일반적인 문자를 할당하여 저장할 수 있어야합니다 116. 변수 범위가 어떻게 / if 처리되는지 잘 모르겠습니다.
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 검사를 건너 뛰는 등의 작업을 훨씬 짧게 만들 수 있습니다.
ugoren

1
요구 사항은 완전한 프로그램 또는 기능입니다. 기능이 훨씬 짧습니다.
ugoren

@ugoren 함수가 될 수 있는지 확실하지 않았으므로 완전한 프로그램을 작성하기로 결정했습니다. 리팩터링하겠습니다. 다시 감사합니다!
Mauren

2

하스켈, 87 바이트

Otomo의 접근 방식보다 1 바이트 짧습니다.

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

좋은 해결책. :)
Otomo

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

언 골프 드 :

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

파이썬 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


@BetaDecay 아니. 그들은 달라요. 그 답변에 대한 내 의견을 읽으십시오.
mbomb007

2

자바 스크립트, 151104100 9592 바이트

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

나는 edc65의 도움으로 단축 할 수 있었다


나는 JavaScript 초보자입니다 ...
Kritixi Lithos

점수를 찾기 위해 무엇을 사용하고 있는지 물어봐도 될까요?
Beta Decay

손상되지 않았습니다 (구문 오류). 게시하기 전에 시도
edc65

지금 오류가 있습니까?
Kritixi Lithos

1
a = 표현. 그것은 초기화입니다. var a변수를 선언하고 있습니다. 당신 그것을 사용하는 진짜 좋은 많은 이유에 대한 코드. 그러나 그것은 자바 스크립트에서 선택 사항이며 var 4 문자를 절약 하지
마십시오

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}");}

C # 6의 보간 된 문자열을 사용하여 13 바이트를 저장하는 edc65와 5 바이트를 저장하는 cell001uk 덕분에 !


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 9

@ edc65 감사합니다!
ProgramFOX

나는 C # 형식을 좋아한다 :Write("{0} is {1:greater than;less than;equal to} {2}",a,a-b,b)
edc65

@ edc65 Woah, 대단해! 감사! 또한 A와 B가 그 값으로 대체되어야한다는 것을 상기시켜 주셔서 감사합니다.> _>
ProgramFOX



1

Pyth, 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는 사용 @ 알렉사.의 제안에 감사 바이트 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)

라이브 데모 및 테스트 사례.


1 바이트 더 짧음 :AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
Alex A.

@AlexA. 방금 and A대신 제안을 사용하여 2 바이트를 절약했습니다. JK
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

스위프트, 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")}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.