এএসসিআইআই ক্যালেন্ডার পরিকল্পনাকারী


11

ক্রিয়াকলাপের তালিকা এবং তাদের শুরুর সময় / তারিখ দেওয়া হয়েছে, উপযুক্ত দিনগুলিতে ক্রিয়াকলাপগুলি দেখায় এমন একটি ASCII-art ক্যালেন্ডার আউটপুট দেয়। সমস্ত ক্রিয়াকলাপ একই মাসে হওয়ার গ্যারান্টিযুক্ত, একই দিনে কোনও দুটি ক্রিয়াকলাপ হবে না এবং সমস্ত ক্রিয়াকলাপ ক্যালেন্ডার বাক্সের মধ্যে ফিট করার গ্যারান্টিযুক্ত।

ক্যালেন্ডারে প্রতিটি বাক্সের উপরের-বাম কোণে তারিখ রয়েছে, বাক্সটি 9 স্পেসে প্রশস্ত 5 স্পেস দ্বারা লম্বা, বেষ্টিত -এবং ঘিরে রয়েছে |। সপ্তাহের দিনের জন্য দ্বি-অক্ষরের সংক্ষিপ্তসারটি প্রথম সারির উপরে থাকে এবং সপ্তাহগুলি রবিবারের সাথে শুরু হয়।

উদাহরণস্বরূপ, নিম্নলিখিত ক্রিয়াকলাপ দেওয়া:

10/5/2018 - 9:00am - Sandbox calendar challenge
10/9/2018 - 9:00am - Post challenge to main
10/10/2018 - 10:00am - Profit
10/31/2018 - 7:30pm - Halloween party

এই সম্পর্কিত ক্যালেন্ডার আউটপুট:

    Su        Mo        Tu        We        Th        Fr        Sa     
-----------------------------------------------------------------------
|         |1        |2        |3        |4        |5        |6        |
|         |         |         |         |         |9:00am   |         |
|         |         |         |         |         |Sandbox  |         |
|         |         |         |         |         |calendar |         |
|         |         |         |         |         |challenge|         |
-----------------------------------------------------------------------
|7        |8        |9        |10       |11       |12       |13       |
|         |         |9:00am   |10:00am  |         |         |         |
|         |         |Post     |Profit   |         |         |         |
|         |         |challenge|         |         |         |         |
|         |         |to main  |         |         |         |         |
-----------------------------------------------------------------------
|14       |15       |16       |17       |18       |19       |20       |
|         |         |         |         |         |         |         |
|         |         |         |         |         |         |         |
|         |         |         |         |         |         |         |
|         |         |         |         |         |         |         |
-----------------------------------------------------------------------
|21       |22       |23       |24       |25       |26       |27       |
|         |         |         |         |         |         |         |
|         |         |         |         |         |         |         |
|         |         |         |         |         |         |         |
|         |         |         |         |         |         |         |
-----------------------------------------------------------------------
|28       |29       |30       |31       |         |         |         |
|         |         |         |7:30pm   |         |         |         |
|         |         |         |Halloween|         |         |         |
|         |         |         |party    |         |         |         |
|         |         |         |         |         |         |         |
-----------------------------------------------------------------------

ব্যাখ্যা

  • তফসিলের শব্দগুলি ([এ-জা-জেড] মিলে যাওয়া +) তাদের মধ্যে একটি একক স্থান (যেমন উদাহরণ হিসাবে) দ্বারা সীমিত করা হবে।
  • শব্দের সীমানায় পাঠ্যকে বিভক্ত করা যথেষ্ট। হাইফেনেটিং শব্দের দরকার নেই।
  • ফেব্রুয়ারী যদি রবিবার একটি অ লিপ-বছরে শুরু হয় তবে আপনার কাছে কেবল চারটি ক্যালেন্ডার সারি থাকবে।
  • যদি কোনও ৩১ দিনের মাস (যেমন, আগস্ট) সপ্তাহের শেষের দিকে শুরু হয় তবে আপনাকে ছয় ক্যালেন্ডার সারি আউটপুট দিতে হতে পারে।

আই / ও এবং বিধি

  • আপনার কোডটি অবশ্যই লিপ বছর যথাযথ সহ গ্রেগরিয়ান ক্যালেন্ডারে অন্তত 0001-01-01এবং এর 9999-12-31মধ্যে তারিখগুলি পরিচালনা করতে হবে । উদাহরণস্বরূপ, যদি ইনপুট দেওয়া হয় 2016-02-13 9:00am Testতবে আউটপুট ক্যালেন্ডারে 29 ফেব্রুয়ারি হওয়া উচিত।
  • ইনপুট তারিখের বিন্যাস যে কোনও পছন্দসই বিন্যাসে থাকতে পারে। আইএসও 8601, একটি datetimeঅবজেক্ট, বিশেষত ফর্ম্যাট করা স্ট্রিং ইত্যাদি etc. ইনপুট পার্সিং করা এই চ্যালেঞ্জের আকর্ষণীয় অংশ নয়।
  • ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক পদ্ধতিতে হতে পারে ।
  • শীর্ষস্থানীয় / পিছনের নিউলাইনগুলি বা অন্যান্য সাদা স্থান pচ্ছিক, যদি অক্ষরগুলি যথাযথভাবে সরে যায় line
  • হয় একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন গ্রহণযোগ্য। যদি কোনও ফাংশন হয় তবে আপনি আউটপুটটি মুদ্রণের পরিবর্তে ফিরে আসতে পারেন।
  • আউটপুট কনসোলে থাকতে পারে, স্ট্রিংগুলির তালিকা হিসাবে ফিরে আসে, একক স্ট্রিং হিসাবে ফিরে আসে ইত্যাদি can
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি তাই সাধারণ গল্ফিংয়ের সমস্ত নিয়ম প্রয়োগ হয় এবং সংক্ষিপ্ততম কোড (বাইটে) জয়ী হয়।

1.) আপনার কি শব্দটির সীমানায় ক্রিয়াকলাপের নামগুলি বিভক্ত করতে হবে? ২) আপনার যখন রবিবার থেকে একটি নন-লিপিয়ার ফেব্রুয়ারি শুরু হয়, আপনার কি কেবল 4 টি সারি রয়েছে? ৩) যখন আপনার মাসটি দেখানোর জন্য r টি সারি প্রয়োজন হবে (প্রাক্তন আগস্ট শনিবার শুরু হবে) তখন কী ঘটে?
nedla2004


@ nedla2004 1) হ্যাঁ, শব্দের সীমানা সূক্ষ্মভাবে কাজ করবে। 2) এটি সঠিক, 4 সারি। 3) আপনার ক্যালেন্ডারে 6 টি সারি দেখাতে হবে। আমি স্পষ্টিতে সম্পাদনা করব।
অ্যাডমবর্কবার্ক

@ আরনাউল্ড হ্যাঁ, এটি একটি ন্যায্য ধারণা
অ্যাডমবর্কবর্ক

1
1752-09-02 - 09:00am - Wife's Birthday Tomorrow (14th!)
এনজিএম

উত্তর:


10

জাভাস্ক্রিপ্ট (ES8), 380321 320 বাইট

(y,m,e)যেখানে ইনপুট নেয় :

  • y বছর হয়
  • m মাস, 0-সূচকযুক্ত
  • eএমন একটি বস্তু যাঁর কীগুলি দিনগুলি এবং যার মানগুলি [hour, task]ফর্ম্যাটে ইভেন্ট
(y,m,e)=>`SuMoTuWeThFrSa
`.split(/(..)/).join`    `+(p='-'.repeat(d=71)+`
`)+(g=i=>++d<1|(x=G`getMonth`==m)|i%7?`|${[h,t]=e[d]||E,o=[x*d,h],q=E,t&&t.split` `.map(s=>q=(u=q?q+' '+s:s)[9]?o.push(q)&&s:u),[...o,q][r%5]||E}`.padEnd(10)+(++i%7?E:`|
`+(++r%5?(d-=7,E):p))+g(i):E)(E=r='',d=-(G=s=>new Date(y,m,d)[s]())`getDay`)

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

নীচে কোডের কয়েকটি গুরুত্বপূর্ণ অংশ রয়েছে।

শিরোলেখ

শিরোনাম লাইনটি এর সাথে উত্পন্ন হয়:

'SuMoTuWeThFrSa\n'.split(/(..)/).join`    `

যখন split()একটি নিয়মিত একটি ক্যাপচার গ্রুপ ধারণকারী অভিব্যক্তি সঙ্গে ব্যবহার করা হয়, এই দলের আউটপুট অ্যারের মধ্যে অন্তর্ভুক্ত করা হয়। এই ক্ষেত্রে, এটি দেয়:

[ '', 'Su', '', 'Mo', '', 'Tu', '', 'We', '', 'Th', '', 'Fr', '', 'Sa', '\n' ]

আমরা 4 টি স্পেস দিয়ে এই অ্যারে যোগদান করি:

'    Su        Mo        Tu        We        Th        Fr        Sa    \n'

যা আমরা চাই ঠিক তাই

মাস কাঠামো

Gymd

G = s => new Date(y, m, d)[s]()

x

ইভেন্ট বিন্যাস

নিম্নলিখিত কোডটি একটি ইভেন্ট ফর্ম্যাট করতে ব্যবহৃত হয়।

[h, t] = e[d] || E,           // split the content of the event into h and t
o = [x * d, h],               // set the first 2 entries of o[]: day and hour
q = E,                        // we start with q = empty string
t &&                          // skip this .map() loop entirely if t is not defined
t.split` `                    // split the string on spaces
.map(s =>                     // for each word s:
  q =                         //   update q:
    (u = q ? q + ' ' + s : s) //     u is the concatenation of the previous string with
                              //     the new word, separated by a space if needed
    [9] ?                     //     if u is more than 9 character long:
      o.push(q)               //       push the previous string in o[]
      && s                    //       and reset q to s
    :                         //     else:
      u                       //       update q to u
),                            // end of map()
[...o, q][r % 5]              // append the last pending part to o[] and extract the
|| E                          // relevant row; or use an empty string by default

3

পাইথন 2 , 326 324 315 312 307 বাইট

import calendar as c,textwrap as t
c.setfirstweekday(6)
y,m,e=input()
print' Su Mo Tu We Th Fr Sa\n'.replace(' ',' '*8)[4:]+'-'*71
for w in c.monthcalendar(y,m):
 for l in zip(*[[d or'',a]+(t.wrap(b,9)+['']*3)[:3]for d in w for a,b in[e.get(d,'  ')]]):print'|'+'|'.join('%-9s'%v for v in l)+'|'
 print'-'*71

এটি অনলাইন চেষ্টা করুন!

আরনাউল্ডের জেএস উত্তর হিসাবে একই ইনপুট :

(y,m,e)যেখানে ইনপুট নেয় :

  • y বছর হয়
  • m মাস, 1-ইনডেক্সড
  • eএমন একটি বস্তু যাঁর কীগুলি দিনগুলি এবং যার মানগুলি (hour, task)ফর্ম্যাটে ইভেন্ট

3

কাঠকয়লা , 215 206 বাইট

Sθ≔I⪪§⪪θ ⁰/η≔⁻⁺×¹²⊟η⊟η²η≔EE²⁻ηι﹪Σ⟦÷ι⁴⁸⁰⁰±÷ι¹²⁰⁰÷ι⁴⁸÷ι¹²÷×¹³⁺⁴﹪ι¹²¦⁵⟧⁷η≔±⊟ηζ≔⁺²⁸﹪⁺⊟ηζ⁷ε⭆⪪SuMoTuWeThFrSa²◨◧ι⁶χ↓←⁷¹W‹ζε«↘F⁷«P↓⁵→≦⊕ζF⁼Iζ§⪪θ/⁰«≔⪪θ - θ≔⟦ω◨§θ¹¦⁹⟧δF⪪⊟θ ⊞δ⎇‹⁺L§δ±¹Lμ⁹⁺⁺⊟δ μμP⪫δ¶Sθ»◨×››ζ⁰›ζεIζ⁹»↓⁵←⁷¹

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। D / m / yyyy ফর্ম্যাটে তারিখ নেয়। ব্যাখ্যা:

Sθ

প্রথম ইভেন্টটি ইনপুট করুন।

≔I⪪§⪪θ ⁰/η

তারিখটি বের করুন এবং এস-এ বিভক্ত করুন /

≔⁻⁺×¹²⊟η⊟η²η

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

≔EE²⁻ηι﹪Σ⟦÷ι⁴⁸⁰⁰±÷ι¹²⁰⁰÷ι⁴⁸÷ι¹²÷×¹³⁺⁴﹪ι¹²¦⁵⟧⁷η

পরের মাসের প্রথম দিনের সপ্তাহের দিন এবং এই মাসের জন্য একটি সংশোধিত জেলারের সম্মিলনটি ব্যবহার করুন। মূল অংশটি এই বছরের উপর নির্ভর করে যে পূর্ববর্তী বছরের ৩০ শে অক্টোবর থেকে নির্দিষ্ট মাসের ১ লা তারিখের দিনগুলি যেখানে m = 4মার্চ এবং m = 14পরের বছরের জানুয়ারীর জন্য সূত্রটি দেওয়া হয় m * 153 / 5, তবে আমরা ১৪০ বিয়োগ করতে পারি কারণ আমরা কেবল সপ্তাহের দিন সম্পর্কে যত্ন এটি তখন বছরের কারণে সামঞ্জস্য করতে অবশেষ; প্রতি বছর একটি দিন যুক্ত হয়, প্রতিটি চতুর্থ বছরে একটি অতিরিক্ত দিন যোগ করা হয়, প্রতিটি 100 তম বছরে একটি দিন বিয়োগ করে এবং প্রতিটি 400 তম বছরে আবার একটি দিন যুক্ত হয়। (যেহেতু আমি মাসগুলিতে কাজ করছি এই মানগুলি সমস্ত 12 দ্বারা গুণিত হয়েছে) বরং সুবিধামতভাবে এটি আমাকে রবিবার-সূচিকিত সপ্তাহের শর্তে সরাসরি উত্তর দেয় (সাধারণত আপনি মাসের দিনটি যোগ করবেন এবং শনিবার গণনা শুরু করবেন)।

≔±⊟ηζ

সপ্তাহের দিনটি নিয়ে আলোচনা করুন এবং এটিকে মাসের বর্তমান দিন হিসাবে সংরক্ষণ করুন।

≔⁺²⁸﹪⁺⊟ηζ⁷ε

দুই মাসের সপ্তাহের দিন থেকে মাসে কত দিনের সংখ্যা গণনা করুন।

⭆⪪SuMoTuWeThFrSa²◨◧ι⁶χ

দিনের শিরোনামগুলি আউটপুট করুন।

↓←⁷¹

এর উপরের সারিটি মুদ্রণ করুন -

W‹ζε«

মাসের শেষ দিন পর্যন্ত লুপ আউটপুট ছিল।

কার্সারটি পরবর্তী সারির শুরুতে সরান।

F⁷«

একসাথে 7 দিন প্রক্রিয়া করুন।

P↓⁵→

এর কলামটি |বাম দিকে মুদ্রণ করুন ।

≦⊕ζ

মাসের বর্তমান দিন বৃদ্ধি করুন।

F⁼Iζ§⪪θ/⁰«

যদি মাসের বর্তমান দিনটি বর্তমান ইভেন্টের দিন হয় ...

≔⪪θ - θ

... ইভেন্টের অন্যান্য অংশগুলি বের করুন, ...

≔⟦ω◨§θ¹¦⁹⟧δ

... সময়টি 9 স্পেসে প্যাড করুন এবং এটি তালিকা হিসাবে একটি খালি স্ট্রিং সংরক্ষণ করুন ...

F⪪⊟θ 

... স্পেসে বিবরণটি বিভক্ত করুন এবং তাদের উপর লুপ করুন, ...

⊞δ⎇‹⁺L§δ±¹Lμ⁹⁺⁺⊟δ μμ

... প্রতিটি শব্দ আগের শব্দটিতে যুক্ত করা যদি এটি ফিট হয়; ...

P⪫δ¶

... সময় এবং বিবরণ আউটপুট ( Pδকাজ করে না, একটি কাঠকয়লা বাগ হতে পারে?), ...

Sθ»

... এবং পরবর্তী ইভেন্ট ইনপুট করুন।

◨×››ζ⁰›ζεIζ⁹»

যদি মাসের বর্তমান দিনটি 1 এবং মাসের শেষ দিনের মধ্যে থাকে তবে এটিকে আউটপুট দিন, নাহলে পরের দিন সরে যেতে পর্যাপ্ত জায়গা আউটপুট দেয়।

↓⁵←⁷¹

সপ্তাহের শেষে, এর ডান কলাম |এবং এর নীচের সারিটি মুদ্রণ করুন -


হতে পারে আমি আপনার ভার্বোজ টিআইও কোডটিতে এড়িয়ে গেছি, তবে আপনি কি নিশ্চিত যে আপনার জেলারের একত্রিতকরণটি সম্পূর্ণ হয়েছে? এটি মার্চ মাসের মধ্যে থেকে মার্চ মাসের জন্য সঠিক বলে মনে হচ্ছে, তবে জানুয়ারি এবং ফেব্রুয়ারি মাসের year-1পরিবর্তে ব্যবহার করা উচিত yearএবং পরিবর্তে ব্যবহার করা month+12উচিত month। অথবা আপনি কি কোনওভাবেই আমার এই 05AB1E উত্তরটিতে উল্লিখিত অ্যালগরিদমকে সহজ করে দিয়েছেন যা উইকিপিডিয়া থেকে সমান ?
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন মূলত এই কারণেই আমি মার্চ, 1 বিবিসি থেকে মাসের সংখ্যা গণনা করি তবে একটি মন্তব্যে আরও ব্যাখ্যা করা খুব জটিল complicated
নীল

1
@ কেভিন ক্রুজসেন আমি আমার ব্যাখ্যা আপডেট করেছি; আমি আশা করি আপনি এটি সহায়ক হবে।
নিল

ধন্যবাদ! এটি সত্যই একটি দুর্দান্ত পরিবর্তিত সূত্র, এবং আমি এখন এর পিছনে যুক্তি বুঝতে পারি understand এটি ব্যাখ্যায় যোগ করার জন্য অনেক ধন্যবাদ। আমার কাছ থেকে +1
কেভিন ক্রুইজসেন 15

2

জাভা (জেডিকে) , 538 439 428 425 বাইট

আমি সম্ভবত পোস্ট করা বেশ দীর্ঘতম কোড গল্ফ সমাধান। এখনও এখান থেকে এটি গল্ফ করার চেষ্টা করছে তবে এটি একটি সংগ্রাম।

ইনপুট ফর্ম্যাটটি পরিবর্তন করে এবং কিছু রেজেক্স পার্সিং এবং বিবিধ বিট থেকে অন্য 11 টি ব্যবহার করে 99 বাইট ছুঁড়ে ফেলার ব্যবস্থা করা।

কেভিনের জন্য 3 অতিরিক্ত বাইট বন্ধ!

অন্যান্য উত্তর থেকে অনুপ্রেরণা গ্রহণ করে, এটি ফর্ম্যাটে সময় এবং ইভেন্টের প্রতিনিধিত্ব করে একটি স্ট্রিংয়ের জন্য বছর, মাস এবং দিনের মানচিত্র হিসাবে ইনপুট লাগে <time>-<event>

(y,m,M)->{var C=java.util.Calendar.getInstance();C.set(y,m-1,1);String r=",Su,,Mo,,Tu,,We,,Th,,Fr,,Sa\n".replace(",","    "),e;for(int x=C.getActualMaximum(5),l=0,b=0,j,c,i=0;i<7;r+="\n",l+=b<=x&++i>6?7*(i=1):0)for(j=0;j<71;b=l+j/10+2-C.get(7),e=(e=M.get(b))!=null?e.replaceAll("([^-]{1,9})(-| |$)","$1-")+" - ":null,r+=e=i%6<1?"-":c<1?"|":c*i<2&b>0&b<=x?b+"":c<2&e!=null?e.split("-")[i-2]:" ",j+=e.length())c=j%10;return r;}

এটি অনলাইন চেষ্টা করুন!


Ungolfed

(y,m,M)->{                                              // Lambda taking input as a year, month and map
  var C=java.util.Calendar.getInstance();               // Creates a new Calendar instance
  C.set(y,m-1,1);                                       // Sets the calendar to the first of the month in the given year    
  String r=",Su,,Mo,,Tu,,We,,Th,,Fr,,Sa\n"              // Creates the header row by replacing
    .replace(",","    "),e;                             // commas with 4 sets of spaces

  for(                                                  // Creates 7 rows for a calendar row
      int x=C.getActualMaximum(5)                       // Stores last day of the month
      ,l=0,b=0,j,c,i=0;i<7;                             // Initialises other integers
      r+="\n",                                          // Add new line each row
      l+=b<=x&++i>6                                     // If end of a calendar row is reached, and current day is less than max
        ?7*(i=1)                                        // Set i to 1 and add 7 to line count to create another calendar row
        :0)                                             // Otherwise do nothing

    for(j=0;j<71;                                       // Loop 71 times, appending characters to create a row
        b=l+j/10+2-C.get(7),                            // Determine the day of the box we're in
        e=(e=M.get(b))!=null?                           // Get the event for this day from the map and if not null
            e.replaceAll("([^-]{1,9})(-| |$)","$1-")      // Do some regex to separate the line entries by hyphens
            +" - "                                      // Append extra hyphen to prevent array out of bounds
            :null,                                      // Otherwise do nothing
        r+=e=i%6<1?"-":                                 // If it's the first line of a calendar row, append -
           c<1?"|":                                     // If it's the first column of a box, append |
           c*i<2&b>0&b<=x?b+"":                         // If it's the second column of a box, the second row, 
                                                        // and less than the max day, append the day
           c<2&e!=null?e.split("-")[i-2]:               // If it's any other row and there is an event then split and append correct line
           " ",                                         // Else just append a space
        j+=e.length())                                  // Increase the row character count by the length to append
          c=j%10;                                       // Set the column of box (this is the only thing in the loop so happens first)

  return r;                                             // return the calendar string!
}

&&(i=1)<2?7:0?7*(i=1):03 বাইট সংরক্ষণ করতে পারে ।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন ভাল লাগল ধন্যবাদ!
লুক স্টিভেন্স

এর b>x|i++<6?0:7*(i=1)পরিবর্তে b<=x&++i>6?7*(i=1):0এবং c*i>1|b<1|b>x?c<2&e!=null?e.split("-")[i-2]:" ":b+""পরিবর্তেc*i<2&b>0&b<=x?b+"":c<2&e!=null?e.split("-")[i-2]:" "
সিলিংক্যাট

1

লাল , 674 651 বাইট

func[a][z: func[a b c][to-tuple reduce[a b c]]c: a/1 c/4: 1 d: c + 31
d/4: 1 d: d - 1 e: 1 + c/weekday % 7 if e = 0[e: 7]foreach
t[:Su:Mo:Tu:We:Th:Fr:Sa][prin pad pad/left t 6 10]h:
pad/with"-"71 #"-"print["^/"h]m: copy[]foreach[i b]a[put m z r:(t: e - 1)+
i/4 / 7 + 1 n: i/4 % 7 + t 2 b/1 t: split b/2" "l: 0
until[if t/2[if 10 >((length? t/1)+ length? t/2)[t/1:
rejoin reduce[t/1" "take next t]]]put m z r n 2 + l: l + 1 take t
tail? t]i: 0]n: k: 0 repeat v(g: e - 1 + d/4)/ 7 + sign? g % 7[repeat
r 5[repeat i 7[t: copy"|"if i = e[k: 1]if all[k = 1 r = 1 n < d/4][append t
n: n + 1]if s: select m z v i r[append t s]prin pad t 10]print"|"]print h]]

এটি অনলাইন চেষ্টা করুন!

আরও পঠনযোগ্য:

func [ a ] [
    c: d: a/1
    c/4: d/4: 1
    d: d + 31
    d/4: 1
    d: d - 1
    e: 1 + c/weekday % 7
    if e = 0[e: 7]
    g: e - 1 + d/4
    w: g / 7 + sign? g % 7
    foreach t [ :Su :Mo :Tu :We :Th :Fr :Sa ] [
        prin pad pad/left t 6 10
    ]
    h: pad/with "-" 71 #"-"
    print[ "^/" h ]
    m: copy #()
    foreach[ i b ] a [
        n: i/4 % 7 + t: e - 1
        r: t + i/4 / 7 + 1
        put m to-tuple reduce[ r n 2 ] b/1
        t: split b/2" "
        i: 0
        until [
            if t/2 [ if 9 >= ((length? t/1) + (length? t/2)) [
                t/1: rejoin reduce[t/1" "take next t]
                ]
            ]
            put m to-tuple reduce [ r n 2 + i: i + 1 ] take t
            tail? t
        ]

    ]
    n: 0
    g: off
    repeat v w [
        repeat r 5 [
           repeat i 7 [
                t: copy "|"
                if i = e[ g: on ]
                if all [ g r = 1 n < d/4 ] [ append t n: n + 1 ]
                if s: select m to-tuple reduce [ v i r ]
                    [ append t s ]
                prin pad t 10
            ]
            print "|"
        ]
        print h
    ]
]

if e = 0[e: 7]সরানো যাবে, তাই না? আপনি ব্যবহার করুন e: 1 + c/weekday % 7, তাই eসর্বদা সীমার মধ্যে থাকবে [1, 7]
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন: সম্ভবত আমি কিছু মিস করছি, তবে আমি মনে করি এটি আমার দরকার ছিল। রেড ইনডেক্সিং 1-ভিত্তিক। দয়া করে এটি একবার দেখুন: >> গ: এখন / সময় / তারিখ == 12-অক্টোবর-2018 >> সি: সি + 1 == 13-অক্টোবর-2018 >> 1 + সি / সপ্তাহের দিন% 7 == 0; >> 1 + 2 * 3
রেডে

1
সম্পাদনা: আহ, এনভিএম .. 1 + প্রথমটি ঘটে .. ঠিক আছে, আমি আমার ত্রুটিটি দেখছি। আমি অভ্যস্ত %এবং /অপারেটর অগ্রাধিকার আছে +
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন হ্যাঁ, ঠিক আছে। রেডে কোনও অপারেটর নজির নেই, তার পরিবর্তে একটি ব্যবহার করতে হবে
গ্যালেন ইভানভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.