Problem aus dem Buch Fortran 77 von Donald M. Monro angepasst
Einführung
Digitale Plotmaschinen werden häufig verwendet, um verschiedene Formen von Zeichnungen, Grafiken und anderen Bildergebnissen zu erstellen. Die meisten dieser Maschinen können ihre Stifte nur in bestimmte Richtungen bewegen, normalerweise als einzelne Schritte in X- und Y-Richtung oder in beide Richtungen. Eine typische Maschine würde sich in eine der acht in Abb. 1 gezeigten Richtungen bewegen:
Abb. 1
Herausforderung
Schreiben Sie ein Programm ohne trigonometrische Funktionen, das eine Zahl von 0 bis einschließlich 7 als Eingabe verwendet und die entsprechenden Koordinaten der Endpunkte in Abb. 1 ausgibt.
Die Ausgabe sollte als Array oder Liste mit zwei Elementen (dh (1, 0)
oder [0,-1]
) erfolgen.
Tabelle der E / A.
0 (1, 0)
1 (1, 1)
2 (0, 1)
3 (-1, 1)
4 (-1, 0)
5 (-1, -1)
6 (0, -1)
7 (1, -1)
Gewinnen
Der kürzeste Code in Bytes gewinnt
rotate(x)
Funktion als trigonometrische Funktion? (es dreht nur die "Leinwand" imx
Bogenmaß)cos, sin, tan, sec
etc.Antworten:
Gelee , 8 Bytes
Die Verwendung komplexer Arithmetik scheint zulässig zu sein.
Probieren Sie es online aus!
Wie es funktioniert
quelle
Python 2, 29 Bytes
Gibt die Koordinaten als komplexe Zahl zurück.
quelle
Mathematica, 24 Bytes
Reine Funktion, Verwendung
Sign
und Wissen, wohin bestimmte Parabeln gehen.quelle
C
10386747370 BytesVielen Dank an @orlp für das Speichern von
1215 Bytes!Probieren Sie es online aus!
quelle
"\16\17\13\7\6\5\9\15"[n] == "pw[1*#?i"[n]/7
"biM1*#?["
, weil in"\16\17\13\7\6\5\9\15"
den Werten Oktalzahlen sind, also 16 == 14 in Dezimalzahl, 17 == 15 und so weiter.!!(n&4) == n/4&1
n&2?n&1:-(n&1) == n%2*~-(n&2)
JavaScript (ES6),
4136 ByteVerwendet zwei einfache Nachschlagetabellen, die die 8 Einträge in Basis 4 codieren, nachdem jeder "Ziffer" eine hinzugefügt wurde. Alternative Version mit einfacheren Nachschlagetabellen:
Alte Version (4 Bytes kürzer dank @Neil):
Naiver Ansatz mit einigen einfachen Berechnungen, um die X- und Y-Koordinaten getrennt zu finden ...
quelle
r&&(r<4)-(r>4)
oderr%4&&1-(r&4)/2
speichern Sie ein Byte auf Ihrer alten Version.r=>[r>2&r<6?-1:r<2|r>6,r>4?-1:r%4&&1]
n=>[(s='22100012')[n]-1,s[n+6&7]-1]
.TI-Basic, 23 Bytes
Angenommen, Ihr Rechner befindet sich im Bogenmaßmodus. Wenn das im Programm sein muss, dann sind es 25 Bytes.
quelle
Gelee ,
1312 BytesIch bin immer noch ziemlich zuversichtlich, dass es kürzer ist, aber ich habe noch nichts gefunden, also dachte ich, ich würde dies posten
Probieren Sie es online aus! oder sehen Sie sich eine Testsuite an
Wie?
Eine alternative Methode , auch 12 Bytes :
quelle
C 66 Bytes
Testcode
Ergebnisse
quelle
C 56 Bytes
Einfache binäre Suche zweimal durchgeführt. Die erste Suche erfolgt auf n um 2 verschoben.
Online-Ausgabe auf Ideone.
C 53 Bytes
Die Ausgabe ohne Komma konnte durch einen rekursiven Aufruf noch weiter komprimiert werden.
Online-Ausgabe auf Ideone.
quelle