একটি ASCII ফিবোনাচি ঘড়ি তৈরি করুন


16

কেউ সত্যিই অভিনব ঘড়ি তৈরি করেছেন ফিবোনাচি নাম্বার ব্যবহার করে তৈরি করেছিলেন, যা দেখতে দুর্দান্ত দেখাচ্ছে তবে এটি মোটামুটি ব্যবহারের অযোগ্য। আমাদের পছন্দ মত উপায়! এটি আবার তৈরি করা যাক।

ঘড়িটি প্রথম পাঁচটি ফিবোনাচি সংখ্যার সাথে মিল রেখে 5 টি বিভাগ নিয়ে গঠিত, যা 1 (অর্থাৎ 1, 1, 2, 3, 5) থেকে শুরু করে:

ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee

ঘড়িটি 12 মিনিটের সময় 5 মিনিটের ইনক্রিমেন্টে প্রদর্শন করতে সক্ষম। এখানে যে কিভাবে কাজ করে। সময় বিবেচনা 7:20। প্রদত্ত ফিবোনাচি নম্বরগুলিতে 7 ঘন্টাটি পচে যেতে পারে

7 = 2 + 5

এছাড়াও পাঁচ মিনিটের 4 ইউনিট রয়েছে। 4 হিসাবে ক্ষয় হতে পারে

4 = 2 + 1 + 1

এখন ঘন্টাগুলিকে লাল রঙে দেখানো হয়েছে, মিনিটে সবুজ রঙ হচ্ছে এবং যদি কোনও সংখ্যা ঘন্টা এবং মিনিটের জন্য ব্যবহৃত হয় তবে এটি নীল রঙে দেখানো হয়েছে। যদি কোনও সংখ্যা ব্যবহার না করা হয় তবে এটি সাদা থাকে। সুতরাং উপরোক্ত হিসাবে প্রদর্শিত হবে:

BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR

তবে অপেক্ষা করুন, আরও কিছু আছে। উপরের পচনগুলি কেবল সম্ভাবনা নয়। একটি লিখতে পারে 7 = 3 + 2 + 1 + 1এবং 4 = 3 + 1, যা একটি দিতে পারে

GGRWWWWW          GGBWWWWW
GGBWWWWW          GGRWWWWW
BBBWWWWW    or    BBBWWWWW
BBBWWWWW          BBBWWWWW
BBBWWWWW          BBBWWWWW

যার উপর নির্ভর করে 1 নির্বাচিত হয়। অবশ্যই অন্যান্য সংমিশ্রণগুলিও রয়েছে। ঘড়িটি এলোমেলোভাবে সমস্ত বৈধ পচন থেকে চয়ন করে।

যেমনটি আমি বলেছিলাম ... এটি ব্যবহারযোগ্যতার পুরষ্কারটি না জিততে পারে তবে এটি অবশ্যই লক্ষ্য করা ভাল।

চ্যালেঞ্জ

আপনার কাজটি যেমন একটি ঘড়ি বাস্তবায়ন করা হয়। আপনার প্রোগ্রাম (বা ফাংশন) এর উপরে STDOUT বা নিকটতম বিকল্প হিসাবে বর্ণিত বর্তমান সময়ের একটি ASCII প্রতিনিধিত্ব (5 মিনিটের শেষ একাধিক পর্যন্ত গোল করা) মুদ্রণ করা উচিত। আপনি ইনপুট হিসাবে কোনও সাধারণ ফর্ম্যাটে সময়টি পড়তে বা স্ট্যান্ডার্ড লাইব্রেরি ফাংশন সহ এটি চয়ন করতে পারেন। আপনার অবশ্যই ধরে নেওয়া উচিত নয় যে বর্তমান / প্রদত্ত সময়টি 5 মিনিটের মধ্যে বিভাজ্য।

আপনার সমাধান অবশ্যই বর্তমান সময়ের সব সম্ভব উপস্থাপনা থেকে এলোমেলোভাবে চয়ন। এটি হ'ল প্রতিটি উপস্থাপনা অবশ্যই নন-শূন্য সম্ভাবনার সাথে মুদ্রিত করা উচিত।

মধ্যরাত্রি এবং দুপুরকে 0:00(বিপরীতে হিসাবে 12:00) আচরণ করা উচিত ।

আপনি allyচ্ছিকভাবে একটি একক পেছনের নতুন লাইন অক্ষর মুদ্রণ করতে পারেন।

আপনি এর জায়গায় যে কোনও চারটি পৃথক মুদ্রণযোগ্য ASCII অক্ষর (অক্ষর কোড 0x20 থেকে 0xFE) ব্যবহার করতে পারেন RGBW। আপনার উত্তরে আপনার পছন্দটি বর্ণনা করুন এবং এটি ধারাবাহিকভাবে ব্যবহার করুন।

এটি কোড গল্ফ, তাই সংক্ষিপ্ত উত্তরটি (বাইটে) জেতে।


(ক) আমরা কি ধরে নিতে পারি যে ইনপুটটি 12 = 0 নিয়ম অনুসরণ করে? (খ) আউটপুটটি কি সেই অভিযোজনে থাকতে হবে, না আমরা এটিকে ঘোরাতে পারি?
sirpercival

@ সির্পারসিভিল এ) হ্যাঁ, আমি মনে করি এটি "যে কোনও সাধারণ বিন্যাস" হিসাবে গণ্য। খ) এটিকে চ্যালেঞ্জে প্রদত্ত ওরিয়েন্টেশন হতে হবে।
মার্টিন ইন্ডার

2
এই চ্যালেঞ্জটি দুর্ভাগ্যজনক ক্রিয়াটি উত্সাহিত করেছে "ফাইব্লক্লকিং"।
অ্যালেক্স এ।

1
মধ্যরাত / দুপুর 12 এর পরিবর্তে 0 হওয়ার অনুপ্রেরণা কী? ক্রমের প্রথম পাঁচটি সংখ্যা 12 পর্যন্ত যোগ করে।
ব্রায়ান জে

@ ব্রায়ানজে আমি কেবল এটির ধারাবাহিক করতে একটি বেছে নিতে চেয়েছি এবং শূন্যটি বাছাইয়ের ঘটনা ঘটেছে। এটি যাইহোক সমাধানগুলিকে খুব বেশি প্রভাবিত করা উচিত নয়। আমি এই পছন্দটি জিনিসগুলি আরও সহজ করে তুলব কারণ মিনিটের মধ্যেও একটি 0..11 ব্যাপ্তি রয়েছে।
মার্টিন ইন্ডার

উত্তর:


6

সিজেম, 61 বাইট

l~5/]:A{;L[TT][XXYZ5]{4mr_2bW%Mf*@.+\Ps=M*aM*@+W%z\}fMA=!}gN*

STDIN এর মাধ্যমে দুটি স্পেস-বিভাজিত পূর্ণসংখ্যা 3.14নিয়ে WRGBযায় এবং যথাক্রমে পরিবর্তে ব্যবহার করে। এটি অনলাইনে চেষ্টা করুন

RGBWকয়েকটি অতিরিক্ত বাইটের জন্য এখানে "বুদ্ধিমান" সংস্করণটি রয়েছে:

l~5/]:A{;L[TT][XXYZ5]{4mr_2bW%Mf*@.+\"WRGB"=M*aM*@+W%z\}fMA=!}gN*

ব্যাখ্যা

অ্যালগরিদমটি আমার পাইথন উত্তরের সমান - আমরা সঠিক কোনওটি না পাওয়া পর্যন্ত ঘড়ি তৈরি করে প্রত্যাখ্যানের নমুনা।

l~5/]:A            Read input and make array [<hours> <minutes>/5]
{...}g             Do...

  ;                  Pop the only element on the stack
  L                  Push empty array, which will become our clock
  [TT]               Push [0 0] for [h m], to keep track of our sample
  [XXYZ5]{...}fI     For I in [1 1 2 3 5]...
    4mr                Push random number from [0 1 2 3]
    _2bW%              Copy and get reversed base 2 rep for one of [0] [1] [0 1] [1 1]
    If*                Multiply bit(s) by I
    @.+                Add element-wise to [h m] array
    \Ps=               Index the random number into stringified pi for one of "3.14"
    I*aI*              Make into I by I square
    @+W%z\             Add above clock and rotate clockwise

  A=!              ... while the resulting clock is incorrect
N*                 Riffle clock with newlines

9

পাইথন 2, 194 182 বাইট

from random import*
h=m=H,M=input()
while[h,m]!=[H,M/5]:
 h=m=0;s=[]
 for n in 1,1,2,3,5:c=randint(0,3);h+=c%2*n;m+=c/2*n;s=zip(*(["WRGB"[c]*n]*n+s)[::-1])
for L in s:print"".join(L)

অ্যালগরিদমটি কেবল প্রত্যাখ্যানের নমুনা, সুতরাং এটি সঠিক হওয়া অবধি ঘড়ি তৈরি করতে থাকে। ঘড়িটি কিছুই না দিয়ে শুরু করে তৈরি করা হয়েছে, তারপরে "উপরে একটি বর্গক্ষেত্র যুক্ত করুন এবং ঘড়ির কাঁটার দিকে ঘোরান" 5 বার করে।

STDIN এর মাধ্যমে দুটি কমা-বিভাজিত পূর্ণসংখ্যার ব্যবস্থা করে।

>>> ================================ RESTART ================================
>>> 
7,17
BBBWWWWW
BBRWWWWW
RRRWWWWW
RRRWWWWW
RRRWWWWW
>>> ================================ RESTART ================================
>>> 
7,17
GGBRRRRR
GGRRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR

4

পাইথন 2, 421 বাইট

ওহ, আমি নিশ্চিত এটি আরও গল্ফ করা যেতে পারে।

from itertools import*
from random import*
f,r=[1,1,2,3,5],range
c={_:[x for x in chain(*[combinations(f,i)for i in r(6)])if sum(x)==_]for _ in r(13)}
k=[[2,1,4],[2,0,4]]+[[3,4]]*3
def b(h,m):
 o=['W']*5;m/=5;h,m=choice(c[h]),choice(c[m])
 l=dict(zip(zip('WWR',[m,h,m]),'GRB'))
 for x in h,m:
    d={1:[0,1],2:[2],3:[3],5:[4]}
    for _ in x:j=d[_].pop();o[j]=l[o[j],x]
 print'\n'.join([''.join(o[i]*f[i]for i in _)for _ in k])

পরীক্ষা ক্ষেত্রে:

>>> b(7,20)
WWBRRRRR
WWRRRRRR
GGGRRRRR
GGGRRRRR
GGGRRRRR
>>> b(7,20)
RRBWWWWW
RRRWWWWW
BBBWWWWW
BBBWWWWW
BBBWWWWW

@ অপ্টিমাইজার এখনই আমাদের কেবলমাত্র গুগল প্রাকটিটিফাই সিস্টেমে আইডিএল পেতে হবে যাতে আমি আইডিএল সিনট্যাক্সটি এক্সডি হাইলাইট করতে পারি
স্যারপারসিভিল

3

রুবি, 286 বাইট

এটি গল্ফযোগ্য হতে পারে তবে অন্য সময় চেষ্টা করবে।

z=[]
13.times{z<<[]}
(0..5).to_a.permutation{|p|l=p.take_while{|n|n<5};z[l.map{|n|[1,1,2,3,5][n]}.reduce(0,:+)]<<l}
t=Time.now
h,m=z[t.hour%12].sample,z[t.min/5].sample
5.times{|y|puts (0..7).map{|x|a=(x>2?4:y>1?3:x<2?2:y<1?1:0);q=m.include?(a);h.include?(a)?q ? ?B:?R: q ??G:?W}*""}

ব্যাখ্যা:

z=[]
13.times{z<<[]}                 # Initialize the array where we will have all the combinations
(0..5).to_a.permutation{|p|     # Get all the permutations of the 5 positions plus a 5, which will be used as a separator
    l=p.take_while{|n|n<5};     # Get the permutation until the separator. This way we get all the possible sum combinations of the other five numbers
    z[l.map{|n|[1,1,2,3,5][n]}.reduce(0,:+)]<<l}     # Add the permutation to the list with id=the permutation's sum

t=Time.now # Get current time
h,m=z[t.hour%12].sample,z[t.min/5].sample     # For the hour and the minute, get a random permutation that has the expected sum
5.times{|y|                 # For each row
    $><<(0..7).map{|x|      # For each column
        a=(x>2?4:y>1?3:x<2?2:y<1?1:0);     # Get the panel we are in
        q=m.include?(a);h.include?(a)?q ? ?B:?R: q ??G:?W     # Get the color this panel is painted
    }*""}                   # Join the string and print it

1
আপনি প্রতিস্থাপন করতে পারেন (0..5).to_aসঙ্গে[*0..5]
এডিসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.