도전
이 작업에서는 정수 N (10 ^ 5 미만)이 주어지고 순서 N 의 Farey 시퀀스 를 출력합니다 .
입력 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 값을 초과하지 않습니다
- 원하는 언어를 사용할 수 있습니다
- 최단 솔루션이 승리합니다!
답변
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) 한도
[:
에 맞추기@
- (105 → 101) 불필요한
":
변환 삭제 - (101 → 99)
\
목록에 접두사 사용 - (99 → 96)
답변
커먼 리스프, 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)
답변
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")
답변
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-> 긴 수도원 동사 체인에 대해 명시 적이며 브레인 데드 목록 생성이 적습니다.
편집 : (135-> 117) raze 발견 . 충분히 오래 걸 렸어요 문자열 처리를 전환했습니다.
편집 : (117-> 112) 1. 위의 분수를 배제하는 약간 적은 뇌사 방법. 불필요하게 열립니다.
답변
골프 스크립트 (101)
~:c[,{){.}c(*}%.c/zip{+}*]zip{~{.@\%.}do;1=},{~<},{~\10c?*\/}${'/'*}%', '*'F'c`+' = {0/1, '+\', 1/1}'
답변
루비, 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*', '}}"
답변
하스켈, 148
f n="F"++show n++" = {"++(intercalate", ".("0/1":).map(\(i:%d)->show i++"/"++show d).sort.nub$[i%d|d<-[1..n],i<-[1..d-1]])++"}"
main=interact$f.read