Défi
Étant donné deux entiers A
et B
en entrée, vous devez écrire un programme qui génère si A>B
, A==B
ou A<B
.
Les entiers seront dans toute plage raisonnable prise en charge par votre langue qui comprend au moins 256 valeurs.
Votre programme peut être soit un programme complet soit une fonction, prenant des entrées via STDIN ou des arguments de fonction.
Les sorties
Si A>B
sortie
A is greater than B
Si A==B
sortie
A is equal to B
Si A<B
sortie
A is less than B
Où vous remplacez A
et B
pour leurs valeurs entières.
Gagnant
Le programme le plus court en octets gagne.
Classement
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>
Réponses:
CJam, 47
Essayez-le en ligne
Explication:
la source
[A B]
et éliminer le]
de votre code.~_~
...Python 2,
959476 octetsL'entrée doit être séparée par des virgules.
la source
cmp(A,B)
est et ce qui fait? :)Labyrinthe ,
180152149 octetsEdit: Géré pour raser 3 octets en réutilisant
10
entre101
,103
et108
(les codes de caractères dee
,g
etl
). L'explication ci-dessous ne reflète pas cela, mais ce n'est pas un changement substantiel.Explication
Il n'y a pas grand-chose que nous puissions faire pour économiser des octets pour l'impression des chaînes, ce ne seront que de longues sections linéaires. Le principal défi du golf est donc d'éviter de grandes quantités d'espaces blancs inutiles. Cela signifie que nous voulons que les parties linéaires "rayonnent" à partir de la colonne la plus à gauche. Nous pouvons également réaliser des économies supplémentaires en réutilisant le code qui imprime
than B
. Regardons donc le flux de contrôle ici:Le programme démarre sur une commande de rotation de grille
<
. Cela déplace la ligne actuelle de manière cyclique vers la gauche avec l'IP dessus, donc nous obtenons ceci:Maintenant, l'IP est sur une cellule isolée, il exécute donc la même commande encore et encore pendant que le
<
voyage continue vers la gauche jusqu'à ...À ce stade, l'IP a quelque part où aller et exécute la première section linéaire (la deuxième ligne) de droite à gauche. Ce qu'il fait, c'est lire
A
, copier, imprimer. Consommez le caractère délimitant entre les nombres, les caractères imprimésis
(et les espaces). Puis lireB
, copiez-le et soustrayez-A
le-
.À ce stade, nous avons frappé la première "bifurcation sur la route". Si la différence s'est produite
0
, l'IP continue d'avancer tout droit vers la branche inférieure. Cette branche imprime simplementequal to
et ensuiteB
.Sinon, l'IP prend à gauche vers les deux no-ops
""
. Ensuite, il y a une autre fourchette. Si la différence était négative, l'IP prend une autre à gauche vers la longue branche supérieure. Cette branche s'imprime simplementgreater than
et ensuiteB
.Si la différence était positive, l'IP prend à droite sur la branche inférieure, qui s'imprime
less
. Maintenant, nous voulons réutiliser lethan
de l'autre branche. Mais en même temps, nous ne voulons pas connecter les deux branches plus tard, car nous aurions besoin de tout un tas d'espaces inutiles. Au lieu de cela, nous utilisons quelques no-ops pour aligner la branche inférieure avec l'endroit oùthan
commence la branche supérieure, puis recommençons à manipuler la source avec^
:Encore une fois, cela isole l'IP, donc
^
est à nouveau exécuté et nous obtenonsMaintenant, l'IP peut continuer à se déplacer vers la droite et imprimer
than
etB
selon les besoins.la source
JavaScript (ES6), 66 octets
Définit une fonction anonyme. Testez en ajoutant
f=
avant, et appelez-le commealert(f(4, 5))
Pas d'économies à tirer du "que" répétitif, malheureusement.
la source
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()
devraient être ajoutés au score.alert()
dans votre code et le nombre d'octetsJava,
114113 octets ou74 7267 si nous avons utilisé la notation lambdaMerci à Kevin Cruijssen pour la solution basée sur le curry:
a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b
Ancienne solution pré lambda
en tant que commentaire de l'utilisateur hjk dans le commentaire, si nous avons utilisé lambda, nous pouvons le faire de manière significative jusqu'à 74 octets.
la source
than
:)public
si vous le souhaitez. Je suggérerais d'en faire un lambda. Vous pouvez supprimer un espace avant le{
.a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b
Oui, je sais que cela fait presque deux ans. ;) Et vous pouvez en effet utiliserless
au lieu de voussmaller
baser sur la description du challenge, comme mentionné par les deux commentaires ci-dessus. Essayez-le ici pour voir comment se fait le curry.R, 80 octets
la source
function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)
.Pyth,
5249 octetsla source
Julia,
6966 octetsCela utilise l'interpolation de chaîne pour incorporer
A
,B
et le ternaire à l'intérieur d'une seule chaîne.Enregistré 3 octets grâce à Glen O.
la source
Perl,
6463 octets62 octets + 1 octet pour
-p
. Prend l'entrée de STDIN, avec les deux nombres séparés par un seul espace:Comment ça marche:
le
<=>
opérateur renvoie -1, 0 ou 1 selon que le premier opérande est inférieur, égal ou supérieur au second. De manière pratique, Perl autorise les indices négatifs avec des tableaux et des tranches, où le dernier élément est à la position -1, l'avant-dernier élément est à la position -2, etc.Dans le code
nous utilisons la valeur de retour de
<=>
comme indice dans une tranche de liste pour obtenir la chaîne correspondante, où$`
est le premier nombre et$'
le second.Pour éviter de répéter
than
,x
est utilisé comme espace réservé et remplacé dans une deuxième substitution à la fin.Solution alternative, 63 octets
62 octets + 1 octet pour
-p
. Prend l'entrée séparée par l'espace de STDIN comme la première solution.Comment ça marche:
Cette solution utilise également une tranche, mais tire parti du fait que contrairement aux tranches de liste, les tranches de tableau peuvent être interpolées en chaînes (et le RHS des substitutions). Cela nous permet de supprimer le
/e
modificateur et les guillemets dans l'opérateur de substitution.Le vrai truc est dans l'indice de tranche:
Pour les différentes valeurs de
<=>
, cela donne:Lorsqu'un tableau ou une tranche de tableau est interpolé dans une chaîne, les éléments sont automatiquement joints par
$"
(par défaut, un seul espace).la source
Souris , 79 octets
Lorsque des chaînes sont rencontrées, elles sont immédiatement écrites dans STDOUT plutôt que d'être placées sur la pile. La pile ne peut contenir que des entiers.
Non golfé:
la source
GolfScript, 61 octets
Attend 2 entiers sur la pile. Essayez-le en ligne .
Comment ça marche:
\.@.@
- A et B sont déjà sur la pile, et ce morceau de code rend le regard de la pile comme ceci:ABBA
.\
échange les deux éléments supérieurs de la pile,.
duplique l'élément supérieur et@
fait pivoter les 3 éléments supérieurs (1 2 3
->2 3 1
).Ensuite, trois éléments sont poussés dans la pile: le
=
signe"equal to "
, et le bloc entre les deux{}
. L'if
instruction fait ceci: si le premier argument est évalué à vrai, il exécute le premier bloc de code (le deuxième argument), sinon, le deuxième bloc de code (le troisième argument). Donc, si A et B sont égaux, cela poussera "égal à" sur la pile. S'ils ne sont pas égaux, il exécutera le code entre le bloc. Notez que=
les deux éléments supérieurs sortent de la pile, alors maintenant la pile ressembleAB
.À l'intérieur du bloc, vous voyez d'abord
.@.@
. Avant ces commandes, la pile ressembleAB
, et après, la pile ressembleBAAB
. Les commandes sont similaires à celles mentionnées ci-dessus.Ensuite, il y a une autre
if
déclaration. Cette fois, il vérifie si A> B, et si c'est vrai, il pousse "plus" sur la pile. Sinon, il pousse "moins" sur la pile. Après avoir poussé l'un de ces deux, il poussera "que" sur la pile et le concaténera avec la chaîne poussée précédente.>
fait également apparaître les deux éléments supérieurs de la pile, alors maintenant, la pile ressembleBA"string"
.Les trois prochaines commandes sont:
" is "\+
." is "
pousse cette chaîne sur la pile (la pile ressembleBA"string"" is "
),\
échange les deux premiers éléments (la pile ressembleBA" is ""string"
) et+
concatène les deux premiers éléments (la pile ressembleBA" is string"
).La dernière commande,
@
, tourne les trois éléments de la pile, de sorte que la pile ressemble maintenant à :A" is string"B
. GolfScript imprime automatiquement les valeurs de pile sur STDOUT une fois le programme terminé, vous obtenez donc la sortie souhaitée.la source
MATLAB, 105 octets
Ajout d'un saut de ligne avant le sprintf, pour faciliter la lisibilité. Il fonctionne à la fois avec et sans ce saut de ligne, il n'est donc pas inclus dans le nombre d'octets. Doit appuyer sur Entrée entre les deux numéros d'entrée.
la source
sprintf
!Bash, 76
la source
Fortran, 129
Arithmétique Fortran si est parfaite pour ce défi
Test: idéone
la source
Bash,
9486 octets (économisé huit octets grâce à Digital Trauma)Test (sous Linux):
L'utilisation de l'
[ ]
afterp=greater
est d'empêcher l'||
opérateur d'être évalué avant=
dans l'expression...&&p=greater||(($1<$2))...
(la priorité de l'opérateur!).L'alternative serait d'utiliser des crochets autour de
(($1>$2))&&p=greater
et(($1<$2))&&p=less
, mais les crochets créent une portée interne pour les variables, doncp
ne seraient pas modifiés.la source
p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2
Code machine IA-32 + Linux, 107 octets
Hexdump du code:
En raison des limitations matérielles, le code fonctionne avec des nombres compris entre 0 et 255.
Code source (peut être assemblé avec gcc):
C'est un sérieux abus de la pile! Le code crée le message de sortie sur la pile, de la fin au début. Pour écrire 4 octets, il utilise une seule
push
instruction. Pour écrire 1 octet, il utilise deux instructions:Par chance, la plupart des fragments à écrire font 4 octets. L'un d'eux ("gre" dans "supérieur") fait 3 octets; il est géré en poussant 4 octets et en supprimant un après:
La routine qui écrit des nombres sous forme décimale utilise l'
aam
instruction pour diviserax
par à10
plusieurs reprises. Il est avantageux qu'il calcule les chiffres de droite à gauche!Puisqu'il y a deux nombres à écrire, le code utilise un sous-programme, qui est appelé deux fois. Cependant, étant donné que le sous-programme écrit les résultats sur la pile, il utilise un registre pour contenir l'adresse de retour.
Code C qui appelle le code machine ci-dessus:
Sortie:
la source
ShortScript , 98 octets
Cette réponse n'est pas en concurrence, car ShortScript a été publié après ce défi.
la source
Fourier ,
14774 octetsPas de concurrence car l'impression de chaînes est plus récente que ce défi
Essayez-le sur FourIDE!
Je ne sais pas pourquoi je n'ai pas autorisé l'impression avant ... Cela rend le code lisible et est idéal pour le golf
la source
101
et116
à des variables, non? Je ne sais pas comment / si la portée des variables est gérée.C,
15513612783 bytesla source
Haskell, 87 octets
Un octet plus court que l'approche d'Otomo.
la source
Lua, 118 octets
Je ne vois pas assez de réponses de Lua ici, alors ...
Non golfé:
la source
Python 2, 78 octets
J'adore la façon dont il
cmp()
est vraiment utile, mais il a été supprimé en Python 3 .Utilisation d'une fonction anonyme:
Ne pas utiliser de fonction (79 octets):
la source
JavaScript,
151104100 9592 octetsJ'ai réussi à raccourcir avec l'aide d'edc65
la source
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 avoidingvar
you save 4 charactesC# 6,
11310310095 bytesThanks to edc65 for saving 13 bytes and to cell001uk for saving 5 bytes using C# 6's interpolated strings!
la source
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 bytes
The trailing and preceding whitespace is very important!
Live demo and all test cases.
la source
Pyth,
575553 bytesThis basically does:
Saved 2 bytes thanks to @AlexA.'s suggestion of using
A
instead ofJ
andK
and another 2 bytes by replacing the whole addition mess with a simpler subtraction.Live demo and test cases.
55-byte version
Live demo and test cases.
57-byte version:
Live demo and test cases.
la source
AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
A
instead ofJ
andK
, which saved 2 bytes.O, 67 bytes
Live demo.
la source
SWI-Prolog, 94 bytes
la source
Swift,
10592 byteeven shorter with Swift 2.0 (
10390 byte)la source
Processing, 92 bytes
la source