รูปสามเหลี่ยม Heronian เกือบเท่ากัน


14

เกือบด้านเท่ากันหมด Heronian สามเหลี่ยมเป็นรูปสามเหลี่ยมที่มีความยาวจำนวนเต็มของรูปแบบn-1, nและn+1และยังมีพื้นที่จำนวนเต็ม สองสามคนแรกคือ:

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

Quest : สร้างโปรแกรมที่สั้นที่สุดที่ให้ผลลัพธ์เป็นnสามเท่า (คำแนะนำ: นี่เป็นลำดับที่รู้จัก)

ผู้ชนะจะถูกเลือกในวันที่ 2 พฤษภาคม 2014


สำหรับสิ่งที่มีค่านี่เท่ากับสมการ Pell ที่มีการศึกษาอย่างกว้างขวางมากขึ้น
Peter Taylor

3
ฉันไม่เข้าใจ downvotes จริงๆ นี่เป็นงานที่ค่อนข้างง่าย แต่ฉันไม่เห็นปัญหาใด ๆ กับคำถาม แต่ฉันต้องบอกว่า (เป็นคนถนัดมือซ้าย) ว่าข้อ จำกัด นั้นเป็นหนึ่งในสิ่งที่แปลกประหลาดที่สุดและง่ายที่สุดที่จะปฏิบัติตามที่ฉันเคยเห็นมา
เลเวลริเวอร์เซนต์

2
@ สตีฟเวอร์ริลล์ถึงแม้ว่าฉันจะไม่ได้ลงคะแนนฉันก็เลือกที่จะไม่โหวตเพราะข้อ จำกัด ที่ไม่มีจุดหมาย ฉันสงสัยว่าคะแนนโหวตที่ใกล้เคียงกันนั้นเป็นเพราะข้อ จำกัด : ฉันพนันได้ว่าน้อยกว่า 10% ของประชากรโลกใช้รูปแบบแป้นพิมพ์เดียวกับ Kyle
Peter Taylor

2
ฉันชอบข้อ จำกัด @KyleKanos ถึงแม้ว่าคนถนัดซ้ายรังเกียจฉัน
ardnew

2
@ardnew ของทุกสถานที่นี้เป็นหนึ่งในโอกาสน้อยที่สุดที่ฉันคาดหวังความเห็นของนักเล่นมืออาชีพดังกล่าว: P
Digital Trauma

คำตอบ:


6

APL, 15 14 charaters

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

แนวทางเดียวกับalephalphaแก้ปัญหาของแต่ใช้พื้นแทนคำแก้ไข

ขอขอบคุณอัลกอริทึมสำหรับการชี้ให้เห็นว่าผู้ประกอบการเดินทางประหยัดหนึ่งอักขระ


1
(⍳3)ช่วยประหยัดถ่านมากกว่า0 1 2และฉันค่อนข้างมั่นใจว่าคุณสามารถใช้ Commute เพื่อสร้าง⎕*⍨2+√3และบันทึกใหม่ได้
algorithmshark

@algorithmshark ขอบคุณสำหรับความคิดเหล่านั้น น่าเสียดายที่⍳3ผลตอบแทน1 2 3และดังนั้นจึงเป็นหนึ่งในถ่านอีกต่อไป
Howard


5

GolfScript ( 24 21 ตัวอักษร)

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

รับอินพุตบน stdin, ให้เอาต์พุตกับ stdout ในรูปแบบ

[3 4 5]

การสาธิตออนไลน์

โปรดทราบว่าฉันคิดว่าองค์ประกอบลำดับที่ 0 ของลำดับคือ[1 2 3](ที่มีพื้นที่ 0) ซึ่งฉันคิดว่าสอดคล้องกับOEIS A003500A003500

ขอบคุณฮาวเวิร์ดสำหรับการประหยัดแบบ 3 ถ่าน


ใช้(.).)]สั้นลงสองตัวอักษร นอกจากนี้หากคุณเริ่มต้นด้วย2 4คุณสามารถแทนที่\;ด้วย;และบันทึกอีกหนึ่ง
Howard

@Howard ฉันเคยมี2 4และถือว่า[3 4 5]เป็นองค์ประกอบที่ 0 ดังนั้นฉันอายที่จะไม่เห็นวิธีการอื่นในการใช้ประโยชน์จากออฟเซ็ต ขอบคุณ
Peter Taylor

2

GNU dc , 30 19 ไบต์

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

วิธีนี้ใช้เคล็ดลับเดียวกับคำตอบ APL ของ @ Howardดังนั้นจึงต้องคำนวณเพียงหนึ่งคำเท่านั้น รับอินพุตเป็น 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

Python 77

ค่อนข้างใช้งาน verbose ใน 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)

วิธีนี้ใช้โซลูชันแบบเรียกซ้ำโดยใช้ประโยชน์จากข้อเท็จจริงที่ว่า (อ้างอิงจากWikipedia ):

ค่าที่ตามมาของ 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]

กำหนดฟังก์ชัน recursive fซึ่งส่งกลับ n THระยะและฟังก์ชั่น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.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.