Das Puzzle
Sie müssen ein Programm oder eine Funktion p (n) schreiben, die das Quadrat der Eingabe zurückgibt, und Sie können davon ausgehen, dass die Eingabe eine nicht negative Ganzzahl ist. Einfacher ausgedrückt, geben Sie n 2 zurück .
Regeln
- Es ist Ihnen nicht gestattet,
*
oder/
(oder einen anderen Potenz- oder Quadratwurzeloperator wiePOW
oderSQRT
, wenn Ihre Sprache solche Funktionen enthält) zu verwenden. - Sie dürfen keine Schleife oder Konstruktionen verwenden, die einer Schleife ähnlich sind. Beispiel für schleifenartige Konstruktionen sind
GOTO
und Rekursion.
Beispiel
Function p(n)
Dim r()
ReDim r(n)
p = Len(Join(r, Space(n)))
End Function
Seien Sie kreativ und (ab) nutzen Sie die Funktionen und Merkmale, die Ihnen die Sprache Ihrer Wahl bietet.
*bearbeiten
Schleifenartige Strukturen sind Schleifen, mit denen Sie eine oder mehrere Anweisungen wiederholen können
-wenn Sie stdout "1"
Ihrem Code ein hinzufügen könnten und diese Ausgabe am Ende n-mal wiederholen würden, würde dies als Schleife gelten
m*n
anstatt dasn*n
zu verwenden*
. Siehe codegolf.stackexchange.com/a/18283/14485Antworten:
CJam setzt seine Brille auf
Eingabe über STDIN
Probieren Sie den Code hier aus
Beachten Sie, dass
*
der Code nicht als Multiplikation, sondern als Verknüpfungsoperator verwendet wirdBeachten Sie auch, dass der coole Teil des Codes nicht nur eine Zeichenfolge ist, sondern die Hälfte davon der Code, der zum Finden des Quadrats erforderlich ist. Also .. HANDEL MIT IHM
Dies wird Ihnen helfen, damit umzugehen:
quelle
Rubin
quelle
FromDigits[{1, 0, 0}, Input[]]
. Gleiches in CJam:4Ybl~b
APL? ∊⍵⍵
Diese Antwort ist allen Personen gewidmet, die "" "setzen, wenn sie die APL-Symbole sehen :-)
Beispiele
Erläuterung
quelle
+/
in anderen Sprachen heißtsum()
und ich sehe viele Antworten damit. Aus dem gleichen Grund konnten Sie nicht*
in CJam verwenden.Missbrauch einiger Funktionen in Mathematica
Zweimal die Fläche eines gleichschenkligen rechtwinkligen Dreiecks
Die Fläche eines Quadrats. Na sicher!
Die gleiche Idee in einer anderen Form:
Die Anzahl der Elemente in einer quadratischen Matrix:
oder
oder
oder
usw...
quelle
k[n_] := Integrate[n, {x, 0, n}]
?Integrate
sehr schön, aber es iteriert, was ich für eine Form des Loopings halte.Area
und Freunde sind implizite Multiplikation (aber auch erlaubt)C.
Hinweis:
int
wird verwendet, um die Anzahl der Zeichen und Stilpunkte zu reduzieren.quelle
Mathematica
Eine weitere Antwort mit einigen lustigen Mathematica-Funktionen
Ein vollständiger Graph mit
n
Eckpunkten hatbinom(n,2) = n(n-1)/2
Kanten (dies ist auch die n-te Dreieckszahl). Das Ergebnis ist also einfach doppelt so hoch wie die Eingabe.quelle
Python 2
Rein mathematisch, um verbotene Operationen zu vermeiden:
Dies ist der übliche
exp(ln(x)*y)
Trick, der auf dieses Problem zugeschnitten ist:ln(x)+ln(x)
die Multiplikation loswerden.math.exp()
dem verbotenen "POW" für Fairplay etwas zu nahe kommt, also wird stattdessen das Ganze in einen Komplex umgewandelt und Eulers Identität wird verwendet, um dasexp()
mitcos()
und zu ersetzensin()
i
erforderlichcomplex()
ist, wird stattdessen die Funktion verwendet.quelle
math.log
, könnencmath.log
Sie mit negativen Zahlen umgehen. Das brauchen Sie dann auch nichtimport math
.input
macht nicht das, was Sie in Python 2 denken, und in Python 3print
ist eine Funktion anstelle einer Anweisung.input
in Python 2? ;-). Ich würde dies sicherlich anders schreiben, wenn dies Produktionscode wäre, aber für die Zwecke dieser Herausforderung ist es in Ordnung, solange die Eingabe ein wohlgeformter numerischer Ausdruck ist. Ich verstehe, dass es dort eine implizite Bewertung und ihre potenzielle Bösartigkeit gibt.Pure Bash
Keine expliziten Schleifen oder Arithmetik:
Verwendet Bash-Erweiterungen, um zwei Listen 1-n zu erstellen und diese in Klammern zu erweitern und die Größe des resultierenden Arrays anzuzeigen.
Ähnliche Methode, aber stattdessen Coreutils verwenden:
quelle
R, köstliche Ineffizienz mit Monte Carlo
Die Erwartung
E[x]
für die Form- / Skalenparametrisierung der Gammaverteilung istshape*scale
.Ich sehe kein
mean
Verbot, also hier ist die Beispiellösung mitmean()
Ohne Verwendung
mean()
ist es möglich zu verwendenmode[x]
, was gleich ist(shape-1)*scale
, aber dies beinhaltet das Schreiben eineradd.one
Funktion zum Umgehen und+1
dann das Schreiben einer anderenMode
Funktion zum Tabellieren des Modus.Die Genauigkeit ist nicht garantiert, aber für 1.000.000.000 Proben sollte ein Gesetz von großer Anzahl gelten, was mir für alle meine Testfälle die richtigen Ergebnisse gebracht hat.
quelle
Java
Erster Eintrag, funktioniert das so?
quelle
C #
Erstellt eine Zeichenfolge mit n Zeichen und ersetzt dann jedes Zeichen durch die Zeichenfolge mit n Zeichen. Dies erzeugt einen String mit einer Länge von n * n.
Testen Sie es hier: http://ideone.com/lubIFg .
quelle
Matlab
Eine Warnung: Dies basiert hauptsächlich auf Mathematik. Erwarten Sie also keinen ausgefallenen Quellcode
Beachten Sie, dass
a = n^2
ifflog(a) = log(n)*2
ifflog(log(a)) = log(log(n))+log(2)
. Diese Funktion findet also nur die Null der Funktion,f(a) = log(log(n))+log(2) - log(log(a))
die offensichtlich bei ista = n^2
.Hier einige andere nicht sehr kreative Funktionen:
Hier summiert das Programm die Zahl
1+2+3+...+n = 1/2 * (n^2+n)
zweimal und subtrahiertn
, so dass das Ergebnis immer istn^2
Diese Funktion erstellt eine
n x n
Matrix von Zufallszahlen (zwischen 0 und 1) und gibt dann die Anzahl der Elemente zurück.Die folgende Funktion erstellt eine Vandermonde-Matrix des Vektors
(0,0,n)
und gibt den Eintrag aus, aus dem bestehtn^2
Diese Funktion erstellt die Umkehrung einer Hilbert-Matrix mit einer Größe,
n
bei der sich immer das obere linke Element befindetn^2
quelle
g=@(n)nnz(nan(n));
aus Gründen der Effizienz und Kürze verwenden. ;-)function s = g(n); a = inv(hilb(n)); s = a(1); end
. AberC.
Es funktioniert bis zu INT_MAX in konstanter Zeit und ohne Speicherzuweisung.
Beispiel:
Anzeigen
quelle
Java
Dies ist die erste Antwort, die wirklich keine Schleifen oder Rekursionen verwendet.
quelle
System.out.print(1)
zum
, würde druckt das Programm1
genau 32 - mal, nicht n - mal.GolfScript
Histocrat hat eine Möglichkeit zur Verwendung der Basiskonvertierung aufgezeigt: Hier ist eine andere.
Präparation
quelle
Emacs Lisp
Ein einfaches Makro, das erweitert
(square-it 5)
wird(+ 5 5 5 5 5)
. Natürlich muss die Eingabe eine Kompilierungszeitkonstante sein.quelle
Javascript
quelle
Haskell
Es gibt viele Möglichkeiten, wenn Bereiche
[x..y]
erlaubt sind, einige davon sind:Die beiden letzteren verwenden die Monad-Instanz von Listen. für Listen
xs
,ys
hält dasxs>>ys
istys
an sich selbst angehängtenlength xs
Zeiten.Ein weiterer Trick ist einfach
Wenn diese Funktion ein 'geeignetes' Argument erhält (das natürlich aus der Typklasse stammt
Num
), wird das Quadrat zurückgegeben.Product 3 :: Num a => Product a
ist ein Beispiel für ein solches Argument.Grundsätzlich ist diese Funktion, wenn sie angewendet
Product a
wird (die in derNum
Klasse iffa
in i ist)mappend
, mit sich selbst verbunden und gibt zurückProduct (a*a)
.Wenn wir strenger darüber sind, was eine Zahl ist / an welchen Zahlen unsere Funktion arbeiten soll, können wir definieren
f
alsquelle
Java
Dies ist zu lang, um die Antwort
Integer.MAX_VALUE
einzugeben , aber im Grunde kommt eine der Codezeilen so oft vor, wie sie ungefähr dem Quadrat von (das ist 46340) entspricht. : D.Ohne Kommentare oder Zeilenumbrüche würde der eingegebene Code 1.112.155 Zeichen umfassen.
quelle
R.
Diese Funktion basiert auf dem Zählen aller möglichen Kombinationen von zwei Sequenzen im Bereich von 1 bis
n
. Der Wert 0 wird separat behandelt.quelle
Clojure
Unendliche Folge aller Quadrate ab 0. Die Funktion:
quelle
J.
Einige ASCII Kunst ...
quelle
Perl:
quelle
SQL (PostGIS)
Verwenden Sie den Bereich und erstellen Sie Hüllkurvenfunktionen in der PostGIS-Erweiterung von PostGreSQL, um eine quadratische Geometrie zu erstellen und den Bereich zurückzugeben. Könnte geändert werden, um auch das Float-Quadrat zurückzugeben.
In Benutzung;
quelle
Python
Verwendet einfache Mathematik. Basierend auf der Summe einer arithmetischen Folge.
Erläuterung:
Obwohl Summe und Bereich wahrscheinlich implizite Schleifen enthalten, gibt
es gemäß der Fragenspezifikation keine Möglichkeit, hier eine Druckanweisung einzufügen, um sie zu wiederholen, also ... :)
quelle
Bash
Funktioniert nur, wenn n <256 ist.
quelle
PHP
arbeitet mit einer Ganzzahl im Bereich [0; 46340]
Bearbeiten: Ich habe gerade @ thebestone Code gesehen und es ist im Grunde das gleiche
quelle
Perl
Das Programm erwartet, dass die eingegebene Nummer in unärer Form (dh Basis 1) quadriert wird. Die Ausgabe ist ebenfalls unär. Es ersetzt einfach jede Ziffer durch die ganze Zahl.
Anwendungsbeispiel:
quelle
Scala:
quelle
Scala:
quelle