พิมพ์อาร์เรย์จากกึ่งกลาง


10

นี่คือคำถามที่รหัสกอล์ฟ

รับจำนวนเต็ม s และ n งานคือการส่งออกอาร์เรย์ทั้งหมดของความยาว n ซึ่งรับค่าจาก -s ถึง s บิดเท่านั้นคือคุณต้องส่งออกตามลำดับต่อไปนี้

  • อาร์เรย์ศูนย์ทั้งหมดของความยาว n
  • อาร์เรย์ที่มีความยาว n ทั้งหมดที่มีองค์ประกอบตั้งแต่ -1 ถึง 1 ไม่รวมอาร์เรย์ใด ๆ ที่คุณเคยแสดงผลมาก่อน
  • อาร์เรย์ที่มีความยาวทั้งหมด n พร้อมองค์ประกอบตั้งแต่ -2 ถึง 2 ไม่รวมอาร์เรย์ใด ๆ ที่คุณได้แสดงผลมาก่อน
  • และต่อไปจนกว่าคุณจะไปยังอาร์เรย์ที่มีความยาว n ทั้งหมดด้วยองค์ประกอบตั้งแต่ -s ถึง s โดยไม่รวมถึงอาร์เรย์ใด ๆ ที่คุณได้แสดงผลมาก่อน

คุณควรส่งออกหนึ่งอาร์เรย์ต่อบรรทัด สามารถเว้นวรรคหรือคั่นด้วยเครื่องหมายจุลภาค

นี่คือบางส่วนของรหัสหลามที่ไม่ปฏิบัติตามที่ส่งออกอาร์เรย์ / รายการ / สิ่งอันดับในลำดับที่ถูกต้อง

import itertools

s =  3
n = 2

oldsofar = set()
newsofar = set()
for i in xrange(s):
    for k in itertools.product(range(-i,i+1), repeat = n):
        newsofar.add(k)
    print newsofar - oldsofar
    oldsofar = newsofar.copy()
    print "***"

สง่าราศีพิเศษ (และ upvote จากฉัน) สำหรับคำตอบที่ไม่มีการลบการตั้งค่าหรือเทียบเท่า


1
เราสามารถเขียนฟังก์ชั่นที่พิมพ์ผลลัพธ์ได้หรือไม่?
LegionMammal978

@ LegionMammal978 ฉันต้องการโปรแกรมที่สมบูรณ์ หากนี่เป็นการโต้เถียงกันอย่างจริงจังฉันจะให้แน่นอน :)

มีคำสั่งใดบ้างที่จำเป็นในแต่ละหัวข้อย่อยของคุณ?
Martin Ender

@ MartinBüttnerไม่ไม่เลย

คำตอบ:


6

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

NRṗµAṀ€Ụị

ไม่มีการลบรายการในการสร้างโพสต์นี้ ลองออนไลน์!

มันทำงานอย่างไร

NRṗµAṀ€Ụị  Main link. Arguments: s, n

N          Negate; yield -s.
 R         Range; yield [-s, ..., s].
  ṗ        Cartesian power; push all vectors of length n of those elements.
   µ       Begin a new, monadic link. Argument: L (list of vectors)
    A      Compute the absolute values of all vector components.
     Ṁ€    Get the maximum component of each vector.
       Ụ   Sort the indices of A according to the maximal absolute value of the
           corresponding vector's components.
        ị  Retrieve the vectors of A at those indices.

ตอนนี้มันแค่โง่!

2
"ไม่มีรายการใดได้รับอันตรายในการสร้างโพสต์นี้"
Dennis van Gils

6

MATL , 18 ไบต์

_G2$:iZ^t!|X>4#SY)

อินพุตแรกคือsที่สองคือn

ใช้ได้กับภาษาปัจจุบัน (15.0.0)

ลองออนไลน์!

คำอธิบาย

_      % take input s implicitly. Negate to obtain -s
G      % push input s again
2$:    % inclusive range from -s to s
i      % take input n
Z^     % Cartesian power. Gives 2D array, with each result on a row
t!     % duplicate and transpose
|      % absolute value
X>     % maximum of each column 
4#S    % sort and push the indices of the sorting
Y)     % apply as row indices into the 2D array. Display implicitly

1
18 bytes อุกอาจ :)

4

Haskell, 61 60 ไบต์

n#s=[c|b<-[0..s],c<-mapM id$[-b..b]<$[1..n],any((b==).abs)c]

ตัวอย่างการใช้งาน: ->2#2[[0,0],[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1],[-2,-2],[-2,-1],[-2,0],[-2,1],[-2,2],[-1,-2],[-1,2],[0,-2],[0,2],[1,-2],[1,2],[2,-2],[2,-1],[2,0],[2,1],[2,2]]

มันทำงานอย่างไร:

   b<-[0..s]                           -- loop b through 0 .. s
        c<-mapM id$[-b..b]<$[1..n]     -- loop c through all lists of length n
                                       -- made out of the numbers -b .. b
                                       -- ("[-b..b]<$[1..n]" is "replicate n [-b..b]";
                                       --  "mapM id" is "sequence")
[c|                 ,any((b==).abs)c]  -- keep c if it contains b or -b

แก้ไข: @xnor ชี้ให้เห็นว่าเป็น mapM idsequence


mapM idsequenceจะสั้นกว่า
xnor

@xnor: จริง ขอบคุณ!
nimi

2

Mathematica, 83 ไบต์

Print/@Select[Range[-#,b=#]~Tuples~a,Abs@#~MemberQ~b&]&/@Range[0,a=Input[];Input[]]

หากต้องการใช้ให้ใส่สคริปต์และอินพุตnจากนั้นsแยกบรรทัด พิมพ์แต่ละแถวเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค (เช่น, {-1, 0, 1}) มันทำงานโดยการใช้รายการของความยาวทุกnกับตัวเลขระหว่าง[-cur..cur]และและการพิมพ์เหล่านั้นซึ่งรวมถึงการอย่างใดอย่างหนึ่งหรือ-cur curจากนั้นทำซ้ำนี้ทั้งหมดในcur (โพสต์นี้มี 19 `ตัวอักษร!)[0..s]


1

JavaScript (SpiderMonkey 30+), 134 ไบต์

(s,n)=>n?[for(a of f(s,n-1))for(i of Array(s*2+1).keys())[i-n,...a]].sort((a,b)=>g(a)-g(b),g=a=>Math.max(...a,-Math.min(...a))):[[]]

ใช้วิธีการคาร์ทีเซียน - กำลัง - และ - เรียงลำดับซึ่งฉันคิดว่าแยกจากกัน แต่ฉันกำลังรวบรวม SpiderMonkey ใหม่ในเวลานั้นดังนั้นฉันจึงไม่สามารถตอบคำถามนี้ก่อน @Dennis

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