ফিবোনাচি দিবস শুভ!


20

পটভূমি

আজ (বা গতকাল) এর দিনটি (বা ছিল) 11/23 বা ফিবোনাকির দিন! ফিবোনাচি পিষ্টক তৈরির চেয়ে উদযাপনের আর কী ভাল উপায়?


উদাহরণ

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
@ সিসেরাক এটি ঠিক আছে, তাদের কেবল পশ্চিম উপকূলে ভ্রমণ করতে হবে (তাত্ক্ষণিকভাবে), এবং তারপরে তারা শেষ 5 ঘন্টা (
হাওয়াইয়ের

6
এই চ্যালেঞ্জ 43 বছর (11/23/58) এ কিংবদন্তি হতে চলেছে।
আর্কটরাস

9
43 বছরে মিমি / ডিডি / ওয়াই তারিখের ফর্ম্যাটটি ইতিহাস হবে। সমস্ত বুদ্ধিমান প্রাণীরা yyyy / মিমি / ডিডি তে চলে যাবে ... :

1
@ সিসেরেক ভার্ভোজ ভাষায় গল্ফযুক্ত উত্তর পোস্ট করা অনেক উত্সাহিত। অবশ্যই, আপনি পাইথের সাথে প্রতিযোগিতা করছেন না, তবে আপনি একই ভাষায় বা তুলনামূলক ভার্বোসিটির ভাষায় অন্যান্য উত্তরগুলির সাথে প্রতিযোগিতা করতে পারেন।
মার্টিন ইন্ডার

উত্তর:


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

সিজেম, 41 39 বাইট

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

এটি নেতৃস্থানীয় হোয়াইটস্পেসের মোটামুটি পরিমাণ মুদ্রণ করে। সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

"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§

অবরুদ্ধ সংস্করণ:

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(#
ডাউনওয়েট

@ ভিɪʜᴀɴ ধন্যবাদ কি করে Array.dupe(), মনে হয় কাজ করে না?
ইন্ট্রিপিডকোডার

অ্যারে.ডাপ সম্ভবত একটি খারাপ নাম ছিল, এটি অ্যারে থেকে সদৃশগুলি সরিয়ে দেয়।
ডাউনওয়েট

@ Vɪʜᴀɴ আপনার ইনপুট / আউটপুট আর্গগুলির সাথে সম্পত্তি নাম বিভাগে প্রতিটি পদ্ধতির একটি সংক্ষিপ্তসার রাখা উচিত। এছাড়াও, অ্যারে.রেপিয়াট এবং স্ট্রিং.রেভারস খুব ভাল লাগবে।
ইন্ট্রিপিডকোডার

1
@ সিসেরিকের অর্থ আমি উদাসীন, বিভ্রান্তির জন্য দুঃখিত।
ইন্ট্রিপিডকোডার

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)

ধারণাটি সহজ: বামদিকে মিরর করা ডান অর্ধেকের সাথে নীচে থেকে উপরে, বাম থেকে ডানে যাওয়া কলামগুলিতে ছবিটি তৈরি করুন। নীচের সারির জন্য 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/fibonacci-code-golf থেকে চুরি করা হয়েছে )


আপনি flip replicate 'i'.(f!!)দ্বারা প্রতিস্থাপন করতে পারেন \x->[1..f!!x]>>"i"
নিমি

দুর্দান্ত, ধন্যবাদ! আমি প্রথমবারের মতো প্রকৃতপক্ষে কোনও এককীয় গল্ফিং টিপটি বুঝতে পারি, যদিও আমি এখনও নিজের সাথে এলাম না। কীভাবে fএখনও কাজ করে সে সম্পর্কে কোনও ধারণা নেই ...
লাইফ উইলার্টস

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])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.