हैप्पी फिबोनाची दिवस!


20

पृष्ठभूमि

आज (या कल) का दिन (या) ११/२३ या फिबोनाची दिन था! रिट्रेसमेंट केक बनाने के लिए जश्न मनाने का इससे बेहतर तरीका और क्या हो सकता है?


उदाहरण

3

    ii
i_i_ii_i_i 

8

              ii              
              ii              
              ii              
              ii              
              ii              
              ii              
              ii              
              ii              
            i ii i            
            i ii i            
            i ii i            
            i ii i            
            i ii i            
          i i ii i i          
          i i ii i i          
          i i ii i i          
        i i i ii i i i        
        i i i ii i i i        
      i i i i ii i i i i      
    i i i i i ii i i i i i    
i_i_i_i_i_i_i_ii_i_i_i_i_i_i_i

चुनौती

आप वास्तव में एक केक नहीं बना रहे हैं, सिर्फ मोमबत्तियाँ क्योंकि मैं एक केक की कला नहीं कर सकता

केक बनाने के लिए सबसे पहले आपको पहले मिल जाना चाहिए n फिबोनैकी संख्या आरोही सॉर्ट किया। मोमबत्ती ( i) की ऊँचाई वर्तमान की संख्या के मान से निर्धारित होती है। मोमबत्तियाँ एक अंडरस्कोर ( _) द्वारा अलग हो जाती हैं ।

केक सममित होना चाहिए। तो मोमबत्तियों को फ़्लिप किया जाना चाहिए और कंकरीट किया जाना चाहिए।

उदाहरण निर्माण

Input: 6
First 6 Fibonacci Numbers: 1, 1, 2, 3, 5, 8
Candle heights:

          i
          i
          i
        i i
        i i
      i i i
    i i i i
i i i i i i
-----------
1 1 2 3 5 8

Output would be:
          ii
          ii
          ii
        i ii i
        i ii i
      i i ii i i
    i i i ii i i i
i_i_i_i_i_ii_i_i_i_i_i 

संदर्भ फाइबोनैचि संख्या

संदर्भ के लिए, यहाँ पहले 15 संख्याएं हैं। इस चुनौती में, आप शुरू करेंगे 1

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610

9
मुझे संयुक्त राज्य अमेरिका के वेस्ट कोस्ट को सूचित करने के लिए खेद है कि दुनिया के अधिकांश हिस्सों के लिए, 11/23 खत्म हो गया है या लगभग खत्म हो गया है :( यह कोड-गोल्फ से सबसे तेजी
बिल्ली

1
@sysreq यह ठीक है, उन्हें बस पश्चिमी तट (तुरन्त) की यात्रा करने की आवश्यकता है, और फिर वे पिछले 5 घंटे (
हैवई के

6
यह चुनौती 43 साल (11/23/58) में पौराणिक होने जा रही है।
आर्कटुरस

9
43 वर्षों में mm / dd / yy date format इतिहास होगा। सभी बुद्धिमान प्राणियों को yyyy / mm / dd पर स्विच किया जाएगा ...

1
@sysreq शब्दशः भाषाओं में गोल्फ के उत्तर पोस्ट करना बहुत प्रोत्साहित करता है। बेशक, आप पाइथ के साथ प्रतिस्पर्धा नहीं कर रहे हैं, लेकिन आप उसी भाषा में या तुलनीय शब्दशः की भाषाओं में अन्य उत्तरों के साथ प्रतिस्पर्धा कर सकते हैं।
मार्टिन एंडर

जवाबों:


2

पायथ, 31 बाइट्स

jaPJ_.ts_BuaaGks>4GtQ]\idXeJ" _

इसे ऑनलाइन आज़माएँ: प्रदर्शन

स्पष्टीकरण:

jaPJ_.ts_BuaaGks>4GtQ]\idXeJ" _   implicit: Q = input number
          u        tQ]\i          reduce the list [1, ..., Q-2], start with G=["i"]
            aGk                      append the empty string to G
           a   s>4G                  append the sum of the last 4 strings in G to G
                                  this gives ["i", "", "i", "", "ii", "", "iii",..]
       s_B                        extend the list with the reversed list
     .t                  d        pad to a rectangle with spaces and transposes
   J_                             reverse the order and assign to J
  PJ                              remove the last string of J
 a                                and append
                         XeJ" _   the last string of J with spaces replaced by "_"
j                                 print each string on a separate line

6

जे, 58 बाइट्स

3 :''' i_''{~|.|:(,|.)(#&1,2#~0&=)"*}.,0,.(%-.-*:)t.1+i.y'

(%-.-*:)t.फाइबोनैचि पीढ़ी के लिए उपयोग । स्पष्टीकरण थोड़ा बाद में आ सकता है।

उपयोग:

   f=.3 :''' i_''{~|.|:(,|.)(#&1,2#~0&=)"*}.,0,.(%-.-*:)t.1+i.y'
   f 5
        ii        
        ii        
      i ii i      
    i i ii i i    
i_i_i_i_ii_i_i_i_i

इसे यहाँ ऑनलाइन आज़माएँ।


5

CJam, 41 39 बाइट्स

"i""_"1$ri({1$1$4$+}*]),f{Se[}W<_W%+zN*

यह प्रमुख व्हाट्सएप की एक उचित राशि प्रिंट करता है। CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

"i""_"1$ e# Push "i", "_", and a copy of "i".
ri(      e# Read an integer from STDIN and subtract 1.
{        e# Do that many times:
  1$     e#   Copy the last underscore.
  1$4$+  e#   Copy the last strings of i's and concatenate them.
}*       e#
]),      e# Wrap the results in an array, pop the last string, and get its length.
f{       e# For each remaining string, push the string and the length; then:
  Se[    e#   Pad the string to that length by prepending spaces.
}
W<       e# Remove the last string (underscore).
         e# We have now generated the columns of the left half of the output.
_W%+     e# Append a reversed copy (columns of right half).
z        e# Transpose rows with columns.
N*       e# Separate the rows by linefeeds.

3

टीस्क्रिप्ट, 93 84 76 + 1 = 77 बाइट्स

"इनपुट नंबर हैं?" के लिए +1 बाइट चेकबॉक्स

r×ß(p.R((w=F(x©-F(i¬©+"i"R(F(i¬±)t¡ß(j=i<w-1?" ":"_",(A=l¿i>0?j+l:l)µ)+Av©j§

Ungolfed संस्करण:

r(x)m(#(p.R((w=F(x))-F(i+1))+"i"R(F(i+1))))t()m(#(j=i<w-1?" ":"_",(A=ls``.m(#i>0?j+l:l)j``)+Av))j`
`

युक्तियों के लिए @ Vɪʜᴀɴ को धन्यवाद ।


आपको rइसके बजाय फ़ंक्शन का उपयोग करने में सक्षम होना चाहिए A(x)f(0), उदाहरण के लिएr(x)m(#
डाउनगोट

@ V @ धन्यवाद। क्या Array.dupe()करना है, यह काम नहीं लगता है?
intrepidcoder

Array.dupe शायद एक बुरा नाम था, यह एक सरणी से डुप्लिकेट को निकालता है।
डाउनगेट

@ V @ आपको इनपुट / आउटपुट आर्ग के साथ संपत्ति के नाम अनुभाग में प्रत्येक विधि का सारांश रखना चाहिए। इसके अलावा, Array.repeat और String.reverse भी अच्छा होगा।
intrepidcoder

1
@sysreq का मतलब था मैं अनफॉलो, कन्फ्यूजन के लिए सॉरी।
इंट्रेपिडकोडर 14

3

पायथन 2, 117 बाइट्स

a=b='i'
l=a,
exec"l+='_',b,;a,b=b,b+a;"*~-input()
for r in map(None,*l+l[::-1])[::-1]:print''.join(x or' 'for x in r)

यह विचार सरल है: स्तंभों में चित्र नीचे से ऊपर की ओर, बाएं से दाएं, बाएं से दाएं आधे से उल्टे तक उत्पन्न करें। स्तंभों को फाइबोनैचि पुनरावृत्ति के पुनरावृत्ति द्वारा उत्पन्न किया जाता है, नीचे की पंक्ति के लिए 's' iके साथ इंटरसेप्‍ट किया _गया है।

नीचे से शुरू होने वाले कॉलम के साथ तस्वीर को प्रिंट करने के लिए, हमें इसे घुमाने की ज़रूरत है, जिसका अर्थ है ट्रांसपोज़िंग और रिवर्सिंग। दुर्भाग्य से, पायथन के पास असमान-लंबाई वाली पंक्तियों की एक सरणी को स्थानांतरित करने का एक सरल तरीका नहीं है। बिल्ट-इन zipट्रंकट्स को सबसे छोटी पंक्ति में। यह map(None,_)चाल का उपयोग करता है , लेकिन Noneबाद में सभी स्थानों को परिवर्तित करना होगा ।


2

हास्केल, 182 176 बाइट्स

import Data.List
f=0:scanl(+)1f
b n c s|length s<n=b n c(c:s)|0<1=s
m s=s++reverse s
c n=mapM_ putStrLn$transpose$m$map(b(f!!n)' ')$intersperse"_"$map(\x->[1..f!!x]>>"i")[1..n]

पुकारते हैं c

( fबेशर्मी से /programming/232861/fibnote-code-golf से चुराया गया )


आप flip replicate 'i'.(f!!)द्वारा प्रतिस्थापित कर सकते हैं \x->[1..f!!x]>>"i"
निमि

बहुत धन्यवाद! यह पहली बार है जब मैं वास्तव में एक मोनोडिक गोल्फ टिप को समझता हूं, भले ही मैं अभी तक उन लोगों के साथ नहीं आया हूं। कैसे fकाम करता है अभी तक कोई सुराग नहीं ...
Leif Willerts

1

मतलाब, 172 152 बाइट्स

दुर्भाग्य से, माटलैब ने फिबोनाची फ़ंक्शन में एक बिल्ड नहीं किया है और स्ट्रिंग मैनीपुलेशन थोड़ा सा काल्पनिक है।

function t(n);f=@(n)getfield([0 1;1 1]^n,{3});m=char(flipud(bsxfun(@(a,b)(a<=f(b/2)&mod(b,2)==0)*'i',(1:f(n))',2:2*n)));m(end,2:2:end)='_';[m fliplr(m)]

लाइन ब्रेक के साथ:

function t(n);
f=@(n)getfield([0 1;1 1]^n,{3});
m=char(flipud(bsxfun(@(a,b)(a<=f(b/2)&mod(b,2)==0)*'i',(1:f(n))',2:2*n)));
m(end,2:2:end)='_';
[m fliplr(m)]

1

रूबी, 151 146 142 137 132 बाइट्स

->n{s=1,1;3.upto(n){s<<s[-1]+s[-2]};s.map!{|i|[' ']*(s[-1]-i)+[?i]*i}.transpose.map!{|a|v=a*'_ '[a.count(?i)<=>n];puts v+v.reverse}}

137 बाइट्स

->n{s=1,1;3.upto(n){s<<s[-1]+s[-2]};o=s.map{|i|[' ']*(s[-1]-i)+[?i]*i}.transpose.map{|a|v=a*' ';v+v.reverse};o[-1]=o[-1].tr' ',?_;puts o}

142 बाइट्स

->n{s=1,1;(3..n).map{s<<s[-1]+s[-2]};puts s.map{|i|[' ']*(s[-1]-i)+[?i]*i}.transpose.map{|a|v=a*' ';v+v.reverse}.tap{|c|c[-1]=c[-1].tr' ',?_}}

146 बाइट्स

->n{s=1,1;(3..n).map{s<<s[-1]+s[-2]};puts s.map{|i|[' ']*(s[-1]-i)+[?i]*i}.transpose.map{|a|v=a.join' ';v+v.reverse}.tap{|c|c[-1]=c[-1].tr' ',?_}}

151 बाइट्स

->n{s=1,1;(3..n).map{s<<s[-1]+s[-2]};puts s.map{|i|[' ']*(s[-1]-i)+['i']*i}.transpose.map{|a|v=a.join ' ';v+v.reverse}.tap{|c|c[-1]=c[-1].tr ' ', '_'}}

Ungolfed:

-> n {
  s = 1,1
  3.upto(n) {
    s << s[-1] + s[-2]
  }
  s.map! { |i|
    [' '] * (s[-1]-i) + [?i] * i
  }.
  transpose.
  map! { |a|
    v = a * '_ '[a.count(?i)<=>n]
    puts v + v.reverse
  }
}

उपयोग:

->n{s=1,1;3.upto(n){s<<s[-1]+s[-2]};s.map!{|i|[' ']*(s[-1]-i)+[?i]*i}.transpose.map!{|a|v=a*'_ '[a.count(?i)<=>n];puts v+v.reverse}}[8]

आउटपुट:

              ii              
              ii              
              ii              
              ii              
              ii              
              ii              
              ii              
              ii              
            i ii i            
            i ii i            
            i ii i            
            i ii i            
            i ii i            
          i i ii i i          
          i i ii i i          
          i i ii i i          
        i i i ii i i i        
        i i i ii i i i        
      i i i i ii i i i i      
    i i i i i ii i i i i i    
i_i_i_i_i_i_i_ii_i_i_i_i_i_i_i

1

अजगर 2, 213

12 बाइट डीएसएम के लिए धन्यवाद बचा लिया।

def f(r):
 a=b=1
 while r:yield a;a,b=b,a+b;r-=1
n=list(f(input()))
n.remove(1)
h=max(n)-1
r=1
while h:
 l='  '*(len(n)+1)+('i '*r)[:-1];print(l+l[::-1]);h-=1
 if h in n:r+=1;n.pop()
l='i_'*r+'i_i'
print l+l[::-1]

अनप्लग्ड संस्करण।

max_height = input()
def fib(r):
    a=b=1
    while r:
        yield a
        a,b = b, a + b
        r-=1

numbers = [x for x in fib(max_height) if x>1]
highest = max(numbers) -1
rows = 1
while highest:
    line =' '*((len(numbers)+1)*2) + ' '.join('i'*rows)
    print(line + line[::-1])
    highest -= 1
    if highest in numbers:
        rows += 1
        numbers.pop()

line = '_'.join('i'*(rows+2))
print(line + line[::-1])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.