Reto
Dados dos enteros A
y B
como entrada, debe escribir un programa que genere si A>B
, A==B
o A<B
.
Los enteros estarán en cualquier rango razonable admitido por su idioma que incluya al menos 256 valores.
Su programa puede ser un programa completo o una función, tomando entrada a través de STDIN o argumentos de función.
Salidas
Si A>B
salida
A is greater than B
Si A==B
salida
A is equal to B
Si A<B
salida
A is less than B
Donde reemplazas A
y B
por sus valores enteros.
Victorioso
El programa más corto en bytes gana.
Tabla de clasificación
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>
Respuestas:
CJam, 47
Pruébalo en línea
Explicación:
fuente
[A B]
y eliminar la]
de su código.~_~
...Python 2,
959476 bytesLa entrada debe estar separada por comas.
fuente
cmp(A,B)
es y qué hace? :)Laberinto ,
180152149 bytesEditar: Managed afeitarse 3 bytes mediante la reutilización de
10
entre101
,103
y108
(los códigos de caracteres dee
,g
yl
). La explicación a continuación no refleja esto, pero no es un cambio sustancial.Explicación
No hay mucho que podamos hacer para ahorrar bytes para imprimir las cadenas, solo serán largas secciones lineales. Por lo tanto, el principal desafío en el golf es evitar grandes cantidades de espacios en blanco innecesarios. Eso significa que queremos que las partes lineales se "irradien" desde la columna más a la izquierda. También podemos obtener más ahorros reutilizando el código que imprime
than B
. Así que echemos un vistazo al flujo de control aquí:El programa comienza en un comando de rotación de cuadrícula
<
. Esto desplaza la fila actual cíclicamente a la izquierda con la IP, así que obtenemos esto:Ahora la IP está en una celda aislada, por lo que ejecuta el mismo comando una y otra vez mientras
<
viaja más a la izquierda hasta ...En este punto, la IP tiene un lugar adonde ir y ejecuta la primera sección lineal (la segunda fila) de derecha a izquierda. Lo que hace es leer
A
, copiar, imprimir. Consume el carácter delimitador entre los números, imprimiris
(y espacios). Luego leaB
, cópielo y resteA
en el-
.En este punto llegamos al primer "tenedor en el camino". Si la diferencia cede
0
, la IP sigue avanzando hacia la rama inferior. Esa rama simplemente imprimeequal to
y luegoB
.De lo contrario, la IP gira a la izquierda hacia los dos no-ops
""
. Luego hay otro tenedor. Si la diferencia fue negativa, la IP toma otra izquierda hacia la rama superior larga. Esa rama simplemente imprimegreater than
y luegoB
.Si la diferencia fue positiva, la IP gira a la derecha en la rama inferior, que imprime
less
. Ahora queremos reutilizar elthan
de la otra rama. Pero al mismo tiempo no queremos conectar las dos ramas más adelante, porque necesitaríamos un montón de espacios innecesarios. En su lugar, usamos algunos no-ops para alinear la rama inferior con dondethan
comienza en la rama superior y luego comenzamos a manipular la fuente nuevamente con^
:De nuevo, esto aísla la IP, por lo que
^
se ejecuta nuevamente y obtenemosAhora la IP puede continuar moviéndose hacia la derecha e imprimir
than
yB
según sea necesario.fuente
JavaScript (ES6), 66 bytes
Define una función anónima. Pruebe agregando
f=
antes y llámelo comoalert(f(4, 5))
Desafortunadamente, no se pueden obtener ahorros del "que" repetitivo.
fuente
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()
debe agregarse a la puntuación.alert()
como parte de su código y recuento de bytesJava,
114113 Bytes o74 7267 si usamos la notación lambdaGracias a Kevin Cruijssen por la solución basada en curry:
a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"less")+" than ")+b
Antigua solución pre lambda
como comentario del usuario hjk en el comentario, si usamos lambda podemos hacerlo significativamente hasta 74 bytes.
fuente
than
:)public
si lo desea. Sugeriría convertir esto en una lambda. Puede eliminar el espacio antes de{
.a->b->a+" is "+(a==b?"equal to ":(a>b?"greater":"smaller" )+" than ")+b
Sí, sé que han pasado casi dos años. ;) Y, de hecho, puede usar enless
lugar desmaller
basarse en la descripción del desafío, como se menciona en los dos comentarios anteriores. Pruébalo aquí para ver cómo se hace el curry.R, 80 bytes
fuente
function(A,B)cat(A,"is",if(A==B)"equal to"else c(if(A>B)"greater"else"less","than"),B)
.Pyth,
5249 bytesfuente
Julia,
6966 bytesEste sistema utiliza la interpolación de cadenas para incrustar
A
,B
y el ternario dentro de una única cadena.Guardado 3 bytes gracias a Glen O.
fuente
Perl,
6463 bytes62 bytes + 1 byte para
-p
. Toma información de STDIN, con los dos números separados por un solo espacio:Cómo funciona:
los
<=>
operador devuelve -1, 0 o 1 dependiendo de si el primer operando es menor, igual o mayor que el segundo. Convenientemente, Perl permite subíndices negativos con matrices y sectores, donde el último elemento está en la posición -1, el penúltimo elemento está en la posición -2, y así sucesivamente.En el codigo
Usamos el valor de retorno de
<=>
como el subíndice en un segmento de lista para obtener la cadena correspondiente, donde$`
es el primer número y$'
es el segundo.Para evitar la repetición
than
,x
se utiliza como marcador de posición y se reemplaza en una segunda sustitución al final.Solución alternativa, 63 bytes.
62 bytes + 1 byte para
-p
. Toma entradas separadas por espacios de STDIN como la primera solución.Cómo funciona:
Esta solución también utiliza un sector, pero aprovecha el hecho de que, a diferencia de los sectores de la lista, los sectores de la matriz se pueden interpolar en cadenas (y el RHS de las sustituciones). Esto nos permite soltar el
/e
modificador y las comillas en el operador de sustitución.El verdadero truco está en el subíndice de corte:
Para los diferentes valores de
<=>
, esto da:Cuando una matriz o segmento de matriz se interpola en una cadena, los elementos se unen automáticamente
$"
(de forma predeterminada, un solo espacio).fuente
Ratón , 79 bytes
Cuando se encuentran cadenas, se escriben inmediatamente en STDOUT en lugar de colocarse en la pila. La pila solo puede contener enteros.
Sin golf:
fuente
GolfScript, 61 bytes
Espera 2 enteros en la pila. Pruébalo en línea .
Cómo funciona:
\.@.@
- A y B ya están en la pila, y esta pieza de código hace que el aspecto pila como esto:ABBA
.\
intercambia los dos elementos superiores de la pila,.
duplica el elemento superior y@
gira los 3 elementos superiores (1 2 3
->2 3 1
).Luego, se empujan tres elementos a la pila: el
=
signo"equal to "
, y el bloque entre ellos{}
. Laif
declaración hace esto: si el primer argumento se evalúa como verdadero, ejecuta el primer bloque de código (el segundo argumento), de lo contrario, el segundo bloque de código (el tercer argumento). Entonces, si A y B son iguales, presionará "igual a" en la pila. Si no son iguales, ejecutará el código entre el bloque. Tenga en cuenta que=
saca los dos elementos principales de la pila, por lo que ahora se ve la pilaAB
.Dentro del bloque, primero ves
.@.@
. Antes de estos comandos, se ve la pilaAB
, y después, se ve la pilaBAAB
. Los comandos son similares a los mencionados anteriormente.Entonces, hay otra
if
declaración. Esta vez, comprueba si A> B, y si es cierto, empuja "mayor" en la pila. De lo contrario, empuja "menos" en la pila. Después de presionar uno de estos dos, presionará "que" en la pila y lo concatenará con la cadena anterior.>
también muestra los dos elementos principales de la pila, por lo que ahora se ve la pilaBA"string"
.Los siguientes tres comandos son los siguientes:
" is "\+
." is "
empuja esa cadena en la pila (la pila pareceBA"string"" is "
),\
intercambia los dos elementos superiores (la pila pareceBA" is ""string"
) y+
concatena los dos elementos superiores (la pila pareceBA" is string"
).El último comando,
@
, gira los tres elementos de la pila, por lo que la pila ahora se ve así:A" is string"B
. GolfScript imprime automáticamente los valores de la pila en STDOUT una vez que el programa termina, para que obtenga el resultado deseado.fuente
MATLAB, 105 bytes
Se agregó un salto de línea antes de sprintf, para facilitar la lectura. Funciona con y sin este salto de línea, por lo que no se incluye en el recuento de bytes. Debe presionar enter entre los dos números de entrada.
fuente
sprintf
!Bash, 76
fuente
Fortran, 129
Fortran aritmética si es perfecta para este desafío
Prueba: ideone
fuente
Bash,
9486 bytes (ahorró ocho bytes gracias a Digital Trauma)Prueba (en Linux):
El uso de
[ ]
afterp=greater
es para evitar que el||
operador sea evaluado antes=
en la expresión...&&p=greater||(($1<$2))...
(¡la precedencia del operador!).La alternativa sería usar corchetes
(($1>$2))&&p=greater
y(($1<$2))&&p=less
, pero los corchetes hacen un alcance interno para las variables, porp
lo que no se alterarían.fuente
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 del código:
Debido a limitaciones de hardware, el código funciona con números en el rango 0 ... 255.
Código fuente (se puede ensamblar con gcc):
¡Esto es un abuso grave de la pila! El código construye el mensaje de salida en la pila, desde el final hasta el principio. Para escribir 4 bytes, utiliza una sola
push
instrucción. Para escribir 1 byte, utiliza dos instrucciones:Por suerte, la mayoría de los fragmentos a escribir son de 4 bytes. Uno de ellos ("gre" en "mayor") es de 3 bytes; se maneja presionando 4 bytes y eliminando uno después:
La rutina que escribe números en forma decimal usa la
aam
instrucción para dividirax
por10
repetidamente. ¡Es ventajoso que calcule los dígitos de derecha a izquierda!Como hay dos números para escribir, el código usa una subrutina, que se llama dos veces. Sin embargo, debido a que la subrutina escribe los resultados en la pila, utiliza un registro para contener la dirección de retorno.
Código C que llama al código de máquina anterior:
Salida:
fuente
ShortScript , 98 bytes
Esta respuesta no es competitiva, ya que ShortScript se publicó después de este desafío.
fuente
Fourier ,
14774 bytesNo competir porque la impresión de cadenas es más nueva que este desafío
Pruébalo en FourIDE!
No sé por qué no permití imprimir antes ... Hace que el código sea legible y es ideal para jugar al golf
fuente
101
y116
a variables, ¿verdad? No estoy seguro de cómo / si se maneja el alcance variable.C,
15513612783 bytesfuente
Haskell, 87 bytes
Un byte más corto que el enfoque de Otomo.
fuente
Lua, 118 bytes
No veo suficientes respuestas de Lua aquí, así que ...
Sin golf:
fuente
Python 2, 78 bytes
Me encanta cómo
cmp()
es realmente útil, pero se eliminó en Python 3 .Usando una función anónima:
No utiliza una función (79 bytes):
fuente
JavaScript,
151104100 9592 bytesLogré acortar con la ayuda de edc65
fuente
var a
está declarando la variable a. Usted tiene que usarlo en verdadero código para un montón de buenas razones. Pero es opcional en javascript y evitavar
que ahorre 4 caracteresC # 6,
11310310095 bytes¡Gracias a edc65 por guardar 13 bytes y a cell001uk por guardar 5 bytes usando las cadenas interpoladas de C # 6 !
fuente
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
¡El espacio en blanco final y anterior es muy importante!
Demostración en vivo y todos los casos de prueba.
fuente
Pyth,
575553 bytesEsto básicamente hace:
Ahorró 2 bytes gracias a la sugerencia de @ AlexA. de usar
A
En lugar deJ
yK
y otros 2 bytes mediante la sustitución de todo el lío además con una resta simple.Demostración en vivo y casos de prueba.
Versión de 55 bytes
Demostración en vivo y casos de prueba.
Versión de 57 bytes:
Demostración en vivo y casos de prueba.
fuente
AQs[Gd"is"d?<GH"less than"?>GH"greater than""equal to"dH
A
lugar deJ
yK
, que ahorró 2 bytes.O, 67 bytes
Demo en vivo.
fuente
SWI-Prolog, 94 bytes
fuente
Swift,
10592 bytesaún más corto con Swift 2.0 (
10390 bytes)fuente
Procesando, 92 bytes
fuente