Diese Herausforderung steht im Zusammenhang mit einigen Funktionen der MATL-Sprache im Rahmen des Events Sprache des Monats im Mai 2018 . Assoziierte Herausforderung: Funktion Zwischenablage: Kopieren .
Einführung
Die Funktions-Zwischenablage von MATL speichert ("kopiert") die Eingaben zu den vier letzten Aufrufen für normale Eingabeaufnahmefunktionen. Normale Funktionen sind der häufigste Funktionstyp in MATL. Eingabeaufnahme bedeutet, dass die Funktion mindestens eine Eingabe aufnimmt. Der gespeicherte Inhalt der Zwischenablage kann auf den Stapel geschoben ("eingefügt") werden.
Bei dieser Abfrage wird der Inhalt der Zwischenablage als Eingabe verwendet. Es wird angenommen, dass alle Funktionen, die diesen Zwischenablagezustand erzeugt haben, eine oder mehrere positive Ganzzahlen als Eingaben verwendeten. So kann der Zustand der Zwischenablage durch eine Liste von Nummernlisten dargestellt werden. (Weitere Informationen darüber, wie die Zwischenablage tatsächlich gefüllt ist, finden Sie in der entsprechenden Aufforderung. Dies ist jedoch für die aktuelle nicht erforderlich.)
Interpretation des Inhalts der Zwischenablage
Beispiel 1
Die erste innere Liste bezieht sich auf den letzten Funktionsaufruf und so weiter, also auf den Zustand der Zwischenablage
[[11, 28], [12, 16], [4], [5, 6]]
zeigt an, dass der letzte Funktionsaufruf zwei Eingänge hat, nämlich 11
, 28
; vorletzten Anruf hat Eingänge 12
, 16
; usw. (Dieser Zwischenablagezustand wird durch den Code im ersten Beispiel der zugehörigen Abfrage erzeugt.)
Beispiel 2
Wenn es nicht genügend Funktionsaufrufe gegeben hat , sind einige nachgestellte innere Listen in der Zwischenablage leer:
[[7, 5], [], [], []]
(Dies wird von einem Programm erzeugt, das einfach 7
und hinzufügt. 5
)
Beispiel 3
Funktionsaufrufe können eine beliebige Anzahl von Eingaben haben , mindestens jedoch 1
(Funktionen, die keine Eingaben annehmen, ändern den Status der Zwischenablage nicht). So ist auch folgendes möglich.
[[3], [2, 40, 34], [7, 8, 15], []]
Zugriff auf den Inhalt der Zwischenablage
Der Inhalt der Funktions-Zwischenablage wird mit der Funktion von MATL M
(die übrigens keine normale Funktion, sondern eine Zwischenablage-Funktion ist) auf den Stapel verschoben . Diese Funktion verwendet eine positive Ganzzahl als Eingabe und verschiebt einen Teil des Inhalts der Zwischenablage wie folgt auf den Stapel. In Bezug auf den Status der Zwischenablage in Beispiel 1:
[[11, 28], [12, 16], [4], [5, 6]]
1M
Gibt alle Eingaben zum letzten Funktionsaufruf zurück. Also, für das in Betracht gezogenen Beispiel, gibt es11
,28
.- In ähnlicher Weise
2M
,3M
und das4M
Rück alle Eingaben an den zweiten, dritten und vierten letzten Funktionsaufrufe. So2M
gibt12
,16
;3M
gibt4
; und4M
gibt5
,6
. - Zahlen jenseits
4
ausgewählter einzelner Eingänge für Funktionsaufrufe, die mehr als einen Eingang belegt haben. So5M
gibt die letzte Eingabe in den letzten solchen Anruf. In unserem Fall gibt dies28
.6M
gibt die vorhergehende individuelle Eingabe zurück11
.7M
gibt die letzte Eingabe des vorletzten Aufrufs zurück, das heißt16
, und8M
gibt12
. Nun9M
gibt6
. Beachten Sie, wie Eingaben4
übersprungen werden, da dies die einzige Eingabe in ihrem Funktionsaufruf war. Zuletzt10M
gibt5
.
Für den Zwischenablage-Status in Beispiel 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
gibt3
.2M
gibt2
,40
,34
.3M
gibt7
,8
,15
.4M
hat undefiniertes Verhalten (für die Zwecke dieser Herausforderung), da es nur drei Funktionsaufrufe gab.5M
gibt34
.6M
gibt40
.7M
gibt2
.8M
gibt15
.9M
gibt8
,10M
gibt7
.11M
,12M
, ... haben auch nicht definiertes Verhalten .
Die Herausforderung
Eingabe :
- den Zustand der Zwischenablage als eine Liste von Listen oder ein anderes vernünftiges Format;
- eine positive ganze Zahl n .
Ausgabe : Das Ergebnis des Aufrufs der Funktion M
mit n als Eingabe. Die Ausgabe erfolgt in einer oder mehreren Zahlen mit einem eindeutigen Trennzeichen oder in einem angemessenen Format wie einer Liste oder einem Array.
Klarstellungen:
- Der Status der Zwischenablage besteht aus vier Nummernlisten. Einige der nachfolgenden Listen sind möglicherweise leer, wie in den Beispielen 2 und 3. Bei Bedarf können Sie die Zwischenablage auch ohne die nachfolgenden leeren Listen eingeben. So würde Beispiel 3 werden
[[3], [2, 40, 34], [7, 8, 15]]
. - Alle Zahlen in der Zwischenablage sind positive Ganzzahlen, möglicherweise mit mehr als einer Ziffer.
- Die Nummer n ist garantiert gültig. So kann zum Beispiel 3 oben
n
nicht4
oder sein11
.
Zusätzliche Regeln:
Eingabe und Ausgabe können mit jedem vernünftigen Mittel erfolgen .
Programme oder Funktionen sind in jeder Programmiersprache zulässig . Standardlücken sind verboten .
Kürzester Code in Bytes gewinnt.
Testfälle
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