Tiene un cuadro con un número de un solo dígito en cada esquina:
1|2
---
3|4
Si concatenamos los dígitos a lo largo de las filas de izquierda a derecha, obtenemos 12 y 34. Si concatenamos los dígitos a lo largo de las columnas de arriba a abajo, obtenemos 13 y 24. Si sumamos todos estos números, obtenemos 12 + 34 + 13 + 24 = 83.
Desafío
Escriba un programa para imprimir todos esos cuadros donde la suma calculada como arriba es igual a 100.
Suponiendo que cada esquina contiene un número de un solo dígito entre 1 y 9, hay 9 combinaciones: 1157, 1247, 1337, 1427, 1517, 2138, 2228, 2318 y 3119. (Tenga en cuenta que hay 25 combinaciones si incluimos 0, pero no estamos para este desafío)
Tenga en cuenta que el ejemplo 1234 no funciona ya que 12 + 34 + 13 + 24 no es igual a 100.
Entrada
Ninguna
Salida
Contestar cuadros en el siguiente formato:
A|B
---
C|D
La salida debe imprimirse en STDOUT o en la alternativa más cercana.
Reglas
- AB + CD + AC + BD = 100
- Cada esquina contendrá los enteros positivos 1-9 solamente.
- 0 está excluido.
- Los números se pueden usar más de una vez.
- Necesitas dibujar los cuadros, como arriba. (
A|B\n---\nC|D\n
) - Necesita dar salida a todas las respuestas válidas.
- Una nueva línea adicional está bien.
- code-golf , por lo que gana el código más corto en bytes.
- Se aplican las lagunas estándar y los términos y condiciones.
Esta es mi primera presentación, así que avíseme si necesito aclarar algo.
Respuestas:
Pyth,
423834 bytesLa nueva línea final en el código es importante. La razón principal Soy competitivo es porque uso el producto escalar de vectores de
[1, 1, 5, 7]
y[20, 11, 11, 2]
y compararlo con 100.fuente
"|"
->\|
,\n
-> (salto de línea literal) y no necesita la cita final.Rubí, 71
Como la codificación no está prohibida (y en cualquier caso es difícil trazar una línea) aquí hay una respuesta codificada parcial.
Explicación
La fórmula para una solución es la siguiente:
Mediante argumentos aritméticos modulares, vemos que A y D deben diferir en una cantidad constante, de modo que
(A*20+D*2)%11
sea constante. De hecho D = A + 6. Eli
ciclo itera a través de los tres valores posibles de A.El valor de B puede ser de 1 a 1
7-i*2
y el total de B y C debe ser14-A-D
. Así obtenemos las siguientes expresiones, que se imprimen. Ruby permite nuevas líneas literales en cadenas encerradas en''
fuente
Java,
202200198Intentando por primera vez: D
EDITAR: guardado 2 bytes con un cálculo ligeramente más pequeño que se encuentra en otro comentario.
fuente
Lote - 187 bytes
Fuerza bruta.
Sin golf es un poco menos desagradable:
fuente
CJam, 40 bytes
El enfoque para encontrar las combinaciones es diferente al de @ Optimizer, pero el código para imprimirlas es idéntico.
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Haskell,
107131 bytes¡La segunda versión de mi primer programa Haskell!
Esta vez con pantalla según los requisitos,
robadodescaradamente adaptado de nimi (bueno, investigué un poco, pero parece que no hay formas eficientes de mostrar personajes en Haskell para que putStr $ unlines sea difícil de evitar).Y ... aparte de la factorización de la fórmula al final, todavía es legible =)
fuente
Haskell,
125121 bytesUso:
>>
en"abcd">>[[1..9]]
hace una lista con 4 (longitud del primer parámetro) copias del segundo elemento, es decir[[1..9],[1..9],[1..9],[1..9]]
.mapM id
hace una lista de todas sus combinaciones, es decir,[0,0,0,0]
a[9,9,9,9]
. Mantenga los que resumen100
y construya una cadena con la caja. Imprime todas las cajas.Gracias @Mauris por 1 byte y por hacerme revisar mi publicación para encontrar 3 más.
fuente
mapM id
ahorra un frente de bytessequence
.Python 2,
145129 BytesActualmente estoy jugando con algunos métodos diferentes de cálculo que deberían ser más cortos de lo que se describe, pero publicaré lo que tengo ahora.
fuente
CJam,
4342 bytesExplicación a seguir .. por hoy EOD
Pruébalo en línea aquí
fuente
Pitón 3, 159
Rápido y sucio.
fuente
R, 165 bytes
Esto habría sido significativamente más corto si hubiera elegido codificar la salida de alguna manera. Al igual que algunas otras soluciones, esto aprovecha la identidad 20 x 1 + 11 ( x 2 + x 3 ) + 2 x 4 = 100.
Ungolfed + explicación:
Quizás se pregunte por qué la última declaración es una tarea. Como resultado, la
cat
función, que concatena e imprime, devuelve un valor deNULL
. Cuando llamacat
desde una función comoapply
, la salida será seguida porNULL
, lo que no es deseable. Hay dos formas de evitar esto: asignarlo a una variable o envolverloinvisible
. Aquí he optado por el primero ya que es significativamente más corto.Puedes probarlo en línea .
fuente
Java, 450
Mi primer intento (no golfista) se veía así:
fuente
20*a + 11*(b + c) + 2*d == 100
.PowerShell, 98
fórmula adaptada de steveverrill
fuente