Desafio
Dados dois números inteiros A
e B
como entrada, você deve escrever um programa que produza se A>B
, A==B
ou A<B
.
Os números inteiros estarão em qualquer faixa razoável suportada pelo seu idioma, que inclua pelo menos 256 valores.
Seu programa pode ser um programa completo ou uma função, recebendo entradas via STDIN ou argumentos de função.
Saídas
Se a A>B
saída
A is greater than B
Se a A==B
saída
A is equal to B
Se a A<B
saída
A is less than B
Onde você substitui A
e B
por seus valores inteiros.
Ganhando
O programa mais curto em bytes vence.
Entre os melhores
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>
Respostas:
CJam, 47
Experimente online
Explicação:
fonte
[A B]
e eliminá-la]
do seu código.~_~
...Python 2,
959476 bytesA entrada deve ser separada por vírgula.
fonte
cmp(A,B)
é e o que faz? :)Labirinto ,
180152149 bytesEditar: Dirigido para raspar 3 bytes reutilizando
10
entre101
,103
e108
(os códigos de caracteres dee
,g
el
). A explicação abaixo não reflete isso, mas não é uma mudança substancial.Explicação
Não há muito que possamos fazer no sentido de salvar bytes para imprimir as seqüências de caracteres; isso será apenas seções lineares longas. Portanto, o principal desafio no golfe é evitar grandes quantidades de espaço em branco desnecessário. Isso significa que queremos que as partes lineares "irradiem" da coluna mais à esquerda. Também podemos obter mais economias reutilizando o código que é impresso
than B
. Então, vamos ver o fluxo de controle aqui:O programa inicia em um comando de rotação da grade
<
. Isso muda a linha atual ciclicamente para a esquerda com o IP, então obtemos o seguinte:Agora, o IP está em uma célula isolada, portanto, ele executa o mesmo comando repetidamente, enquanto
<
viaja mais para a esquerda até ...Nesse ponto, o IP tem algum lugar para ir e executa a primeira seção linear (a segunda linha) da direita para a esquerda. O que ele faz é ler
A
, copiar, imprimir. Consuma o caracter delimitador entre os números, imprimais
(e espaços). Em seguidaB
, leia , copie-o e subtraiaA
-o no-
.Neste ponto, atingimos a primeira "bifurcação na estrada". Se a diferença ocorrer
0
, o IP continuará avançando em direção ao ramo inferior. Esse ramo simplesmente imprimeequal to
e depoisB
.Caso contrário, o IP vira à esquerda em direção aos dois no-ops
""
. Depois, há outro garfo. Se a diferença foi negativa, o IP vira outra esquerda em direção ao ramo superior longo. Esse ramo simplesmente imprimegreater than
e depoisB
.Se a diferença foi positiva, o IP vira à direita na ramificação inferior, que é impressa
less
. Agora, queremos reutilizar othan
do outro ramo. Mas, ao mesmo tempo, não queremos conectar os dois ramos mais tarde, porque precisaríamos de vários espaços desnecessários. Em vez disso, usamos algumas no-ops para alinhar o ramo inferior com o local ondethan
começa no ramo superior e, em seguida, começamos a manipular a fonte novamente com^
:Novamente, isso isola o IP, então
^
é executado novamente e obtemosAgora o IP pode continuar se movendo para a direita e imprimindo
than
eB
conforme necessário.fonte
JavaScript (ES6), 66 bytes
Define uma função anônima. Teste adicionando
f=
antes e chame-o comoalert(f(4, 5))
Infelizmente, não se pode economizar com o repetitivo "que".
fonte
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()
devem ser adicionados à pontuação.alert()
como parte do seu código e contagem de bytesJava,
114113 bytes ou74 7267 se usamos a notação lambdaAgradecimentos a Kevin Cruijssen pela solução baseada no curry:
a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b
Solução pré-lambda antiga
como usuário hjk no comentário, se usamos lambda, podemos reduzir significativamente até 74 bytes.
fonte
than
:)public
se quiser. Eu sugeriria fazer isso em um lambda. Você pode remover o espaço anterior ao{
.a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b
Sim, eu sei que já faz quase dois anos. ;) E você pode realmente usar emless
vez desmaller
basear-se na descrição do desafio, conforme mencionado pelos dois comentários acima de mim. Experimente aqui para ver como o curry é feito.R, 80 bytes
fonte
function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)
.Pitão,
5249 bytesfonte
Julia,
6966 bytesEste usa interpolação de string para incorporar
A
,B
e o ternário dentro de uma única cadeia.Economizou 3 bytes graças a Glen O.
fonte
Perl,
6463 bytes62 bytes + 1 byte para
-p
. Recebe entrada de STDIN, com os dois números separados por um único espaço:Como funciona:
O
<=>
operador retorna -1, 0 ou 1, dependendo se o primeiro operando for menor que, igual a ou maior que o segundo. Convenientemente, o Perl permite subscritos negativos com matrizes e fatias, onde o último elemento está na posição -1, o penúltimo elemento está na posição -2 e assim por diante.No código
usamos o valor de retorno
<=>
como o subscrito em uma fatia da lista para obter a sequência correspondente, onde$`
é o primeiro número e$'
o segundo.Para evitar repetições
than
,x
é usado como espaço reservado e substituído em uma segunda substituição no final.Solução alternativa, 63 bytes
62 bytes + 1 byte para
-p
. Recebe entrada do STDIN, separada por espaço, exatamente como a primeira solução.Como funciona:
Essa solução também usa uma fatia, mas tira vantagem do fato de que, diferentemente das fatias da lista, as fatias da matriz podem ser interpoladas em seqüências de caracteres (e o RHS de substituições). Isso nos permite soltar o
/e
modificador e as aspas no operador de substituição.O verdadeiro truque está na fatia subscrita:
Para os diferentes valores de
<=>
, isso fornece:Quando uma matriz ou fatia de matriz é interpolada em uma sequência, os elementos são automaticamente unidos por
$"
(por padrão, um único espaço).fonte
Mouse , 79 bytes
Quando as strings são encontradas, elas são gravadas imediatamente em STDOUT, em vez de serem colocadas na pilha. A pilha pode conter apenas números inteiros.
Ungolfed:
fonte
GolfScript, 61 bytes
Espera 2 números inteiros na pilha. Experimente online .
Como funciona:
\.@.@
- A e B já estão na pilha, e este pedaço de código faz o olhar pilha assim:ABBA
.\
troca os dois itens principais da pilha,.
duplica o item superior e@
gira os 3 itens principais (1 2 3
->2 3 1
).Em seguida, três itens são enviados para a pilha: o
=
sinal,,"equal to "
e o bloco entre eles{}
. Aif
instrução faz o seguinte: se o primeiro argumento é avaliado como verdadeiro, ele executa o primeiro bloco de código (o segundo argumento), caso contrário, o segundo bloco de código (o terceiro argumento). Portanto, se A e B são iguais, ele pressionará "igual a" na pilha. Se não forem iguais, ele executará o código entre o bloco. Observe que=
os dois itens principais são exibidos na pilha; agora, a pilha se pareceAB
.Dentro do bloco, você vê pela primeira vez
.@.@
. Antes desses comandos, a pilha se pareceAB
e depois a pilha se pareceBAAB
. Os comandos são semelhantes aos mencionados acima.Depois, há outra
if
declaração. Desta vez, verifica se A> B e, se verdadeiro, empurra "maior" na pilha. Senão, ele empurra "menos" na pilha. Depois de empurrar um desses dois, ele empurra "than" na pilha e concatena-o com a string empurrada anterior.>
também exibe os dois itens principais da pilha; agora, a pilha se pareceBA"string"
.Os próximos três comandos são:
" is "\+
." is "
coloca essa sequência na pilha (aparência da pilhaBA"string"" is "
),\
troca os dois itens principais (aparência da pilhaBA" is ""string"
) e+
concatena os dois itens principais (aparência da pilhaBA" is string"
).O último comando,
@
, gira os três itens da pilha, de modo que a pilha agora parece:A" is string"B
. O GolfScript imprime automaticamente os valores da pilha no STDOUT quando o programa termina, para que você obtenha a saída desejada.fonte
MATLAB, 105 bytes
Adicionada uma quebra de linha antes do sprintf, para facilitar a legibilidade. Ele funciona com e sem essa quebra de linha, portanto não é incluído na contagem de bytes. Deve pressionar enter entre os dois números de entrada.
fonte
sprintf
!Bash, 76
fonte
Fortran, 129
Aritmética Fortran se é perfeita para este desafio
Teste: ideone
fonte
Bash,
9486 bytes (economizados oito bytes graças ao Digital Trauma)Teste (no Linux):
O uso de
[ ]
afterp=greater
é para impedir que o||
operador seja avaliado antes=
na expressão...&&p=greater||(($1<$2))...
(a precedência do operador!).A alternativa seria usar colchetes
(($1>$2))&&p=greater
e(($1<$2))&&p=less
, mas os colchetes criam escopo interno para as variáveis, portantop
, permaneceriam inalterados.fonte
p=equal;q=than;(($1>$2))&&p=greater&&[ ]||(($1<$2))&&p=less||q=to;echo $1 is $p $q $2
Código de máquina IA-32 + linux, 107 bytes
Hexdump do código:
Devido a limitações de hardware, o código funciona com números no intervalo de 0 a 255.
Código fonte (pode ser montado com o gcc):
Este é um abuso grave da pilha! O código cria a mensagem de saída na pilha, do fim ao começo. Para escrever 4 bytes, ele usa uma única
push
instrução. Para escrever 1 byte, ele usa duas instruções:Por sorte, a maioria dos fragmentos a serem escritos tem 4 bytes. Um deles ("gre" em "maior") é de 3 bytes; é tratado pressionando 4 bytes e removendo um depois:
A rotina que escreve números na forma decimal usa a
aam
instrução para dividirax
por10
repetidamente. É vantajoso que calcule os dígitos da direita para a esquerda!Como existem dois números para escrever, o código usa uma sub-rotina, chamada duas vezes. No entanto, como a sub-rotina grava os resultados na pilha, ela usa um registro para armazenar o endereço de retorno.
Código C que chama o código de máquina acima:
Saída:
fonte
ShortScript , 98 bytes
Esta resposta não é competitiva, pois o ShortScript foi publicado após esse desafio.
fonte
Fourier ,
14774 bytesNão competir porque a impressão de cordas é mais recente que esse desafio
Experimente no FourIDE!
Não sei por que eu não permiti a impressão antes ... Torna o código legível e é ótimo para jogar golfe
fonte
101
e116
para variáveis, certo? Não sei como / se o escopo variável é tratado.C,
15513612783 bytesfonte
Haskell, 87 bytes
Um byte menor que a abordagem de Otomo.
fonte
Lua, 118 bytes
Eu não vejo respostas suficientes de Lua aqui, então ...
Ungolfed:
fonte
Python 2, 78 bytes
Eu amo como
cmp()
é realmente útil, mas foi removido no Python 3 .Usando uma função anônima:
Não usando uma função (79 bytes):
fonte
JavaScript,
151 104 100 9592 bytesConsegui diminuir com a ajuda do edc65
fonte
var a
está declarando a variável a. Você precisa usá-lo em código real por muitas boas razões. Mas é opcional em javascript e evitandovar
que você salve 4 charactesC # 6,
11310310095 bytesAgradecemos a edc65 por salvar 13 bytes e a cell001uk por salvar 5 bytes usando as seqüências interpoladas do C # 6 !
fonte
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
O espaço em branco à direita e o anterior é muito importante!
Demonstração ao vivo e todos os casos de teste.
fonte
Pitão,
575553 bytesIsso basicamente faz:
Saved 2 bytes, graças à do @ Alexa. Sugestão de usar
A
, em vez deJ
eK
e outros 2 bytes, substituindo toda a adição mexer com uma subtração simples.Demonstração ao vivo e casos de teste.
Versão de 55 bytes
Demonstração ao vivo e casos de teste.
Versão de 57 bytes:
Demonstração ao vivo e casos de teste.
fonte
AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
A
vez deJ
eK
, que salvou 2 bytes.O, 67 bytes
Demonstração ao vivo.
fonte
SWI-Prolog, 94 bytes
fonte
Swift,
10592 bytesainda mais curto com o Swift 2.0 (
10390 bytes)fonte
Processando, 92 bytes
fonte