कोड-गोल्फ: फेरी अनुक्रम (I)


10

चुनौती

इस कार्य में आपको एक पूर्णांक N (10 ^ 5 से कम) दिया जाएगा, आदेश 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 की अनुमति है?
आठ

4
शीर्षक में »(आई)« के साथ क्या है?
जोए

2
@ जोए: हम्म। अब एक फ़ेयर सीक्वेंस (II) है। पहला संस्करण होना चाहिए! :-)
मेलमोकब

1
@ ममलमोकब: खैर, कि एक कोड चुनौती, हालांकि, किसी भी मामले में कोई शीर्षक संघर्ष नहीं। लेकिन हां, मेरे सवाल का जवाब उसी तरह का है।
जॉय

जवाबों:


5

जे, 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}  

संपादित करता

  • (११४ → १०६) क्लीयर अपीयरिंग,
  • (106 → 105) कैप [:टू एट@
  • (105 → 101) शानदार": रूपांतरण हटाएं
  • (101 → 99)\ सूची के लिए इन्फिक्स का उपयोग करें
  • (99 → 96)

मुझे मिलता है |value error: rplc। क्या आप वाकई load 'strings'पहले सत्र में नहीं आए थे और इसके बारे में भूल गए हैं?
जेसी मिलिकन

1
@ जेसे: बिल्कुल। मैं (लगभग) कभी उपयोग नहीं करता 'strings'। मैं बस डिफ़ॉल्ट linux-j-7.01 वातावरण का उपयोग करता हूं।
आठवीं

उह ... मैंने j602 के लिए स्विच किया wdऔर अब मुझे वापस स्विच करने की आवश्यकता हो सकती है। :)
जेसी मिलिकन

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)'<)))

(newlines आवश्यक नहीं)

बहुत ही क्रूर, लेकिन देशी तर्क वाली भाषाएं उसी का निमंत्रण हैं।

टिप्पणियों के साथ अपुष्ट:

                                        ; 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

पायथन, 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 नंबर के इनपुट के लिए तेज़ होगा?
क्विक्सोटिक

@ डिबंजन नं। यह वास्तव में 10 ^ 6 इनपुट के लिए धीमा होगा। यह जटिलता में रैखिक है (शब्दों की संख्या के संदर्भ में), हालांकि।
fR0DDY

2

जे, 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)। स्टड पर इनपुट, स्टडआउट पर आउटपुट।

अभी भी इस बात पर हैरान है कि आउटपुट कोड को कैसे बढ़ाया जाए, जो कि 100 वर्ण या तो है।

संपादित करें: (156-> 135) Tacit-> लंबी मौद्रिक क्रिया श्रृंखलाओं के लिए स्पष्ट, कम ब्रिंडेड सूची पीढ़ी

संपादित करें: (135> 117) मिले उखेड़ना । मुझे लंबे समय तक ले गया। चारों ओर स्विचिंग स्ट्रिंग।

संपादित करें: (117-> 112) ऊपर के अंशों को बाहर करने के लिए थोड़ा कम ब्रेकडायड तरीका। अनावश्यक खुला।


शायद आप अपने दो में से एक को छोड़ सकते हैं x:?
एकादशी

@ बारहवाँ: बाईं ओर 2 & x है: उदाहरण के लिए एक तर्कसंगत संख्या को अंश और हर में विभाजित करें।
जेसी मिलिकन

oic। दया ... :(
बारह

2

गोल्फस्क्रिप्ट (101)

~:c[,{){.}c(*}%.c/zip{+}*]zip{~{.@\%.}do;1=},{~<},{~\10c?*\/}${'/'*}%', '*'F'c`+' = {0/1, '+\', 1/1}'

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" के बजाय "0/1" और "1/1" आउटपुट चाहिए। इसके अलावा, यह केवल रूबी 1.9 के लिए काम करता है?
इलेक्स

1
@ बारह: यह मेरे सिस्टम पर 0/1 और 1/1 आउटपुट करता है। और हाँ, इसके लिए 1.9 की आवश्यकता है (चरित्र शाब्दिक के कारण)।
लॉजैकर

1

हास्केल, 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.