Code-Golf: ลำดับ Farey (I)


10

ท้าทาย

ในภารกิจนี้คุณจะได้รับจำนวนเต็ม N (น้อยกว่า 10 ^ 5) ออกลำดับ Fareyของคำสั่ง N

อินพุต N ถูกกำหนดในบรรทัดเดียวอินพุตถูกยกเลิกโดย EOF

อินพุต

4
3
1
2

เอาท์พุต

F4 = {0/1, 1/4, 1/3, 1/2, 2/3, 3/4, 1/1}
F3 = {0/1, 1/3, 1/2, 2/3, 1/1}
F1 = {0/1, 1/1}
F2 = {0/1, 1/2, 1/1}

ข้อ จำกัด

  • จำนวนอินพุตไม่เกิน 10 ^ 6 ค่า
  • คุณสามารถใช้ภาษาที่คุณเลือกได้
  • ทางออกที่สั้นที่สุดชนะ!

นี่จะได้รับ loooong ..... ผลลัพธ์ที่ฉันหมายถึง
st0le

N = 0 ได้รับอนุญาตหรือไม่
Eelvex

4
มี» (I) «ในชื่ออะไร
Joey

2
@Joey: อืม ตอนนี้มี Farey Sequence (II) แล้ว ต้องเป็นรุ่นแรก! :-)
mellamokb

1
@mellamokb: ดีว่าคนที่ท้าทายรหัสแม้ว่าจะไม่มีการปะทะกันของชื่อในกรณีใด ๆ แต่ใช่คำตอบนั้นเป็นคำถามของฉัน
Joey

คำตอบ:


5

J, 96

('F',],' = {0/1',', 1/1}',~('r';'/')rplc~', ',"1":"0@(3 :'}./:~~.,(%~}:\)i.1x+y')&".);._2(1!:1)3

( /:~~.,(%~}:\)i.>:x:yแสดงรายการ; ส่วนที่เหลือคือ I / O และการจัดรูปแบบ (มีสไตล์ไม่ดี))

เช่น:

4
3
1
2
F4 = {0/1, 1/4, 1/3, 1/2, 2/3, 3/4, 1/1}
F3 = {0/1, 1/3, 1/2, 2/3, 1/1}          
F1 = {0/1, 1/1}                         
F2 = {0/1, 1/2, 1/1}  

การแก้ไข

  • (114 → 106) การ ต่อท้ายที่ชัดเจนยิ่งขึ้น,
  • (106 → 105) Cap [:ถึง At@
  • (105 → 101) ลบ":การแปลงที่ไม่จำเป็น
  • (101 → 99) ใช้มัด\สำหรับรายการ
  • (99 → 96)

|value error: rplcฉันได้รับ คุณแน่ใจหรือว่าไม่ได้มาload 'strings'ก่อนหน้านี้ในเซสชั่นและลืมมันได้หรือไม่
Jesse Millikan

1
@Jesse: อย่างแน่นอน ฉัน (เกือบ) 'strings'ไม่เคยใช้ ฉันเพิ่งใช้สภาพแวดล้อม linux-j-7.01 ที่เป็นค่าเริ่มต้น
Eelvex

อืม ... ฉันเปลี่ยนไปใช้ j602 สำหรับwdและตอนนี้ฉันอาจต้องเปลี่ยนกลับ :)
Jesse Millikan

3

เสียงกระเพื่อมสามัญ, 156

(do((l()()))((not(set'n(read()()))))(dotimes(j n)(dotimes(i(1+ j))(push(/(1+ i
)(1+ j))l)))(format t"~&F~D = {0/1~{, ~A~}/1}"n(sort(delete-duplicates l)'<)))

(ไม่จำเป็นต้องขึ้นบรรทัดใหม่)

โหดร้ายมาก แต่ภาษาที่มีเหตุผลเป็นคำเชิญ

ไม่พอใจกับความคิดเห็น:

                                        ; at each iteration:
(do ((l()()))                           ; - reset l to nil
    ((not (set 'n (read()()))))         ; - read a term (nil for eof)
                                        ;   assign it to n
                                        ;   stop looping if nil
  (dotimes (j n)                        ; for j in 0..n-1
    (dotimes (i (1+ j))                 ;   for i in 0..j
      (push (/ (1+ i) (1+ j)) l)))      ;     prepend i+1/j+1 to l
  (format t "~&F~D = {0/1~{, ~A~}/1}"   ; on a new line, including 0/1,
                                        ; forcing the format for 1
          n                             ; print sequence index, and
          (sort                         ; sorted sequence of
           (delete-duplicates l)        ;   unique fractions
           '<)))                        ; (in ascending order)

3

Python, 186 ตัวอักษร

import sys
p=sys.stdout.write
while 1:
 a=0;b=c=x=1;d=y=N=input();p("F%d = {%d/%d, %d/%d"%(d,a,b,c,d))
 while y-1:x=(b+N)/d*c-a;y=(b+N)/d*d-b;p(", %d/%d"%(x,y));a=c;c=x;b=d;d=y
 p("}\n")

+ 1 แต่คุณแน่ใจหรือไม่ว่านี่จะเร็วสำหรับอินพุต 10 ^ 6
Quixotic

@Debanjan ไม่มันจะช้ามากสำหรับอินพุต 10 ^ 6 มันเป็นเส้นตรงในความซับซ้อน (ในแง่ของจำนวนคำ) แม้ว่า
fR0DDY

2

J, 156 135 117 112

d=:3 :0
wd;'F';(":y);' = {';(}.,(', ';2|.'/';|.)"1(<@":)"0(2)x:/:~~.,(-.@>*%)"0/~i.x:>:y),<'}'
)
d@".;._2(1!:1)3

j602 หรือคล้ายกัน ( wd) อินพุตบน stdin, เอาต์พุตบน stdout

ยังคงทำให้งงว่าจะเอาท์พุทรหัสซึ่งเป็น 100 ตัวอักษรหรือมากกว่านั้น

แก้ไข: (156-> 135) Tacit-> ชัดแจ้งสำหรับคำกริยา monadic chains, การสร้างรายการ braindead ที่น้อยลง

แก้ไข: (135-> 117) พบRaze ใช้เวลานานพอสมควร สลับการจัดการสตริงรอบ ๆ

แก้ไข: (117-> 112) วิธีหักสมองเล็กน้อยเพื่อแยกเศษส่วนด้านบน 1. เปิดที่ไม่จำเป็น


บางทีคุณสามารถละเว้นหนึ่งในสองx:ของคุณ
Eelvex

@Eevenx: ทางซ้ายคือ 2 & x :, เช่นแบ่งจำนวนตรรกยะเป็นเศษและส่วน
Jesse Millikan

oic สงสาร ... :(
Eelvex


2

ทับทิม110 108 102 97 94 92 91 89

#!ruby -lp
$_="F#$_ = {#{a=[];1.upto(eval$_){|d|a|=(0..d).map{|n|n.quo d}};a.sort*', '}}"

ฉันคิดว่าคุณควรส่งออก "0/1" และ "1/1" แทน "0" และ "1" ตามลำดับ นอกจากนี้ยังใช้งานได้กับทับทิม 1.9 เท่านั้นหรือไม่
Eelvex

1
@Eevenx: มันส่งออก 0/1 และ 1/1 บนระบบของฉัน และใช่มันต้องใช้ 1.9 (เพราะตัวอักษรตัวอักษร)
Lowjacker

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