Die Herausforderung
Suchen Sie in möglichst wenigen Zeichen den Wert von i ^ n, wobei n eine positive Ganzzahl größer als 0 ist. Dies sollte als Zeichenfolge ausgegeben werden.
Für diejenigen, die es nicht wissen, ist i so definiert, dass i ^ 2 = -1 ist. So:
- i ^ 1 = i
- i ^ 2 = -1
- i ^ 3 = -i
- i ^ 4 = 1
Dies wiederholt sich dann ..
Regeln
- Wenn Ihre Sprache komplexe Zahlen unterstützt, verwenden Sie keine Funktionen oder Arithmetik, die dies bewirken könnten.
- Gleitkomma-Ungenauigkeiten sind in Ordnung für Antworten, die ohnehin Dezimalstellen zurückgeben würden, aber Ganzzahleingaben sollten genaue Ergebnisse liefern
Bonuspunkte
-5, wenn Sie den Wert berechnen können, bei dem n ebenfalls negativ ist
-15 wenn Sie den Wert für eine reelle Zahl berechnen können (dieser Bonus beinhaltet den -5 aus dem obigen Bonus)
Viel Glück!
code-golf
math
arithmetic
complex-numbers
Kezz101
quelle
quelle
Antworten:
Ruby, Gäste -2
(13 Bytes, -15 Bonus)
Eigenschaften umfassen: keine Rundungsfehler! (Wenn Sie die Eingabe als Rational übergeben)
Gepostet vom Autor, Kezz101
Negative Werte bringen mein Adrenalin in die Höhe. So werden die Regeln
missbraucht, um dieses edle Ziel zu erreichen.Erstellt eine anonyme Funktion und gibt ein Array mit 2 Einträgen aus, die eine komplexe Zahl in polarer Form darstellen (Winkeleinheit: Grad).
quelle
CJam, 12 Zeichen - 5 = 7
Teste es hier.
Unterstützt negative Eingänge.
Das Ergebnis wird am Ende des Programms automatisch ausgedruckt.
Mathematica,
222019 Zeichen - 15 = 4Dies ist eine anonyme Funktion, die Sie gerne nutzen können
(Oder weisen Sie es zu
f
, um zu sagen und dann zu tunf[15]
.)Unterstützt Real und liefert exakte Ergebnisse für die Ganzzahleingabe.
Beachten Sie, dass das
i
ist nicht Mathematicas Komplex i (das istI
). Es ist nur eine undefinierte Variable.Trotz der Reihenfolge des Ausdrucks ordnet Mathematica die Ausgabe in eine neue
R+Ci
Form.quelle
4%
. Dies kann automatisch erfolgen.f@15
anstelle von verwendenf[15]
.Python 2 - (24-5) = 19
Das meiste Lob gehört @ user2357112, ich habe gerade seine Antwort aus den Kommentaren zu dieser Antwort etwas mehr herausgespielt.
Erläuterung: Beginnt am Index
n%4
in der Zeichenfolge'1i--'
. Anschließend wird über jeden Buchstaben in der Zeichenfolge in Zweierschritten rückwärts iteriert. Son=6
würde zum Beispiel bei Index 2 der erste beginnen-
, dann den überspringeni
und den nehmen1
, um zurückzukehren-1
.@xnor wies auf eine Lösung gleicher Länge hin:
Pyth - (14-5) = 9
Ich kann nur scheinen, 14 zu erhalten, egal wie ich versuche, / slice / etc. umzukehren. : '(
Dies ist im Wesentlichen dasselbe wie die obige Python-Antwort, jedoch in zwei Schritten, da Pyth nicht die vollständigen Indizierungsoptionen von Python unterstützt. Probieren Sie es online aus.
Ich werde mit isaacg über Pyth-Indizierung sprechen;)
quelle
lambda
einer Variablen zugewiesen werden? Um es aufzurufen, müssen Sie es mindestens mit Klammern umgeben und zwei Bytes hinzufügen, damit es aufgerufen werden kann(lambda...)(n)
.map
und verwendetsorted
.TI-BASIC (NSpire) - 5 (20 Zeichen - 15)
Wenn Sie einen komplexen Rückgabewert erhalten möchten, ersetzen Sie den
i
am Ende durch
(complex i).quelle
durch ein normalesi
. Wenn die Variablei
nicht definiert ist, erhalten Sie die komplexe Zahl nur miti
anstelle von
. Ich berechne nur den Realteil und den Imaginärteil getrennt.i
sowieso verwenden. Der Komplex, den ich habe, ist nicht einmal der Charakter, den die Frage verlangt, und es spart dir zwei Bytes, also würdest du wenigstens mit mir binden;).Marbelous , 43 Bytes
Nicht wirklich ein Gewinner, aber Marbelous macht Spaß. :)
Dies ist ein Programm, das die Eingabe als einzelne Ganzzahl aus dem ersten Befehlszeilenargument liest. Beachten Sie, dass die Eingabe modulo 256 verwendet wird, dies wirkt sich jedoch nicht auf die Gültigkeit des Ergebnisses für Eingaben über 255 aus, da 256 durch 4 teilbar ist.
Erläuterung
Marbelous ist eine 2D-Programmiersprache, die "Marmor" (Byte-Werte) simuliert, die durch eine Reihe von Geräten fallen. Die Tafel besteht aus 2 Zeichen breiten Zellen (den Geräten), die die Murmeln verarbeiten können. Alles, was von der Unterseite einer Platine fällt, wird auf STDOUT gedruckt.
Lassen Sie uns die verwendeten Geräte durchgehen:
}0
Hier setzt das erste Befehlszeilenargument an. Ich habe zwei Instanzen dieses Geräts verwendet, sodass ich (gleichzeitig) zwei Kopien des Eingabewerts erhalte.^n
prüft , ob dasn
dritte Bit der Eingabemurmel (wobein=0
das niedrigstwertige Bit ist) und erzeugt1
oder0
hängt vom Bit ab.=0
prüft auf Gleichheit mit0
. Wenn die Eingabemurmel gleich ist, fällt sie gerade durch, wenn nicht, wird sie nach rechts gedrückt.\/
Ist ein Mülleimer, so schluckt er nur den Eingabemarmor und produziert nie etwas.2D
ist der ASCII-Code von-
,31
ist der ASCII-Code von1
und69
ist der ASCII-Code voni
.&n
sind Synchronisierer. Synchronisierer blockieren eine Kugel, bis alle Synchronisierer mit derselbenn
Kugel eine festhalten. An diesem Punkt lassen sie alle ihre gelagerte Kugel fallen.Eigentlich muss ich also die drei relevanten Zeichen in drei Synchronisierern halten und diese freigeben, je nachdem, wie die niedrigstwertigen Bits in der Eingabe gesetzt sind.
Weitere Informationen finden Sie im Spezifikationsentwurf .
quelle
JavaScript (ES6) 29-5 = 24
Unterstützt negative Kraft.
ES5:
quelle
f=n=>[1,'i',-1,'-i'][n%4]
). Aber es ist weniger sexy und unterstützt keine negativen Kräfte. Es kommt auf den Bonus an, denke ich.&
Operator? Wenn ja, können Sie&3
eine echte Modul-4-Operation durchführen. Bearbeiten: Es sieht so aus, als würde&2
es in Ihrer Antwort verwendet ...Python 28 Bytes - 5 = 23
Unterstützt -ve Eingänge.
Vorausgesetzt, Lambda-Funktionen sind akzeptabel (Danke FryAmTheEggman!):
ansonsten 31 Bytes - 5 = 26
quelle
foo=...
, oder Sie könnten tunmap(<your lambda>,range(10))
, um eine Liste der Wertei^n
von zu erhalten0-9
.lambda n:'--1i'[n%4-2::2]
.'--1i'
ab dem Indexn%4-2
. Wenn Python einen negativen Index erhält, werden so viele Positionen vom Ende des Arrays übrig gelassen, und es wird nach oben gegangen0
. Auf diese Weise0
und1
nie die-
Zeichen treffen , während3
und zu4
tun.lambda n:n%4/2*'-'+'1i'[n%2]
Entfernt das Leerzeichen und ist kürzer :)(Emacs) Lisp - 34
Nur zum Spaß in (Emacs) Lisp:
Wenn du es benutzen willst, benutze a
defun
oder benutzefuncall
:quelle
APL (Dyalog) , 8 Zeichen - 15 Bonus = Punktzahl -7
Die eingebaute (und damit verbotene) Funktion ist
0J1*⊢
, aber dies verwendet die @ blutorange-Methode .Der Herausforderungsautor Kezz101 schrieb :
Dies gibt eine komplexe Zahl in der Form zurück
aJb
, wie es für APL üblich ist, komplexe Zahlen anzuzeigen.Probieren Sie es online!
Erläuterung
¯12○
Finden Sie den Einheitsvektor, der den Winkel im Bogenmaß von hat.5×
ein halbes mal○
das Argument multipliziert mit 𝜋 (die Kreiskonstante)quelle
Pure Bash, 29 Bytes - 5 = 24
Unterstützt -ve Eingänge.
quelle
Befunge-98,
41-5 = 36,35-5 = 30,32-5 = 27Unterstützt negative ganze Zahlen. Mit dieser Lösung werden keine Preise gewonnen, aber was auch immer.
Es akzeptiert nur eine Zahl als Eingabe, verändert den Modul (was frustrierenderweise nicht wie der übliche Modul für negative Zahlen in dem Interpreter funktioniert, den ich zum Testen verwendet habe), damit Negative funktionieren, und führt dann einige alberne Bedingungen aus Entscheide, was jeder Charakter sein soll.
Ich bin sicher, das kann man noch viel weiter spielen. Im Moment gibt es eine andere Lösung, die keine Negative akzeptiert, aber den Verlust des Bonus durch Kürzung ausgleicht:
Befunge-98,
322623Bearbeiten - Nutzt nun die Tatsache, dass "-" 13 (0xd) Zeichen von "" entfernt ist.
Edit 2 - Nutzt nun wieder die Tatsache, dass "i" 56 (0x38 oder
'8
) Zeichen von "1" entfernt ist.quelle
Java 8 Ergebnis: 72
In Java die schlechteste Golfsprache aller Zeiten! Golf gespielt:
Erweitert:
Hinweis: Ich bin nicht an Java 8 gewöhnt. Ich habe auch noch nicht die Laufzeit dafür. Bitte teilen Sie mir mit, ob Syntaxfehler vorliegen. Dies ist auch mein erstes Golf.
Bearbeiten: entfernt
import
.Bearbeiten: Klassendeklaration entfernt.
Eine weitere Antwort mit Punktzahl = 87 - 15 = 72
Erweitert:
quelle
java.util.function
nichtjava.util
(oder irre ich mich?).java.util.*
das.*
Mittel Import alles unter dem Paket. Genauso, wie Sie derzeit alle Klassen imfuction
Paket importieren .import
importiert nur die Klassen in diesem Paket. Es werden keine Klassen aus Paketen in diesem Paket importiert. Zum Beispiel ist classFunction
in package,java.util.function
aber nicht in packagejava.util
.MATLAB, 33 Bytes - 5 = 28
Obwohl es ein paar Bytes mehr sind (37-5 = 32), gefällt mir dieser Ansatz besser:
quelle
i^3
ist-i
, anstatt zui
raten, dass es nur 1 Zeichen hinzufügt. - Hinweis für andere Leser: Ohne die erste Regel der Herausforderung wäre die Matlab-Lösung nur 3 Zeichen lang.C 77
Dank Ruslan verbessert
C 74-5 = 69
Oh und natürlich der naheliegendste Ansatz
quelle
n%2
und verwenden,~
anstatt zuerst zu!
negierenn
, und dann%
mit 2 das gleiche Ergebnis zu erzielen, zumindest fürn<(1<<32)-1
. Und C muss den Rückgabetyp für die Funktion nicht explizit definieren, sodass Sie ihnint
am Anfang entfernen können . Und0
stattdessen auch verwenden'\0'
. Also -9 Zeichen.OCaml 47
Keine preisgekrönte Lösung, aber dies ist mein erstes Mal, dass ich Code-Golf spiele, daher bin ich mir nicht ganz sicher, was ich tue. Ich habe versucht, Pattern Matching zu verwenden, aber das hat mich über 58 gebracht.
quelle
Pari / GP , 19 Bytes - 5 = 14
Wie ein Ring,C ist isomorph zu R [x] / ( x2+ 1 ) .
Das
i
hier ist nur ein Symbol, nicht die imaginäre Einheit (dieI
in Pari / GP ist).Probieren Sie es online!
quelle
Rubin 32-5 = 27
Funktioniert für negative Kräfte!
quelle
puts %w[1 i -1 i][gets.to_i % 4]
.Perl, 26 - 5 = 21
Arbeitet als eigenständiges Programm (Argument in der Befehlszeile) oder als Hauptteil einer Funktion.
quelle
Java:
151131-5 = 126Golf gespielt:
Ungolfed:
Als eine Funktion: 72-5 = 67
Golf gespielt:
Ungolfed:
Ja, noch eine Java-Antwort - und golfen noch schlimmer als je zuvor. Aber Sie arbeiten mit dem, was Sie können ...
EDIT : Funktionsversion hinzugefügt.
EDIT 2 : Nach einigem Hin und Her ist hier eine Version, die versucht, dies anhand des Buches zu tun, ohne die Zykluslücke zu erkunden. So…
Java mit Wertberechnung: 146-15 = 131
Golf gespielt:
Ungolfed:
(Zumindest glaube ich, dass ich den höchsten Bonus beanspruchen kann, korrigiere mich sonst)
quelle
int n = Integer.parseInt(a[0])
Python - 31
Ich habe erst kürzlich angefangen, Python zu lernen. Auch wenn ich weiß, dass es nicht gut ist, ist es das Beste, was ich tun kann.
quelle
Haskell GHCi, 29 Bytes - 15 = 14
Verwendung:
quelle
R , 29 - 5 = 24 Bytes
Probieren Sie es online!
Wie bei den meisten obigen Methoden wird ein Modulo von 4 verwendet und dieses um 1 erhöht, da die Arrays von R 1-indiziert sind. Funktioniert auch für negative ganze Zahlen.
Ich war besorgt über gemischte Ausgaben, aber Giuseppe wies darauf hin, dass R numerische Typen in Stringtypen umwandelt, wenn diese gemischt werden.
quelle
numeric
Typen automatisch dazu ,character
wenn sie gemischt werden! Hadleys Buch erklärt das ziemlich gut - nur Strg + F bis "Zwang" und Sie werden es sehen, aber das ganze Buch ist eine Lektüre wert )PowerShell , 28 Byte -5 = 23
Probieren Sie es online!
Port der gesamten zyklischen Indizierung
quelle
Haskell, 29 Bytes - 5 = 24
Funktioniert für negative Kräfte.
Ich hatte eine pointfree Version ausgearbeitet, aber es stellt sich heraus, dass es tatsächlich länger ist.
quelle
Clojure (
645431 Zeichen)Bearbeiten
Nach dem Vorschlag von @ SeanAllred ist hier eine Version, die einen Literalvektor anstelle einer
case
Funktion verwendet:Bearbeiten 2
Wenn Sie auf die REPL zählen, um die resultierende Sammlung auszudrucken, und die Funktion mit der
#()
Verknüpfung codieren, auf die wir sie reduzieren können(Das ist eigentlich viel mehr Clojure / Lisp-ish, da die Funktion jetzt tatsächlich das generierte Ergebnis zurückgibt, sodass die Funktion
map
wie in verwendet werden kannwelche druckt
Teile und genieße.
quelle
Groovy: 27-5 = 22
quelle
C 105 war 117
quelle
:
in?:
Anweisungen in Klammern setzen müssen. Was nützt es auch,0==0
wenn Sie einzelne Zeichen verwenden können1
? Und keine Notwendigkeit in Klammern vor?
. Auch die letzte?:
Aussage könnte auf gekürzt werdenc[j]=i&1?'i':'1';
.0==0
wenn es identisch ist mit1
? Beachten Sie, dass==
hat eine höhere Priorität als&
, sonst wäre Ihr (vermuteter) Test von(i&0)==0
immer wahr.PARI / GP , 26 - 5 = 21
n->cos(t=Pi*n/2)+I*sin(t)
ist ein Zeichen kürzer, kann aber keine exakten Antworten verarbeiten. Natürlichn->I^n
ist nicht erlaubt, und vermutlich auch PARIspowIs
.quelle
Jelly , 2 - 20 = -18 Bytes
Probieren Sie es online!
Es wird kein
i ^ x
Builtin verwendet, aber es werden Builtins für verwendet,1j
und**
daher ist nicht sicher, ob dies zulässig ist.quelle
1j
Literal auch verboten ist?*
) ist.1j
Literale zu verwenden .05AB1E , 5 Punkte (10 Bytes - 5 Bonus)
Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
Erläuterung:
quelle