var QUESTION_ID=84260,OVERRIDE_USER=8478;function answersUrl(e){return"https://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"https://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>
5 16
se005 016
Respuestas:
Gelatina , 1 byte
Pruébalo en línea!
También funciona en 05AB1E, Actually, APL, Braingolf, ,,, (Commata), Factor, Forth, Implicit, J, Julia, K, kdb +, Keg, Ly, MATL, Pyke, Deorst y Q.
fuente
Minecraft 1.10, 221 caracteres (no competitivos)
Mira, esto es con lo que tenemos que lidiar cuando hacemos mapas de Minecraft.
Aparte: no hay forma de tomar una entrada de cadena en Minecraft, así que estoy engañando un poco al hacer que ingreses los números en el programa. (Es algo justificable porque bastantes mapas, como Minecraft Bingo de Lorgon111, requieren que copie y pegue comandos en el chat para ingresar un número).
Gracias abrightmoore por el filtro Block Labels MCEdit.
No compite debido a dificultades en la entrada, y no tengo idea de cómo contar bytes en esto (el sistema blytes tiene fallas para los bloques de comandos).
fuente
0,1,2
otra solución sería tomar 2 bytes y salida en 9 hilos, pero sería mucho menos golfista.Cálculo binario lambda , 4.125 bytes
Entrada y salida como números de iglesia .
En el cálculo lambda , es λ m . λ n . λ f . λ x . m f ( n f x ).
Índice de Bruijn : λ λ λ λ 4 2 (3 2 1)
El cálculo de Lambda es una forma concisa de describir un mapeo (función).
Por ejemplo, esta tarea se puede escribir como λ x . λ y . x + y
Lo que hay que tener en cuenta es que esta no es una lambda (función) que toma dos argumentos. Esto es en realidad una lambda anidada. Sin embargo, se comporta como una lambda que toma dos argumentos, por lo que puede describirse informalmente como tal. Cada lambda formalmente solo toma un argumento.
Por ejemplo, si aplicamos este lambda a 3 y 4:
Entonces, la primera lambda en realidad devuelve otra lambda.
Los números de la iglesia son una forma de eliminar los signos adicionales, dejando solo los símbolos y variables lambda.
Cada número en el sistema de la Iglesia es en realidad una lambda que especifica cuántas veces se aplica la función a un elemento.
Deje que la función sea fy el elemento sea x .
Entonces, el número 1 correspondería a λ f . λ x . f x , lo que significa aplicar f a x exactamente una vez.
El número 3, por ejemplo, sería λ f . λ x . f ( f ( f x )), lo que significa aplicar f a x exactamente tres veces.
Por lo tanto, añadir dos números Church (digamos, m y n ) juntos, es lo mismo que aplicar f a x , m + n veces.
Podemos observar que esto es lo mismo que aplicar primero f a x , n veces, y luego aplicar f al elemento resultante m veces.
Por ejemplo, 2 significaría
f(f(x))
y 3 significaríaf(f(f(x)))
, entonces 2 + 3 seríaf(f(f(f(f(x)))))
.Para aplicar f a x , n veces, tenemos n f x .
Puede ver m y n como funciones tomar dos argumentos, de manera informal.
Luego, aplicamos f nuevamente a este elemento resultante, m veces: m f ( n f x ).
Luego, volvemos a agregar el repetitivo para obtener λ m . λ n . λ f . λ x . m f ( n f x ).
Ahora, tenemos que convertirlo al índice De Bruijn .
En primer lugar, contamos la "distancia relativa" entre cada variable y la declaración lambda. Por ejemplo, la m tendría una distancia de 4, porque se declara 4 lambdas "ago". Del mismo modo, la n tendría una distancia de 3, la f tendría una distancia de 2 y la x tendría una distancia de 1.
Entonces, lo escribimos como esta forma intermedia: λ m . λ n . λ f . λ x . 4 2 (3 2 1)
Luego, eliminamos las declaraciones de variables, dejándonos con: λ λ λ λ 4 2 (3 2 1)
Ahora, lo convertimos en cálculo lambda binario .
Las reglas son:
00
.01 m n
.1
i multiplicado por +0
, por ejemplo, 4 se convierte en11110
.λ λ λ λ 4 2 (3 2 1)
≡ λ λ λ λ
11110
110
(1110
110
10
)≡ λ λ λ λ
11110
110
0101 111011010
≡ λ λ λ λ
0101
111101100101111011010
≡
00
00
00
00
0101
111101100101 111011010
≡
000000000101111101100101111011010
fuente
Lisp común, 15 bytes
fuente
(+(read)(read))
Apilar gatos , 8 + 4 = 12 bytes
Corre con las
-mn
banderas. Pruébalo en línea!Jugar al golf en Stack Cats es altamente contradictorio, por lo que este programa anterior se encontró con unos días de fuerza bruta. A modo de comparación, una solución más intuitiva escrita por humanos que usa la
*(...)>
plantilla es dos bytes más largacon las
-ln
banderas en su lugar (vea la parte inferior de esta publicación para obtener una explicación).Explicación
Aquí hay un manual sobre Stack Cats:
-m
o-l
. Aquí-m
se usa la bandera, por lo que el medio programa anterior se expande realmente a]_:]_!<X>!_[:_[
.<
y>
mueve una pila hacia la izquierda y una pila hacia la derecha respectivamente.-n
denota E / S numérica.Y aquí hay un rastro del programa completo expandido
]_:]_!<X>!_[:_[
:a+b
luego se emite, con la base -1 ignorada. Tenga en cuenta que la parte más complicada de esta solución es que la pila de salida debe tener una-1
en la parte inferior; de lo contrario, una pila de salida simplemente[-1]
ignoraría la base -1, y una pila de salida[0]
provocaría que se tragara la base cero (pero una salida pila de[2]
, por ejemplo, saldría2
bien).Solo por diversión, aquí está la lista completa de soluciones relacionadas de la misma longitud encontrada (la lista puede no estar completa):
La
*(>-_:[:)>
solución es más larga, pero es más intuitiva de escribir ya que usa la*(...)>
plantilla. Esta plantilla se expande<(...)*(...)>
cuando se usa con la-l
bandera, lo que significa:Como tal, la
*(...)>
plantilla significa que se omite el primer bucle pero se ejecuta el segundo. Esto permite que tenga lugar una programación más sencilla, ya que no tenemos que preocuparnos por los efectos del bucle en la otra mitad del programa.En este caso, el interior del bucle es:
El final
>
en la plantilla luego nos mueve de regreso a la pila de entrada, dondea+b
se emite.fuente
Brain-flak , 6 bytes
Pruébalo en línea!
Brain-flak es un lenguaje realmente interesante con dos restricciones importantes.
Los únicos caracteres válidos son corchetes, es decir, cualquiera de estos caracteres:
Un conjunto de paréntesis sin nada entre ellos se llama "nilad". Una nilad crea un cierto valor numérico, y se suman todas estas nilads una al lado de la otra. Un conjunto de paréntesis con algo entre ellos se llama "mónada". Una mónada es una función que toma un argumento numérico. Entonces se evalúan los corchetes dentro de una mónada, y ese es el argumento para la mónada. Aquí hay un ejemplo más concreto.
El
()
nilad es igual a 1. Entonces, el siguiente código de cerebro-flak:Se evalúa como 3. La
()
mónada empuja el valor dentro de ella en la pila global. Entonces lo siguienteempuja un 3. El
{}
nilad muestra el valor en la parte superior de la pila. Dado que siempre se agregan nilads consecutivos, una cadena de{}
sumas de todos los elementos superiores de la pila. Entonces mi código es esencialmente:fuente
Minecraft 1.10.x,
924512 bytesGracias a @ quat por reducir el blytecount en 48 puntos y el bytecount en 412.
Muy bien, entonces, tomé algunas de las ideas de esta respuesta e hice una versión propia, excepto que esta es capaz de aceptar aportes no negativos. Puede encontrar una versión aquí en formato de bloque de estructura.
(la nueva versión se ve un poco aburrida por cierto)
Comandos similares a la otra respuesta:
Para ingresar números, genera una cantidad de vacas y cerdos. Las vacas representarán el valor "n" y los cerdos representarán el valor "m". El sistema de bloques de comando matará progresivamente a las vacas y los cerdos y asignará valores según sea necesario.
Esta respuesta asume que usted está en un mundo sin vacas o cerdos naturales y que los valores almacenados en "n" y "m" se borran en cada corrida.
fuente
execute @e[type=Pig] ~ ~ ~ scoreboard players add m a 1
, por lo que no necesita ninguna forma de reloj.Retina , 42 bytes
Pruébalo en línea!
Explicación
Agregar números en unario es la cosa más fácil del mundo, pero una vez que introduce números negativos, las cosas se ponen complicadas ...
Comenzamos por convertir los números a unarios. Esto se hace haciendo coincidir cada número con
\d+
y reemplazándolo por$*
. Esta es una característica de sustitución específica de Retina. La sintaxis completa escount$*character
e insertacount
copias decharacter
. Ambos pueden omitirse donde estácount
predeterminado$&
(es decir, la coincidencia misma) ycharacter
predeterminado1
. Entonces, para cada entradan
obtenemosn
unos, y todavía tenemos signos negativos potenciales allí, así como el separador de espacio. Por ejemplo, la entrada8 -5
da:Ahora, para tratar con números negativos, es más fácil usar un
-1
dígito separado . Lo usaremos-
para ese propósito.Esta etapa hace dos cosas. Se deshace del espacio, los signos negativos principales, y convierte los
1
s después de un signo negativo en-
sí mismos. Esto se hace combinando|-1+
(es decir, un espacio o un número negativo) y realizando una transliteración en él. La transliteración va de1p
a-_
, pero aquí, sep
expande a todos los caracteres ASCII imprimibles y_
significa eliminar. Entonces,1
s en esos partidos se convierten en-
sy desventajas y espacios se eliminan. Nuestro ejemplo ahora se ve así:Esta etapa maneja el caso donde hay un número positivo y uno negativo en la entrada. Si es así, habrá
1
s y-
s en la cadena y queremos que se cancelen. Esto se hace combinando dos caracteres con un límite de palabras entre ellos (ya que1
s se considera un carácter de palabra y-
no lo es), y reemplazando la coincidencia con nada. El le+
indica a Retina que haga esto repetidamente hasta que la cadena deje de cambiar.Ahora nos quedan solo
1
so s o solo-
s.Para convertir esto de nuevo a decimal, hacemos coincidir toda la entrada, pero si es posible capturamos un
-
en grupo1
.1
Reescribimos el grupo (para anteponer a-
a números negativos) y luego reescribimos la duración de la coincidencia con$.&
(también una función de sustitución específica de Retina).fuente
range
en Retina. Lo he intentado algunas veces, pero los negativos son un dolor.Dominó , 38,000 bytes o 37 fichas
Esto se crea en Tabletop Simulator . Aquí hay un video y aquí está el archivo . Es un medio sumador estándar, compuesto por una
and
puerta para el2^1
valor posicional y unaxor
puerta para el2^0
valor posicional.Detalles
2^1
y la derecha es2^0
[Negro] .100%
fuente
Haskell, 3 bytes
Los paréntesis están aquí porque debe ser una función de prefijo. Esto es lo mismo que tomar una sección de la función +, pero no se aplican argumentos. También funciona en una amplia gama de tipos, como vectores, matrices, números complejos, flotantes, dobles, racionales y, por supuesto, enteros implementados correctamente.
Como se trata de Haskell, aquí se explica cómo hacerlo a nivel de tipo. Esto se hará en tiempo de compilación en lugar de tiempo de ejecución:
Código adaptado de Haskell Wiki
fuente
Mathematica,
42 bytesTachado
4sigue siendo regular 4 ...Tr
aplicado a una lista unidimensional toma la suma de los elementos de dicha lista.fuente
dc, 2 bytes
Agrega los dos primeros elementos en la pila (previamente extraídos de
stdin
), luego volca el contenido de la pilastdout
.EDITAR: Tras una consideración adicional, parece que hay varias formas en que esto podría implementarse, dependiendo del comportamiento de E / S deseado.
Supongo que la forma más completa para la suma sería esta:
¡Espere! ¡Se pueden tomar dos números en la misma línea, separados por un espacio! Esto nos da:
fuente
+f
,dc -e "?+p"
funciona bien aquí.+f
versión funciona si ya ha puesto (exactamente dos) números en la pila. Realmente no sabía sidc
se suponía que erastd(in|out)
la E / S o la pila. En retrospectiva, esa fue la opción menos sensata para colocar en la parte superior de la publicación. : /Lenguaje de programación Shakespeare ,
155152 bytesSin golf:
Estoy usando el compilador SPL de drsam94 para compilar esto. Probar:
fuente
Brachylog , 2 bytes
Espera una lista con los dos números como entrada
Alternativamente, si quieres la respuesta a
STDOUT
:fuente
JavaScript (ES6), 9 bytes
fuente
PHP, 20 bytes
Sorprendentemente corto esta vez:
Se ejecuta desde la línea de comandos, como:
fuente
php sum.php 1 2 3 4 5 6
así que no estoy 100% seguro de que eso esté bien.-r
bandera, entonces ya no es un problema.Cheddar, 3 bytes
Esta es una característica genial de Cheddar llamada "operadores funcionalizados". El crédito por esta idea va para @ CᴏɴᴏʀO'Bʀɪᴇɴ.
Aquí hay más ejemplos de operadores funcionalizados:
fuente
Python,
113 bytesint.__add__
Un simple operador especial.
fuente
Geometry Dash - 15 objetos
Finalmente hecho.
15 objetos no son mucho, pero todavía fue una pesadilla hacer esto (especialmente debido a los números negativos).
Como tendría que insertar 15 imágenes aquí para ver cómo reproducir esto, acabo de subir el nivel. El ID de nivel es 5216804. La descripción le indica cómo ejecutarlo y puede copiarlo ya que es copiable.
Explicación:
El disparador superior izquierdo (Conteo instantáneo 2) verificó si el primer agregado fue 0. Si lo fue, luego verificó si el segundo fue positivo o negativo. Si fue positivo, transfirió el valor del segundo sumando a la suma (estilo BF, usando bucles) y si fuera negativo, haría lo mismo.
La razón por la que necesitamos verificar si el segundo suma es positivo o negativo es que tendríamos que restar uno del segundo sumando y agregar uno a la suma o sumar al segundo sumando y restar uno de la suma respectivamente.
Si el primer sumando no es cero, prueba si es positivo o negativo usando el proceso anterior. Después de una iteración en el ciclo while, prueba para ver si el primer sumando es cero y si lo es, realiza el proceso descrito al comienzo de la explicación.
Dado que Geometry Dash es notablemente similar a BF, podría hacer una solución BF a partir de esto.
fuente
MATL, 1 byte
Acepta una matriz de dos enteros como entrada y los suma. Si bien el programa simple de
+
también funciona, eso ya se ha mostrado para otros idiomas.Pruébalo en línea
fuente
Perl 5.10, 8 bytes
Los dos números para agregar deben estar en 2 líneas separadas para que este funcione:
Prueba este aquí.
Uno con entrada en la misma línea ( 14 + 1 bytes para -a marca )
Pruébalo aquí!
Uno con entrada en la misma línea ( 19 + 1 bytes para -a marca )
Prueba este aquí.
Otra, cambiando el separador predeterminado array ( 19 + 1 bytes para -a bandera así)
Prueba este aquí!
fuente
-p
bandera.say$F[0]+$F[1]
,say pop()+pop
funciona (probado en Strawberry 5.20.2 con-E
) y le ahorra un byte.Fuzzy Octo Guacamole , 1 byte
Una función que toma entradas desde la parte superior de la pila y las salidas empujando a la pila.
Ejemplo que se ejecuta en REPL:
fuente
Lote,
251816 bytesEditar: guardado
79 bytes usando mi truco de Alternating Sign Sequence .fuente
PowerShell v2 +, 17 bytes
Toma la entrada como dos argumentos de línea de comando separados, que se rellenan previamente en la matriz especial
$args
. Formamos una cadena con el-join
operador al concatenarlos junto con un+
en el medio, luego canalizamos esa cadena aInvoke-Expression
(similar aeval
).Gracias a @DarthTwon por recordarme que cuando se trata de programas tan mínimos, existen múltiples métodos para tomar datos, todos al mismo número de bytes.
PowerShell no es nada si no es flexible.
fuente
$args[0]+$args[1]
yparam($a,$b)$a+$b
> <> ,
763 bytesIntérprete en línea
O pruébelo en TIO con la bandera -v.
Pruébalo en línea
fuente
+
sería suficiente: sacaría dos números de la pila y volvería a colocar el resultado de su suma en la pila. El costo de-v
también podría evitarse, ya que la lectura de los números podría haberse realizado de antemano con la invocación de la función.C, 35 bytes
Lo que he hecho aquí es la suma definida sin el uso de operadores booleanos o aritméticos. Esto hace recursivamente x los bits de suma por 'xor', y y los bits de acarreo por 'y' hasta que no haya carry. Aquí está la versión sin golf:
fuente
MATLAB, 4 bytes
1 byte eliminado gracias a @LeakyNun
Esta es una función anónima que toma una matriz y da la suma. Ejemplo de uso:
fuente
sum
?@sum
es una respuesta válida. ¿O hay otro meta consenso?GoLScript , 1 byte (no competitivo)
Agrega los 2 números superiores en la pila. Eso es.
Ahora cómo empujar ellos en la pila, no tengo idea. No creo que sea posible ... tos @ CᴏɴᴏʀO'Bʀɪᴇɴ tos
fuente
Explanation soon to be coming.
- Riker 3 de julio de 2016Lenguaje de programación de Shakespeare (SPL),
137135 bytesPrograma completo, golfizado:
Y una breve explicación:
No estoy seguro de que sea lo más corto posible. Consulta la página oficial para más información.
Edición 1: se eliminó el
:
afterAct I
yScene I
parece que todo lo que está después del número romano se ignora, lo que ahorra 2 bytes.fuente
Código de máquina x86_32, 2 bytes
Suponiendo que los dos valores ya están en los registros ecx y eax, la ejecución de la instrucción de agregar agregará los valores de los dos registros y almacenará el resultado en el registro de destino.
Puede ver el programa completo escrito en C y ensamblado en línea aquí . Escribir el contenedor en C hace que sea más fácil proporcionar entradas y hacer pruebas, pero la función de agregar real se puede reducir a estos dos bytes.
fuente
ret
instrucción (un byte). Y eso supone una convención de llamada personalizada dondeeax
se usa como un registro de paso de arg. (La biblioteca de enseñanza de Irvine32 asm hace eso, pero ninguna convención de llamadas estándar para x86-32 o x86-64 hace eso, a diferencia de ARM, donde el registro de valor de retornor0
es también el primer registro de paso de argumentos). Sin embargo, asm funciona, por lo que no necesita cambiarlo a 3 byteslea (%ecx, %edx), %eax
+ 1 byteret
para Microsoft__fastcall
o gcc-mregparm
.pop
es solo 1 byte, peroesp
los modos de direccionamiento relativo necesitan un byte SIB. Por lo tanto, una convención de llamada de pop-call puedepop %ecx
(la dirección de retorno),pop %eax
/pop %edx
/add %edx, %eax
(2 bytes) /jmp *%ecx
(2 bytes) = 7 bytes en total. vs.mov 4(%esp), %eax
(4B) /add 8(%esp), %eax
(4B) /ret
= 9 bytes, o 11 bytes para una versión de ese llamador-popsret imm16
, si lo hice bien. Es 1 byte extra para el SIB con ESP como base, y 1 byte extra para el disp8 en cada entrada.