การเรียงพิมพ์ป้ายหลายมิติ


12

ในโลกหลายมิติไอพังก์หัวหน้าของเราต้องการพิมพ์ฉลากดัชนีลงในลิ้นชักแต่ละอันในตู้เก็บเอกสารหลายมิติของกลุ่ม บริษัท ของเรา

เจ้านายต้องการพิมพ์แผ่นป้ายผนึกทั้งหมดเป็นแบบฟอร์มเดียวโดยใช้แบบอักษรที่ซื้อมาเพื่อการนี้เท่านั้นดังนั้นเราจึงต้องเรียงลำดับ (ชิ้นส่วนสัญลักษณ์โลหะ) เนื่องจากการเรียงลำดับมีราคาแพงมากคำสั่งซื้อของเราต้องเป็นตัวเลขที่แน่นอนสำหรับแต่ละสัญลักษณ์

สำหรับชุดของความยาวของมิติที่กำหนด (โดยวิธีการใด ๆ ) return 0 ให้ส่งคืน (โดยวิธีใด ๆ ) คำสั่งซื้อของเราซึ่งเป็นตารางความถี่ของตัวเลขที่ต้องใช้เพื่อพิมพ์ชุดพิกัดคาร์ทีเซียนทั้งหมด มันจะต้องจัดเรียงตามลำดับแป้นพิมพ์ของลักษณะ (เช่น 0 หลังจาก 9) และอาจไม่รวมคำสั่ง 0 ประเภทดังนั้นหากไม่มีการเรียงลำดับใด ๆ เลย (เพราะมิติมีความยาว 0); พิมพ์อะไร

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

วิญญาณที่ใจดีอาจแก้ไขการท้าทายนี้เพื่อรวมการให้คะแนนอัตโนมัติดังนั้นให้รวมหัวข้อเช่น:
# LanguageName, 123 sorts

กรณีทดสอบ

ป.ร. ให้11ไว้พิมพ์:

1 4
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
0 1

เพราะป้ายที่จำเป็นมี1, 2, 3, 4, 5, 6, 7, 8, 9, และ1011


ป.ร. ให้2 3ไว้พิมพ์:

1 5
2 5
3 2

เพราะป้ายที่จำเป็นมี1 1, 1 2, 1 3, 2 1, และ2 22 3


รับ2 0พิมพ์บรรทัดว่าง:

หรือไม่มีอะไรเลย


ป.ร. ให้1 2 3ไว้พิมพ์:

1 11
2  5
3  2

เพราะป้ายที่จำเป็นมี1 1 1, 1 1 2, 1 1 3, 1 2 1, 1 2 2และ1 2 3


ป.ร. ให้5 5 5 5ไว้พิมพ์:

1 500
2 500
3 500
4 500
5 500

และไม่ฉันจะไม่แสดงรายการป้ายกำกับทั้งหมด 625 รายการ


ฉันไม่ค่อยชัดเจนเกี่ยวกับข้อกำหนดของผลลัพธ์ ในข้อความจะมีข้อความระบุว่า "return (ไม่ว่าด้วยวิธีใด)" แต่ส่วนที่เหลือแนะนำว่าจำเป็นต้องใช้รูปแบบเอาต์พุตที่เฉพาะเจาะจงมากและจำเป็นต้องพิมพ์ อันไหน? เช่นการพูดถึงการขึ้นบรรทัดใหม่ดูเหมือนซ้ำซ้อนอย่างสมบูรณ์หากรูปแบบเอาต์พุตสามารถเป็นอะไรก็ได้
Reto Koradi

1
@RetoKoradi รูปแบบต้องดูมากกว่าหรือน้อยกว่าที่แสดง แต่มันอาจจะอยู่ในเซสชั่นการโต้ตอบไฟล์ป๊อปอัพ STDOUT ฯลฯ คุณมีข้อเสนอแนะว่าฉันสามารถใช้วลีนี้เพื่อให้ชัดเจนขึ้นได้อย่างไร ?
58

คำตอบ:


6

Dyalog APL, 10 7

รหัสมีความยาว 10 ไบต์และมีสิทธิ์รับโบนัส

ขอบคุณ user46915 สำหรับ 3 ไบต์!

,∘≢⌸∊⍕¨∊⍳⎕

โปรดทราบว่า(อินพุต) ใช้งานไม่ได้กับ TryAPL คุณสามารถลองรูปแบบการทำงานที่นี่

            ⎕      Get input
           ⍳       Index vector
       ∊⍕¨∊        Flatten, stringify, flatten again
      ⌸            From the key, display the
{⍺,  }             elements concatenated with the
   ≢⍵              number of times they occur

ฉันไม่เข้าใจผู้ประกอบการอย่างสมบูรณ์แต่{⍺}⌸แสดงรายการค่าที่ไม่ซ้ำกันและ{⍵}⌸รายการสถานที่ในการโต้แย้ง

สิ่งนี้มีการจัดลำดับที่ถูกต้องเพราะเป็นลำดับที่ตัวเลขปรากฏในอาร์เรย์หลายมิติของฉลาก


1
ใช่นั่นคือทางออกที่ฉันมีอยู่ในใจ สิ่งนี้อาจช่วยทำความเข้าใจผู้ปฏิบัติงานหลัก
58

1
ไม่ APL เสมอชนะที่ codegolf?
vy32

@ vy32 ไม่ได้ APL อาจเป็นภาษาวัตถุประสงค์ทั่วไปที่รัดกุมที่สุด แต่จะมีภาษาเฉพาะโดเมนที่ดีกว่าในโดเมนที่ จำกัด กว่าภาษาเป้าหมายทั่วไป ภายในโดเมนที่ระบุรหัสการเล่นกอล์ฟภาษาการเล่นกอล์ฟเช่น Pyth และ CJam มักจะชนะ อย่างไรก็ตามเป็นที่น่าสังเกตว่า APL ซึ่งเป็นภาษาเชิงพาณิชย์ที่ใช้ในการผลิตโดย บริษัท ขนาดใหญ่มากเข้ามาใกล้ นอกจากนี้สำหรับราคาของการ verbose เพิ่มเติมเล็กน้อยอาจเป็นเรื่องง่ายสำหรับมนุษย์ที่จะเรียนรู้การอ่าน APL มากกว่าภาษากอล์ฟ
58

เดี๋ยวก่อนคุณหมายความว่าฉันสามารถสร้างฮิสโตแกรมทั้งหมดได้ง่ายๆ,∘≢⌸โดยไม่มีผลิตภัณฑ์ภายนอกที่มีเอกลักษณ์และเช่นนั้นหรือ! ไพโอเนียร์แน่ใจว่ายอดเยี่ยมมาก นอกจากนี้ยังจะสั้นกว่า,∘≢⌸ {⍺,≢⍵}⌸
user46915

3
@NBZ ฉันคิดถึง APL ย้อนกลับไปในปี 1982 ฉันเขียนแพคเกจกราฟิกใน APL ที่ขับเคลื่อนเครื่องพิมพ์ล้อเดซี่ มันเป็นงานศิลปะแม้ว่าฉันจะไม่เข้าใจสิ่งที่ฉันเขียนในเดือนต่อมา
vy32


2

Mathematica, 111 85 ไบต์

Grid[Thread@{Range@10~Mod~10,DigitCount@Tuples@Range@#~Total~2}~DeleteCases~{_,‌​0}]&

DigitCountงานส่วนใหญ่ของที่นี่จะทำโดย


Grid[Thread@{Range@10~Mod~10,DigitCount@Tuples@Range@#~Total~2}~DeleteCases~{_,0}]&
alephalpha

2

R, 110 ไบต์

บันทึกแล้ว 4 ขอบคุณ Alex A. (ขอบคุณ!)

U=unlist
X=table(U(strsplit(as.character(U(expand.grid(Map(seq_len,scan())))),"")))
z=Map(cat,names(X),X,"\n")

คุณเพียงใช้xครั้งเดียวดังนั้นคุณก็ควรจะสามารถแทนที่เกิดกับx scan()ทำไมต้องมอบหมายด้วยz?
Alex A.

ขอบคุณ xเห็นด้วยเกี่ยวกับการไม่ได้ใช้ ฉันกำหนดเอาต์พุตของMapให้กับzตัวแปรมิฉะนั้นMapจะพิมพ์เอาต์พุตไปที่ stdout การปฏิบัติที่ดีกว่าจะห่อMapภายในinvisible()แต่ที่มากของตัวละคร ...
flodel

1

Ruby, 92 ไบต์

f,*r=$*.map{|n|[*1..n.to_i]}
a=f.product(*r)*''
puts a.chars.uniq.map{|c|[c,a.count(c)]*" "}

รับความยาวเป็นอาร์กิวเมนต์บรรทัดคำสั่ง:

$ ruby foo.rb 1 2 3
1 11
2 5
3 2

0

CJam, 31 ไบต์

Laq~{,m*}/e_:)s{_'0=A*+}$e`{(S\N}%

ลองออนไลน์

รหัสคือ 34 ไบต์และรับโบนัส 3 ไบต์สำหรับการทำงานกับรายการอินพุตว่าง อินพุตเป็นรายการในรูปแบบ CJam เช่น:

[1 2 3]

คำอธิบาย:

La    Push list containing empty list to seed Cartesian products.
q~    Get and interpret input.
{     Loop over values in input list.
  ,     Built range from 0 to value-1.
  m*    Form Cartesian product with the list we already have.
}/    End loop over values in input list.
e_    Resulting list has extra nesting. Flatten it.
:)    Increment all values in list, since it is 0-based, and we need 1-based.
s     Convert it to string, so we can operate on digits.
{     Block to calculate source key, needed to get 0 to the end.
  _     Copy the digit.
  '0=   Compare with '0.
  A*    Multiply comparison result by 10...
  +     ... and add it to digit.
}$    End of sort key block.
e`    RLE.
{     Start of loop over RLE entries, for generating output in specified format.
  (     Pop off the first value, which is the count.
  S     Push a space...
  \     ... and swap it with the count.
  N     Push a newline.
}%    End of loop over RLE entries.


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