En este desafío, obtendrá cuatro tareas diferentes pero algo relacionadas que deben resolverse de manera específica. Primero, explicaré las tareas, luego seguiré una explicación de cómo debes resolverlo.
Su código para las cuatro tareas debe tomar dos enteros positivos como entrada:, n,m
donde n<m
. Todas las tareas deben resolverse en el mismo idioma. La orientación de las matrices es opcional (n-por-m puede interpretarse como "n filas, m columnas" o "n columnas, m filas").
Tarea 1:
Crear (y de salida / impresión) un vector / lista que consiste de los elementos: n, n+1 ... m-1, m
. Así, por n=4, m=9
, que es la Salida: 4,5,6,7,8,9
.
Tarea 2:
Cree (y envíe / imprima) una matriz / matriz / lista de listas (o equivalente) con este aspecto:
n, n+1, ... m-1, m
n+1, n+2, ... m-1, m+1
...
n+m, n+m+1, ... 2*m-1, 2*m
Para n=4, m=9
usted debe salir:
4, 5, 6, 7, 8, 9
5, 6, 7, 8, 9, 10
...
13, 14, 15, 16, 17, 18
Tarea 3:
Cree (y envíe / imprima) una tabla de multiplicación n-por-m (en cualquier formato adecuado). Ejemplo para n=4, m=9
:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
5 10 15 20
6 12 18 24
7 14 21 28
8 16 24 32
9 18 27 36
Tarea 4:
Imprima / imprima un vector / lista que consta de los elementos en la tabla de multiplicación de la tarea 3, ordenados en orden ascendente, manteniendo valores duplicados. Para n=4, m=9
, que es la Salida: 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 12, 12, 12, 14, 15, 16, 16, 18, 18, 20, 21, 24, 24, 27, 28, 32, 36
.
El reto:
Ahora, todas las tareas anteriores son bastante triviales. El verdadero desafío aquí es que el código para la tarea 2 debe comenzar con el código para la tarea 1, el código para la tarea 3 debe comenzar con el código para la tarea 2 y el código para la tarea 4 debe comenzar con el código para la tarea 3.
Para que quede más claro:
Supongamos que el código para la Tarea 1 es (funciona en Octave):
@(n,m)(n:m)
Entonces su código para la Tarea 2 podría ser (funciona en Octave):
@(n,m)(n:m)+(0:m)'
El código para la tarea Tarea 3 debe ser (no funciona en Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3"
Y finalmente, el código para la Tarea 4 debe ser (no funciona en Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3""Code_for_task_4"
Este es el código de golf , por lo que gana la presentación con el código más corto para la tarea 4 en cada idioma. Como siempre: las explicaciones son altamente recomendables.
>2;
para que el código de la tarea anterior se convierta esencialmente en un no-op?0<n<m
o0<=n<m
?Respuestas:
Jalea , 12 bytes
Tarea 1
Pruébalo en línea!
Tarea 2
Pruébalo en línea!
Tarea 3
Pruébalo en línea!
Tarea 4
Pruébalo en línea!
Cómo funciona
Tarea 1
r
es el rango diádico átomo de y hace exactamente lo que pide la tarea.Tarea 2
Una cadena diádica que comienza con tres enlaces diádicos es una bifurcación ; primero se evalúan los enlaces externos, luego se llama al enlace central con los resultados a ambos lados como argumentos.
r
se comporta como antes, produciendo [n, ..., m] .0r$}
es un enlace rápido (o enlace rápido, si lo desea).El rápido
$
(cadena monadich) consume los enlaces0
(rendimiento 0 ) yr
(rango diádico) y los convierte en una cadena monádica. Cuando se llama con el argumento k , esto producirá [0, ..., k] .El rápido
}
(argumento correcto) toma el enlace rápido creado por$
y lo convierte en un enlace diádico que llama0r$
con0r$}
el argumento correcto.0r$}
se llamará con el argumento izquierdo n y el argumento derecho m , por lo que0r$
se alinea con el argumento my produce [0, ..., m] .+þ
Es otro enlace rápido.þ
(tabla) llamará+
(suma) para cada elemento en su argumento izquierdo y cualquier elemento en su argumento derecho, agrupando los resultados para cada argumento derecho en una sola fila.+þ
se llamará con el argumento izquierdo [n, ..., m] y el argumento derecho [0, ..., m] , obteniendo la tabla deseada.Tarea 3
Cada línea en un programa Jelly define un enlace diferente. El último es el enlace principal y, como los de C
main
función , es el único enlace que se ejecuta por defecto. Los enlaces restantes se pueden llamar desde el enlace principal, pero no haremos esto aquí.Como antes,
þ
(tabla) llamará×
(suma) para cada elemento en su argumento izquierdo y cualquier elemento en su argumento derecho, agrupando los resultados para cada argumento derecho en una sola fila.Dado que ambos argumentos
×þ
son enteros,þ
los convierte en rangos, transformando los argumentos n y m en [1, ..., n] y [1, ..., m] .Tarea 4
×þ
Funciona como antes. Los siguientes enlaces son monádicos, lo que los hace superiores , es decir, se aplican sobre los anteriores.Después de ejecutar
×þ
,F
aplana la matriz 2D resultante yṢ
ordena la matriz 1D resultante.fuente
05AB1E ,
1817 bytesTarea 1
Pruébalo en línea
Tarea 2
Pruébalo en línea
Tarea 3
Pruébalo en línea
Tarea 4
Pruébalo en línea
Explicaciones
Tarea 1
Tarea 2
Tarea 3
Tarea 4
fuente
MATL ,
1817 bytesTarea 1
Pruébalo en línea!
Tarea 2
Pruébalo en línea!
Tarea 3
Pruébalo en línea!
Tarea 4
Pruébalo en línea!
Explicación
Tarea 1
Tarea 2
Tarea 3
Tarea 4
fuente
Mathematica,
8477 bytesEditar: Gracias a Martin Ender por guardar 7 bytes.
Tarea 1:
Puro
Function
con argumentosn
ym
que salidasn~Range~m
, la forma infija deRange[n,m]
.Tarea 2:
n~Range~m~Table~(m+1)
crea una matriz 2D conm+1
filas, donde cada fila es la salida de la tarea anterior. Luego//0~Range~m+#&
está la aplicación postfix de la función0~Range~m+#&
que efectivamente se agrega0
a la primera fila,1
a la segunda fila, y así sucesivamente hastam
lam+1
fila -th.Tarea 3:
Esto solo aplica la función constante
1##&~Array~{n,m}&
a la salida de la tarea anterior.Tarea 4:
Flatten
sysSort
la tabla de multiplicar.fuente
Python, 183 bytes
Tarea 1, 29 bytes
Pruébalo en línea!
Tarea 2, 84 bytes
Pruébalo en línea!
Tarea 3, 137 bytes
Pruébalo en línea!
Tarea 4,
183167 bytesPruébalo en línea!
Explicación:
Tarea 1:
Bastante simple, genera una
n
am
la lista de Python usando una función derange
función.Tarea 2:
Para cada número
0
am+1
, agrega ese número a cada elemento de una lista den
am
.Tarea 3:
Para cada número de
1
am
, multiplica ese número por cada número en una lista de1
an
.Tarea 4:
Utiliza la
sorted
función integrada de Python que ordena una lista de menor a mayor. La comprensión de la lista en la función se utiliza para aplanar la lista. Crea una lista de cada elemento en cada elemento de la lista que le dio la tarea 3.Guardado muchos bytes gracias a @math_junkie.
fuente
def s(n,m):return [[w+i for w in r(n,m)] for i in a(0,m+1)]
, es una función completa cuando se define el código para la tarea 1.a=lambda n,m:...
cada una de las definiciones de sus funciones. Función anónima son siempre más corto en pythonPHP 7, 200 bytes
Utiliza el búfer de salida para borrar la salida anterior.
Tarea 1
Guarda el código
$s
para reutilizarlo más tarde. los$v
variable es para la última tarea.Tarea 2
Imprime las líneas restantes.
Tarea 3
Borra el búfer de salida e imprime la tabla de multiplicar, guardando los números en
$v
.Tarea 4
Borra el búfer de salida nuevamente e imprime
$v
.fuente
Potencia Shell , 126 bytes
Tarea 1
Pruébalo en línea!
Utiliza el
..
operador de rango incorporado. El comportamiento predeterminado para lo implícitoWrite-Output
inserta una nueva línea entre los elementos, por eso la salida se muestra como una nueva línea separada.Tarea 2
Pruébalo en línea!
Vuelca la primera tarea en STDERR
>2;
, luego realiza un bucle de0
a$m
, cada ayudante de configuración de iteración$i
antes de repetir nuevamente de$n
a$m
e incrementando cada número en$i
. Estos se-join
editan junto con comas, de lo contrario, esto sería una salida ambigua gigantesca de un elemento por línea.Tarea 3
Pruébalo en línea!
El mismo tipo de cosas
>2;
para volcar el anterior a STDERR. Entonces simplemente de doble circuito a partir1
de$m
entonces1
a$n
, ayudante de establecer$i
a lo largo del camino, se multiplican los valores, y-join
con un espacio para que sea tabular. Tenga en cuenta los parámetros encapsulantes: entrarán en juego en la siguiente tarea, pero aquí solo se aseguran de que la salida se ponga en la tubería (que ya sería, por lo que son redundantes).Tarea 4
Pruébalo en línea!
¡Ajá! Finalmente algo de redundancia. Dado que la tarea anterior tiene parens, podemos agregar
-split
espacios en blanco sin preocupaciones, convertir cada uno en un número entero|%{+$_}
y luego|sort
. La salida vuelve a estar separada por una nueva línea.Creo que hay algunas maneras de aprovechar mejor la redundancia entre tareas, aún jugando un poco.
fuente
ES2016-ish,
401384 caracteresAquí hay un primer intento. Estoy seguro de que podría condensarse un poco, pero es bastante corto. La flecha funciona FTW! (Me encantan esas declaraciones de retorno implícitas). ¡Nuevo y mejorado con cadenas de plantillas!
Tarea 1
Llame
z(n,m)
para la salida del registro. (Estoy aliasing console.log para jugar al golf más tarde).Tarea 2
Segundo verso ... se expande sobre el primero.
Ahora llama
y(n,m)
. Bonita, no?Tarea 3
Tiene que pasar por alto la mayor parte de la funcionalidad existente
<sadface />
.Ahora el nombre del método es
v
. Llámalo de la misma manera.Tarea 4
Y ahora podemos reutilizar nuevamente.
Tuvimos que pasa
u
por mi método, por lo que est
. Me fastidió que tuviera que poner esa función de clasificación, porque losString.match
valores devueltos como ... cadenas.fuente
Ruby,
121103bytesTodo en Ruby es Truthy a excepción de
nil
yfalse
, lo que significa que las tareas se pueden configurar para ignorar la entrada anterior con nada más que una buena posiciónand
/&&
.Tarea 1
Pruébalo en línea!
Tarea 2
Pruébalo en línea!
Tarea 3
Pruébalo en línea!
Tarea 4
Pruébalo en línea!
fuente