ใหม่ # 3: 5 8 6


16

บทนำ(อาจถูกละเว้น)

การใส่ตัวเลขบวกทั้งหมดในลำดับปกติ (1, 2, 3, ... ) นั้นน่าเบื่อนิดหน่อยใช่ไหม? ดังนั้นนี่คือชุดของความท้าทายรอบพีชคณิต (reshuffelings) ของจำนวนบวกทั้งหมด นี่คือความท้าทายที่สามในซีรีส์นี้ (เชื่อมโยงกับความท้าทายแรกและครั้งที่สอง )

ในการท้าทายนี้เราจะจัดเรียงตัวเลขตามธรรมชาติในแถวของความยาวที่เพิ่มขึ้นในลักษณะที่ผลรวมของแต่ละแถวนั้นเป็นจำนวนเฉพาะ สิ่งที่ฉันคิดว่าน่าทึ่งมากเกี่ยวกับเรื่องนี้คือตัวเลขธรรมชาติทุกตัวมีอยู่ในข้อตกลงนี้ ไม่มีการข้ามหมายเลข!

การสร้างภาพของการจัดเรียงนี้มีลักษณะเช่นนี้:

row             numbers             sum
1                  1                  1
2                2   3                5
3              4   5   8             17
4            6   7   9  15           37
5          10 11  12  13  21         67
6        14  16 17  18  19  23      107
etc.

เราสามารถอ่านองค์ประกอบจากแถวในรูปสามเหลี่ยมนี้ 20 องค์ประกอบแรกคือ: 1, 2, 3, 4, 5, 8, 6 , 7, 9, 15, 10, 11, 12, 13, 21, 14, 16, 17, 18, 18, 19 ( ใช่มี เพลงออเดอร์ใหม่ที่ซ่อนอยู่ในลำดับนี้ )

ตั้งแต่นี้เป็น "ลำดับบริสุทธิ์" ความท้าทายของงานคือการเอาท์พุทสำหรับให้เป็น input ที่เป็นA162371a(n)na(n)

งาน

รับอินพุตจำนวนเต็มส่งออกในรูปแบบจำนวนเต็มna(n)

a(n)ถูกกำหนดให้เป็นองค์ประกอบที่ของ lexicographically การเปลี่ยนแปลงลำดับแรกสุดของจำนวนธรรมชาติเช่นนั้นเมื่อเห็นว่าเป็นรูปสามเหลี่ยมอ่านโดยแถวสำหรับ n> 1 ผลรวมของแถวเป็นจำนวนเฉพาะ นับตั้งแต่การเปลี่ยนแปลง lexicographical แรกของจำนวนธรรมชาติเริ่มต้นด้วย 1เป็น 1 หมายเหตุว่าด้วยนิยามนี้และจะไม่จำเป็นต้องเป็นนายก นี่คือ OEIS ลำดับA162371na(1)a(1)=1a(1)

หมายเหตุ: การจัดทำดัชนีแบบ 1 จะถือว่าที่นี่; คุณอาจใช้การจัดทำดัชนีดังนั้นฯลฯ โปรดพูดถึงสิ่งนี้ในคำตอบของคุณหากคุณเลือกที่จะใช้a(0)=1;a(1)=2

กรณีทดสอบ

Input | Output
---------------
1     |  1
5     |  5
20    |  19
50    |  50
78    |  87
123   |  123
1234  |  1233
3000  |  3000
9999  |  9999
29890 |  29913

กฎระเบียบ

  • อินพุตและเอาต์พุตเป็นจำนวนเต็ม (อย่างน้อยโปรแกรมของคุณควรสนับสนุนอินพุตและเอาต์พุตในช่วง 1 ถึง 32767)
  • อินพุตที่ไม่ถูกต้อง (0, ลอย, สตริง, ค่าลบ, ฯลฯ ) อาจนำไปสู่เอาต์พุตที่ไม่ได้คาดการณ์ไว้, ข้อผิดพลาดหรือ (un) พฤติกรรมที่กำหนดไว้
  • ใช้กฎ I / Oเริ่มต้น
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ

เราสามารถส่งออกลำดับไม่สิ้นสุดหรือคืนเครื่องกำเนิดไฟฟ้าแทนได้หรือไม่?
โจคิง

2
ข้อผิดพลาด 1 ไม่ใช่นายกรัฐมนตรี
Jo King

1
@JoKing เกี่ยวกับ (1) = 1: ฉันจะเพิ่มนั้น นั่นคือข้อยกเว้น นี่คือการระบุไว้อย่างชัดเจนในรายการ OEIS ซื้อฉันล้มเหลวทีโอทีพูดถึงมันอย่างชัดเจน ฉันจะเพิ่มลงในคำถาม ขอบคุณ
ตลอดไป

@JoKing โปรดทราบว่านิยามของลำดับนั้นต้องการผลรวมของแถวเท่านั้นที่จะเป็นไพรม์สำหรับ n> 1 เนื่องจากลำดับคือการเรียงสับเปลี่ยนแบบย่อของหมายเลขธรรมชาติ a (1) ออกมาเป็น 1 ดังนั้นจริง ๆ แล้ว 1 ไม่ใช่เฉพาะ แต่ความท้าทายหรือคำจำกัดความของลำดับไม่ได้บอกหรือต้องการ 1 ให้เป็นนายก .. .
agtoever

4
ลำดับที่เกี่ยวข้อง: A075348
jimmy23013

คำตอบ:



3

Perl 6 , 80 77 ไบต์

{({$!=@_;+(1...{$_$!&&(|$!,$_).rotor(1..*).one.sum.is-prime-1})}...*)[$_]}

ลองออนไลน์!

คำอธิบาย:

{                                  }  # Anonymous code block
 (                        ...*)[$_]   # Index into the infinite sequence
  {                      }   # Where each element is
   $!=@_;  # Save the list of previous elements into $!
   +(1...{             })    # Return the first number that
          $_$!         # Has not appeared in the list so far
          &&            # And
          (|$!,$_)      # The new sequence
          .rotor(1..*)  # Split into rows of increasing length
                        # And ignoring incomplete rows
          .one          # Have exactly one row
          .sum          # Where the sum
          .is-prime-1   # Is not prime (i.e. just the first row)

3

Haskell , 122 120 ไบต์

import Data.Numbers.Primes
l%a|(p,q)<-splitAt l a,(s,k:t)<-span(not.isPrime.(+sum p))q=p++k:(l+1)%(s++t)
((1:1%[2..])!!)

ลองออนไลน์! (มี 2 ไบต์พิเศษสำหรับf=)

แก้ไข: ตอนนี้ใช้การจัดทำดัชนีแบบ 0 เพื่อบันทึก 2 ไบต์ ขอบคุณ @wastl ที่ชี้ให้เห็นว่าฉันต้องพลาดมันใน OP

มันสนุกมากที่จะเขียน! ฟังก์ชั่นตัวช่วย%ใช้ความยาวlและรายการค่าที่สามารถaใช้ได้ มันจะส่งกลับรายการค่าที่ไม่มีที่สิ้นสุดสำหรับลำดับ ความยาวน้อยกว่าหนึ่งความยาวของแถวรูปสามเหลี่ยมปัจจุบันและรายการไม่มีที่สิ้นสุดและเรียงลำดับล่วงหน้า ก่อนอื่นเราแค่ให้lค่าแรกจากจากaนั้นดูส่วนที่เหลือจนกว่าเราจะพบค่า (เล็กที่สุด) แรกที่ทำให้ผลรวมสำคัญ เราแยกรายการโดยใช้ค่าดังกล่าวspanและการจับคู่รูปแบบบางอย่าง ตอนนี้สิ่งที่เราต้องทำคือการให้ผลตอบแทนที่คุ้มค่าใหม่และการกลับมีความยาวบรรทัดถัดไปและค่าที่เหลืออยู่ในl+1 aสำหรับผลสุดท้ายเราย่อหน้าที่ 1 (กรณีพิเศษสำหรับ n = 0) !!และดัชนีลงไปด้วย


1
ฉันคิดว่าคุณสามารถลบสิ่ง0:ที่ท้าทายที่คุณสามารถใช้การจัดทำดัชนี 0
กำจัด



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.