Майже рівнобедрені трикутники Героя


14

Майже рівносторонній Герона трикутник є трикутник з цілими довжинами виду n-1, nі , n+1а також має цілу область. Перші кілька:

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

Квест : Створіть найкоротшу програму, яка виводить nтаку трійку. (Підказка: це відома послідовність).

Переможець буде обраний 2 травня 2014 року.


Що варто, це рівнозначно одному з найбільш широко вивчених рівнянь Пелла.
Пітер Тейлор

3
Я насправді не розумію суті. Це досить просте завдання, але я не бачу жодної проблеми з цим питанням. Але я мушу сказати (як ліворуч), що обмеження є одним із самих дивних і найпростіших дотримуватися їх я коли-небудь бачив.
Рівень р. Св.

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

2
Мені сподобалося обмеження @KyleKanos, навіть якщо люди з лівою рукою мене
огидують

2
@ardnew З усіх місць це одне з найменш вірогідних очікувань таких коментарів: P
Digital Trauma

Відповіді:


6

APL, 15 14 харт

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

Той самий підхід, що й у розчині алефалфи , але використовує підлогу замість корекції.

Дякуємо алгоритму, який вказав, що оператор маршруту зберігає одну таблицю.


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

@algorithmshark Дякую за ці ідеї. На жаль, ⍳3врожайність 1 2 3і, таким чином, на один чар довше.
Говард

8

Математика, 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

Це використовує той самий трюк, що і відповідь APL @ Говарда, тому потрібно обчислити лише один термін. Бере введення для n від stdin.

Вихід:

$ 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

Пітон 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

Пітон 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.