var QUESTION_ID=124242,OVERRIDE_USER=61474;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:+r.match(SCORE_REG)[0],language:r.match(LANG_REG)[0].replace(/<\/?[^>]*>/g,"").trim(),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=/\d+((?=$)|(?= Bytes))/i,OVERRIDE_REG=/^Override\s*header:\s*/i;LANG_REG=/^[^,(\n\r]+/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/Sites/codegolf/all.css?v=617d0685f6f3"> <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>
42
dos veces.Respuestas:
Mathematica, 15 bytes
El recuento de bytes supone la codificación ANSI de Windows (CP-1252).
Define un operador binario
±
que resuelve el problema. Simplemente definimos6±9=42
como un caso especial que tiene prioridad y luego agregamos una definición alternativa que±
equivale a la multiplicación. Este último utiliza un truco de golf bastante interesante. La razón por la que esto funciona es bastante elaborada y necesitamos analizar las secuencias . Una secuencia es similar a lo que se conoce como splat en otros idiomas. Básicamente es una "lista" sin ningún envoltorio alrededor. Por ejemplo,f[1, Sequence[2, 3, 4], 5]
es realmente justof[1, 2, 3, 4, 5]
. El otro concepto importante es que todos los operadores son solo azúcar sintáctico. En particular,±
se puede utilizar como operador unario o binario y representa la cabezaPlusMinus
. Así±x
esPlusMinus[x]
ya±b
esPlusMinus[a,b]
.Ahora tenemos la definición
±n__
. Esto es una abreviatura para definirPlusMinus[n__]
. Peron__
representa una secuencia arbitraria de argumentos. Por lo tanto, esto también agrega una definición para los usos binarios (y n-arios) dePlusMinus
. El valor de esta definición es1n
. ¿Cómo multiplica esto los argumentos? Bueno,1n
usa la multiplicación implícita de Mathematica por yuxtaposición, por lo que es equivalente a1*n
. Pero*
también es solo una abreviatura deTimes[1,n]
. Ahora,n
es una secuencia de argumentos. Entonces, si invocamosa±b
, esto se convertirá en realidadTimes[1,a,b]
. Y eso es justoa*b
.Creo que es bastante claro cómo este abuso de sintaxis nos permite definir un operador binario usando sintaxis unaria. Ahora podríamos incluso hacer
PlusMinus[2,3,4]
cómputo24
(que también se puede escribir como±##&[2,3,4]
o2±Sequence[3,4]
pero se está volviendo loco en ese punto).fuente
*
es un operador incorporado, por lo que tendríaUnprotect
que agregar otras definiciones, peroUnprotect[Times];6*9=42
debería funcionar (no puedo probarlo ahora).Haskell , 14 bytes
Pruébalo en línea!
fuente
C,
32312928 bytes-2 gracias a Digital Trauma
-1 gracias a musicman523
Bastante simple. Declara una función macro
f
que toma dos argumentos,a
yb
.Si
a
es6
yb
es9
, vuelve42
. De lo contrario, devuelvea
xb
.Pruébalo en línea!
fuente
^
lugar de==
y ajuste la lógica un poco:#define f(a,b)a^6||b^9?a*b:42
- ahorra 2 bytes.|
en lugar de||
salvar a otro byte, ya que todavía tiene menor prioridad que^
JavaScript (ES6), 20 bytes
Explicación:
Iff x == 6 e y == 9,
x-6|y-9
será 0 (falso), y 42 será el resultado.Retazo:
fuente
Python 2 ,
3029 bytes¡Gracias a Jonathan Allan por salvar un byte!
Pruébalo en línea!
fuente
lambda x,y:x*[y,7][6==x==y-3]
05AB1E ,
15119 bytes-4 bytes gracias a @Emigna
-2 bytes gracias a @Adnan
Pruébalo en línea!
Cómo funciona
fuente
‚D96SQi42ëP
,
al principio?6Qs9Q*
que habría funcionado también para el mismo recuento de bytes.P¹69SQi42
Java (OpenJDK 8) ,
2422 bytes-2 bytes gracias a @ OlivierGrégoire
Pruébalo en línea!
fuente
System.out.println()
llamada y dejar que la función devuelva el resultado?(a^6|b^9)==0
ya que no hay una comparación implícita "diferente a 0". El fragmento de código resultante tendría 27 bytes de longitud. De todos modos, gracias por la sugerencia, y por favor dígame si me equivoqué.int a = 5; if (a) do_some_stuff(); else do_other_stuff();
da unType mismatch: cannot convert from int to boolean
error de compilación. Deben hacerse explícitamente con valores booleanos; consulte SO y ORACLE .a->b->a==6&b==9?42:a*b
.Rubí, 24 bytes
fuente
a^6|b^9<1
podría funcionar como booleano. Difícil de probar en mi teléfono inteligente.(((a^6)|b)^9)
, es decira.^(6).|(b).^(9)
, por lo que no funcionará correctamente.a-6|b-9==0
funcionaría, pero eso no es más corto.a,b==6,9
sería bueno, pero tampoco funciona.Cerebro-Flak ,
158154148140138126 bytesPruébalo en línea!
Explicación
Este código es bastante simple. Hacemos copias de los dos primeros elementos de la pila, restamos 6 de uno y 9 del otro. Luego tomamos el
not
de los dos valores. Nosotrosand
esos valores, multiplicamos el resultado por 12. Multiplica las entradas y resta los dos resultados.fuente
not
yand
(o retroceder), leer su descripción más bien me hizo tropezar.Factorio, 661 bytes, 6 combinadores con 9 conexiones.
Hay un combinador constante configurado para la salida A y B. Cambie estos para configurar la entrada.
Cadena de planos (0.15.18):
La salida es la señal Z y debe tomarse de los decisores superior e inferior.
fuente
Jalea ,
87 bytesLa entrada es como una matriz de dos enteros: primero el operando derecho, luego el izquierdo.
Pruébalo en línea!
Cómo funciona
fuente
Factorio, 581 bytes, 3 combinadores con 4 conexiones.
Cadena de planos (0.16.36):
El combinador constante inferior izquierdo debe establecerse en la salida A y B como entrada. La salida es la señal Z desde el combinador aritmético inferior derecho.
fuente
MATL , 11 bytes
La entrada es una matriz con los dos números.
Pruébalo en línea!
Explicación
fuente
GW-BASIC , 55 bytes
Salida:
La primera máquina en pcjs tiene IBM BASIC, que es prácticamente lo mismo. Para probar esto, diríjase allí, presione Runla máquina, presione Enter- Entery escriba
BASICA
para ingresar al modo BÁSICO. Luego ingrese el código fuente (se imprimirá automáticamente para usted), escribaRUN
, ingrese dos enteros y listo.fuente
INPUT
, están codificadas en menos bytes de lo que sugerirían los caracteres que las componen. El recuento, por lo tanto, me parece alto.wc
y obtuve 55 ... Copié y pegué en mi emulador y tenía el comportamiento esperado.OUT.BAS
: i.stack.imgur.com/32eH1.png Bytecount es el valor medio.R , 33 bytes
Devuelve una función.
Pruébalo en línea!
fuente
Cheque ,
3433 bytesCheck es mi nuevo esolang. Utiliza una combinación de semántica 2D y 1D.
La entrada es dos números pasados a través de argumentos de línea de comando.
Explicación
La pila comienza con los argumentos de la línea de comando. Llamemos a los argumentos
a
yb
.La primera parte,
.:+&
esencialmente duplica la pila, dejándola comoa, b, a, b
.>
empuja 0 a la pila (es parte de un literal numérico completado por9
).#
cambia a semántica 2D yv
redirige la IP hacia abajo. La IP se encuentra inmediatamente con una#
, que vuelve a cambiar a la semántica 1D nuevamente.9-!
comprueba sib
es igual a 9 (restando 9 y tomando el NOT lógico).\>6-!
luego comprueba sia
es igual a 6. La pila ahora contienea, b, 1, 1
si y solo sib==9
ya==6
. Multiplicar con*
toma el AND lógico de estos dos valores, dandoa, b, 1
si las entradas fueron6
y9
, y de loa, b, 0
contrario.Después de esto, la IP se encuentra con a
?
. Esto cambiará al modo 2D si el valor de la pila superior no es cero, y de lo contrario continuará en el modo 1D.Si el valor de la pila superior era
1
, esto significa que los otros valores de la pila son6
y9
, entonces empujamos 42 a la pila con>42
y luego bajamos al segundo#
en la última línea.Si el valor de la pila superior era
0
, entonces la ejecución se mueve hacia abajo a la siguiente línea.d
elimina el0
(como?
no lo hace), y luego multiplicamos las dos entradas con*
. Los##
interruptores entran y salen del modo 2D, sin hacer nada.Las ramas ahora se han unido nuevamente. La pila contiene
6, 9, 1, 42
oa*b
.p
imprime el valor de la pila superior y luego el programa termina, descartando el resto de la pila.fuente
JavaScript (ES6), 25 bytes
fuente
Python 3 ,
3633 bytesPruébalo en línea!
fuente
lambda x:x[0]*x[1]if x!=(6,9)else 42
. La única diferencia es el tipo de entrada.f=lambda x,y:42if6==x==y-3else x*y
APL (Dyalog) , 10 bytes
Pruébalo en línea!
×
el producto (de los argumentos)-
menos12×
doce veces6 9≡
si (6,9) es idéntico a,
la concatenación (de los argumentos)fuente
R, 41 Creo que no sé cómo contar bytes Soy nuevo: D
Defino una función cuyos argumentos son ayb en este orden . Si a es igual a 6 yb es igual a 9, devuelve 42, de lo contrario, a veces b
fuente
ifelse(a==6&b==9,42,a*b)
function(a,b)`if`(a-6|b-9,a*b,42)
.SPL , 356 bytes
Con nuevas líneas y espacios:
fuente
Japt ,
131112 bytesPruébalo en línea
21 bytes guardados gracias a obarakon.fuente
N¬¥69?42:N×
para 11 bytesML estándar (MLton) ,
2220 bytes¡Ahorré 2 bytes gracias a @Laikoni!
Pruébalo en línea!
Este es el tipo de cosas para las que está destinado SML, razón por la cual supera a shortC y Python.
La versión anterior se veía mucho mejor. :PAGS
fuente
$
como identificador! ¿Por qué esto no compila si elimina el espacio entre|
y$
?|$
se analiza como un único identificador simbólico, por lo que todo se rompe. Planeo escribir una pregunta de consejos para SML pronto y agregar una respuesta sobre esos dos tipos de identificadores.Pyth, 12 bytes
Pruébalo en línea
Explicación
fuente
AQ?&q6Gq9G42*GH
Retina , 36 bytes
Pruébalo en línea! Multiplicación unaria estándar, solo altera la entrada para manejar el caso especial.
fuente
Jalea , 10 bytes
Un enlace monádico que toma una lista de los dos números.
Pruébalo en línea!
¿Cómo?
fuente
?
, como lo hice yo. ;),
es especial porque es parte del patrón de expresiones regulares literales, por lo que6,9
se analiza como un token único y el rápido$
puede combinarlo⁼
. ¿Razonaste eso, o simplemente lo intentaste y notaste que funcionó?Jalea , 9 bytes
Pruébalo en línea!
Toma la lista de números como entrada.
fuente
SILOS ,
8167 bytesPruébalo en línea!
En cierto sentido, la suma funciona como una puerta NAND interesante en SILOS.
-14 bytes gracias a @Leaky Nun
Esencialmente creamos un número "a" que es 0 (falso) si j es 6 e i = 9, luego lo dividimos por sí solo, restamos uno y lo multiplicamos por 12 para agregarlo a nuestro producto.
Si "a" fue 1 después de restar uno y multiplicarlo, se convierte en un no-op, sin embargo, en el caso de que a sea 0, 0/0 arroja un error silenciosamente (que se detecta automáticamente) a se convierte en 0, y luego se convierte en -1 y terminamos restando 12 de nuestro producto.
fuente
0/0
convierte0
.Convexo ,
161413 bytesPruébalo en línea!
fuente
shortC , 23 bytes
Pruébalo en línea!
fuente