บีบอัดเมทริกซ์เบาบางใช้แถวเบาบางอัด (CSR จำหรือเยลรูปแบบ)
ทั้งหมดนี้เป็นรูปแบบการบีบอัดเดียวกัน (ไม่สนใจเยลใหม่)
อินพุตอาจเป็นโครงสร้างข้อมูล 2d ใด ๆ (รายการ, ฯลฯ ): เช่น
[[0 0 0 0],
[5 8 0 0],
[0 0 3 0],
[0 6 0 0]]
และผลผลิตที่ควรจะเป็นสามโครงสร้างข้อมูล 1D (รายการ ฯลฯ ) ที่หมายถึงผลผลิตA
, IA
และJA
ยกตัวอย่างเช่น
[5, 8, 3, 6]
[0, 0, 2, 3, 4]
[0, 1, 2, 1,]
กระบวนการนี้อธิบายโดยวิกิพีเดีย:
อาร์เรย์ A มีความยาว NNZ และเก็บรายการที่ไม่ใช่ศูนย์ทั้งหมดของ M ในลำดับจากซ้ายไปขวาบนลงล่าง ("แถวหลัก")
IA ของอาร์เรย์มีความยาว m + 1 ซึ่งนิยามโดยนิยามแบบเรียกซ้ำ:
IA [0] = 0 IA [i] = IA [i - 1] + (จำนวนองค์ประกอบที่ไม่ใช่ศูนย์ในแถว (i - 1) -th ในเมทริกซ์ดั้งเดิม)
ดังนั้นองค์ประกอบ m แรกของ IA เก็บดัชนีลงใน A ขององค์ประกอบที่ไม่ใช่ศูนย์แรกในแต่ละแถวของ M และองค์ประกอบสุดท้าย IA [m] เก็บ NNZ จำนวนขององค์ประกอบใน A ซึ่งสามารถคิดได้ว่าเป็น ดัชนีใน A ขององค์ประกอบแรกของแถว phantom ที่อยู่นอกเหนือจากจุดสิ้นสุดของเมทริกซ์ M ค่าของแถว i-th ของเมทริกซ์ดั้งเดิมถูกอ่านจากองค์ประกอบ A [IA [i]] ถึง A [IA [i + 1] - 1] (รวมทั้งสองด้าน) ได้แก่ ตั้งแต่เริ่มต้นของแถวหนึ่งไปจนถึงดัชนีสุดท้ายก่อนเริ่มต้นถัดไป [5]
อาร์เรย์ที่สามคือ JA ประกอบด้วยดัชนีคอลัมน์ใน M ของแต่ละองค์ประกอบของ A และด้วยเหตุนี้จึงมีความยาว NNZ เช่นกัน
หากภาษาของคุณไม่รองรับโครงสร้างข้อมูลจริงอินพุตและเอาต์พุตอาจเป็นข้อความ
กรณีทดสอบ
อินพุต 1:
[[0 0 0 0],
[5 8 0 0],
[0 0 3 0],
[0 6 0 0]]
เอาท์พุท 1:
[ 5, 8, 3, 6 ]
[ 0, 0, 2, 3, 4 ]
[ 0, 1, 2, 1, ]
อินพุต 2
[[10 20 0 0 0 0],
[0 30 0 40 0 0],
[0 0 50 60 70 0],
[0 0 0 0 0 80]]
เอาท์พุท 2:
[ 10 20 30 40 50 60 70 80 ]
[ 0 2 4 7 8 ]
[ 0 1 1 3 2 3 4 5 ]
อินพุต 3:
[[0 0 0],
[0 0 0],
[0 0 0]]
เอาท์พุท 3:
[ ]
[ 0 0 0 0 ]
[ ]
อินพุต 4:
[[1 1 1],
[1 1 1],
[1 1 1]]
เอาท์พุท 4:
[ 1 1 1 1 1 1 1 1 1 ]
[ 0 3 6 9 ]
[ 0 1 2 0 1 2 0 1 2 ]
อินพุต 5:
[[0 0 0 0],
[5 -9 0 0],
[0 0 0.3 0],
[0 -400 0 0]]
ผลลัพธ์ 5:
[ 5, -9, 0.3, -400 ]
[ 0, 0, 2, 3, 4 ]
[ 0, 1, 2, 1, ]
สมมติว่าอินพุตอาจมีจำนวนจริงใด ๆ คุณไม่จำเป็นต้องพิจารณาสัญลักษณ์ทางคณิตศาสตร์หรือการแทนเลขชี้กำลัง (เช่น 5,000 จะไม่ถูกป้อนเป็น 5e3) คุณจะไม่จำเป็นต้องจับinf
, -inf
, NaN
หรืออื่น ๆ 'หลอกตัวเลข' คุณสามารถแสดงตัวเลขที่แตกต่างออกไปได้ (5,000 อาจเป็น 5e3 ถ้าคุณเลือก)
เกณฑ์การให้คะแนน:
นี่คือรหัสกอล์ฟซึ่งมีจำนวนไบต์น้อยที่สุดเป็นผู้ชนะ
ลีดเดอร์
นี่คือ Stack Snippet เพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา
เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:
# Language Name, N bytes
ที่N
มีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น
# Ruby, <s>104</s> <s>101</s> 96 bytes
หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของสองไฟล์หรือคุณต้องการแสดงรายการการลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็น ตัวเลขสุดท้ายในส่วนหัว:
# Perl, 43 + 2 (-p flag) = 45 bytes
นอกจากนี้คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างกระดานแต้มนำ:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
IA[0] = 0
จำเป็นเลยเหรอ? จำเป็นต้องกำหนดIA[i] = IA[i − 1]...
เท่านั้น แต่เราสามารถระบุได้ว่าหากi-1 < 0
ใช้ 0 นั่นคือ IA [0] เท่ากับ 0 เสมอจึงสามารถบีบอัดได้ (ใช่ฉันรู้ว่านี่เป็นคำวิจารณ์ของอัลกอริทึม ไม่ใช่ความท้าทายนี้)