আমার ব্লক সিডিউল মুদ্রণ করুন


11

আমার উচ্চ বিদ্যালয়, এবং আরও অনেকে একটি ঘূর্ণন ব্লক শিডিয়ুল নামে এক ধরণের শিডিউল প্রয়োগ করে। লোকদের জন্য এটি 8 টি ক্লাস করার একটি উপায়, তবে বিদ্যালয়ের দিনে 6 পিরিয়ড থাকে।

একটি ব্লক শিডিয়ুলে চার দিন রয়েছে যা বারবার পুনরাবৃত্তি করে এবং সপ্তাহের আসল দিনগুলির সাথে কিছুই করার থাকে না। প্রত্যেককে একটি নম্বর দেওয়া হয় [1-4]

সময়সূচির কাজ করে আপনি সব আপনার সকাল ক্লাস, সময়সীমার তালিকা 1-4: [1, 2, 3, 4]। এই প্রথম দিনের জন্য আপনার সময়সূচি, বা ডে 1. দিন বাকি শুধু তালিকা ঘুরান হল: [2, 3, 4, 1], [3, 4, 1, 2], [4, 1, 2, 3]

যাইহোক, সকালে শেষ সময়টি "বাদ পড়ে" এবং আপনি সেই দিন সেই শিক্ষককে দেখেন না। অত: পর দিন | [1, 2, 3], [2, 3, 4], [3, 4, 1], [4, 1, 2]

বিকেলে একই ছাড়া এটি সময়সীমার ব্যবহার 5-8পরিবর্তে: [5, 6, 7], [6, 7, 8], [7, 8, 5], [8, 5, 6]

তোমার কাজ

এই সমস্ত ঘোরানো ট্র্যাক রাখা শক্ত, সুতরাং ইনপুট হিসাবে কোন দিনটি দেওয়া হয়েছে তা নির্ধারণ করার জন্য আপনাকে আমার প্রোগ্রামটি লিখতে হবে। আপনার কোডটি সঠিক দাগগুলিতে হোমরুম এবং মধ্যাহ্নভোজন রাখতে হবে। ইনপুটগুলির জন্য আপনার কোডটির সঠিক আউটপুটটি এখানে রয়েছে 1-4:

Homeroom    Homeroom    Homeroom    Homeroom
Period 1    Period 2    Period 3    Period 4
Period 2    Period 3    Period 4    Period 1
Period 3    Period 4    Period 1    Period 2
Lunch       Lunch       Lunch       Lunch
Period 5    Period 6    Period 7    Period 8
Period 6    Period 7    Period 8    Period 5
Period 7    Period 8    Period 5    Period 6

তবে অপেক্ষা করুন - আরও একটি জিনিস!

কখনও কখনও, স্কুলের প্রথম দিনে বা অন্যান্য বিশেষ দিনে, আমার স্কুলে একটি "দিন 0" থাকে। এর অর্থ হ'ল আমি সেদিন আমার সমস্ত ক্লাস বাড়ির সাথে এবং দুপুরের খাবারের সাথে করব। আপনার কোড 0 দিনের সাথে মোকাবেলা করতে হবে। এখানে 0 দিনের জন্য আউটপুট দেওয়া হচ্ছে:

Homeroom
Period 1
Period 2
Period 3
Period 4
Lunch
Period 5
Period 6
Period 7
Period 8

এটি তাই বাইট জেতে সংক্ষিপ্ততম কোড !


সপ্তাহে 4 দিন আছে? অথবা প্রথম শুক্রবার ফিরে আসবে 1, 2, 3, 5, 6, 7?
জ্যাচ গেটস

@ জ্যাচগেটস * সপ্তাহে * মাত্র 4 দিন। প্রকৃত স্কুল সপ্তাহের সাথে ব্লকের সময়সূচি সিঙ্কের বাইরে থাকবে।
মালটিসেন

"দিন 0" গুলি কখন ব্যবহৃত হয়? আমরা কীভাবে জানতে পারি যে আমরা কোন সপ্তাহ থেকে বাছাই করছি, এবং এখন পর্যন্ত কতগুলি "দিবস" হয়েছে?
জাচ গেটস

@ জাচগেটস কি এটি অপ্রাসঙ্গিক নয়? আপনাকে কেবল একটি ইনপুটের জন্য একটি আউটপুট সরবরাহ করতে হবে। এখানে মাত্র 5 টি স্বতন্ত্র ফলাফল রয়েছে।
mınxomaτ

2
@ জ্যাচগেটস 5 টি সম্ভাব্য ইনপুট রয়েছে। তাদের সাথে মিলিত 5 আউটপুটগুলি চ্যালেঞ্জের শব্দের তালিকাভুক্ত করা হয়েছে।
ডোরকনবব

উত্তর:


3

স্নোম্যান 1.0.2 , 190 বাইট

}vg10sB*:#NdE*!1*"Homeroom
"sP0vn3nR:|%+#nA4NmO'"Period "sP'!#nAtSsP"
"sP|%;ae|"Lunch
"sP5*|ae;:"Homeroom
"sP0vn4nR*#:`"Period "sP`NiNtSsP"
"sP;aE"Lunch
"sP#:`"Period "sP`5nAtSsP"
"sP;aE;#bI

এই বামতম স্তম্ভটি দেখতে বেশ সুন্দর দেখাচ্ছে, তাই না?

...

... আমি কৌতুক করছি, আমি এর চেয়ে পিএইচপি তে প্রোগ্রাম করব।

"পাঠযোগ্য" সংস্করণ:

}vg10sB*   // store day # in permavar
// big if statement coming up, depending on whether the input (n) is 0 or not

// THE FOLLOWING BLOCK IS FOR N != 0
:

#NdE*      // decrement number (because we like 0-based indeces) and re-store
!1*        // store the number 1 in permavar ! for later
"Homeroom
"sP        // print "Homeroom"
0vn3nR     // generate [0 1 2]
// for each element in this array...
:
    |%            // shuffle around some variables so we have room
    +#nA          // add day number (in permavar +)
    4NmO          // modulo by 4
    '"Period "sP  // print "Period "
    '!#nAtSsP     // add whatever is in permavar ! and print
    "
"sP               // print a newline
    |%            // return variables to their original state
;ae
// this is a rare occasion in which we use "ae" instead of "aE"
// we use non-consume mode here because we need the block again
// since we've used a permavar ! to determine what to add to the period number,
//   we can set the permavar to 4 more than it used to be and run the same
//   exact block
|"Lunch
"sP        // print "Lunch"
5*         // store the number 5 in permavar !, as described above
|ae        // run the same block over the same array again

;

// THE FOLLOWING BLOCK IS FOR N == 0

:

// after much frustration, I have determined that the easiest way to go about
//   this is to simply code the "day 0" separately
// yes, snowman is *that* bad
"Homeroom
"sP           // you know the drill
// for each number in [0 1 2 3]
0vn4nR*#:
    `"Period "sP
    `NiNtSsP  // increment and print
    "
"sP
;aE
"Lunch
"sP           // same stuff from here
// only interesting thing is we saved the range from before with *#, so we can
//   get it back easily
#:`"Period "sP`5nAtSsP"
"sP;aE

;

#bI

চিন্তা ও সংগীত:

  • প্রথমত, আমার অবশ্যই নতুন লাইনগুলি প্রিন্ট করার একটি সুন্দর উপায় বাস্তবায়ন করতে হবে। কারণ একটি ইনডেন্টড ব্লকে নতুন লাইনের সাথে থাকা স্ট্রিংগুলি অতি কুরুচিপূর্ণ।

  • আমি আপনার সাথে আমার কৌশলটি পছন্দ করি aeসত্যই স্নোম্যান কোডে মূলধন aeব্যতীত অপারেটরটি খুব কমই দেখতে Eপান। (আপনি স্নোম্যান কোডটি খুব কমই দেখতে পান যা আমার দ্বারা রচিত হয়নি, তবে এটি বিন্দু ছাড়াও))

    অবিচ্ছিন্নতার জন্য, স্নোম্যানের অপারেটরদের কল করার দুটি উপায় রয়েছে। "গ্রাহক" মোড এবং "অ-গ্রাহক" মোড। "কনজিউম" মোড অপারেটরটিকে অনুরোধ করা ভেরিয়েবলগুলির সাথে কল করবে এবং তারপরে ভেরিয়েবলগুলি বাতিল করবে। অ-গ্রাহক মোড অপারেটরকে কল করবে এবং এখনও ভেরিয়েবল অক্ষত রাখবে।

    যা আপনি যা চান তা সাধারণত ae(অ্যারে-প্রতিটি) নয়, কারণ আপনি প্রতিটি উপাদানকে যে ব্লকটি কল করছেন সেগুলি আটকে থাকবে এবং আটটি ভেরিয়েবলের মধ্যে একটি মূল্যবান একটি ব্যবহার করে আপনার পথে চলে যাবে।

    যাইহোক, এই যা একটি বিরল অবস্থা ae হয় (আরো ব্যাখ্যার জন্য কোডে মন্তব্য দেখুন) আসলে আমরা কি চাই।

  • আমি সত্যই, সত্যিই ভাবতে শুরু করি যে স্নোম্যানকে কেবল "গ্রাহক" এবং "করণীয় নয়" ব্যতীত আরও দুটি পদ্ধতির প্রয়োজন। উদাহরণস্বরূপ, aa(মূলত অ্যারে ইনডেক্সিং) সহ, আপনি কেবল এটির কল করার দুটি উপায় পেয়েছেন:

    ["foo" 0] -> ["f"]
    ["foo" 0] -> ["foo" 0 "f"]
    

    (স্নোম্যান কোনও স্ট্যাক / অ্যারে কাঠামো ব্যবহার করে না, তবে এটি কেবল এখানে স্পষ্টতার জন্য ব্যবহার করা হচ্ছে))

    আপনি যে চান এটি খুব সাধারণ ["foo" "f"](যেমন সূচক ভেরিয়েবলটি গ্রাস করুন, তবে আসলটি নয়)। 0যদি আপনি "না-না-গ্রাহক" মোডটি ব্যবহার করেন তবে সেই বিরক্তিকর হাত থেকে মুক্তি পাওয়ার জন্য এটি একটি সুপার কনভোলটেড প্রক্রিয়া ।

    আপনি এখানে যেমন করেন, তেমনই ঘটে যখন আপনি "অ্যারে-প্রত্যেককে" "না-ব্যবহার করুন" মোডে কল করবেন call অ্যারে এবং ব্লকটি প্রায় কাছাকাছি থাকে, এমনকি ব্লকটি কার্যকর করার সময় । যা আসলে ... সত্যিই অদ্ভুত।

    তারপরে আবারও, স্নোম্যানের ডিজাইনের লক্ষ্যটি যতটা সম্ভব বিভ্রান্ত হওয়া উচিত, তাই আমি নিশ্চিত না যে এটি আদৌ কোনও সমস্যা কিনা।



1

পাইথন 3, 193 192 182 168 165 বাইট

u=int(input())
print('Homeroom')
r=['Period '+i for i in("123567234678341785412856"[(u-1)*6:u*6]if u else"12345678")]
r.insert(len(r)//2,'Lunch')
for i in r:print(i)

শুধু একটি দ্রুত সমাধান।

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

u=int(input())
print'Homeroom'
r=['Period '+i for i in("123567234678341785412856"[(u-1)*6:6*u]if u else"12345678")]
r.insert(len(r)//2,'Lunch')
print'\n'.join(r)


পাইথন 3 এ এটি একই পরিমাণ বাইট, তবে এটি পাইথন 2-এ সহায়তা করবে। @ মাল্টেসেন যদিও আমি এটি যুক্ত করব। : পি
জ্যাচ গেটস

0

পাইথ, 51 বাইট

"Homeroom"j"Lunch
"c2jb+L"Period "+J?QP.<S4tQS4+L4J
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.