MATL , 17 13 ไบต์
:tt!/XR6#uG))
ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด
ขนาดอินพุตอาจถูก จำกัด ด้วยความแม่นยำของจุดลอย กรณีทดสอบทั้งหมดให้ผลลัพธ์ที่ถูกต้อง
คำอธิบาย
นี้สร้างเศษส่วนทั้งหมดk/m
ด้วยk
, m
ใน[1 2 ...n]
ฐานะที่เป็นn
× n
เมทริกซ์ แถวหมายถึงตัวเศษและคอลัมน์หมายถึงตัวส่วน อันที่จริงรายการเมทริกซ์มีส่วนของค่าผกผันm/k
แทนk/m
แต่นี่ไม่เกี่ยวข้องและสามารถละเว้นได้ในคำอธิบายที่เหลือ
รายการเมทริกซ์จะถูกพิจารณาโดยปริยายว่าจะเรียงลำดับตามคอลัมน์ที่สำคัญ ในกรณีนี้สิ่งนี้สอดคล้องกับคำสั่งที่ต้องการ: ตัวส่วนแล้วเป็นตัวเศษ
สามประเภทของรายการจะต้องถูกละเลยจากเมทริกซ์นี้:
- คอมเมนต์
k/m
, k>m
ที่มีค่าเช่นเดียวกับรายการก่อนหน้า (ตัวอย่างเช่น2/4
จะไม่ใส่ใจเพราะมันเป็นเช่นเดียว1/2
)
- ผลงาน
k/k
, k>1
. รายการที่มีตัวเศษเกินส่วน
- คอมเมนต์
k/m
, k<m
(เหล่านี้ไม่ได้เป็นส่วนหนึ่งของปัญหา)
การเพิกเฉยรายการจะทำกับunique
ฟังก์ชั่นซึ่งจะลบค่าที่ซ้ำกันได้อย่างเสถียรและส่งออกดัชนีของรายการที่รอดตาย ด้วยสิ่งนี้รายการประเภท 1 ด้านบนจะถูกลบโดยอัตโนมัติ การจัดการกับประเภทที่ 2 และ 3 0
รายการเมทริกซ์ที่ขวางและด้านล่างมีการกำหนดให้ ด้วยวิธีนี้รายการศูนย์ทั้งหมดจะถูกลบออกยกเว้นรายการแรก (ตรงกับเศษส่วนที่ถูกต้อง1/1
)
พิจารณาการป้อนข้อมูล4
เป็นตัวอย่าง
: % Input n implicitly. Push range [1 2 ...n]
% STACK: [1 2 3 4]
t % Duplicate
% STACK: [1 2 3 4], [1 2 3 4]
t! % Duplicate and transpose
% STACK: [1 2 3 4], [1 2 3 4], [1; 2; 3; 4]
/ % Divide element-wise with broadcast: gives matrix with all pairs
% STACK: [1 2 3 4], [1 2 3 4;
0.5000 1 1.5000 2;
0.3333 0.6667 1 1.3333;
0.2500 0.5000 0.7500 1 ]
XR % Upper triangular part above the diagonal. This sets to 0 all entries
% corresponding to fractions that equal or exceed 1. (Since the matrix
% actually contains the inverse fractions, nonzero entries will contain
% values greater than 1)
% STACK: [1 2 3 4], [0 2 3 4;
0 0 1.5000 2;
0 0 0 1.3333;
0 0 0 0 ]
6#u % Indices of first appearance of unique elements
% STACK: [1 2 3 4], [1; 5; 9; 10; 13; 15]
G % Push input n again
% STACK: [1 2 3 4], [1; 5; 9; 10; 13; 15], 4
) % Index: get the n-th entry from the array of indices of unique elements
% STACK: [1 2 3 4], 10
) % Index (modular): get the corresponding real part. Display implicitly
% STACK: 2