Почти экваториальные героновы треугольники


14

Почти Равносторонние героны треугольник представляет собой треугольник с целыми длинами вида n-1, nи , n+1а также имеет целую область. Первые несколько:

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

Квест : Генерация самой короткой программы, которая выводит nтакую ​​тройку. (Подсказка: это известная последовательность).

Победитель будет выбран 2 мая 2014 года.


Для чего это стоит, это эквивалентно одному из наиболее широко изученных уравнений Пелла.
Питер Тейлор

3
Я не очень понимаю отрицательные голоса. Это довольно простая задача, но я не вижу никаких проблем с вопросом. Но я должен сказать (как левша), что ограничение - одно из самых странных и простых в соблюдении, которое я когда-либо видел.
Уровень реки St

2
@steveverrill, хотя я не понижал голосование, но решил не повышать голос из-за бессмысленного ограничения. Я подозреваю, что закрытое голосование также связано с ограничением: держу пари, что менее 10% населения мира используют ту же раскладку клавиатуры, что и Кайл.
Питер Тейлор

2
мне понравилось ограничение @KyleKanos, хотя левши
противны

2
@ardnew Из всех мест, это один из наименее вероятных, которые я бы ожидал, такие комментарии от рук: P
Цифровая травма

Ответы:


6

APL, 15 14 символов

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

Тот же подход, что и для решения проблемы алефальфы , но вместо термина коррекции используется слово «пол».

Спасибо алгоритмистике за указание, что оператор коммутирования сохраняет один символ.


1
(⍳3)сохраняет символ 0 1 2, и я уверен, что вы можете использовать Commute, чтобы создать его ⎕*⍨2+√3и сохранить другой.
алгоритмистика

@algorithmshark Спасибо за эти идеи. К сожалению, ⍳3дает 1 2 3и, следовательно, на один символ длиннее.
Говард

8

Mathematica, 26, 22, 16 18 символов

{0,1,2}+⌊(2+√3)^n⌋

Слишком много игры в гольф: она не будет работать в текущей форме (см. Здесь ).
Говард

5

GolfScript ( 24 21 символов)

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

Принимает ввод в stdin, выдает вывод в stdout в виде

[3 4 5]

Онлайн демо

Обратите внимание, что я предположил, что 0-й элемент последовательности [1 2 3] (с областью 0), что, я думаю, соответствует OEIS A003500 .

Благодаря Говарду за 3-х символьную экономию.


Использование (.).)]на два символа короче. Кроме того, если вы начинаете с 2 4вами можно заменить \;с ;и сохранить дополнительный.
Говард

@Howard, я изначально имел 2 4и рассматривал [3 4 5]как 0-й элемент, так что я смущен, что не нашел этот альтернативный способ использовать смещение. Благодарю.
Питер Тейлор

2

GNU dc , 30 19 байтов

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

Это использует тот же трюк, что и ответ @ Howard's APL поэтому необходимо вычислить только один термин. Принимает вход для стандартного ввода.

Выход:

$ 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
$ 

1

Python 77

Довольно многословная реализация в 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]

1
Должны ли мы заменить Nзначение? Ваша программа не запрашивает никакой информации.
golfer9338

1

Python 3, 83 символа

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)

Это использует рекурсивное решение, используя тот факт, что (цитата из Википедии ):

Последующие значения n можно найти, умножив предыдущее значение на 4, затем вычтя значение до этого (52 = 4 × 14–4, 194 = 4 × 52–14 и т. Д.)


1

JavaScript (ECMAScript 6) - 52 символа

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

Определяет рекурсивную функцию, fкоторая возвращает n- й член, и функцию, gкоторая возвращает массив, содержащий соответствующую тройку.

JavaScript - 41 символов

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

Ожидает, что вычисляемый термин будет сохранен в глобальной переменной xи выведет тройку на консоль.


1

CJam, 13 байтов

3,3mq))ri#if+p

Первая версия CJam на 10 дней старше этой задачи, но я не знаю, присутствовали ли тогда все функции, которые я использую. Тем не менее, задача официально закрыта, так что ...

Проверьте это здесь.

объяснение

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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.