ความก้าวหน้าของคอลัมน์เมทริกซ์


17

พิจารณาเมทริกซ์ที่ไม่มีที่สิ้นสุด:

0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
0  0  2  3  0  0  2  3  0  0  2  3  0  0  2  3
0  0  0  4  5  6  0  0  0  4  5  6  0  0  0  4 ...
0  0  0  0  7  8  9 10  0  0  0  0  7  8  9 10
0  0  0  0  0 11 12 13 14 15  0  0  0  0  0 11
              ...

แต่ละแถวใหม่ของเมทริกซ์ถูกสร้างโดยเริ่มต้นด้วยzศูนย์โดยที่zความยาวของตัวเลขหลักบวกที่เราใช้ในแถวนั้น ตัวเลขบวกถูกสร้างโดยเริ่มต้นด้วยการ1เพิ่มและเพิ่มและเพิ่มตัวเลขเพิ่มเติมทุกครั้งที่คุณวนแถวซ้ำ รูปแบบนั้นซ้ำไปเรื่อย ๆ ทางด้านขวา ตัวอย่างเช่นแถวแรกจะเริ่ม0, 1, 0, 1...ในขณะที่แถวที่สองเริ่มต้น0,0, 2,3, 0,0, 2,3...ขึ้น ตามรูปแบบแถวที่สามจะเริ่ม0,0,0, 4,5,6, 0,0,0, 4,5,6...ขึ้น

กำหนดให้เป็นจำนวนเต็มสองจำนวนเป็นอินพุตnและxเอาท์พุทตัวเลขแรก (บนสุด) xของnคอลัมน์ th ของเมทริกซ์ด้านบน (คุณสามารถเลือก 0- หรือ 1 การจัดทำดัชนีสำหรับคอลัมน์เพียงระบุว่าในการส่งของคุณ)

ตัวอย่างเช่นสำหรับอินพุตn = 0(ดัชนี 0) คอลัมน์นั้นเป็น0s ทั้งหมดดังนั้นเอาต์พุตก็จะเป็นx 0s

สำหรับการป้อนข้อมูลn = 15และการส่งออกจะเป็นx = 6[1, 3, 4, 10, 11, 0]

สำหรับการป้อนข้อมูลn = 29และการส่งออกจะเป็นx = 15[1, 0, 6, 8, 15, 0, 0, 34, 39, 0, 0, 0, 0, 0, 120]

สำหรับการป้อนข้อมูลn = 99และการส่งออกจะเป็นx = 25[1, 3, 4, 0, 15, 0, 0, 0, 37, 55, 56, 0, 87, 93, 0, 0, 151, 163, 176, 0, 0, 0, 0, 0, 325]

I / O และกฎ

  • อินพุตและเอาต์พุตจะได้รับโดยวิธีการที่สะดวกใด
  • อินพุตและเอาต์พุตสามารถสันนิษฐานได้ว่าเหมาะสมกับชนิดของหมายเลขในภาษาของคุณ
  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการเล่นกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

คำตอบ:


4

JavaScript (ES6), 45 ไบต์

(n)(x)จะเข้าในไวยากรณ์ currying

n=>g=x=>x?[...g(x-1),n/x&1&&n%x+x*~-x/2+1]:[]

ลองออนไลน์!

อย่างไร?

เราใช้สูตรโดยตรงเพื่อรับค่าของเซลล์ที่คอลัมน์n (ดัชนี 0) และแถวx (ดัชนี 1 ดัชนี):

n / x & 1 &&     // is this cell zero or non-zero?
n % x +          // column modulo row --> increment for a non-zero value at this position
x * ~-x / 2 + 1  // minimum value of non-zero values for this row:
                 // ∑(i=1...x-1)(i) + 1 = x(x - 1) / 2 + 1

3

R , 80 76 ไบต์

ขอบคุณ @JayCe สำหรับการชี้จุดบกพร่อง!

function(n,x)for(a in 1:x)print(rep(c(rep(0,a),((y=sum(1:a))-a+1):y),,n)[n])

ลองออนไลน์!

การจัดทำดัชนีการใช้ 1 nที่ใช้สำหรับ มีโอกาสมากที่อัลกอริทึม golfier อยู่ แต่repเป็นตัวเปิดใช้งานสำหรับโซลูชันไร้เดียงสา


มันเกิดข้อผิดพลาดn=1เนื่องจากผลลัพธ์ของแซพพลายในเมทริกซ์อีกต่อไป การแก้ไขนี้มีค่าใช้จ่ายสูงฉันสงสัยว่ามี golfier หนึ่งหรือไม่
JayCe

โอ้ใช่คุณพูดถูก โชคดีที่มีอย่างหนึ่ง!
Giuseppe

สำหรับห่วงใช่! และคุณแข็งแรงเล่นกอล์ฟ 4 ไบต์ในกระบวนการ :)
Jayce

@JayCe ใช่ความคิดเดิมของฉันคือการดัชนีนอกสุดrepที่มีnอยู่ภายในsapplyซึ่งบันทึกไว้ไบต์ แต่แล้วผมจำได้ว่าforลูปจะสั้นกว่าsapplyเพราะผมจะได้ไม่ต้องกำหนดฟังก์ชัน
Giuseppe



2

MATL , 25 18 ไบต์

x:"@:t~ys:b@-)h1G)

ลองออนไลน์!

ขอบคุณ Luis Mendo สำหรับการเล่นกอล์ฟขนาด 6 ไบท์!

นี่คือพอร์ต MATL ของคำตอบ R ของฉัน

x		 % implicit input, read n and delete
:		 % implicit input, read x and push [1..x]
"		 % for loop with i = 1..x
 @:		 % push [1..i]
   t		 % duplicate
    ~		 % logical negate, turn to array of zeros
		 % stack: [[1..i], [0 .. (i times)]]
     y		 % duplicate from below
		 % stack: [[1..i], [0 .. (i times)], [1..i]]
      s:	 % sum and range
		 % stack: [[1..i], [0 .. (i times)], [1..(i * (i + 1)/2)]]
	b	 % bubble up
		 % stack: [[0 .. (i times)], [1..(i * (i + 1)/2)], [1..i]]
	 @-	 % push i and subtract. This will be used as a modular index to get the last i elements
		 % stack: [[0 .. (i times)], [1..(i * (i + 1)/2)], [1-i..0]]
	   )	 % index into array modularly to get the last i elements
		 % stack: [[0 .. (i times)], [(i-1)*i/2 + 1, .. (i * (i + 1)/2)]]
	    h	 % horizontally concatenate the array
	     1G) % push n and index modularly, leaving the result on the stack
		 % implicit end of for loop. The stack now contains the appropriate elements in order
		 % implicit end. Print stack contents


1

Husk , 14 ไบต์

↑!Tzo¢+MRN0CNN

อาร์กิวเมนต์n(แรก) มีการจัดทำดัชนี 1 แบบลองออนไลน์!

อีกวิธีหนึ่งเราสามารถใช้↑!TṠzo¢+†K0CNNสำหรับจำนวนไบต์เดียวกัน

คำอธิบาย

↑!Tz(¢+)MRN0CNN -- example inputs n=4, x=3
            C N -- cut the natural numbers: [1,2,3,4,…]
             N  -- | using the natural numbers
                -- : [[1],[2,3],[4,5,6],[7,8,9,10],…]
        M N     -- map over the naturals
         R 0    -- | replicate 0 that many times
                -- : [[0],[0,0],[0,0,0],[0,0,0,0],…]
   z(  )        -- zip these two lists
      +         -- | concatenate
     ¢          -- | cycle
                -- : [[0,1,0,1,…],[0,0,2,3,0,0,2,3,…],…]
  T             -- transpose: [[0,0,0,0,…],[1,0,0,0,…],[0,1,0,0,…],[1,3,4,0,…],…]
 !              -- index into that list using n: [1,3,4,0,…]
↑               -- take x: [1,3,4]

1

Husk , 21 19 ไบต์

↑mȯ!⁰¢§+`R0§…ȯ→Σ←ΣN

ใช้อาร์กิวเมนต์เป็นn(1 จัดทำดัชนี) xแล้ว
บันทึก 2 ไบต์ต้องขอบคุณ BMO แต่ก็ยังไม่สั้นเท่ากับคำตอบของ BMO
ความพยายามครั้งแรกของฉันที่ใช้ Husk
ลองออนไลน์!





1

เยลลี่ 11 ไบต์

ṖS+R¬;$)⁹ịⱮ

ลองออนไลน์!

-1 ขอบคุณที่โจนาธานอัลลัน

อาร์กิวเมนต์ 1: x
อาร์กิวเมนต์ 2: n + 1


0ṁ;Ɗ-> ¬;$บันทึกเป็นไบต์
Jonathan Allan

@JanathanAllan และฉันสงสัยว่ายังไม่เพียงพอ อย่างน้อยฉันก็ลบความอัปยศ’R... (นั่นคืออย่างน้อยสำหรับฉัน) สิ่งที่แปลกคือในช่วงสองสามวันที่ผ่านมาฉันกำลังคิดถึงลำดับของ Thue-Morse (ซึ่งใน Jelly มี;¬$)
Erik the Outgolfer

1

05AB1E , 25 ไบต์

LO©LsL£¹£¹LÅ0s)øε˜®Ì∍}ø¹è

ลองออนไลน์!


05AB1E ไปพร้อมกับเมทริกซ์เช่นยาสีฟันและน้ำส้ม แต่ไม่ใช่การนับไบต์ที่แย่ถือว่าเป็นการใช้งานที่ไม่ดีของฉัน แม้แต่รหัสของฉันก็หัวเราะเยาะฉัน " LO©L"


0

ถ่าน 19 ไบต์

IE…·¹N§⁺Eι⁰EιL⊞Oυωη

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

    ¹               Literal 1
     N              First input (`x`) as a number
  …·                Inclusive range
 E                  Map (value `i`, 0-indexed counter `k`)
         ι          Current value
        E           Map over implicit range
          ⁰         Literal 0 (i.e. create array of `i` zeros)
            ι       Current value
           E        Map over implicit range
                 ω  Arbitrary variable
                υ   Predefined array
              ⊞O    Push
             L      Length
       ⁺            Concatenate arrays
      §           η Index by second input (`n`)
I                   Cast to string and implicitly print on separate lines

ตัวอย่างEιL⊞Oυωสร้างiจำนวนเต็มต่อไปโดยสมควรที่จะผลักดันค่าหุ่นไปยังอาร์เรย์แต่ละครั้งผ่านห่วงและรับความยาวของอาร์เรย์ผล


0

Java 8, 65 63 60 ไบต์

n->x->{for(;x>0;)System.out.println(n/x%2*(n%x+x*--x/2+1));}

n มีการจัดทำดัชนี 0 xเป็น 1-indexed, แสดงผลตัวเลขที่คั่นด้วยบรรทัดใหม่และกลับด้าน

ตอบ JavaScriptของพอร์ตของ@ Arnauld (ES6)คำตอบ

ลองออนไลน์
ผลลัพธ์ที่พิมพ์สวยในลำดับที่ถูกต้องคือ8 6 ไบต์นานขึ้น: ลองออนไลน์


0

Haskell, 67 ไบต์

i#l=cycle((++)=<<(0<$)$[i..l-1]):l#(l+l-i+1)
n!x=take x$(!!n)<$>1#2

ลองออนไลน์!

i#l                  -- function # builds the infinite matrix
                     -- input: i and l are lowest and highest+1 non-zero number of
                     -- the current line
   = cycle           -- for the current line, repeat infinitely
           [i..l-1]  --   the non-zero numbers of the line appended 
     (++)=<<(0<$)    --   to a list of 0s with the same length
   :                 -- append next row of the matrix
     l#(l+l-i+1)     --   which is a recursive call with i and l adjusted

n!x =                -- main function
              1#2    -- create matrix
      (!!n)<$>       -- pick nth element of each row
  take x             -- take the first x numbers thereof
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.