Fast gleichwertige heronische Dreiecke

14

Ein Fast Equilateral Heronisches Dreieck ist ein Dreieck mit ganzzahligen Längen der Form n-1, nund n+1und hat auch ganzzahlige Bereich. Die ersten sind:

 3,  4,  5 ->    6
13, 14, 15 ->   84
51, 52, 53 -> 1170

Quest : Generiere das kürzeste Programm, das das nth Dreifache ausgibt . (Hinweis: Dies ist eine bekannte Sequenz).

Der Gewinner wird am 2. Mai 2014 ausgewählt.

Kyle Kanos
quelle
Für das, was es wert ist, ist dies gleichbedeutend mit einer der besser untersuchten Pell-Gleichungen.
Peter Taylor
3
Ich verstehe die Abstimmungen nicht wirklich. Dies ist eine ziemlich einfache Aufgabe, aber ich sehe kein Problem mit der Frage. Aber ich muss sagen (als Linkshänder), dass die Einschränkung eine der seltsamsten und am einfachsten einzuhaltenden ist, die ich je gesehen habe.
Level River St
2
@steveverrill, obwohl ich nicht abgelehnt habe, habe ich mich entschieden, wegen der sinnlosen Einschränkung nicht zu upvoten. Ich vermute, dass die engen Abstimmungen auch auf die Einschränkung zurückzuführen sind: Ich wette, dass weniger als 10% der Weltbevölkerung das gleiche Tastaturlayout wie Kyle verwenden.
Peter Taylor
2
Ich mochte die Einschränkung @KyleKanos, obwohl Linkshänder mich angewidert
Ardnew
2
@ardnew Von allen Orten ist dies eine der am wenigsten wahrscheinlichen, die ich für solche handistischen Kommentare erwarten würde: P
Digitales Trauma

Antworten:

6

APL, 15 14 Zeichner

0 1 2+⌊⎕*⍨2+√3

Gleicher Ansatz wie die Lösung von alephalpha , jedoch wird anstelle des Korrekturterms der Floor verwendet.

Vielen Dank an algorithmshark für den Hinweis, dass der Pendler ein Zeichen spart.

Howard
quelle
1
(⍳3)spart ein Zeichen über 0 1 2, und ich bin mir ziemlich sicher, dass Sie Commute verwenden können, um es zu erstellen ⎕*⍨2+√3und ein anderes zu speichern.
Algorithmushai
@algorithmshark Vielen Dank für diese Ideen. ⍳3Ergibt leider 1 2 3und ist damit ein Zeichen länger.
Howard
8

Mathematica, 26, 22, 16, 18 Zeichen

{0,1,2}+⌊(2+√3)^n⌋
Alephalpha
quelle
Ein bisschen zu viel Golf: In der aktuellen Form funktioniert es nicht (siehe hier ).
Howard
5

GolfScript ( 24 21 Zeichen)

2 4@~{.4*@-}*;.(\.)]p

Übernimmt die Eingabe für stdin und gibt die Ausgabe für stdout im Formular aus

[3 4 5]

Online-Demo

Beachten Sie, dass ich angenommen habe, dass das 0. Element der Sequenz [1 2 3](mit Bereich 0) ist, was meiner Meinung nach mit OEIS A003500 übereinstimmt .

Vielen Dank an Howard für die 3-Zeichen-Ersparnis.

Peter Taylor
quelle
Using (.).)]ist zwei Zeichen kürzer. Außerdem, wenn Sie mit beginnen 2 4können Sie ersetzen \;mit ;und sparen weitere ein.
Howard
@Howard, ich ursprünglich hatte 2 4und behandelt [3 4 5]wie das 0 - ten Element, so dass ich nicht entdeckt verlegen bin zu haben , dass alternative Art und Weise des Versatz zu nutzen. Vielen Dank.
Peter Taylor
2

GNU DC , 30 19 Bytes

9k3v2+?^0k1/p1+p1+p

Dies verwendet den gleichen Trick wie die APL-Antwort von @ Howard, sodass nur ein Term berechnet werden muss. Übernimmt die Eingabe für n aus stdin.

Ausgabe:

$ dc -e '9k3v2+?^0k1/p1+p1+p' <<< 1
3
4
5
$ dc -e '9k3v2+?^0k1/p1+p1+p' <<< 2
13
14
15
$ dc -e '9k3v2+?^0k1/p1+p1+p' <<< 3
51
52
53
$ 
Digitales Trauma
quelle
1

Python 77

Eine ziemlich ausführliche Implementierung in Python

[(a-1,a,a+1)for a in(int((2+3**.5)**t+(2-3**.5)**t+.1)for t in range(N))][-1]
Abhijit
quelle
1
Sollen wir durch Neinen Wert ersetzen ? Ihr Programm fordert Sie nicht zur Eingabe auf.
Golfer9338
1

Python 3, 83 Zeichen

f=lambda t:4*f(t-1)-f(t-2)if t>2 else(4,14)[t-1];n=f(int(input()));print(n-1,n,n+1)

Hierbei wird eine rekursive Lösung verwendet, die die Tatsache ausnutzt, dass (Zitat aus Wikipedia ):

Nachfolgende Werte von n können durch Multiplizieren des vorherigen Werts mit 4 und anschließendes Subtrahieren des vorherigen Werts ermittelt werden (52 = 4 × 14 - 4, 194 = 4 × 52 - 14 usw.).

golfer9338
quelle
1

JavaScript (ECMAScript 6) - 52 Zeichen

f=x=>x?--x?4*f(x)-f(x-1):4:2
g=x=>[a=f(x)-1,a+1,a+2]

Definiert eine rekursive Funktion, fdie den n- ten Term und eine Funktion, gdie ein Array mit dem entsprechenden Tripel zurückgibt.

JavaScript - 41 Zeichen

for(a=2,b=4;--x;)b=-a+4*(a=b);[a-1,a,a+1]

Erwartet, dass der zu berechnende Term in der globalen Variablen gespeichert wird, xund gibt das Tripel an die Konsole aus.

MT0
quelle
1

CJam, 13 Bytes

3,3mq))ri#if+p

Die erste Version von CJam ist 10 Tage älter als diese Herausforderung, aber ich weiß nicht, ob alle Funktionen, die ich verwende, bereits vorhanden waren. Die Challenge ist trotzdem offiziell beendet, also ...

Teste es hier.

Erläuterung

3mq            e# Push √3.
   ))          e# Increment twice.
     ri        e# Read input and convert to integer.
       #       e# Raise 2+√3 to that power.
        i      e# Convert to integer, truncating the result.
         3,    e# Push [0 1 2]
           f+  e# Add the previous number to each of these.
             p e# Pretty-print the result.
Martin Ender
quelle