Betrachten Sie das gleichseitige Standarddreieck mit Knoten, die mit Schwerpunktkoordinaten beschriftet sind :
Wir können dieses Dreieck mit 3 Knoten in ein Dreieck mit 6 Knoten umwandeln, indem wir eine neue Linie mit 3 Knoten hinzufügen (eine mehr als auf einer Seite des ursprünglichen Dreiecks mit 3 Knoten vorhanden war), interne Kanten entfernen (aber keine internen Knoten) und normalisiere die Koordinaten:
Wiederholen Sie den Vorgang, um von einem 6-Knoten-Dreieck zu einem 10-Knoten-Dreieck zu wechseln, fügen Sie eine Linie aus 4 Eckpunkten hinzu (wieder eine mehr, als auf einer Seite des ursprünglichen 6-Knoten-Dreiecks vorhanden war), und entfernen Sie alle internen Kanten (jedoch keine internen Knoten) ) und normalisiere die Koordinaten:
Dieser Vorgang kann auf unbestimmte Zeit wiederholt werden. Das Ziel dieser Abfrage ist eine Ganzzahl, N
die angibt , wie oft dieser Prozess ausgeführt wurde. Geben Sie alle Knoten für das zugehörige Dreieck in baryzentrischen Koordinaten aus.
Eingang
Ihr Programm / Ihre Funktion sollte als Eingabe eine einzelne nicht negative Ganzzahl verwenden, N
die angibt , wie oft dieser Prozess angewendet wurde. Beachten Sie, dass Sie für N=0
das ursprüngliche Dreieck 3 Knoten ausgeben sollten.
Der Eingang kann von einer beliebigen Quelle stammen (Funktionsparameter, Stdio usw.).
Ausgabe
Ihr Programm / Ihre Funktion sollte alle Knoten in normalisierten Schwerpunktkoordinaten ausgeben. Die Reihenfolge der Knoten spielt keine Rolle. Eine Zahl kann als Bruchzahl (keine Bruchkürzung erforderlich) oder als Gleitkommazahl angegeben werden. Sie können auch "skalierte" Vektoren ausgeben, um einen Knoten anzugeben. Beispielsweise sind alle 3 der folgenden Ausgaben gleichwertig und zulässig:
0.5,0.5,0
1/2,2/4,0
[1,1,0]/2
Wenn Sie eine Gleitkommaausgabe verwenden, sollte Ihre Ausgabe auf 1% genau sein. Die Ausgabe kann auf eine beliebige Senke erfolgen (stdio, Rückgabewert, Rückgabeparameter usw.). Beachten Sie, dass Sie alle 3 Zahlen pro Knoten ausgeben sollten, obwohl die Schwerpunktkoordinaten eindeutig durch nur 2 Zahlen pro Knoten bestimmt werden.
Beispiele
Beispielfälle sind wie folgt formatiert:
N
x0,y0,z0
x1,y1,z1
x2,y2,z2
...
Dabei ist die erste Zeile die Eingabe N
, und alle folgenden Zeilen bilden einen Knoten x,y,z
, der genau einmal in der Ausgabe enthalten sein soll. Alle Zahlen sind als ungefähre Gleitkommazahlen angegeben.
0
1,0,0
0,1,0
0,0,1
1
1,0,0
0,1,0
0,0,1
0.5,0,0.5
0.5,0.5,0
0,0.5,0.5
2
1,0,0
0,1,0
0,0,1
0.667,0,0.333
0.667,0.333,0
0.333,0,0.667
0.333,0.333,0.333
0.333,0.667,0
0,0.333,0.667
0,0.667,0.333
3
1,0,0
0.75,0,0.25
0.75,0.25,0
0.5,0,0.5
0.5,0.25,0.25
0.5,0.5,0
0.25,0,0.75
0.25,0.25,0.5
0.25,0.5,0.25
0.25,0.75,0
0,0,1
0,0.25,0.75
0,0.5,0.5
0,0.75,0.25
0,1,0
Wertung
Das ist Code Golf; kürzester Code in Bytes gewinnt. Es gelten Standardlücken. Sie können beliebige integrierte Funktionen verwenden.
[1,2,3]/6
?Antworten:
CJam (22 Bytes)
Dies ist ein anonymer Block (eine Funktion), der
N
den Stapel annimmt und ein Array von Doppelarrays auf dem Stapel hinterlässt. Online-DemoPräparation
quelle
Haskell, 53 Bytes
quelle
Python 3, 87 Bytes
Dies soll eigentlich ein Kommentar zur Lösung von TheBikingViking sein, aber ich habe nicht genug Ruf für Kommentare.
Man kann ein paar Bytes einsparen, indem man nur die Variablen durchläuft
i,j
und die Tatsache ausnutzt , dass sie sich mit der dritten addierenn+1
.quelle
Mathematica,
4443 BytesDies ist eine unbenannte Funktion, die ein einzelnes ganzzahliges Argument verwendet. Die Ausgabe ist eine Liste von Listen mit exakten (reduzierten) Brüchen.
Generiert alle 3-Tupel von Vielfachen
1/(N+1)
zwischen 0 und 1 einschließlich und wählt dann diejenigen aus, deren Summe 1 ist (wie von den Schwerpunktkoordinaten gefordert).quelle
05AB1E , 10 Bytes
Erläuterung
Probieren Sie es online aus
quelle
¤
Warum wird/
das Array dadurch geteilt, da es das Array verbraucht ? Erinnert es sich an den zuletzt aufgetauchten Wert und verwendet ihn bei Bedarf?¤
ist einer der wenigen Befehle, die nicht vom Stapel genommen und verbraucht werden. Es verschiebt das letzte Element der Liste, während die Liste auf dem Stapel bleibt.MATL , 17 Bytes
Probieren Sie es online!
Erläuterung
Der Ansatz ist der gleiche wie in anderen Antworten:
[0, 1/(n+1), 2/(n+1), ..., 1]
, won
ist die Eingabe;1
.Genauer:
quelle
Qualle ,
3733 BytesVielen Dank an Zgarb für das Speichern von 4 Bytes.
Probieren Sie es online!
Wie meine Mathematica- und Peters-CJam-Antworten generiert dies eine Reihe von Kandidatentupeln und wählt dann nur diejenigen aus, die die Summe 1 ergeben. Ich bin mit dem Layout noch nicht ganz zufrieden und frage mich, ob ich einige Bytes mit Hooks oder Gabeln speichern kann. aber ich muss das später untersuchen.
quelle
Perl 6:
5040 BytesGibt eine Folge von Listen mit 3 Elementen von (exakten) rationalen Zahlen zurück.
Erläuterung:
$_
Implizit deklarierter Parameter des Lambda.
0, 1/($_ + 1) ... 1
Verwendet den Sequenzoperator
...
, um die arithmetische Sequenz zu erstellen, die den möglichen Koordinatenwerten entspricht.[X] EXPR xx 3
Nimmt das kartesische Produkt von drei Kopien von EXPR, erzeugt also alle möglichen 3-Tupel.
grep *.sum == 1, EXPR
Filtertupel mit einer Summe von 1.
quelle
Rubin, 62
Es würde mich wundern, wenn dies nicht verbessert werden kann:
Unter Berücksichtigung des im Puzzle latenten Hinweises berechnet dies die Optionen des zweiten Knotens basierend auf dem ersten und des dritten Knotens durch Subtrahieren der ersten beiden.
quelle
Brachylog , 24 Bytes
Probieren Sie es online!
quelle
Python 3, 106 Bytes
Eine Funktion, die sie über ein Argument eingibt und eine Liste von Float-Listen an STDOUT ausgibt.
Python ist nicht gut in kartesischen Produkten ...
Wie es funktioniert
Probieren Sie es auf Ideone
quelle
Eigentlich 15 Bytes
Dies verwendet einen Algorithmus ähnlich dem in TheBikingVikings Python-Antwort . Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfed:
quelle
Rubin,
7774 BytesEine weitere Antwort mit dem Algorithmus in TheBikingVikings Python-Antwort . Golfvorschläge sind willkommen.
Ein weiterer 74-Byte-Algorithmus basiert auf der Antwort Not that Charles's Ruby .
quelle
JavaScript (Firefox 30-57),
8881 BytesGibt ein Array von Arrays von Gleitkommazahlen zurück. Bearbeiten: Speichert 7 Bytes, indem die dritte Koordinate direkt berechnet wird. Ich habe versucht, das zu beseitigen,
if
indem ich den Bereich vony
direkt berechnet habe, aber es kostet ein zusätzliches Byte:quelle
[x/n,y/n/z/n]
ein Komma vergessen?