บันไดหลักซ้อนกัน


17

รับจำนวนเต็มบวกและhเอาต์พุตคอลัมน์และWชั่วโมงชมWชั่วโมงแถวของข้อความตามที่อธิบายไว้ด้านล่าง

แถวแรกเริ่มต้นด้วย 11 0วินาทีแถวที่สองมี 10 วินาทีแถว1ที่สามมีเก้า2แถวและลงแถวที่สิบด้วยสอง9วินาที ในแต่ละสิบแถวแรกหลังจากการเริ่มต้นของตัวเลขที่ต่อเนื่องกันเลขหลักถัดไปจะปรากฏขึ้นสองครั้งก่อนที่ตัวเลขต่ำสุดถัดไปที่สองจะปรากฏขึ้นสองครั้งด้วยรูปแบบนี้ซ้ำตลอดไป หากมีการเรียกใช้0s จำนวนหลักหลังจากนั้นเสมอ9 s

แถวด้านล่างแถวที่สิบจะเหมือนกับแถวที่อยู่ด้านบนทันที แต่เลื่อนไปทางขวาทีละหนึ่ง ตัวเลขใหม่ที่ปรากฏขึ้นนั้นเหมือนกับตัวเลขหลักซ้ายสุดก่อนหน้าหากไม่ใช่ตัวเลขถัดจากอินสแตนซ์อื่นของตัวเอง ไม่เช่นนั้นมันจะเป็นตัวเลขสูงสุดถัดไป (หมุนเวียนจาก 9 กลับเป็น 0)

องค์ประกอบแรกมีดังนี้:11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

นี่คือภาพที่มีข้อความสีเพื่อทำให้รูปแบบชัดเจนยิ่งขึ้น

ข้อความคงที่

หากคุณต้องการสร้างคอลัมน์ / แถวให้น้อยลงคุณควรครอบตัดข้อความด้านบน

หากคุณต้องการสร้างคอลัมน์ / แถวมากกว่านี้บันไดที่มีอยู่ควรจะขยายออกไป หากมีคอลัมน์ / แถวเพิ่มจำนวนบันไดที่เพิ่มขึ้นของตัวเลขติดต่อกันควรเลือกตัวเลขด้วยจำนวนเต็ม ดังนั้นสำหรับอินพุตเอาต์พุตควรเป็น(15,13)

000000000009988
111111111100998
222222222110099
333333332211009
444444433221100
555555443322110
666665544332211
777766554433221
888776655443322
998877665544332
099887766554433
009988776655443
100998877665544

นี่คือรูปภาพของข้อความนี้ที่มีสี:

ข้อความขยาย

กฎระเบียบ

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

รหัสที่สั้นที่สุดชนะ

กรณีทดสอบ

อินพุตถูกใช้เป็นสำหรับกรณีทดสอบ(W,ชั่วโมง)

1,1
0

3,2 000 111

20,1 00000000000998877665

11,10 00000000000 11111111110 22222222211 33333333221 44444443322 55555544332 66666554433 77776655443 88877665544 99887766554

15,13 000000000009988 111111111100998 222222222110099 333333332211009 444444433221100 555555443322110 666665544332211 777766554433221 888776655443322 998877665544332 099887766554433 009988776655443 100998877665544


8
ฉันไม่เข้าใจรูปแบบจริงๆ คุณช่วยอธิบายรูปแบบได้อย่างเป็นรูปธรรมแทนที่จะคาดหวังว่ามันจะถูกคาดการณ์จากตัวอย่าง บางคนพบตัวอย่างที่เป็นประโยชน์ แต่ฉันไม่เห็นอย่างชัดเจนว่ารูปแบบดังต่อไปนี้มาจากตัวอย่าง
โพสต์ Rock Garf Hunter

@WW ขอบคุณฉันได้เพิ่มคำอธิบายอย่างละเอียดอีกเล็กน้อยที่ด้านบน
dylnan

1
1234

@ qwr โอ้ดีไม่รู้ว่าเราทำได้ คุณทำอะไรกับมัน
dylnan

\ color {red} {text} ฉันเชื่อ
qwr

คำตอบ:


7

Python 3, 94 93 78 77 74 ไบต์

lambda x,y:[[[(j-i+10)//2%10,j][j+i<9]for i in range(x)]for j in range(y)]

-1 ไบต์จากdylnan

-15 ไบต์โดยส่งคืนรายการรายการแทนที่จะพิมพ์จากxnor

-1 ไบต์โดยสลับลำดับของ(j-i+10)//2%10และjส่วนของif-else

-3 bytes จากJo Kingโดยการเปลี่ยนif-elseเป็นรายการ

ลองออนไลน์!


การใช้ฟังก์ชันแลมบ์ดาจะบันทึกไบต์: TIO
dylnan

@dylnan ขอบคุณ!
pizzapants184

1
ความท้าทายนี้ช่วยให้สามารถแสดงรายการรายการตัวเลขดังนั้นดูเหมือนว่าคุณไม่จำเป็นต้องทำการพิมพ์หรือเข้าร่วม
xnor

7

C (gcc) , 101 100 99 ไบต์

  • บันทึกไบต์ขอบคุณที่pizzapants184
  • บันทึกเป็นไบต์
s,t;a(i,r){for(t=~0;++t<r;puts(""))for(s=0;s<i;putchar(48+(t+(s>10-t)*(10*s+9-(s+++t-11)/2))%10));}

ลองออนไลน์!


-1 ไบต์ลองออนไลน์! printf("%d",->putchar(48+
pizzapants184

@ pizzapants184 ขอบคุณมาก
Jonathan Frech

@ceilingcat แต่น่าเสียดายที่ไม่มี
Jonathan Frech

2

Canvas ขนาด 14 ไบต์

[⁷{¹∔⁶+»¹m◂@]]

ลองที่นี่!

ในขณะที่ทำสิ่งนี้ฉันสังเกตเห็นในหลาย ๆ ที่ที่ฉันมีโมดูโลเชิงลบใน Canvas (ที่นี่หมายความว่า»- div div 2 - ปัดไปทาง 0) 18 ไบต์ก่อนหน้านี้ที่ทำงานโดยไม่มีการแก้ไขไม่ทำงานอีกต่อไป (เพราะฉันบันทึกเฉพาะmain.jsระหว่างรุ่น) แต่TIO ยังคงมีรุ่นเก่า

คำอธิบาย:

[            ]  for 1..input
 ⁷{         ]     for 1..2nd input
   ¹∔               subtract from this loop counter the outer loops one
     ⁶+             add 12
       »            divide by 2, rounded to -∞
        ¹m          minimum of that & the outer loops counter
          ◂@        in the string "0123456789", get the xth char, 1-indexed

2

ถ่าน , 20 17 ไบต์

Eη⭆θ﹪⌊⟦ι÷⁺⁻ιλχ²⟧χ

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

 η                  Height
E                   Map over implicit range
   θ                Width
  ⭆                 Map over implicit range and join
          ⁻ιλ       Subtract column from row
         ⁺   χ      Add 10
        ÷     ²     Integer divide by 2
       ι            Current row
     ⌊⟦        ⟧    Take the minimum
    ﹪           χ   Modulo by 10
                    Implicitly print each row on its own line

แก้ไข: บันทึกแล้ว 3 ไบต์โดยเปลี่ยนเป็นอัลกอริทึมของ @ dzaima


2

เยลลี่ขนาด 14 ไบต์

_@þ:2+6«"J$’%⁵

Wชั่วโมง

ลองออนไลน์! หรือดู (โพสต์รูปแบบ)การทดสอบในตัว

อย่างไร?

_@þ:2+6«"J$’%⁵ - Link: integer w, integer h
  þ            - outer product using (i.e. [[f(i,j) for i in 1..w] for j in 1..h]):
_@             -   subtraction with swapped arguments (i.e. f(i,j): j-i)
               -   e.g. the 4th row is [3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,...]
   :2          - integer divide by two (vectorises)
               -                       [1, 1, 0, 0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,-6,...]
     +6        - add six (vectorises)
               -                       [7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,...]
          $    - last two links as a monad:
         J     -   range of length -> [1,2,3,...,h]
        "      -   zip with:
       «       -     minimum (vectorises)
               -                       [4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 1, 1, 0,...]
           ’   - decrement (vectorises)
               -                       [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 0, 0,-1,...]
             ⁵ - literal ten
            %  - modulo (vectorises)
               -                       [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 0, 0, 9,...]


2

เยลลี่ขนาด 19 ไบต์

ใช้วิธีการคล้ายกันมากกับpizzapants'และนีล ที่บันทึกไว้ 1 ขอบคุณไบต์โจนาธานอัลลัน

p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵

ลองออนไลน์!


ลิงค์ผู้ช่วย

_/HḞ+5

นี้เป็นลิงค์เอก (เทียบเท่าวุ้นของฟังก์ชันอาร์กิวเมนต์เดียว) Çที่สามารถเรียกได้จากลิงค์ต่อไปใช้อย่างรวดเร็ว มันใช้รายการของจำนวนเต็มสองตัวและทำต่อไปนี้:

_/

ลดการลบ

HḞ+5%⁵

ชั้นครึ่งของมันเป็นจำนวนเต็มและเพิ่ม 5 จากนั้นนำโมดูโล 10

ลิงค์หลัก

p’ḢÇS<9Ɗ?€s

çxY

p’

1([0,x)Z)×([0,Y)Z)

S<9Ɗ?€

และสำหรับแต่ละคู่ในผลิตภัณฑ์คาร์ทีเซียนถ้าผลรวมของพวกเขาน้อยกว่า 9 ดังนั้น:

ดึงส่วนหัวของคู่ (องค์ประกอบแรก) มิฉะนั้น,

Ç

โทรไปที่ลิงค์ผู้ช่วยเหลือ (อธิบายด้านบน) บนคู่

s%⁵

Y


คุณสามารถย้าย mod 10 ไปยังจุดสิ้นสุดและจากนั้นผู้ช่วยเหลือในบรรทัดเพื่อบันทึกไบต์ - ไม่ว่าจะเป็นแบบ dyad p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵หรือp’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵หรือ monad ด้วยp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.