In dieser Herausforderung erhalten Sie vier verschiedene, aber etwas verwandte Aufgaben, die auf eine bestimmte Art und Weise gelöst werden müssen. Zuerst erkläre ich die Aufgaben, dann folgt eine Erklärung, wie Sie sie lösen müssen.
Ihr Code sollte für alle vier Aufgaben zwei positive Ganzzahlen als Eingabe verwenden: n,m
wobei n<m
. Alle Aufgaben müssen in derselben Sprache gelöst werden. Die Ausrichtung der Matrizen ist optional (n-mal-m kann als "n Zeilen, m Spalten" oder "n Spalten, m Zeilen" interpretiert werden).
Aufgabe 1:
Erstellen (und Ausgabe / Druck) einen Vektor / Liste bestehend aus den Elementen: n, n+1 ... m-1, m
. Für n=4, m=9
sollten Sie also Folgendes ausgeben:4,5,6,7,8,9
.
Schritt 2:
Erstellen (und ausgeben / drucken) einer Matrix / eines Arrays / einer Liste von Listen (oder einer entsprechenden Liste) mit folgendem Aussehen:
n, n+1, ... m-1, m
n+1, n+2, ... m-1, m+1
...
n+m, n+m+1, ... 2*m-1, 2*m
Denn n=4, m=9
Sie sollten ausgeben:
4, 5, 6, 7, 8, 9
5, 6, 7, 8, 9, 10
...
13, 14, 15, 16, 17, 18
Schritt 3:
Erstellen (und ausgeben / drucken) einer n-mal-m-Multiplikationstabelle (in einem beliebigen geeigneten Format). Beispiel für 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
Schritt 4:
Ausgeben / Drucken eines Vektors / einer Liste, die aus den Elementen in der Multiplikationstabelle aus Aufgabe 3 besteht, sortiert in aufsteigender Reihenfolge, wobei doppelte Werte beibehalten werden. Für n=4, m=9
, sollten Sie die Ausgabe: 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
.
Die Herausforderung:
Jetzt sind alle oben genannten Aufgaben ziemlich trivial. Die eigentliche Herausforderung hierbei ist, dass der Code für Aufgabe 2 mit dem Code für Aufgabe 1 beginnen muss, der Code für Aufgabe 3 mit dem Code für Aufgabe 2 beginnen muss und der Code für Aufgabe 4 mit dem Code für Aufgabe 3 beginnen muss.
Um es klarer zu machen:
Angenommen, der Code für Task 1 lautet (funktioniert in Octave):
@(n,m)(n:m)
Dann könnte Ihr Code für Aufgabe 2 lauten (funktioniert in Octave):
@(n,m)(n:m)+(0:m)'
Der Code für die Aufgabe Aufgabe 3 muss sein (funktioniert nicht in Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3"
Und schließlich muss der Code für Task 4 sein (funktioniert nicht in Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3""Code_for_task_4"
Dies ist Code-Golf , daher gewinnt die Einsendung mit dem kürzesten Code für Aufgabe 4 in jeder Sprache. Wie immer: Erklärungen sind ausdrücklich erwünscht.
>2;
sodass der Code der vorherigen Aufgabe im Wesentlichen als No-Op dargestellt wird?0<n<m
oder0<=n<m
?Antworten:
Gelee , 12 Bytes
Aufgabe 1
Probieren Sie es online!
Aufgabe 2
Probieren Sie es online!
Aufgabe 3
Probieren Sie es online!
Aufgabe 4
Probieren Sie es online!
Wie es funktioniert
Aufgabe 1
r
ist das dyadische Bereichsatom und macht genau das, was die Aufgabe verlangt.Aufgabe 2
Eine dyadische Kette, die mit drei dyadischen Gliedern beginnt, ist eine Gabel ; Die äußersten Links werden zuerst ausgewertet, dann wird der mittlere Link mit den Ergebnissen zu beiden Seiten als Argumente aufgerufen.
r
verhält sich wie zuvor und ergibt [n,…, m] .0r$}
ist ein Quicklink (oder Quickquicklink, wenn Sie so wollen).Die schnelle
$
(Monadich-Kette) verbraucht die Glieder0
(Ausbeute 0 ) undr
(dyadischer Bereich) und verwandelt sie in eine monadische Kette. Wenn mit dem Argument k aufgerufen wird, ergibt dies [0,…, k] .Das schnelle
}
(rechtes Argument) führt den Quicklink erstellt von$
und verwandelt es in einen Dyade Link , dass Anrufe0r$
mit0r$}
‚s rechten Argumente.0r$}
wird mit linkem Argument n und rechtem Argument aufgerufen m , so0r$
wird mit dem Argument Ursprungserzeugnisse m und Ausbeuten [0, ..., m] .+þ
ist ein weiterer Quicklink.þ
(table) ruft+
für jedes Element in seinem linken Argument und für jedes Element in seinem rechten Argument (addition) auf und gruppiert die Ergebnisse für jedes rechte Argument in einer einzelnen Zeile.+þ
wird mit linkem Argument [n,…, m] und rechtem Argument [0,…, m] aufgerufen und ergibt die gewünschte Tabelle.Aufgabe 3
Jede Zeile in einem Jelly-Programm definiert einen anderen Link. Der letzte Link ist der Hauptlink und wie die
main
Funktion von C der einzige Link, der standardmäßig ausgeführt wird. Die restlichen Links können über den Hauptlink aufgerufen werden, aber wir werden dies hier nicht tun.Wie zuvor
þ
ruft (table)×
für jedes Element in seinem linken Argument und für jedes Element in seinem rechten Argument (addition) auf und gruppiert die Ergebnisse für jedes rechte Argument in einer einzelnen Zeile.Da beide Argumente
×þ
Ganzzahlen sind, werdenþ
sie in Bereiche umgewandelt, wobei die Argumente n und m in [1,…, n] und [1,…, m] umgewandelt werden .Aufgabe 4
×þ
funktioniert wie bisher. Die folgenden Links sind monadisch und machen sie übergeordnet bezeichnet , das heißt, sie oben auf den vorherigen angewendet werden.Nach der Ausführung
×þ
,F
flacht den resultierenden 2D - Array, undṢ
sortiert den resultierenden 1D - Array.quelle
05AB1E ,
1817 BytesAufgabe 1
Probieren Sie es online aus
Aufgabe 2
Probieren Sie es online aus
Aufgabe 3
Probieren Sie es online aus
Aufgabe 4
Probieren Sie es online aus
Erklärungen
Aufgabe 1
Aufgabe 2
Aufgabe 3
Aufgabe 4
quelle
MATL ,
1817 BytesAufgabe 1
Probieren Sie es online!
Aufgabe 2
Probieren Sie es online!
Aufgabe 3
Probieren Sie es online!
Aufgabe 4
Probieren Sie es online!
Erläuterung
Aufgabe 1
Aufgabe 2
Aufgabe 3
Aufgabe 4
quelle
Mathematica,
84.77BytesEdit: Danke an Martin Ender für das Speichern von 7 Bytes.
Aufgabe 1:
Rein
Function
mit Argumentenn
undm
welche Ausgabenn~Range~m
, die Infixform vonRange[n,m]
.Schritt 2:
n~Range~m~Table~(m+1)
Erstellt ein 2D-Array mitm+1
Zeilen, wobei jede Zeile die Ausgabe der vorherigen Aufgabe ist. Dann//0~Range~m+#&
ist Postfix Anwendung der Funktion ,0~Range~m+#&
die wirksam fügt0
zu der ersten Reihe1
zu der zweiten Reihe und so weiter bis zum
derm+1
-ten Zeile.Schritt 3:
Dies wendet nur die konstante Funktion
1##&~Array~{n,m}&
auf die Ausgabe der vorherigen Aufgabe an.Schritt 4:
Flatten
s undSort
s die Multiplikationstabelle.quelle
Python, 183 Bytes
Aufgabe 1, 29 Bytes
Probieren Sie es online!
Aufgabe 2, 84 Bytes
Probieren Sie es online!
Aufgabe 3, 137 Bytes
Probieren Sie es online!
Task 4,
183167 BytesProbieren Sie es online!
Erläuterung:
Aufgabe 1:
Einfach genug, erzeugt er eine
n
auf derm
Liste mit Python-internerange
Funktion.Schritt 2:
Für jede Nummer
0
zum+1
wird diese Nummer zu jedem Element einer Liste vonn
bis hinzugefügtm
.Schritt 3:
Für jede Zahl von
1
bism
wird diese Zahl mit jeder Zahl in einer Liste von1
bis multipliziertn
.Schritt 4:
Hierbei wird die in Python integrierte
sorted
Funktion verwendet, mit der eine Liste von der niedrigsten zur höchsten sortiert wird. Das Listenverständnis in der Funktion wird verwendet, um die Liste zu verflachen. Es wird eine Liste jedes Elements in jedem Element der Liste erstellt, die ihm von Aufgabe 3 zugewiesen wurde.Sehr viele Bytes dank @math_junkie gespeichert.
quelle
def s(n,m):return [[w+i for w in r(n,m)] for i in a(0,m+1)]
ist eine vollständige Funktion, wenn der Code für Aufgabe 1 definiert ist.a=lambda n,m:...
für jede Ihrer Funktionsdefinitionen etwas Ähnliches tun . Anonyme Funktionen sind in Python immer kürzerPHP 7, 200 Bytes
Verwendet den Ausgabepuffer, um die vorherige Ausgabe zu löschen.
Aufgabe 1
Speichert den Code in
$s
, um ihn später wiederzuverwenden. Das$v
Variable ist für die letzte Aufgabe.Aufgabe 2
Druckt die restlichen Zeilen.
Aufgabe 3
Löscht den Ausgabepuffer und druckt die Multiplikationstabelle, wobei die Zahlen in gespeichert werden
$v
.Aufgabe 4
Löscht den Ausgabepuffer erneut und druckt
$v
.quelle
PowerShell , 126 Byte
Aufgabe 1
Probieren Sie es online!
Verwendet den
..
eingebauten Bereichsoperator. Das Standardverhalten für impliziteWrite-Output
Elemente fügt einen Zeilenumbruch zwischen die Elemente ein. Daher wird die Ausgabe als Zeilenumbruch getrennt angezeigt.Aufgabe 2
Probieren Sie es online!
Setzt die erste Aufgabe mit STDERR ab und
>2;
führt dann eine Schleife von0
bis zu$m
jedem Iterationseinstellungs-Helfer durch,$i
bevor erneut eine Schleife von$n
bis erstellt$m
und jede Zahl um erhöht wird$i
. Diese werden-join
zusammen mit Kommas ausgegeben, da dies sonst eine mehrdeutige, lange Ausgabe mit einem Element pro Zeile wäre.Aufgabe 3
Probieren Sie es online!
Gleiches gilt
>2;
für STDERR. Dann haben wir einfach ein Doppelklick Schleife von1
bis$m
dann1
zu$n
, das Setzen von Helfern$i
auf dem Weg, multiplizieren Sie die Werte, und-join
mit einem Raum zu machen tabellarisch. Beachten Sie die einkapselnden Parens - sie werden bei der nächsten Aufgabe ins Spiel kommen -, aber hier stellen sie nur sicher, dass die Ausgabe in die Pipeline gestellt wird (die es bereits wäre, also sind sie redundant).Aufgabe 4
Probieren Sie es online!
Aha! Endlich etwas Redundanz. Da die vorherige Aufgabe über Parens verfügt, können wir das
-split
On-Whitespace ohne Bedenken anheften, jedes in eine Ganzzahl umwandeln|%{+$_}
und dann|sort
. Die Ausgabe ist wieder Newline-getrennt.Ich denke, es gibt einige Möglichkeiten, die Redundanz zwischen den Aufgaben besser zu nutzen - und dennoch einige Möglichkeiten, Golf zu spielen.
quelle
ES2016-ish,
401384 ZeichenHier ist ein erster Versuch. Ich bin sicher, es könnte ein bisschen verkürzt werden, aber es ist ziemlich kurz. Pfeilfunktionen FTW! (Lieben Sie diese impliziten return-Anweisungen.) Neu und verbessert mit Template-Strings!
Aufgabe 1
Aufruf
z(n,m)
für die Protokollausgabe. (Ich benenne console.log für späteres Golfen.)Aufgabe 2
Zweiter Vers ... erweitert den ersten.
Rufen Sie jetzt an
y(n,m)
. Schön, nein?Aufgabe 3
Müssen den größten Teil der vorhandenen Funktionalität umgehen
<sadface />
.Jetzt lautet der Methodenname
v
. Nenne es genauso.Aufgabe 4
Und jetzt können wir wieder verwenden.
Musste
u
für meine Methode überspringen , so ist est
. Blöd, dass ich diese Sortierfunktion einsetzen musste, weil dieString.match
Rückgabewerte als ... Strings vorliegen .quelle
Ruby,
121103 BytesAlles in Ruby ist truthy Ausnahme
nil
undfalse
, was bedeutet , dass die Aufgaben aufgebaut werden können vorherige Eingabe mit nichts als ein gut platzierter ignorierenand
/&&
.Aufgabe 1
Probieren Sie es online!
Aufgabe 2
Probieren Sie es online!
Aufgabe 3
Probieren Sie es online!
Aufgabe 4
Probieren Sie es online!
quelle