কাজ থেকে একজন সহকর্মীর জন্য একটি গ্রিটিং বট


14

আমার কাজের সহকর্মী আছেন যা প্রতি মঙ্গলবার ও বৃহস্পতিবার বাড়ি থেকে কাজ করে। সকাল আটটার দিকে তিনি নীচের পাঠ্য সহ একটি বার্তা আমাদের পাঠান:

হ্যালো আজ আমি বাড়ি থেকে কাজ করছি

প্রতিদিন তিনি বাড়িতে থাকাকালীন তাকে এই কাজের বোঝা থেকে মুক্তি দিতে আমরা তার জন্য এই কাজটি স্বয়ংক্রিয় করতে চাই।

চ্যালেঞ্জ

কোডের একটি টুকরো হিসাবে যতটা সম্ভব বাইট লিখুন:

  • বর্তমান সময়টি গ্রহণ করে: আপনার কোডটি চলতি বছর, মাস (1-12), মাসের দিন (1-3-1), ঘন্টা (0-23) এবং মিনিট (0-59) এবং সপ্তাহের দিনের জন্য মানগুলি পেতে পারে (এই সংখ্যাটি 0 বা 1 থেকে শুরু হয় এবং আপনি যদি 0/1 অর্থ রবিবার, সোমবার বা অন্য কোনও দিন থেকে শুরু করতে পারেন তবে আপনি চয়ন করতে পারেন); অন্যথায় আপনি যেমন একটি কাঠামো পেতে পারে Date, DateTime, Calendarবা অন্য কোন সময় সংশ্লিষ্ট গঠন, আপনার ভাষা এটা করতে পারবেন পারেন। আপনি চাইলে তারিখের সাথে একটি স্ট্রিং yyyyMMddHHmm, বা তারিখ এবং সময়ের জন্য দুটি পৃথক স্ট্রিং এবং তারপরে সপ্তাহের দিনের সাথে একটি পূর্ণসংখ্যা পেতে পারেন। মুক্ত মনে.
  • দুটি ধারাবাহিক সত্য এবং মিথ্যা মানগুলি প্রদান করে, এটি নির্দেশ করে যে বার্তাটি অবশ্যই কাজের আড্ডায় প্রেরণ করা উচিত কি না।

বিধি

  • এই কোডের অংশটি পর্যায়ক্রমে ডাকা হবে বলে ধরে নেওয়া হয়। সঠিক পর্যায়ক্রমতা যাইহোক, অপ্রাসঙ্গিক।
  • সত্যের মানটি অবশ্যই ফেরত দিতে হবে যদি সপ্তাহের দিন মঙ্গলবার বা বৃহস্পতিবার হয় এবং সময়টি 10 ​​মিনিটের ত্রুটির ব্যবধানের সাথে সকাল 8:00 হয় (7:50 থেকে 8:10 পর্যন্ত অন্তর্ভুক্ত))
  • নির্দিষ্ট দিনের জন্য those ঘন্টাগুলির মধ্যে কোডটি প্রথমবার চালু করা হলেই সত্যবাদী মানটি প্রেরণ করতে হবে। আমরা বটটি একই বার্তাটি একাধিকবার প্রেরণ করতে চাই না। আপনি এই বিধিনিষেধটি পরিচালনা করার উপায়টি সম্পূর্ণরূপে আপনার উপর নির্ভর করবে।
  • আপনার কোডটি একটি স্বতন্ত্র প্রোগ্রাম হতে পারে যা বারবার সম্পাদিত হতে পারে বা এটি কোনও বড় কোডের অংশ হতে পারে যা সর্বদা চলমান। তোমার পছন্দ.
  • আপনি ধরে নিতে পারেন যে কোডটি কার্যকর করার মধ্যে কোনও পুনরায় বুট হবে না।
  • আপনি ধরে নিতে পারেন যে তারিখটি সর্বদা সঠিক হবে।
  • আপনার কোড সম্পর্কে এবং বিশেষত অধ্যবসায় অর্জনের জন্য ব্যবহৃত পদ্ধতি সম্পর্কে ব্যাখ্যাগুলি উত্সাহিত করা হয়।

উদাহরণ

(Week starts on Monday: 1, the following invokations will be made in succession)
2018,08,27,08,00,1 = falsey (not Tuesday or Thursday)
2018,08,28,07,45,2 = falsey (out of hours)
2018,08,28,07,55,2 = truthy (first time invoked this day at the proper hours)
2018,08,28,08,05,2 = falsey (second time invoked this day at the proper hours)
2018,08,28,08,15,2 = falsey (out of hours)
2018,08,29,08,00,3 = falsey (not Tuesday or Thursday)
2018,08,29,18,00,3 = falsey (not Tuesday or Thursday)
2018,08,30,07,49,4 = falsey (out of hours)
2018,08,30,07,50,4 = truthy (first time invoked this day at the proper hours)
2018,08,30,07,50,4 = falsey (second time invoked this day at the proper hours)
2018,08,30,08,10,4 = falsey (third time invoked this day at the proper hours)
2018,08,30,08,11,4 = falsey (out of hours)
2018,09,04,08,10,2 = truthy (first time invoked this day at the proper hours)

এটি , তাই প্রতিটি ভাষার পক্ষে সংক্ষিপ্ততম কোডটি জয় পেতে পারে!


এটি স্যান্ডবক্স থেকে আসে ।
চার্লি

ইনপুট ফর্ম্যাটে কোনও বাধা আছে? আমি কি একক প্যারামিটারের মতো YYYYmmddসময় এবং সময়টিও নিতে পারি HHss?
লুইস ফিলিপ দে জেসুস মুনোজ

1
@ লুইসেলিপডিজেসুস মুনোজ হ্যাঁ, আপনি যদি চান তবে আপনি সেই ফর্ম্যাটে তারিখ এবং সময় পেতে পারেন। বিষয়টি পরিষ্কার করার জন্য আমি প্রশ্নটি আপডেট করেছি।
চার্লি 14

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

2
সুতরাং, আপনি প্রতিদিনের 2/7 তম দিনে একবার ব্যবহার করার জন্য নিয়মিত কোনও স্ক্রিপ্টটি পোলিং করছেন? যদি আপনি আপনার সমস্ত কাজ যেমন
মাস্ট

উত্তর:


15

জাভাস্ক্রিপ্ট (ES6), 43 বাইট

f=(D,t,d)=>5>>d&t>749&t<811&&!f[D]*(f[D]=1)

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

ইনপুট

  • yyyymmddবিন্যাসে স্ট্রিং হিসাবে তারিখ
  • hhmmবিন্যাসে একটি স্ট্রিং হিসাবে সময়
  • 0-সূচকযুক্ত পূর্ণসংখ্যার হিসাবে সপ্তাহের দিন 0= মঙ্গলবার, 1= বুধবার, ..., 6= সোমবার

আউটপুট

রিটার্ন 0বা 1

মন্তব্য

f = (            // named function, as the underlying object will be used as storage
  D,             // D = date (string)
  t,             // t = time (string)
  d              // d = day of week (integer)
) =>             //
  5              // 5 is 0000101 in binary, where 1's are set for Tuesday and Thursday
  >> d &         // test the relevant bit for the requested day of week
  t > 749 &      // test whether we are in the correct time slot
  t < 811        //
  && !f[D] *     // make sure that this date was not already invoked at a correct time
  (f[D] = 1)     // and store it in the underlying object of f()

7
জাভাস্ক্রিপ্ট (এবং এটিতে আপনার আয়ত্ত) সর্বদা আমাকে বিস্মিত করবে।
চার্লি

1
ES6 এর সাথে গল্ফ করা মজাদার :) 2 য় ইনপুট ফর্ম্যাটটি কি বৈধ?
আর্নৌল্ড

হ্যাঁ, আমি ইতিমধ্যে প্রশ্নের লেখায় তা উল্লেখ করেছি।
চার্লি


5

এপিএল (ডায়ালগ ইউনিকোড) , 61 53 50 48 37 36 বাইট এসবিসিএস

নামবিহীন ইনফিক্স ল্যাম্বদা। কল করা YYYYMMDD f hhmmএবং তারপরে সপ্তাহের দিন নম্বরটির জন্য অনুরোধ জানানো হয়; 2 এবং 4 মঙ্গলবার এবং বৃহস্পতিবার। Dতারিখগুলি মনে রাখার জন্য বিশ্বব্যাপী পুনরায় সংজ্ঞা দেয় ।

D←⍬
{≢D,←⍺/⍨(⎕∊2 4)∧(⍺∊D)<30≥|780-⍵}

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

D←⍬Dএকটি খালি সেট হতে  সূচনা

{... } নামবিহীন ল্যাম্বদা; হয় YYYYMMDD, হয় hhmm
780-⍵ 780 এর মধ্যে পার্থক্য (0750 এবং 0810 এর মানে) এবং সময়
| যে পরম মান
30≥ 30 বেশী বা যে সমান?
()< এবং এটি সত্য নয় যে:
  ⍺∊D তারিখটি একটি সদস্য D
(... )∧ এবং এটি সত্য যে:
  ⎕∊2 4 সপ্তাহের দিনের জন্য অনুরোধ করা সেটটির সদস্য {2,4}
⍺/⍨ তারিখটি সংকোচনের জন্য এটি ব্যবহার করুন (অর্থাত্ মিথ্যা হলে gives gives দেয়, {তারিখ} যদি সত্য হয়)  এটিকে
D,← সংযোজন করুন D
এবং তার তালিকাকে ফিরিয়ে দিন (অর্থাত্ 0 বা 1, যা এপিএলের মিথ্যা এবং সত্য)


4

এক্সেল সূত্র, 85 বাইট

=IF(AND(MID(WEEKDAY(A1)/0,684;3;1)="3";A1-INT(A1)>=0,32638;A1-INT(A1)<=0,34028);TRUE)

কোনও প্যারামিটার সহ সপ্তাহের দিন 1 (রবিবার) থেকে 7 (শনিবার) পর্যন্ত থাকে। আমরা যে দিনগুলি চাইছি সেগুলি হল 3 এবং 5, সমস্ত সংখ্যাকে 1 থেকে 7 থেকে 0,648 এর জন্য ভাগ করে কেবল 3 এবং 5 ফলাফল দেয় যেখানে প্রথম দশমিক 3 হয় (র্যান্ড () দিয়ে বিভাজন করে এটি পেয়েছে)

সেল এ 1 এ ইনপুট প্রবেশ করানো হয়েছে


আপনি ব্যবহার করতে পারে MID(WEEKDAY(A1)/0,29;5;1)="4"এবং ;1;)পরিবর্তে;TRUE)
adebunk

4

পরিষ্কার , 343 326 303 279 216 বাইট

ক্লিন এটির জন্য এতটা খারাপ-উপযুক্ত এটি একটি চেইনসো দিয়ে বেড়া আঁকার চেষ্টা করার মতো।

import StdEnv,System.Environment,System._Unsafe
?(y,x,z)=y*480+x*40+z
$y h m d=(d-3)^2==1&&((h-8)*60+m)^2<121&&appUnsafe(setEnvironmentVariable"l"(fromInt(?y)))(maybe 0toInt(accUnsafe(getEnvironmentVariable"l")))< ?y

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

গল্ফিং তারপর ব্যাখ্যা।


1
+1 কেবল একটি চেইনসো রেফারেন্স সহ বেড়া আঁকার জন্য! : ডি
এমা - পেরেপটুয়াল

4

আর , 114 106 বাইট

function(D,y=D:"%D",u=D$h==7&D$mi>49|D$h==8&D$mi<11&D$w%in%2^4&!y%in%L,`:`=format,`^`=c){L<<-L^y[u];u}
L=F

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

অধ্যবসায়:

তারিখটির বিপরীতে চেক করা হয় L, তারিখগুলির তালিকা যেখানে কোডটি সত্য করে দেয়। কোডটি সত্য ফেরত দিলে আজকের তারিখটি এই তালিকায় যুক্ত হবে। অন্যথায় তালিকাটি পরিবর্তন করা হয় না।

@ জিউসেপ্পকে ধন্যবাদ 6 বাইট সংরক্ষিত!

কোডটি আসলে কাজ করেছে এবং @ ডিগএমএলকে ধন্যবাদ 2 বাইট সংরক্ষণ করেছে!


এই পদ্ধতিটি প্যারামিটার হিসাবে গ্রহণ করার পরিবর্তে বর্তমান সময় নেয়, তাই না?
চার্লি

@ চার্লির দ্বিতীয় দেখায় চ্যালেঞ্জটি আরও মনোযোগ সহকারে পড়া উচিত ছিল ... আমার জীবনকে আরও সহজ করে দিত! আমি আপডেট করব।
জেসি

^এর চেয়ে উচ্চতর প্রাধান্য রয়েছে %any%তবে *এর চেয়ে কম অগ্রাধিকার রয়েছে %any%, সুতরাং ^আপনি ব্যবহার করে আপনি কিছু প্রথম বন্ধনী থেকে মুক্তি পেতে পারেন এবং আমি আরও কিছুটা নিচে নেমেছি! খুব নিশ্চিত যে এটি 108 বাইটের
জিউসেপ

1
এর মজাদার জন্য আপনি এর :পরিবর্তেও ব্যবহার করতে পারেন ^এবং তাই আপনার কোডটিতে এটি মিলিয়ন :ছিল has
জিউসেপে

@ জিউসেপ্পে এটি :এখন এক টন আছে !
জেসি

3

সি (জিসিসি) ,  78   50  49 বাইট

D;f(d,w,t){w=d-D&&w<4&&w%2&&t>749&&t<811&&(D=d);}

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

প্রত্যাশিত ইনপুটগুলি হ'ল:

  • d: একক সংখ্যা হিসাবে তারিখ yyyymmdd
  • w: সপ্তাহের দিন, সোমবার (0) দিয়ে শুরু হবে
  • t: সময়, একক সংখ্যা হিসাবে hhmm

ব্যাখ্যা

D;                                      // the date we last said hello.
f(d,                                    // date
    w,                                  // day of the week
      t)                                // time
{
  w=                                    // replaces return
    d-D                                 // if we did not say hello today
       &&w<4&&w%2                       // and we are Tuesday(1) or Thursday(3)
                 &&t>749&&t<811         // and time is between 7:50 and 8:10, inclusive
                               &&(D=d); // then we say hello (evaluated to true) and update D
}

সম্পাদনাগুলি

  • অ্যাডমকে ধন্যবাদ 28 টি বাইট সংরক্ষণ করা হয়েছে
  • আরও 1 টি বাইট সংরক্ষণ করা হয়েছে, যেহেতু abs()আসলে নতুন সংস্করণে সহায়তা করছে না helping

1
কেন YYYYMMDDএবং hhmmএকক সংখ্যা হিসাবে না ?
Ad:5m

@ আদম প্রকৃতপক্ষে ... আমি চেষ্টা করব যে, যখন আমি কিছু সময় আছে
Annyo

সুপারিশ w<4&w%2&t>749&t<811পরিবর্তেw<4&&w%2&&t>749&&t<811
ceilingcat

2

ব্যাচ, 109 বাইট

@if %3 neq 2 if %3 neq 4 exit/b1
@if %2 geq 07:50 if %2 leq 08:10 if .%1 neq .%l% set l=%1&exit/b0
@exit/b1

ফর্ম date time dowযেমন ইনপুট লাগে 2018-09-04 08:10 2এবং প্রস্থান কোড মাধ্যমে আউটপুট। ব্যাখ্যা: পরিবেশ পরিবর্তনশীল l(বা অন্য কোনও একক চিঠি কাজ করবে) পরীক্ষায় উত্তীর্ণ শেষ সফল তারিখ সংরক্ষণ করতে ব্যবহৃত হয়। (তারিখের ফর্ম্যাটটি যতক্ষণ না এটি সামঞ্জস্যপূর্ণ এবং ফাঁকা জায়গা থাকে না ততক্ষণ তা বিবেচনা করে না))



1

সি # , 121 বাইট

int[] d=new int[]{2,4};
double s=>Now.TimeOfDay.TotalSeconds;
bool h=>d.Contains((int)Now.DayOfWeek)&&s>=470&&s<=490;

তিনটিই একই লাইনে স্থানান্তর করা আকারকে 117বাইটে হ্রাস করে । hসম্পত্তি হিসাবে ব্যবহৃত হয়, বার্তা প্রেরণের আগে মানটি পড়ুন:

if (h) SendMessage();

1

এফ #, 119 বাইট

let f w d h m l = if not(l|>Seq.contains d)&&[3;5]|>Seq.contains w&&(h=7&&m>49||h=8&&m<11)then(l@[d],true)else(l,false)

let f w d h m l =

fপরামিতি w(সপ্তাহের দিন) d(তারিখ) h(ঘন্টা) m(মিনিট) l(এটি চলমান তারিখের তালিকা ) দিয়ে ডাকা ফাংশন ঘোষণা করুন

if not(l|>Seq.contains d) তারিখগুলির তালিকায় যদি পাসের তারিখ না থাকে

&&[3;5]|>Seq.contains w এবং দিনটি মঙ্গলবার (3) বা বুধবার (5)

&&(h=7&&m>49||h=8&&m<11) এবং সময়টি (একচেটিয়া) 7:49 এবং 8:11 এর মধ্যে রয়েছে

then(l@[d],true) তারপরে বর্তমান সংযুক্ত তারিখের সাথে তারিখের তালিকা সম্বলিত একটি টুপল ফেরত পাঠান true

else(l,false) অন্যথায় আজ এবং মিথ্যা ছাড়া তারিখগুলির তালিকা সমেত একটি টুপল ফেরত দিন


0

95 87 বাইটে বাশ করুন

[ $(ps -ef|grep $0|wc -l) -gt 3 -o $2 -lt 750 -o $2 -gt 810 ]||((10>>$3&1))&&sleep 20m

সম্পাদনা করুন: অ্যানিওর কাছ থেকে একটি ধারণা চুরি করে 8 বাইট সংরক্ষণ করেছেন

সোমবারের জন্য 0 থেকে শুরু করে, ইয়েইএমএমডিডি এইচএইচএমএম ডি এর সাথে কল করুন।

আমি লাইন কাউন্ট চেকটি কেন তিনটিতে সেট করেছি তা পুরোপুরি নিশ্চিত নই, মনে হয় এটি দুটি হওয়া উচিত, তবে দুটি কাজ করতে ব্যর্থ হয় এবং তিনটি কাজ করে বলে মনে হয়।

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


আপনি যদি তারিখটি ব্যবহার না করেন, আপনি কীভাবে চেক করবেন যে আপনি একই দিনের জন্য দুবার বার্তা পাঠিয়েছেন না?
চার্লি

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