เปรียบเทียบตัวเลขสองตัว


25

ท้าทาย

ได้รับสองจำนวนเต็มAและBเป็น input คุณต้องเขียนโปรแกรมที่เอาท์พุทถ้าA>B, หรือA==BA<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>


วันนี้เกี่ยวกับการเขียนโปรแกรม Puzzles & Code Golf: ประโยคที่สาม!
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

ตามค่าเริ่มต้นสำหรับการอ่านอินพุตหลาย ๆ ส่วนคุณสามารถอ่านอินพุต[A B]และกำจัด]จากโค้ดของคุณได้
เดนนิส

@Dennis ขอบคุณฉันคิดเกี่ยวกับมัน แต่ไม่แน่ใจ
aditsu

@orlp 2 ไบต์ในขณะนี้และนั่นคือเหตุผลที่จะยิ้มไม่ได้ที่จะขมวด :)
aditsu

ที่เหมาะสมที่รหัสของคุณจริงมีรอยยิ้มในรูปแบบของ~_~...
Darrel ฮอฟแมน

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 toB

มิฉะนั้น IP จะใช้เวลาไปทางซ้ายสองทาง ""เตะซ้ายต่อทั้งสองไม่มี จากนั้นก็มีทางแยกอื่น หากความแตกต่างเป็นลบ IP จะเหลืออีกอันหนึ่งไว้บนกิ่งยาวส่วนบน สาขาที่เพียงแค่พิมพ์แล้วgreater thanB

หากความแตกต่างเป็นค่าบวก IP จะนำไปสู่สาขาที่ต่ำกว่าซึ่งจะพิมพ์lessออกมา ตอนนี้เราต้องการนำกลับมาใช้thanจากสาขาอื่น แต่ในเวลาเดียวกันเราไม่ต้องการเชื่อมต่อทั้งสองสาขาในภายหลังเพราะเราต้องการพื้นที่ที่ไม่จำเป็นทั้งหมด แต่เราใช้ไม่กี่ 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 ดีไม่มี แม้แต่คำตอบของจาวาก็คือความยาวเท่ากันซ้ำไปซ้ำ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 นี่เป็นคำตอบที่ถูกต้องหรือไม่หากไม่ได้ส่งออกข้อความจริง ๆ ? หรืออีก 7 สำหรับalert()ควรเพิ่มคะแนนสำหรับคะแนน
อยากรู้อยากเห็น dannii

@curiousdannii โอ้ฉันเห็นแล้วใช่ว่ามันไม่ถูกต้องถ้าคุณไม่นับ alert()เป็นส่วนหนึ่งของรหัสและจำนวนไบต์ของคุณ
Beta Decay

@BetaDecay โอ้ฉันไม่ทราบว่าคำตอบนั้นคาดว่าจะถูกพิมพ์แทนที่จะกลับมา ถ้าสมมติว่าสภาพแวดล้อม REPL เป็น ok นี้อาจจะทำงานในคอนโซล FireFox ไม่มีค่าใช้จ่ายอย่างอื่นผมคิดว่ามันขึ้นอยู่กับ 73
jrich

8

Java, 114 113 Bytes หรือ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
ข้อมูลจำเพาะคำถามอย่างเป็นทางการคือการพูดว่า "น้อยลง" ไม่ใช่ "เล็กกว่า" คุณอาจทำเช่นนั้นและเสียสามไบต์! ฉันไม่รู้ Java แต่รหัสแลมบ์ดาจะพิมพ์ข้อความหรือส่งคืนได้หรือไม่ หากไม่พิมพ์ออกมาอาจเป็นคำตอบที่ไม่ถูกต้อง
อยากรู้อยากเห็น dannii

2
@hjk แลมบ์ดาที่สั้นลงโดยใช้การแกง: a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+bใช่ฉันรู้ว่ามันเกือบสองปีแล้ว ;) และคุณสามารถใช้lessแทนsmallerคำอธิบายการท้าทายตามที่กล่าวถึงโดยทั้งสองความคิดเห็นด้านบนฉัน ลองที่นี่เพื่อดูวิธีการทำแกงกะหรี่
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

ขวา. สำหรับการเปรียบเทียบความพยายามครั้งแรกของฉันโดยใช้หาก / อื่นเป็น function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)83:
flodel


7

จูเลีย69 69ไบต์

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

สิ่งนี้ใช้การแก้ไขสตริงเพื่อฝัง A , Bและ ternary ภายในสายเดียว

บันทึกแล้ว 3 ไบต์ขอบคุณ Glen O.


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 จำนวนในสแต็ก ลองออนไลน์ลองมันออนไลน์

มันทำงานอย่างไร:

  • \.@.@- A และ B ABBAที่มีอยู่แล้วในกองและชิ้นรหัสนี้ทำให้มองสแต็คเช่นนี้ \สลับสองไอเท็มยอดนิยมบนสแต็ก.ทำซ้ำไอเท็มยอดนิยมและ@หมุน 3 รายการยอดนิยม ( 1 2 3-> 2 3 1)

  • จากนั้นทั้งสามรายการจะถูกผลักไปกองที่: =เข้าสู่ระบบและบล็อกระหว่าง"equal to " คำสั่งไม่นี้: ถ้าประเมินอาร์กิวเมนต์แรกจริงมันรันรหัสบล็อกแรก (อาร์กิวเมนต์ที่สอง) มิฉะนั้นรหัสบล็อกที่สอง (อาร์กิวเมนต์ที่สาม) ดังนั้นถ้า A และ B เท่ากันมันจะผลัก "เท่ากับ" บนสแต็ก หากพวกเขาไม่เท่ากันมันจะรันโค้ดระหว่างบล็อก หมายเหตุที่ปรากฏสองรายการชั้นนำจากกองดังนั้นตอนนี้กองดูเหมือน{}if=AB

  • .@.@ภายในบล็อกที่คุณเห็นเป็นครั้งแรก ก่อนคำสั่งเหล่านี้สแต็กจะมีลักษณะABและหลังจากนั้นสแต็กจะมีลักษณะเหมือนBAABกัน คำสั่งนั้นคล้ายกับคำสั่งข้างต้น

  • จากนั้นก็มีifคำสั่งอื่น คราวนี้มันจะตรวจสอบว่า A> B และถ้าเป็นจริงมันจะผลัก "มากกว่า" บนสแต็ก มิฉะนั้นมันจะผลัก "น้อย" บนสแต็ก หลังจากกดหนึ่งในสองรายการนี้จะผลัก "กว่า" บนสแต็กและต่อกับสตริงที่ผลักก่อนหน้า นอกจากนี้ยังปรากฏสองรายการด้านบนของสแต็คดังนั้นตอนนี้กองดูเหมือน>BA"string"

  • " is "\+สามคำสั่งต่อไปนี้คือ: " is "ดันสตริงนั้นบนสแต็ก (สแต็กดูเหมือนBA"string"" is ") \สลับสองรายการยอดนิยม (สแต็กดูเหมือนBA" is ""string") และ+เชื่อมต่อสองรายการยอดนิยม (สแต็กดูเหมือนBA" is string")

  • คำสั่งสุดท้าย, หมุนสามรายการสแต็คเพื่อให้สแต็คในขณะนี้ดูเหมือนว่า:@ A" is string"BGolfScript จะพิมพ์ค่าสแต็กโดยอัตโนมัติบน 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

Fortran, 129

เลขคณิต Fortran ถ้าเหมาะสำหรับความท้าทายนี้

ทดสอบ: ideone

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

การใช้[ ]หลัง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 ไบต์

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!

Dunno ทำไมฉันไม่อนุญาตให้พิมพ์มาก่อน ... มันทำให้โค้ดอ่านได้และยอดเยี่ยมสำหรับการเล่นกอล์ฟ


คุณควรจะสามารถประหยัดได้โดยการกำหนดตัวอักษรทั่วไปเช่น101และ116ให้กับตัวแปรใช่ไหม? ฉันไม่แน่ใจว่าจัดการตัวแปรขอบเขตได้อย่างไร
Geobits

@Geobits ไม่มีขอบเขตท้องถิ่นในฟูริเยร์ดังนั้นใช่ฉันจะทำงานกับมัน
Beta Decay

@Geobits Golfed it a bit more using variables
Beta Decay

2

C, 155 136 127 83 bytes

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

5
You can make this much shorter - rename argc and argv, define both a and b in one line, skip the argc check, and more.
ugoren

1
Note that the requirement is either a complete program or a function. A function would be much shorter.
ugoren

@ugoren I was not sure whether it could be a function, so I decided to write a complete program. I'm gonna refactor it. Thank you again!
Mauren

2

Haskell, 87 bytes

One byte shorter than Otomo's approach.

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

Nice solution. :)
Otomo

2

Lua, 118 bytes

I don't see enough Lua answers here so...

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

Welcome to PPCG!
Dennis


2

JavaScript, 151 104 100 95 92 bytes

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

I managed to shorten with help of edc65


I am a JavaScript newbie...
Kritixi Lithos

May I ask what you are using to find your score?
Beta Decay

Not it's broken (syntax error). Just try before posting
edc65

Is there an error now?
Kritixi Lithos

1
a = expression. That is an initialisation. var a is declaring the variable a. You have to use it in real code for a lot of good reasons. But it's optional in javascript and avoiding var you save 4 charactes
edc65

2

C# 6, 113 103 100 95 bytes

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

Thanks to edc65 for saving 13 bytes and to cell001uk for saving 5 bytes using C# 6's interpolated strings!


Save 10 bytes 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 Nice, thanks!
ProgramFOX

I love C# formatting: Write("{0} is {1:greater than;less than;equal to} {2}",a,a-b,b)
edc65

@edc65 Woah, that's awesome! Thanks! Also thanks for reminding me that A and B have to be replaced by their values, I totally overlooked that >_>
ProgramFOX



1

Pyth, 57 55 53 bytes

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

This basically does:

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

Saved 2 bytes thanks to @AlexA.'s suggestion of using A instead of J and K and another 2 bytes by replacing the whole addition mess with a simpler subtraction.

Live demo and test cases.

55-byte version

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

Live demo and test cases.

57-byte version:

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

Live demo and test cases.


One byte shorter: AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
Alex A.

@AlexA. I just used the suggestion of A instead of J and K, which saved 2 bytes.
kirbyfan64sos



1

Swift, 105 92 byte

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

even shorter with Swift 2.0 (103 90 byte)

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.