¿Qué obtienes cuando multiplicas 6 por 9? (42)


60

Amo las matemáticas. Pero no puedo encontrar una sola calculadora que pueda multiplicarse correctamente. Parecen hacer todo bien, excepto 6 * 9 (¡Es la pregunta para la vida, el universo y todo! ¡¿Cómo podrían equivocarse ?!). Así que quiero que todos escriban una función para mí que pueda multiplicar 2 números correctamente (y 6 * 9 es igual a 42 en lugar de 54. 9 * 6 es igual a 54 todavía).

Ah, y tendré que construir la fuente en Minecraft para que ... ¡ganen menos bytes!

Resumen

  • Tome 2 números como entrada (el tipo no importa, pero solo se pasarán 2 elementos y el orden debe ser coherente. Por lo tanto, las secuencias y las matrices están bien siempre que conserven el orden en el que pasaron. Es decir, ganó un mapa no funciona porque no conserva el orden)
  • Salida múltiple de ambos números, excepto si son 6 y 9, luego salida 42 (¡el orden importa!)
    • PD. Nunca fui realmente bueno contando, así que creo que solo los enteros del 0 al 99 son números reales (el tipo utilizado no importa)
  • ¡Pocos bytes por idioma ganan!

Tabla de clasificación:


1
@ JonathanAllan Sí, se agregaron reglas para eso.
Tezra

73
Casualmente, la identificación de la pregunta tiene 42dos veces.
Erik the Outgolfer

1
si solo números enteros hasta 99 son números reales, entonces 9 * 11 es un mensaje válido pero 10 * 10 no, ¿verdad?
Por favor, deja de ser malvado

14
@EriktheOutgolfer ... y el 12 representa qué restar si la entrada es 6 y 9.
Adám

11
@EriktheOutgolfer Incluso si lee la ID al revés.
T. Sar - Restablece a Monica el

Respuestas:


65

Mathematica, 15 bytes

El recuento de bytes supone la codificación ANSI de Windows (CP-1252).

6±9=42
±n__:=1n

Define un operador binario ±que resuelve el problema. Simplemente definimos 6±9=42como 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 justo f[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 cabeza PlusMinus. Así ±xes PlusMinus[x]y a±bes PlusMinus[a,b].

Ahora tenemos la definición ±n__. Esto es una abreviatura para definir PlusMinus[n__]. Pero n__representa una secuencia arbitraria de argumentos. Por lo tanto, esto también agrega una definición para los usos binarios (y n-arios) de PlusMinus. El valor de esta definición es 1n. ¿Cómo multiplica esto los argumentos? Bueno, 1nusa la multiplicación implícita de Mathematica por yuxtaposición, por lo que es equivalente a 1*n. Pero *también es solo una abreviatura de Times[1,n]. Ahora, nes una secuencia de argumentos. Entonces, si invocamos a±b, esto se convertirá en realidad Times[1,a,b]. Y eso es justo a*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ómputo 24(que también se puede escribir como ±##&[2,3,4]o 2±Sequence[3,4]pero se está volviendo loco en ese punto).


Particularmente me gusta cómo esto es básicamente un parche para mi 'calculadora': 3 Por diversión, ¿esto también funciona para *? : 3
Tezra

3
@Tezra bien, *es un operador incorporado, por lo que tendría Unprotectque agregar otras definiciones, pero Unprotect[Times];6*9=42debería funcionar (no puedo probarlo ahora).
Martin Ender

1
Hacer esto al operador * es muy malo ... ¡Me encanta! >: 3
Tezra

1
¿Cómo puedo votar cuando hay exactamente otros 42? ¡Aquí está mi "futuro +1" que se otorgará después de que alguien más lo rompa! :-)
The Vee

1
@MartinEnder Aww; Pero es el más corto de Mathematica, y mi favorito hasta ahora. : 3
Tezra


25

C, 32 31 29 28 bytes

-2 gracias a Digital Trauma
-1 gracias a musicman523

#define f(a,b)a^6|b^9?a*b:42

Bastante simple. Declara una función macro fque toma dos argumentos, ay b.
Si aes 6y bes 9, vuelve 42. De lo contrario, devuelve ax b.

Pruébalo en línea!


2
Utilice en ^lugar de ==y ajuste la lógica un poco: #define f(a,b)a^6||b^9?a*b:42- ahorra 2 bytes.
Trauma digital

@DigitalTrauma Cheers: D
MD XF

1
Creo que se puede utilizar |en lugar de ||salvar a otro byte, ya que todavía tiene menor prioridad que^
musicman523

@ musicman523 Gracias! Edición.
MD XF

1
Deberías actualizar tu versión abreviada para tomar estos cambios también
musicman523

17

JavaScript (ES6), 20 bytes

x=>y=>x-6|y-9?x*y:42

Explicación:

Iff x == 6 e y == 9, x-6|y-9será 0 (falso), y 42 será el resultado.

Retazo:

f=

x=>y=>x-6|y-9?x*y:42

console.log(f(6)(9));
console.log(f(9)(6));


44
Muy bien hecho; Ojalá lo hubiera pensado. +1
Shaggy

14

Python 2 , 30 29 bytes

¡Gracias a Jonathan Allan por salvar un byte!

lambda x,y:x*[y,7][6==x==y-3]

Pruébalo en línea!


2
Ahorre un byte usando el hecho de que 6 * 7 es 42:lambda x,y:x*[y,7][6==x==y-3]
Jonathan Allan

@JonathanAllan Ohh, eso es genial! ¡Gracias! :)
Adnan

Esta solución también funciona en Python 3
AMK

¡Exactamente lo que obtuve! Parece que no puedo encontrar ninguna forma de jugar más al golf.
FlipTack

12

05AB1E , 15 11 9 bytes

-4 bytes gracias a @Emigna

-2 bytes gracias a @Adnan

P¹69SQi42

Pruébalo en línea!

Cómo funciona

P          # multiply input
 ¹         # push first number
  69       # the number 69
    S      # split per character
     Q     # equality for both inputs
       i42 # if so, print 42
           # otherwise print product

Puede guardar 4 bytes con‚D96SQi42ëP
Emigna

@Emigna eh ... ¿Por qué ,al principio?
Neil A.

Emparejando las 2 entradas para comparar solo una vez como una lista.
Emigna

Supongo 6Qs9Q*que habría funcionado también para el mismo recuento de bytes.
Emigna

Cambiar el formato de entrada ahorra 2 bytes:P¹69SQi42
Adnan

10

Java (OpenJDK 8) ,24 22 bytes

-2 bytes gracias a @ OlivierGrégoire

a->b->a==6&b==9?42:a*b

Pruébalo en línea!


3
Bienvenido a PPCG! No sé mucho sobre Java, pero ¿podría eliminar la System.out.println()llamada y dejar que la función devuelva el resultado?
ETHproductions

2
@ LưuVĩnhPhúc no está en Java, porque tendría que escribir (a^6|b^9)==0ya 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é.
Bashful Beluga

1
@Riker no, no funciona así en Java. Por ejemplo, el fragmento int a = 5; if (a) do_some_stuff(); else do_other_stuff();da un Type mismatch: cannot convert from int to booleanerror de compilación. Deben hacerse explícitamente con valores booleanos; consulte SO y ORACLE .
Bashful Beluga

3
Puede utilizar currying de sobra un byte, y usted puede deshacerse del punto y coma, ya que no es parte de la lambda de sobra otro byte: a->b->a==6&b==9?42:a*b.
Olivier Grégoire

1
Solo una nota de por qué el 0 no es falso. Java es un tipo seguro por lo que 0 es un entero no es un encasillamiento booleano e inseguras no está permitido por lo que no puede utilizar los valores Falsy
Martin Barker

6

Rubí, 24 bytes

->a,b{a==6&&b==9?42:a*b}

a^6|b^9<1podría funcionar como booleano. Difícil de probar en mi teléfono inteligente.
Eric Duminil

1
@EricDuminil Desafortunadamente, esa expresión se analiza (((a^6)|b)^9), es decir a.^(6).|(b).^(9), por lo que no funcionará correctamente. a-6|b-9==0funcionaría, pero eso no es más corto.
Ventero

@Ventero: No pensé en eso. Gracias. a,b==6,9sería bueno, pero tampoco funciona.
Eric Duminil

6

Cerebro-Flak , 158 154 148 140 138 126 bytes

(({}<>)(((([()()()]<>)){})<({}{}({}))>{(()()()){}(<{}>)}{}))([()]{()(<{}>)}{})(({<{}>{}((<>))}{}){}<{}>{<({}[()])><>({})<>}{})

Prué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 notde los dos valores. Nosotros andesos valores, multiplicamos el resultado por 12. Multiplica las entradas y resta los dos resultados.


2
Es posible que desee capitalizar noty and(o retroceder), leer su descripción más bien me hizo tropezar.
MD XF

6

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):

0eNrNVm2O2jAQvcv8rEKFvSHLRuqPtrfYCkUhGWAkYkfOGDVCOUBv0bP1JLWTLQuB3U0QbfcPYvzxZt68eYr3sNxaLA0phngPlGlVQfxtDxWtVbr1a1yXCDEQYwEBqLTwUY4Z5WgmmS6WpFLWBpoASOX4HWLRBG8C+EScKr6MIJtFAKiYmLCrpw3qRNliicaleK2SAEpduata+fQObiI+zgKo/R+XIyeDWbcrA18IG71NlrhJd+RuuytPmInby1ucyq+uyFScnPHakWHrVg4VdScmnz2fPzQhjnxQlKlpS4zhk7ugLZd2BCTu0NS8IbXusMvalWgVJyuji4SUA4OYjcWmS606nm31wv8YzI+7SS66axbusHxh1zeITGaJ21C4w41XtyeHHCXH9D+o8eVUjYd3qoY47bc86rWPo158/yze2iCqPtxsmHx3r9ry3E6ylU9cTUv0aITDygwPZaaGeFMgUzbM99NBg/aMegPnV+gxRg6oLtFNZFsjfLhiJB+huZn1B87O7Crr/0Pnfz11vug5/9ePn+/E+2Hf++4beNHV8uzgRWWica6ejnDKiraM5oWXwhtC2CcVDo+FxfAWDfwc3Y9jLv4288cj5qG8IXU3Ie2zKj56xgXgZrNqOURhKGfR/GE6nzfNb7OMaxo=

La salida es la señal Z y debe tomarse de los decisores superior e inferior.

Captura de pantalla


waaa ... primera vez que veo una respuesta factorio en ppcg xD
V. Courtois


6

Jalea , 8 7 bytes

Vf96SạP

La entrada es como una matriz de dos enteros: primero el operando derecho, luego el izquierdo.

Pruébalo en línea!

Cómo funciona

Vf96SạP  Main link. Argument: [b, a]

V        Cast [b, a] to string, then eval the resulting string.
         For [b, a] = [9, 6], this yields 96.
 f96     Filter with 96, yielding [96] if V returned 96, [] otherwise.
    S    Take the sum, yielding either 96 or 0.
      P  Compute the product of [b, a], yielding ba = ab.
     ạ   Compute the absolute difference of the results to both sides.
         When the sum is 0, this simply yields the product.
         However, when [b, a] = [9, 6], this yields 96 - 54 = 42.

Esto tiene como -1 grado de libertad. ¿Cómo se te ocurren estas coincidencias?
lirtosiast el

5

Factorio, 581 bytes, 3 combinadores con 4 conexiones.

Cadena de planos (0.16.36):

0eNqllNtu4jAQht9lLldmldNCFWkvto/RCkUhGWAkYkfOGDVCefeOnV1Km7ACemPJ9vibf04+webgsLWkGfITUGV0B/nrCTra6fLgz7hvEXIgxgYU6LLxO2/HpeZFZZoN6ZKNhUEB6RrfII+HtQLUTEw44sKmL7RrNmjF4AyqsaIa7SVHQWs6eWq0dy+46OcvBT3ki1hc1GSxGi8T5XWwNYdig/vySPJYXvxFFnJXB0znT7dkOy4mYR3JspOTs6DRYoFHtD3vSe98XP/CFZ9xtsqe0mW29KdNW9qgOYffgjCOW3eHk+eR3fai1WkuttY0BWlhQM7W4TC61mPAIYzYLxbry6yS7FKxJFs54rANFdhZRP3VMBnWQk08ZvZ+ChpExqSCyX9bYVLCRfxRwbmabenAaK+03rX0/RnT5z7VJbroQnUH7HkGlq7OsDFtc8WYzWJ8WxbTs4rSEu8bZKpuGoXopkn4gH5vGEKiO/SMO5vbtCgDEjTCjwcm5AWGO4ZgknX16Tq7OhRfHiZXypU91PTRd6ZYdIjo8PnmF3+1AvmfuuBq+bRKYmnWKM2G4R1hAPnz

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.

ingrese la descripción de la imagen aquí

Top left: 2147483640 A, 2147483637 B
Top right: If everything = 2147483646 output B, input count
Bottom left: (input) A, (input) B
Bottom right: A * B -> Z

5

MATL , 11 bytes

[BE]=?42}Gp

La entrada es una matriz con los dos números.

Pruébalo en línea!

Explicación

[BE]    % Push array [6, 9]
=       % Implicit input: array of two numbers. Compare with [6, 9] element-wise
?       % If the two entries are true
  42    %   Push 42
}       % Else
  G     %   Push input
  p     %   Product of array
        % Implicit end. Implicit display

4

GW-BASIC , 55 bytes

1INPUT A:INPUT B
2IF A=6THEN IF B=9THEN ?"42":END
3?A*B

Salida:

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 BASICApara ingresar al modo BÁSICO. Luego ingrese el código fuente (se imprimirá automáticamente para usted), escriba RUN, ingrese dos enteros y listo.


3
¿Estás seguro de que el bytecount es correcto? GW-BASIC utiliza una codificación en la que algunas palabras, como 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.

@ ais523 Bueno, lo revisé wcy obtuve 55 ... Copié y pegué en mi emulador y tenía el comportamiento esperado.
MD XF

3
Bien, mi punto es que probablemente estés puntuando tu presentación más alto de lo necesario. Obtenga GW-BASIC para guardar el archivo y luego mire el tamaño del archivo resultante en el disco; Debería ser más pequeño.

@ ais523 Guardado como OUT.BAS: i.stack.imgur.com/32eH1.png Bytecount es el valor medio.
MD XF

OK, no esperaba eso, pero supongo que es un lavado en esta situación. (¿O tal vez hay más de un formato de guardado?)


4

Cheque , 34 33 bytes

.:+&>#v
#>42#v#9-!\>6-!*?
 d* ##p

Check 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 ay b.

La primera parte, .:+&esencialmente duplica la pila, dejándola como a, b, a, b. >empuja 0 a la pila (es parte de un literal numérico completado por 9).

#cambia a semántica 2D y vredirige la IP hacia abajo. La IP se encuentra inmediatamente con una #, que vuelve a cambiar a la semántica 1D nuevamente.

9-!comprueba si bes igual a 9 (restando 9 y tomando el NOT lógico). \>6-!luego comprueba si aes igual a 6. La pila ahora contiene a, b, 1, 1si y solo si b==9y a==6. Multiplicar con *toma el AND lógico de estos dos valores, dando a, b, 1si las entradas fueron 6y 9, y de lo a, b, 0contrario.

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 son 6y 9, entonces empujamos 42 a la pila con >42y 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. delimina el 0(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, 42o a*b. pimprime el valor de la pila superior y luego el programa termina, descartando el resto de la pila.


¡Esto parece un lenguaje ingenioso!
No es un árbol

3

JavaScript (ES6), 25 bytes

x=>y=>[x*y,42][x==6&y==9]

3

Python 3 , 36 33 bytes

lambda x,y:42if x==6==y-3else x*y

Pruébalo en línea!


1
Versión alternativa, del mismo tamaño: lambda x:x[0]*x[1]if x!=(6,9)else 42. La única diferencia es el tipo de entrada.
musicman523

No importa - tu versión editada es más corta :)
musicman523

El código que publicaste en realidad no funciona, así que lo cambié a la versión de trabajo en TIO que vinculaste.
ETHproductions

A mí me funciona: In [1]: f = lambda x, y: 42if 6 == x == y-3else x * y In [2]: f (6,9) Out [2]: 42 In [3 ]: f (9,6) Fuera [3]: 54 @ETHproductions
Martmists

@Martmists Te estabas perdiendo un espacio entonces, porque tu código eraf=lambda x,y:42if6==x==y-3else x*y
ETHproductions

3

APL (Dyalog) , 10 bytes

×-12×6 9≡,

Pruébalo en línea!

× el producto (de los argumentos)

- menos

12× doce veces

6 9≡ si (6,9) es idéntico a

, la concatenación (de los argumentos)


Oh wow, acabo de ver esto y mi respuesta J es exactamente la misma que esta: / excepto un byte más largo
Conor O'Brien

@ ConorO'Brien tiene sentido. J y APL tácito son en su mayoría equivalentes, excepto por las primitivas multi-char de J (y que necesitan Cap para una cima final).
Adám

3

R, 41 Creo que no sé cómo contar bytes Soy nuevo: D

function(a,b){

if(a==6&b==9){42} else {a*b}

}

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


Bienvenido al sitio! :)
DJMcMayhem

Bienvenidos. Tenga en cuenta que las líneas nuevas y los espacios también cuentan. En su caso, si elimina líneas nuevas y espacios (que puede) es solo 41.
Masclins

1
Puede cortar dos bytes usandoifelse(a==6&b==9,42,a*b)
Masclins

Puede reducir todo a 33 bytes como function(a,b)`if`(a-6|b-9,a*b,42).
rturnbull

Esto es solo 41 bytes después de eliminar el espacio en blanco innecesario, hasta entonces, son 47 bytes.
Pavel

3

SPL , 356 bytes

a.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]Ajax:Listen to your heart!Puck:Listen to your heart!Are you as big as the sum of a big big big cat and a cat?If so, am I as big as the sum of a big big cat and a big cat?If so, you are as big as the product of I and the sum of I and a cat.If not, you are as big as the product of you and I.Open your heart

Con nuevas líneas y espacios:

a.                       *Title*
Ajax,.                   *Declare variable Ajax*
Puck,.                   *Declare variable Puck*
Act I:.
Scene I:.
[Enter Ajax and Puck]
Ajax: Listen to your heart!                  *Set Puck's value to user input*
Puck: Listen to your heart!                  *Set Ajax's value to user input*
      Are you as big as the sum of a big 
       big big cat and a cat?                *Is Ajax=9?* 
      If so, am I as big as the sum of a 
       big big cat and a big cat?            *Is Puck=6?* 
      If so, you are as big as the product 
       of I and the sum of I and a cat.      *If so, set Ajax=42* 
      If not, you are as big as the product 
       of you and I.                         *If not set Ajax=(Ajax)(Puck)*
      Open your heart                        *Print Ajax's value*


3

ML estándar (MLton) , 22 20 bytes

¡Ahorré 2 bytes gracias a @Laikoni!

fun$6 $9=42| $x y=x*y

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



@Laikoni Wow, ¡no tenía idea de que pudieras usarlo $como identificador! ¿Por qué esto no compila si elimina el espacio entre |y $?
musicman523

SML distingue identificadores alfanuméricos y simbólicos , que pueden ser bastante útiles para jugar al golf. |$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.
Laikoni

2

Pyth, 12 bytes

-*FQ*12q(6 9

Pruébalo en línea

Explicación

 -*FQ*12q(6 9
  *FQ             Take the product
        q(6 9)Q   Check if the (implicit) input is (6, 9)
 -   *12          If so, subtract 12

Solución inteligente Lo intenté con declaraciones ternarias en 15:AQ?&q6Gq9G42*GH
Tornado547


2

Jalea , 10 bytes

⁼6,9ȧ42ȯ⁸P

Un enlace monádico que toma una lista de los dos números.

Pruébalo en línea!

¿Cómo?

⁼6,9ȧ42ȯ⁸P - Link: list of numbers [a,b]
 6,9       - 6 paired with 9, [6,9]
⁼          - equals? (non-vectorising) (1 or 0)
     42    - literal answer, 42
    ȧ      - logical and               (42 or 0)
        ⁸  - link's left argument, [a,b]
       ȯ   - logical or                (42 or [a,b])
         P - product                   (42 or a*b)

Podrías haber usado ?, como lo hice yo. ;)
Erik the Outgolfer

Ah porque ,es especial porque es parte del patrón de expresiones regulares literales, por lo que 6,9se analiza como un token único y el rápido $puede combinarlo . ¿Razonaste eso, o simplemente lo intentaste y notaste que funcionó?
Jonathan Allan

1
Razoné eso.
Erik the Outgolfer


2

SILOS , 81 67 bytes

readIO
J=i
readIO
a=(J-6)^2+(i-9)^2
a/a
a-1
a*12
x=J*i+a
printInt x

Prué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.




@LeakyNun ooh, eso es inteligente.
Rohan Jhunjhunwala

En realidad, se 0/0convierte 0.
Leaky Nun

@LeakyNun que quise decir se convierte en 0, y luego disminuyó. Fijación.
Rohan Jhunjhunwala


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.