Ce défi est lié à certaines des fonctionnalités du langage MATL, dans le cadre de l' événement Langue du mois de mai 2018 . Défi associé: Fonction presse-papiers: copie .
introduction
Le presse-papiers des fonctions de MATL stocke ("copie") les entrées des quatre derniers appels aux fonctions normales de prise d'entrée. Les fonctions normales sont le type de fonctions le plus courant dans MATL. La prise d'entrée signifie que la fonction prend au moins une entrée. Le contenu du presse-papiers stocké peut être poussé sur la pile ("collé").
Ce défi prendra le contenu du presse-papiers en entrée. On supposera que toutes les fonctions qui ont produit cet état du presse-papiers ont pris un ou plusieurs entiers positifs comme entrées. Ainsi, l'état du presse-papiers peut être représenté par une liste de listes de nombres. (Pour plus d'informations sur la façon dont le presse-papiers est réellement rempli, consultez le défi associé; mais ce n'est pas nécessaire pour le présent).
Interprétation du contenu du presse-papiers
Exemple 1
La première liste interne fait référence à l' appel de fonction le plus récent , et ainsi de suite. Ainsi, l'état du presse-papiers
[[11, 28], [12, 16], [4], [5, 6]]
indique que le dernier appel de fonction a deux entrées, à savoir 11
, 28
; le deuxième dernier appel a pris des entrées 12
, 16
; etc. (Cet état du presse-papiers est produit par le code dans le premier exemple du défi associé).
Exemple 2
S'il n'y a pas eu suffisamment d'appels de fonction , certaines listes internes de fin dans le presse-papiers seront vides:
[[7, 5], [], [], []]
(Ceci est produit par un programme qui ajoute simplement 7
et 5
).
Exemple 3
Les appels de fonction peuvent avoir un nombre quelconque d'entrées , mais toujours au moins 1
(les fonctions ne prenant aucune entrée ne modifient pas l'état du presse-papiers). Donc, ce qui suit est également possible.
[[3], [2, 40, 34], [7, 8, 15], []]
Accéder au contenu du presse-papiers
Le contenu du presse-papiers de fonction est poussé sur la pile en utilisant la fonction de MATL M
(qui, soit dit en passant, n'est pas une fonction normale, mais une fonction de presse-papier). Cette fonction prend un entier positif en entrée et pousse une partie du contenu du presse-papiers dans la pile, comme suit. En référence à l'état du presse-papiers dans l'exemple 1:
[[11, 28], [12, 16], [4], [5, 6]]
1M
renvoie toutes les entrées à l'appel de fonction le plus récent. Ainsi, pour l'exemple considéré, il donne11
,28
.- De même,
2M
,3M
et4M
retourner toutes les entrées à la deuxième, troisième et quatrième appels de fonctions les plus récentes. Alors2M
donne12
,16
;3M
donne4
; et4M
donne5
,6
. - Les nombres au-delà de
4
sélectionner des entrées individuelles pour faire fonctionner les appels qui ont pris plus d'une entrée. Renvoie donc5M
la dernière entrée à l' appel le plus récent . Dans notre cas, cela donne28
.6M
renvoie l' entrée individuelle précédente , qui est11
.7M
renvoie la dernière entrée de l'avant-dernier appel, c'est-à-dire16
, et8M
donne12
. Maintenant,9M
donne6
. Notez comment l'entrée4
est ignorée car c'était la seule entrée dans son appel de fonction. Enfin,10M
donne5
.
Pour l'état du presse-papiers dans l'exemple 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
donne3
.2M
donne2
,40
,34
.3M
donne7
,8
,15
.4M
a un comportement indéfini (pour les besoins de ce défi), car il n'y a eu que trois appels de fonction.5M
donne34
.6M
donne40
.7M
donne2
.8M
donne15
.9M
donne8
,10M
donne7
.11M
,12M
... ont aussi un comportement non défini .
Le défi
Entrée :
- l'état du presse-papiers, sous forme de liste de listes, ou tout autre format raisonnable;
- un entier positif n .
Sortie : résultat de l'appel de la fonction M
avec n en entrée. La sortie sera un ou plusieurs nombres avec un séparateur sans ambiguïté, ou dans un format raisonnable tel qu'une liste ou un tableau.
Précisions:
- L'état du presse-papiers se compose de quatre listes de nombres. Certaines listes de fin peuvent être vides, comme dans les exemples 2 et 3. Si vous préférez, vous pouvez saisir le presse-papiers sans ces listes vides de fin. Ainsi, l'exemple 3 deviendrait
[[3], [2, 40, 34], [7, 8, 15]]
. - Tous les nombres dans le presse-papiers seront des entiers positifs, éventuellement avec plus d'un chiffre.
- Le nombre n est garanti d'être valide. Ainsi, par exemple 3 ci-dessus,
n
ne peut pas être4
ou11
.
Règles supplémentaires:
L'entrée et la sortie peuvent être prises par tout moyen raisonnable .
Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites .
Le code le plus court en octets gagne.
Cas de test
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