Segitiga Heronian yang Hampir Setara


14

Sebuah sama sisi Heronian Segitiga Hampir adalah segitiga dengan panjang integer bentuk n-1, ndan n+1dan juga memiliki daerah integer. Beberapa yang pertama adalah:

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

Quest : Hasilkan program terpendek yang menghasilkan ntriple tersebut. (Petunjuk: ini adalah urutan yang dikenal).

Pemenang akan dipilih pada 2 Mei 2014.


Untuk apa nilainya, ini setara dengan salah satu persamaan Pell yang lebih banyak dipelajari.
Peter Taylor

3
Saya tidak begitu mengerti downvotes. Ini adalah tugas yang cukup sederhana tetapi saya tidak melihat masalah dengan pertanyaan itu. Tetapi saya harus mengatakan (sebagai orang kidal) bahwa pembatasan adalah salah satu yang paling aneh dan termudah untuk dipatuhi yang pernah saya lihat.
Level River St

2
@steveverrill, meskipun saya tidak downvote saya memilih untuk tidak memperbaiki karena pembatasan yang tidak ada gunanya. Saya menduga bahwa suara dekat juga karena pembatasan: Saya bertaruh bahwa kurang dari 10% populasi dunia menggunakan tata letak keyboard yang sama dengan Kyle.
Peter Taylor

2
saya menyukai pembatasan @KyleKanos, meskipun orang-orang kidal membuat saya jijik
ardnew

2
@ardnew Dari semua tempat, ini adalah salah satu yang paling tidak mungkin saya harapkan komentar tukang seperti: P
Digital Trauma

Jawaban:


6

APL, 15 14 karakter

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

Pendekatan yang sama sebagai solusi alephalpha tetapi menggunakan lantai bukannya istilah koreksi.

Terima kasih untuk algoritme hiu karena menunjukkan bahwa operator perjalanan menghemat satu karakter.


1
(⍳3)menyimpan char 0 1 2, dan saya cukup yakin Anda dapat menggunakan Commute untuk membuatnya ⎕*⍨2+√3dan menyimpan yang lain.
algorithmshark

@algorithmshark Terima kasih atas ide-ide itu. Sayangnya ⍳3hasil 1 2 3dan dengan demikian satu char lebih lama.
Howard

8

Mathematica, 26, 22, 16 18 karakter

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

Terlalu banyak bermain golf: tidak akan berfungsi dalam bentuk saat ini (lihat di sini ).
Howard

5

GolfScript ( 24 21 karakter)

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

Mengambil input pada stdin, memberikan output ke stdout dalam formulir

[3 4 5]

Demo online

Perhatikan bahwa saya berasumsi bahwa elemen ke-0 dari urutan adalah [1 2 3](dengan area 0), yang menurut saya konsisten dengan OEIS A003500 .

Dengan terima kasih kepada Howard untuk penghematan 3-char.


Menggunakan (.).)]dua karakter lebih pendek. Selain itu, jika Anda mulai dengan 2 4Anda dapat mengganti \;dengan ;dan menyimpan yang tambahan.
Howard

@ Howard, saya awalnya memiliki 2 4dan diperlakukan [3 4 5]sebagai elemen ke-0, jadi saya malu untuk tidak melihat cara alternatif untuk mengeksploitasi offset. Terima kasih.
Peter Taylor

2

GNU dc , 30 19 byte

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

Ini menggunakan trik yang sama dengan jawaban @ Howard APL sehingga hanya satu istilah yang harus dihitung. Mengambil input untuk n dari stdin.

Keluaran:

$ 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

Cukup implementasi verbose di 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
Apakah kita seharusnya mengganti Ndengan suatu nilai? Program Anda tidak meminta input apa pun.
pegolf9338

1

Python 3, 83 karakter

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)

Ini menggunakan solusi rekursif, memanfaatkan fakta bahwa (kutipan dari Wikipedia ):

Nilai n selanjutnya dapat ditemukan dengan mengalikan nilai sebelumnya dengan 4, kemudian kurangi nilainya sebelum nilai tersebut (52 = 4 × 14 - 4, 194 = 4 × 52 - 14, dll.)


1

JavaScript (ECMAScript 6) - 52 Karakter

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

Menentukan fungsi rekursif fyang mengembalikan suku ke- n dan fungsi gyang mengembalikan array yang mengandung triple.

JavaScript - 41 Karakter

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

Diharapkan istilah yang akan dihitung akan disimpan dalam variabel global xdan output triple ke konsol.


1

CJam, 13 byte

3,3mq))ri#if+p

Versi pertama CJam adalah 10 hari lebih tua dari tantangan ini, tetapi saya tidak tahu apakah semua fitur yang saya gunakan telah ada saat itu. Tantangannya secara resmi ditutup, jadi ...

Uji di sini.

Penjelasan

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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.