Este desafío está relacionado con algunas de las características del lenguaje MATL, como parte del evento Idioma del mes de mayo de 2018 . Reto asociado: Portapapeles de funciones: copia .
Introducción
El portapapeles de funciones de MATL almacena ("copia") las entradas a las cuatro llamadas más recientes a las funciones normales de toma de entrada. Las funciones normales son el tipo más común de funciones en MATL. La toma de entrada significa que la función toma al menos una entrada. El contenido del portapapeles almacenado se puede insertar en la pila ("pegar").
Este desafío tomará el contenido del portapapeles como entrada. Se supondrá que todas las funciones que han producido ese estado del portapapeles tomaron uno o más enteros positivos como entradas. Por lo tanto, el estado del portapapeles se puede representar mediante una lista de listas de números. (Para obtener más información sobre cómo se llena el portapapeles, consulte el desafío relacionado; pero eso no es necesario para el actual).
Interpretando el contenido del portapapeles
Ejemplo 1
La primera lista interna se refiere a la llamada de función más reciente , y así sucesivamente, por lo tanto, el estado del portapapeles
[[11, 28], [12, 16], [4], [5, 6]]
indica que la última llamada a la función se llevó dos entradas, es decir 11, 28; la penúltima llamada tomó entradas 12, 16; etc. (Este estado del portapapeles es producido por el código en el primer ejemplo del desafío relacionado).
Ejemplo 2
Si no ha habido suficientes llamadas a funciones , algunas listas internas finales en el portapapeles estarán vacías:
[[7, 5], [], [], []]
(Esto es producido por un programa que simplemente agrega 7y 5).
Ejemplo 3
Las llamadas a funciones pueden tener cualquier cantidad de entradas , pero siempre al menos 1(las funciones que no toman entradas no cambian el estado del portapapeles). Entonces lo siguiente también es posible.
[[3], [2, 40, 34], [7, 8, 15], []]
Accediendo al contenido del portapapeles
El contenido del portapapeles de funciones se inserta en la pila utilizando la función de MATL M(que, por cierto, no es una función normal, sino una función de portapapeles). Esta función toma un entero positivo como entrada y empuja algunos de los contenidos del portapapeles a la pila, de la siguiente manera. Con referencia al estado del portapapeles en el ejemplo 1:
[[11, 28], [12, 16], [4], [5, 6]]
1Mdevuelve todas las entradas a la llamada de función más reciente. Así, para el ejemplo considerado, da11,28.- Del mismo modo,
2M,3My4Mdevolver todas las entradas a la segunda, tercera y cuarta llamadas a funciones más recientes. Así2Mda12,16;3Mda4; y4Mda5,6. - Números más allá de las entradas individuales
4seleccionadas para llamadas de función que tomaron más de una entrada. Por lo tanto, devuelve la última entrada a la llamada más reciente . En nuestro caso esto da . devuelve la entrada individual anterior , que es . devuelve la última entrada de la penúltima llamada, es decir , y da . Ahora da . Observe cómo se omite la entrada porque era la única entrada en su llamada a la función. Por último, da .5M286M117M168M129M6410M5
Para el estado del portapapeles en el ejemplo 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1Mda3.2Mda2,40,34.3Mda7,8,15.4Mtiene un comportamiento indefinido (para los propósitos de este desafío), porque solo ha habido tres llamadas a funciones.5Mda34.6Mda40.7Mda2.8Mda15.9Mda8,10Mda7.11M,12M... también tienen un comportamiento indefinido .
El reto
Entrada :
- el estado del portapapeles, como una lista de listas, o cualquier otro formato razonable;
- un entero positivo n .
Salida : el resultado de llamar a la función Mcon n como entrada. La salida será uno o varios números con un separador inequívoco, o en cualquier formato razonable, como una lista o matriz.
Aclaraciones:
- El estado del portapapeles consta de cuatro listas de números. Algunas de las listas finales pueden estar vacías, como en los ejemplos 2 y 3. Si lo prefiere, puede ingresar el portapapeles sin esas listas vacías finales. Entonces el ejemplo 3 se convertiría
[[3], [2, 40, 34], [7, 8, 15]]. - Todos los números en el portapapeles serán enteros positivos, posiblemente con más de un dígito.
- Se garantiza que el número n es válido. Entonces, por ejemplo, 3 arriba,
nno puede ser4o11.
Reglas adicionales:
La entrada y la salida se pueden tomar por cualquier medio razonable .
Se permiten programas o funciones, en cualquier lenguaje de programación . Las lagunas estándar están prohibidas .
El código más corto en bytes gana.
Casos de prueba
Clipboard state
Number
Output(s)
[[11, 28], [12, 16], [4], []]
2
12, 16
[[11, 28], [12, 16], [4], []]
5
28
[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144
[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4
[[30], [40], [50, 60], [70, 80, 90]]
2
40
[[30], [40], [50, 60], [80, 90]]
7
90
[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5
[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2