Tantangan
Diberi dua bilangan bulat A
dan B
sebagai input, Anda harus menulis sebuah program yang menampilkan apakah A>B
, A==B
atau A<B
.
Bilangan bulat akan berada dalam kisaran wajar yang didukung oleh bahasa Anda yang mencakup setidaknya 256 nilai.
Program Anda dapat berupa program lengkap atau fungsi, mengambil input melalui STDIN atau argumen fungsi.
Keluaran
Jika A>B
output
A is greater than B
Jika A==B
output
A is equal to B
Jika A<B
output
A is less than B
Di mana Anda mengganti A
dan B
untuk nilai integernya.
Kemenangan
Program terpendek dalam byte menang.
Papan peringkat
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>
Jawaban:
CJam, 47
Cobalah online
Penjelasan:
sumber
[A B]
dan menghilangkan]
dari kode Anda.~_~
...Python 2,
959476 byteInput harus dipisahkan koma.
sumber
cmp(A,B)
bisa dan tidak? :)Labyrinth ,
180152149 bytesSunting: Berhasil mencukur 3 byte dengan menggunakan kembali
10
antara101
,103
dan108
(kode karaktere
,g
danl
). Penjelasan di bawah ini tidak mencerminkan hal ini, tetapi itu bukan perubahan besar.Penjelasan
Tidak banyak yang bisa kita lakukan dengan cara menghemat byte untuk mencetak string, itu hanya akan menjadi bagian linear yang panjang. Jadi tantangan utama dalam bermain golf adalah menghindari ruang putih yang tidak perlu dalam jumlah besar. Itu berarti kita ingin bagian-bagian linear "memancar keluar" dari kolom paling kiri Kami juga dapat memperoleh lebih banyak penghematan dengan menggunakan kembali kode yang dicetak
than B
. Jadi mari kita lihat aliran kontrol di sini:Program dimulai pada perintah rotasi grid
<
. Ini menggeser baris saat ini secara siklis ke kiri dengan IP di atasnya, jadi kami mendapatkan ini:Sekarang IP berada di sel yang terisolasi, sehingga menjalankan perintah yang sama berulang-ulang saat
<
bergerak lebih jauh ke kiri sampai ...Pada titik ini, IP memiliki tempat untuk pergi dan mengeksekusi bagian linier pertama (baris kedua) dari kanan ke kiri. Apa yang dilakukannya adalah membaca
A
, menyalin, mencetak. Konsumsi karakter pembatas antara angka, cetakis
(dan spasi). Kemudian bacaB
, salin dan kurangiA
dari itu di-
.Pada titik ini kita menekan pertama "garpu di jalan". Jika perbedaan menghasilkan
0
, IP terus bergerak lurus ke depan menuju cabang bawah. Cabang itu hanya mencetakequal to
laluB
.Jika tidak, IP mengambil kiri menuju dua no-ops
""
. Lalu ada garpu lain. Jika perbedaannya negatif, IP mengambil kiri lagi menuju cabang atas yang panjang. Cabang itu hanya mencetakgreater than
laluB
.Jika perbedaannya positif, IP mengambil hak ke cabang bawah, yang dicetak
less
. Sekarang kami ingin menggunakan kembalithan
dari cabang lain. Tetapi pada saat yang sama kami tidak ingin menghubungkan dua cabang nanti, karena kami membutuhkan banyak ruang yang tidak perlu. Alih-alih, kami menggunakan beberapa no-op untuk menyelaraskan cabang bawah dengan tempatthan
dimulai pada cabang atas dan kemudian mulai memanipulasi sumber lagi dengan^
:Sekali lagi, ini mengisolasi IP, jadi
^
dieksekusi lagi dan kita dapatkanSekarang IP dapat terus bergerak ke kanan dan mencetak
than
danB
sesuai kebutuhan.sumber
JavaScript (ES6), 66 byte
Menentukan fungsi anonim. Tes dengan menambahkan
f=
sebelumnya, dan menyebutnya sepertialert(f(4, 5))
Sayangnya, tidak ada penghematan yang didapat dari pengulangan "selain".
sumber
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()
harus ditambahkan ke skor.alert()
sebagai bagian dari kode dan byte AndaJava,
114113 Bytes atau74 7267 jika kami menggunakan notasi lambdaTerima kasih kepada Kevin Cruijssen untuk solusi berbasis kari:
a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b
Solusi lama pra lambda
sebagai pengguna hjk artinya dalam komentar, jika kita menggunakan lambda kita dapat melakukan secara signifikan hingga 74 byte.
sumber
than
:)public
jika Anda mau. Saya sarankan membuat ini menjadi lambda. Anda dapat menghapus satu ruang sebelum{
.a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b
Ya, saya sadar sudah hampir dua tahun. ;) Dan Anda memang dapat menggunakanless
alih-alihsmaller
berdasarkan pada deskripsi tantangan, sebagaimana disebutkan oleh dua komentar di atas saya. Coba di sini untuk melihat bagaimana kari dilakukan.R, 80 byte
sumber
function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)
.Pyth,
5249 bytesumber
Julia,
6966 byteIni menggunakan interpolasi string untuk menanamkan
A
,B
dan terner dalam sebuah string tunggal.Disimpan 3 byte berkat Glen O.
sumber
Perl,
6463 byte62 byte + 1 byte untuk
-p
. Mengambil input dari STDIN, dengan dua angka dipisahkan oleh satu spasi:Bagaimana itu bekerja:
The
<=>
pengembalian Operator -1, 0, atau 1 tergantung pada apakah operan pertama adalah kurang dari, sama dengan, atau lebih besar dari yang kedua. Dengan mudah, Perl memungkinkan subskrip negatif dengan array dan irisan, di mana elemen terakhir berada di posisi -1, elemen kedua hingga terakhir berada di posisi -2, dan seterusnya.Dalam kode
kami menggunakan nilai balik
<=>
sebagai subskrip dalam daftar slice untuk mendapatkan string yang sesuai, di mana$`
nomor pertama dan$'
yang kedua.Untuk menghindari pengulangan
than
,x
digunakan sebagai pengganti dan diganti di substitusi kedua di akhir.Solusi alternatif, 63 byte
62 byte + 1 byte untuk
-p
. Mengambil input yang dipisahkan oleh ruang dari STDIN seperti solusi pertama.Bagaimana itu bekerja:
Solusi ini juga menggunakan irisan, tetapi mengambil keuntungan dari fakta bahwa tidak seperti irisan daftar, irisan array dapat diinterpolasi menjadi string (dan RHS substitusi). Ini memungkinkan kita menjatuhkan
/e
pengubah dan kutipan di operator substitusi.Trik sebenarnya ada di subscript slice:
Untuk nilai yang berbeda
<=>
, ini memberikan:Ketika sebuah array atau slice array diinterpolasi ke dalam string, elemen-elemen tersebut secara otomatis bergabung dengan
$"
(secara default, satu spasi).sumber
Mouse , 79 byte
Ketika string ditemui mereka segera ditulis ke STDOUT daripada diletakkan di tumpukan. Tumpukan hanya dapat berisi bilangan bulat.
Tidak Disatukan:
sumber
GolfScript, 61 byte
Mengharapkan 2 bilangan bulat di tumpukan. Cobalah online .
Bagaimana itu bekerja:
\.@.@
- A dan B sudah di stack, dan potongan kode ini membuat tumpukan terlihat seperti ini:ABBA
.\
menukar dua item teratas di tumpukan,.
menduplikasi item teratas, dan@
memutar 3 item teratas (1 2 3
->2 3 1
).Kemudian, tiga item didorong ke tumpukan:
=
tanda"equal to "
,, dan blok di antara{}
. Theif
pernyataan melakukan hal ini: jika argumen pertama bernilai true, itu mengeksekusi blok kode pertama (argumen kedua), jika tidak, blok kode kedua (argumen ketiga). Jadi jika A dan B sama, itu akan mendorong "sama dengan" pada tumpukan. Jika tidak sama, itu akan mengeksekusi kode antara blok. Perhatikan bahwa=
muncul dua item teratas dari tumpukan, jadi sekarang tumpukan itu terlihat sepertiAB
.Di dalam blok, Anda pertama kali melihat
.@.@
. Sebelum perintah ini, tumpukan terlihat sepertiAB
, dan setelah itu, tumpukan itu terlihat sepertiBAAB
. Perintahnya sama dengan yang disebutkan di atas.Lalu, ada
if
pernyataan lain . Kali ini, ia memeriksa apakah A> B, dan jika benar, ia mendorong "lebih besar" pada tumpukan. Selain itu, ia mendorong "kurang" pada tumpukan. Setelah mendorong salah satu dari dua, ini akan mendorong "daripada" pada tumpukan dan menyatukannya dengan string yang didorong sebelumnya.>
juga muncul dua item teratas dari tumpukan, jadi sekarang tumpukan terlihat sepertiBA"string"
.Tiga perintah berikutnya adalah:
" is "\+
." is "
mendorong string itu di tumpukan (tumpukan terlihat sepertiBA"string"" is "
),\
menukar dua item teratas (tumpukan terlihat sepertiBA" is ""string"
), dan+
menyatukan dua item teratas (tumpukan terlihat sepertiBA" is string"
).Perintah terakhir,
@
, berputar tiga item stack, sehingga stack sekarang terlihat seperti:A" is string"B
. GolfScript secara otomatis mencetak nilai-nilai stack pada STDOUT setelah program berhenti, jadi Anda mendapatkan output yang diinginkan.sumber
MATLAB, 105 byte
Menambahkan jeda baris sebelum sprintf, untuk memudahkan keterbacaan. Ia berfungsi baik dengan dan tanpa jeda baris ini, sehingga tidak termasuk dalam jumlah byte. Harus menekan enter di antara dua angka input.
sumber
sprintf
!Bash, 76
sumber
Fortran, 129
Aritmatika Fortran jika sempurna untuk tantangan ini
Uji: ideone
sumber
Bash,
9486 byte (disimpan delapan byte berkat Digital Trauma)Tes (di Linux):
Penggunaan
[ ]
afterp=greater
adalah untuk mencegah||
operator dari evaluasi sebelumnya=
dalam ekspresi...&&p=greater||(($1<$2))...
(operator diutamakan!).Alternatifnya adalah menggunakan tanda kurung di sekitar
(($1>$2))&&p=greater
dan(($1<$2))&&p=less
, tetapi tanda kurung membuat lingkup dalam untuk variabel, sehinggap
akan dibiarkan tidak berubah.sumber
p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2
Kode mesin IA-32 + linux, 107 byte
Hexdump kode:
Karena keterbatasan perangkat keras, kode ini berfungsi dengan angka dalam kisaran 0 ... 255.
Kode sumber (dapat dirakit dengan gcc):
Ini adalah beberapa penyalahgunaan tumpukan yang serius! Kode membangun pesan output di stack, dari ujung ke awal. Untuk menulis 4 byte, ia menggunakan
push
instruksi tunggal . Untuk menulis 1 byte, ia menggunakan dua instruksi:Untungnya, sebagian besar fragmen untuk ditulis adalah 4 byte. Salah satunya ("gre" dalam "great") adalah 3 byte; itu ditangani dengan mendorong 4 byte dan menghapus satu setelahnya:
Rutin yang menulis angka dalam bentuk desimal menggunakan
aam
instruksi untuk membagiax
dengan10
berulang kali. Sangat menguntungkan karena menghitung angka dari kanan ke kiri!Karena ada dua angka untuk ditulis, kode ini menggunakan subrutin, yang disebut dua kali. Namun, karena subrutin menulis hasilnya di stack, ia menggunakan register untuk menyimpan alamat pengirim.
Kode C yang memanggil kode mesin di atas:
Keluaran:
sumber
ShortScript , 98 byte
Jawaban ini tidak bersaing, karena ShortScript diterbitkan setelah tantangan ini.
sumber
Fourier ,
14774 byteNon-bersaing karena pencetakan string lebih baru dari tantangan ini
Cobalah di FourIDE!
Entah mengapa saya tidak mengizinkan pencetakan sebelumnya ... Itu membuat kode dapat dibaca dan bagus untuk bermain golf
sumber
101
dan116
ke variabel, bukan? Saya tidak yakin bagaimana / jika ruang lingkup variabel ditangani.C,
15513612783 bytesumber
Haskell, 87 byte
Satu byte lebih pendek dari pendekatan Otomo.
sumber
Lua, 118 byte
Saya tidak melihat cukup jawaban Lua di sini jadi ...
Tidak Disatukan:
sumber
Python 2, 78 byte
Saya suka bagaimana
cmp()
ini benar-benar berguna, tetapi dihapus dengan Python 3 .Menggunakan fungsi anonim:
Tidak menggunakan fungsi (79 byte):
sumber
JavaScript,
151 104 100 9592 byteSaya berhasil mempersingkat dengan bantuan edc65
sumber
var a
mendeklarasikan variabel a. Anda harus menggunakannya dalam kode nyata untuk banyak alasan bagus. Tapi itu opsional dalam javascript dan menghindarivar
Anda menyimpan 4 karakterC # 6,
11310310095 byteTerima kasih kepada edc65 untuk menghemat 13 byte dan untuk cell001uk untuk menghemat 5 byte menggunakan string interpolasi C # 6 !
sumber
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 byte
Ruang putih trailing dan sebelumnya sangat penting!
Demo langsung dan semua kasus uji.
sumber
Pyth,
575553 byteIni pada dasarnya tidak:
Disimpan 2 byte berkat saran @ AlexA untuk menggunakan
A
alih-alihJ
danK
dan 2 byte lainnya dengan mengganti seluruh kekacauan penambahan dengan pengurangan yang lebih sederhana.Demo langsung dan uji kasus.
Versi 55 byte
Demo langsung dan uji kasus.
Versi 57 byte:
Demo langsung dan uji kasus.
sumber
AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
A
bukannyaJ
danK
, yang menyelamatkan 2 byte.O, 67 byte
Demo langsung.
sumber
SWI-Prolog, 94 byte
sumber
Swift,
10592 bytebahkan lebih pendek dengan Swift 2.0 (
10390 byte)sumber
Memproses, 92 byte
sumber