Escriba el código más corto para imprimir la siguiente tabla de multiplicación:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
code-golf
kolmogorov-complexity
matriz89
fuente
fuente
for
bucles? ¿Dónde está la parte desafiante (interesante)?for
. Ok, yo usowhile
.Respuestas:
Excel,
9291 bytesDesde la ventana inmediata del editor de VBA, ejecute el siguiente comando:
Range("A1:I9").Formula="=IF(ROW()<COLUMN(),"""",COLUMN()&""×""&ROW()&""=""&COLUMN()*ROW())"
La salida está directamente en la hoja de trabajo activa.Golfé un byte extra cambiando el orden de un
if
cambio>=
a<
. No actualicé la captura de pantalla, pero solo afecta a la fórmula en la parte superior, no a la salida.fuente
FOR
bucle anidado habitual .Pitón (75)
un poco mejor golfizado que las otras dos versiones de Python.
fuente
C ++,
10698 bytesUsé dos bucles y algunos trucos.
fuente
#import <stdio.h> main(){for(int i=0,j;i++-9;j=0)while(j++-i)printf("%dx%d=%d%s",j,i,i*j,j<i?"\n":" ";}
es 3 bytes más corto.#import
y<cstdio>
?J:
5751 caracteresSin bucles.
fuente
([:;"2*\#"2(":@],'x',":@[,'=',":@*,' '"_)"0/~)>:i.9
APL (37)
Y ni siquiera son solo dos for-loop. En APL, la siguiente construcción:
donde
x
yy
son listas, yF
es una función, se aplicaF
a cada par de elementos enx
yy
y le da una matriz.Entonces:
∆∘.×∆←⍳9
obtiene una tabla de multiplicación del 1 al 9. La función anterior genera la cadena requerida para cada par, es decir(⍕⍺)
, la representación de la cadena del primer número, seguido de×
, seguido de(⍕⍵)
, la representación de la cadena del segundo número, seguido de=
, seguido de⍕⍺×⍵
, siempre y cuando⍺≥⍵
.fuente
Rubí:
6059 caracteresEjecución de muestra:
fuente
(1..9).map{
a1.upto(9){
!Perl, 54 personajes
fuente
APL (Dyalog), 28
Análogo a un doble bucle en otros idiomas.
{⍵{...}¨⍳⍵}¨⍳9
configura el doble bucle⍕⍵,'×',⍺,'=',⍺×⍵
crea la cadena para cada par↑
Convierte la matriz de la matriz de cadenas en una matriz de picadurasSalida
fuente
↑{⍵{⍕⍵'×'⍺'=',⍺×⍵}¨⍳⍵}¨⍳9
o incluso hacer uso del nuevo "operador clave":{⍕⍵'×'⍺'=',⍺×⍵}¨∘⍳⌸⍳9
Mathematica , 45
Bastante aburrido, pero supongo que sirve como una comparación de sintaxis:
fuente
D, 75 caracteres
acabas de decir que el código no funciona o el programa completo
fuente
foreach(i,1..10){foreach(j,1..i+1)writef("%dx%d=%d ",i,j,i*j);writeln;}
VBScript (133); sin lazos.
A petición del retador: sin bucles. Este código usa llamadas de subrutina recursivas.
fuente
Arce, 64
fuente
Código de máquina x86_64 (Linux),
1759976 bytesEste es un volcado del archivo binario, y todo esto es de 175 bytes. Básicamente, hace los mismos dos bucles que todas las respuestas, pero imprimir en la consola es un poco más difícil y básicamente requiere presionar a los personajes para imprimir en la pila en reversa, y luego hacer un syscall (específico de Linux) para poner esos caracteres en realidad en stdout.Ahora he optimizado esto para que solo se realice 1 operación de escritura (¡más rápido!) Y tenga números mágicos (¡guau!) Y empuje todo el resultado hacia la pila hacia atrás antes de realizar la llamada al sistema. También eliminé la rutina de salida porque ¿quién necesita el código de salida adecuado?
Aquí hay un enlace a mi primer y segundo intento, en su sintaxis nasm original.
Doy la bienvenida a cualquiera que tenga otras sugerencias sobre cómo se puede mejorar. También puedo explicar la lógica con más detalle si alguien tiene curiosidad.
(Además, no imprime los espacios adicionales para alinear todas las columnas, pero si es necesario, puedo poner la lógica a costa de unos pocos bytes más).EDITAR: ¡Ahora imprime espacios adicionales y se juega aún más! Está haciendo algunas cosas bastante locas con los registros, y probablemente sea inestable si este programa se expandiera.
fuente
Javascript, 190 bytes
Llegué tarde a la fiesta, pero el comentario de @jdstankosky me despertó y decidí adoptar un enfoque diferente. Aquí hay una entrada de Javascript que envía una plantilla y se evalúa a sí misma en el camino.
Versión sin golf (versión ligeramente anterior en la que una función devuelve la tabla en lugar de un script que la alerta, pero se aplican los mismos principios):
fuente
Pascal, 128 bytes
Un procedimiento recursivo se encarga de todo. Llamada con
m(9,9)
.Sin golf:
fuente
Fourier
756632 bytes¡Gracias @BetaDecay por 124 bytes!
fuente
vba 55
(ventana inmediata)
nota: GWBasic solo necesita 2 caracteres adicionales:
fuente
Javascript, 75
Me pregunto si es posible algo mejor que dos (¿combinado?) Para bucles ...
fuente
Coreutils / Bash:
147136135Golfé, usando una nueva línea explícita y, usando la opción de cabeza en desuso (gracias manatwork)
Salida:
fuente
$(( ))
las evaluaciones aritméticas con$[ ]
; compartir 2 caracteres reemplazando el$'\n'
carácter de nueva línea escapado por uno literal (quiero decir,yes '
en una línea, luego'
en la siguiente); ahorre 2 caracteres al no usarhead
la-n
opción de 'explícitamente, solo-
y el número.$[ ]
notación, es bueno saberlo. Reemplazar-n
por-
es solo un personaje menos, por lo que son 11 en total, muchas gracias :).LOLCODE, 202 bytes
Sin golf:
Pitonado para personas que no hablan:
fuente
c #, 142 bytes
Y no a la vista ...
fuente
ForEach
"no es para la vista" bueno ... xD> <> , 50 bytes
Puede probarlo en el intérprete en línea .
Tenga en cuenta que hay espacios finales en cada línea, lo que podría hacerlo incorrecto (OP no ha indicado en este punto a partir de esta respuesta).
fuente
/// , 268 bytes
fuente
JAVA,
103 94 9290 bytesUsar JShell de Java 9 SDK me permite ahorrar una gran cantidad de espacio
Siguiendo la sugerencia de Kevin, reduje la solución en 2 bytes.
Gracias a Cliffroot, pude reducirlo en otro 1 byte
fuente
int
segundo for-loop y agregarlo,j
al primero. Así que así:for(int i=0,j;++i<=9;)for(j=1;j<=i;)System.out.print(i+"*"+j+"="+i*j+"\t"+(j++<i?"":"\n"));
++i<=9
coni++<9
C 79 bytes
el principal
la mesa
fuente
Tcl 98 caracteres
fuente
Javascript: 82 caracteres
fuente
for(i=0,s="";9>i++;){for(j=0;j++<i;)s+=j+"x"+i+"="+j*i+" ";s+="\n"}alert(s)
, sin embargo, no se respeta la cuestión de los espacios dobles en 2 dígitos, estaba a punto de enviarlo pero usando en+(9<i*j?" ":" ")
lugar de simplemente+" "
editar: en el ternario los espacios dobles desaparecieron, pero están en el segundo param4x4
no está directamente debajo5x4
como en la tarea.Python: 87
Estoy mirando las soluciones que otros han publicado y la mayoría de ellas no parecen tener el espacio correcto.
fuente
Pitón (79)
o ( 77 ) si uso,
range(10)
excepto que produce una línea vacía al comienzofuente
Perl:
65, 62 caracteres.fuente
printf
paréntesis; repuesto 1 carácter desplazando la asignación de $ i en la expresión gama:map{map{printf"%dx%d=%2d ",$_,$i,$_*$i}1..($i=$_);print$/}1..9
.