Geben Sie (mit allen Mitteln) zwei verschiedene natürliche Zahlen (von jeder vernünftigen Größe) aus, und geben Sie (mit allen Mitteln) das Quadrat ihrer Summe wie in den folgenden Beispielen aus:
Bei 4 und 3 wird ausgegeben:
12 12 12 12 9 9 9
12 12 12 12 9 9 9
12 12 12 12 9 9 9
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
Bei 1 und 3 wird ausgegeben:
3 9 9 9
3 9 9 9
3 9 9 9
1 3 3 3
Leerzeichen können innerhalb des Grundes variieren, aber die Spalten müssen linksbündig, rechtsbündig oder (pseudo-) zentriert sein.
Ein abschließender Zeilenumbruch ist in Ordnung, Standardlücken jedoch nicht.
Dies ist Codegolf. Fügen Sie daher einen Header wie # LanguageName, 123
in Ihrer Antwort ein, in dem die Zahl aus Zeichen besteht (Bytes für Sprachen, die nicht textbasiert sind). Das Packen von Code in große Unicode-Zeichen ist nicht zulässig.
Bonus: -3, wenn Ihr Code nur ein Quadrat ausgibt, wenn eine der Zahlen 0 ist; zB mit 0 und 3, Ausgabe:
9 9 9
9 9 9
9 9 9
Antworten:
J, 9 Bytes - 3 = 6
Inspiriert von der APL-Antwort von @ NBZ , aufgenommen von @randomra. Dies definiert ein Verb, das ein Array von Zahlen aufnimmt. Es wird wie folgt verwendet:
Ich beanspruche auch den 3-Byte-Bonus, da eine Eingabe von 0 Submatrizen der Größe Null erzeugt:
Erläuterung
J hat einen klaren Vorteil in dieser Herausforderung. Zusätzlich zum Verzehr von Array-Manipulationsproblemen beim Frühstück werden standardmäßig 2D-Matrizen im richtigen Format gedruckt.
quelle
table flipper
ASCII-Emoticon ((° □ °)) ╯︵Oktave, 45 Bytes - 3 = 42
Erläuterung
Dies konstruiert zwei Vektoren (nehmen wir an
m = 4
undn = 3
):ones(n, 1)
Konstruiert ein Array von Größenn x 1
, also multiplizierenn
wir diese mit:Dann werden die Vektoren mit automatischer Broadcast-Erweiterung elementweise multipliziert, so dass die 7-Element-Vektoren eine 7x7-Element-Matrix ergeben:
Zum Beispiel ergibt die Multiplikation der ersten Zeile
a
mitb
:Ähnliches gilt für die verbleibenden Reihen von
a
.Ausgabe:
Du kannst es hier auf ideone versuchen
quelle
s=
. Wir haben die Konvention, dass anonyme Funktionen / Lambdas nicht in einer Variablen gespeichert werden müssen.Dyalog APL , 10-3 = 7
Inspiriert * von dieser Antwort, bei der die Argumente repliziert und dann in einer Multiplikationstabelle verwendet werden:
⎕
Setzt eine Eingabeaufforderung (⎕:
) ab und wertet jeden dann eingegebenen Ausdruck aus. (Aus Sicherheitsgründen funktioniert dies nicht mit TryAPL, aber mit NGN / APL .)/⍨
Repliziert das Argument selbst mal (/⍨4 3
⇔3 3 3 4 4 4 4
)∘.×⍨
Erstellt eine Multiplikationstabelle.⊖
Dreht sich umDies funktioniert bei Eingaben beliebiger Länge (die Eingabe wird um 6 Leerzeichen eingerückt, die Ausgabe erfolgt am linken Rand):
* Ursprünglich hatte ich eine andere Lösung im Sinn: Jedes Rechteck wird separat erstellt, indem für jede Kombination der beiden Argumente eine Multiplikationstabelle erstellt wird. Dann werden die vier Quadrate vertikal und horizontal zusammengefügt. Es sieht aus wie das:
⎕
Eingabeaufforderung wie oben.,⍴×<
Kombiniere (,
) die Args und benutze sie, um⍴
ein Rechteck zu formen ( ), das mit ihrem Produkt gefüllt ist (×
).∘.(
…)⍨
Erstellen Sie eine Tabelle, in der jede Zelle das ist, was in(
…)
⊖
Vertikal spiegeln angegeben ist .⍪⌿
Zellen vertikal kombinieren.,/
Kombinieren Sie die Zellen horizontal.quelle
(|.*/])@#~
R 31-3 = 28
Erläuterung:
Dies funktioniert auch für mehr als zwei Nummern. Die Ausgabe für (5,3,2) sieht beispielsweise so aus:
quelle
cat
oder einwickeln, damitwrite
es eine gültige Antwort ist.Haskell,
153125 Bytes - 3 = 122Die Hälfte des Codes dient der Ausgabeformatierung. Es funktioniert für beliebige große ganze Zahlen. Beispielausgabe:
Manchmal gibt es ein zusätzliches Leerzeichen zwischen den Zahlen, weil ich den benötigten Speicherplatz berechnet habe,
x*x+y*y
anstattmax (x*x) (y*y)
zAber es ist höchstens ein Leerzeichen.
quelle
Mathematica 56-3 = 53
Update : Ich habe eine zweite Methode mit genau derselben Codegröße hinzugefügt, die eine benannte Funktion verwendet. Es verwendet
Array
eher ein als einTable
, folgt aber der gleichen Logik. (Siehe unten.)Methode 1
Dadurch wird eine Tabelle mit Produkten erstellt, deren Faktoren von den Zeilen- und Spaltenwerten abhängen. Das Zahlenpaar wird als Liste von ganzen Zahlen eingegeben. Anonyme Funktionen wie die folgenden sind am nützlichsten, wenn sie in einem Programm nur einmal verwendet werden. Andernfalls ist die Verwendung einer benannten Funktion sinnvoller.
Jeder Faktor ist eine Wenn-Dann-Aussage:
If[r>#2,#,#2]
bedeutet: "Wenn die Zeilennummer größer als die zweite Eingabe ist, verwenden Sie die erste Eingabe als Faktor, andernfalls verwenden Sie die zweite Eingabe.If[c>#,#2,#]
bedeutet: "Wenn die Spaltennummer größer als die erste Eingabe ist, verwenden Sie die zweite Eingabe als Faktor, andernfalls verwenden Sie die erste Eingabe.Beispiel 1
Beispiel 2
Methode 2 (auch 56-3 = 53)
Dies funktioniert ähnlich wie Methode 1. Beim Aufrufen wird jedoch weniger Code benötigt. Und die Zellen sind im Gegensatz zu Zellen in einer Tabelle adressierbar. Diese Methode ist besser anzuwenden, wenn die Funktion mehrmals verwendet wird.
Die obigen Beispiele werden wie folgt hergestellt:
Ex 1:
Ex 2:
quelle
Oktave, 34-3 = 31
Beispiele:
quelle
repelems
existiert. Genial!CJam, 27 Bytes - 3 = 24
Übernimmt die Eingabe als Array im CJam-Stil. Es braucht etwas mehr Abstand als nötig, aber ich denke, es ist "in Ordnung" und es ist immer richtig ausgerichtet.
Teste es hier.
Erläuterung
quelle
C-Funktion (unter Verwendung von glibc), 122 Bytes - 3 = 119
Meist einfache Implementierung mit 2 Schleifen. Ich gehe davon aus, dass es einige Golfmöglichkeiten gibt, die ich hier verpasst habe:
Eingaben werden in den ersten beiden Parametern der Funktion übergeben, die anderen beiden sind Dummies. Spalten sind rechtsbündig.
Beachten Sie, dass glibc
puts()
immer die Anzahl der geschriebenen Bytes einschließlich der impliziten Zeilenumbrüche zurückgibt, was wir hier brauchen. Keine Garantie, dass dies mit jeder anderen libc funktioniert.In einem vollen Programm:
Kompilieren Sie als
gcc sqrbin.c -o sqrbin
(odermake sqrbin
). Warnungen können ignoriert werden.Beispielausgabe:
quelle
puts()
maschinenabhängig. Es ist zum Beispiel 10 auf meinem. Hier ist auch ein Tipp: Sie können normalerweise zwei Schleifen zu einer komprimieren, wenn Sie den Zähler in der externen Schleife bedingt erhöhen. Meine Lösung zeigt, wie es geht.puts()
ist nur garantiert, dass der Rückkehrcode erfolgreich ist. Meine Tests mit glibc scheinen jedoch zu zeigen, dass der Rückgabewert die Anzahl der geschriebenen Bytes ist. Was die Loop-Konsolidierung angeht - ja, ich kenne diese Technik und habe sie hier bereits ausprobiert, in diesem Fall jedoch ohne Verkürzung.Ruby, (133-3) = 130 Bytes
für 4,3
für 1,3
für 0,3
quelle
1
und eine große Anzahl wie9999
. Alss
wird als herauskommen4
, so dass Sie Polsterung auf eine Breite vons+3 = 7
aber9999^2
braucht 8 Ziffern. Vielleicht möchten Sie2*s
stattdessen verwenden.rjust
bevor Sie es tunljust
. Sie können verkürzenprint
zu$><<
(und den Raum , nachdem sie loszuwerden).ARGV
hat einen Alias$*
. Sie können dies möglicherweise vermeiden,flatten
indem Sie Ihr Array folgendermaßen erstellen : codegolf.stackexchange.com/a/19493/8478 . Außerdem sind hier auf jeden Fall nur funktionale Antworten zulässig (auch unbenannte Funktionen), sodass für diese Funktion die Ganzzahlen als Eingaben verwendet werden können und Sie keine Eingaben vornehmen müssen.to_i
.Python 2, 176 Bytes - 3 = 173
Hierbei werden Python-Zeichenfolgenfunktionen verwendet, um ein Zeichenraster zu erstellen. Anschließend werden die Zeichen durch Ganzzahlen ersetzt und die formatierte Ausgabe gedruckt.
quelle
Matlab, 58-3 = 55
Verwenden einer anonymen Funktion:
Beispiel:
(Alte Lösung) 59-3 = 56
Verwenden einer anonymen Funktion:
quelle
C, (125-3) Bytes
Die Eingabe erfolgt als zwei durch Leerzeichen getrennte Ganzzahlen in derselben Zeile. Jede Zelle wird bis zur doppelten Länge der Eingabezeichenfolge mit Leerzeichen aufgefüllt.
quelle
Pyth, 39-3 = 36
In Pyth ist keine Matrixformatierung integriert, wodurch die Größe erheblich erhöht wird, da die Ausgabenummern manuell aufgefüllt werden müssen. Folgendes habe ich mir ausgedacht.
Probieren Sie es online aus.
quelle
Blöcke , 51 Bytes
52628287(nicht konkurrierend)Ungolfed:
Versuch es
quelle