मेरा ब्लॉक शेड्यूल प्रिंट करें


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]

आपका कार्य

यह सब घूमना मुश्किल है, इसलिए आपको अपना कार्यक्रम प्रिंट करने के लिए एक कार्यक्रम लिखना होगा, जिस दिन यह इनपुट के रूप में होगा। आपके कोड को Homeroom और Lunch को सही स्थानों पर रखना है। इनपुट के लिए आपके कोड का सटीक आउटपुट यहां है 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?
ज़ैक गेट्स

@ZachGates * सप्ताह * में केवल 4 दिन। ब्लॉक शेड्यूल वास्तविक स्कूल सप्ताह के साथ सिंक से बाहर हो जाएगा।
माल्टसेन

"डे 0" का उपयोग कब किया जाता है? हम कैसे जानते हैं कि हम किस सप्ताह से चुन रहे हैं, और अब तक कितने "दिन 0" हुए हैं?
जैच गेट्स

@ZachGates अप्रासंगिक नहीं है? आपको बस एक इनपुट के लिए एक आउटपुट देना होगा। केवल 5 अलग-अलग आउटपुट हैं।
mınxomaτ

2
@ZachGates 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

यह सबसे बड़ा स्तंभ वास्तव में बहुत अच्छा लग रहा है, है ना?

...

... मैं कौन मज़ाक कर रहा हूँ, मैं इसके बजाय PHP में कार्यक्रम करूँगा।

"पठनीय" संस्करण:

}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। (आप शायद ही स्नोमैन कोड देखें जो मेरे द्वारा नहीं लिखा गया है, लेकिन यह बिंदु के अलावा है।)

    Uninitiated के लिए, स्नोमैन के पास ऑपरेटरों को कॉल करने के दो तरीके हैं। "उपभोग करें" मोड, और "गैर-खपत" मोड। "उपभोग करें" मोड ऑपरेटर को अनुरोध किए गए चर के साथ बुलाएगा और फिर चर को छोड़ देगा। गैर-खपत मोड ऑपरेटर को कॉल करेगा और अभी भी चर को बरकरार रखेगा।

    जो आम तौर पर आप ae(सरणी-प्रत्येक) के साथ नहीं चाहते हैं , क्योंकि जिस ब्लॉक को आप प्रत्येक तत्व पर बुला रहे हैं, वह वहीं रहेगा और आठ तरह के कीमती एक का उपयोग करके अपने रास्ते में मिलेगा।

    बहरहाल, यह है, जिसमें एक दुर्लभ स्थिति है ae है (अधिक विवरण के लिए कोड में टिप्पणियां देखें) वास्तव में हम क्या चाहते हैं।

  • मैं वास्तव में, वास्तव में यह सोचना शुरू कर रहा हूं कि स्नोमैन को केवल "उपभोग" और "नहीं-नहीं-उपभोग" के अलावा दो से अधिक मोड की आवश्यकता है। उदाहरण के लिए, aa(मूल रूप से सरणी अनुक्रमण) के साथ, आपको इसे कॉल करने के केवल दो तरीके मिलते हैं:

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

    (स्नोमैन एक स्टैक / सरणी संरचना का उपयोग नहीं करता है, लेकिन इसका उपयोग यहां स्पष्टता के लिए किया जा रहा है।)

    यह बहुत आम है कि आप चाहते हैं ["foo" "f"](यानी सूचकांक चर का उपभोग करें, लेकिन मूल एक नहीं)। 0यदि आप "do-not-उपभोग" मोड का उपयोग करते हैं तो यह उस कष्टप्रद से छुटकारा पाने के लिए एक सुपर जटिल प्रक्रिया है।

    इसी तरह की बात तब होती है जब आप "do-not-उपभोग" मोड में "array-प्रत्येक" कहते हैं, जैसा कि यहां किया गया है। सरणी और ब्लॉक के चारों ओर छड़ी, यहां तक कि कहा ब्लॉक के निष्पादन के दौरान । जो है ... वास्तव में, वास्तव में अजीब है।

    फिर, स्नोमैन का डिज़ाइन लक्ष्य जितना संभव हो उतना भ्रामक होना है, इसलिए मुझे यकीन नहीं है कि यह एक समस्या है।



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)

आप लूप के लिए एक"\n".join
माल्टीसेन

यह पायथन 3 में बाइट्स की समान मात्रा है, लेकिन यह पायथन 2 में मदद करेगा। @Maltysen हालांकि मैं इसे जोड़ूंगा। : P
Zach गेट्स

0

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

"Homeroom"j"Lunch
"c2jb+L"Period "+J?QP.<S4tQS4+L4J
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.