সম্ভাব্য অনুপস্থিতির জন্য অ্যাকাউন্টিং, ক্রাইসেন্টগুলি কেনার পালা তা সন্ধান করুন


13

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

সীমাবদ্ধতা, অনুমান এবং উদ্দেশ্য:

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

এটি একটি বাস্তব বিশ্বের সমস্যার একটি মডেল, সুতরাং আপনি যদি ধারণা করেন যে তারা দৃশ্যের আরও ভাল মডেল করেন তবে অনুমানগুলি চ্যালেঞ্জ বা সংশোধন করতে পারেন are


উত্স 1: ফ্লোরিয়ান মার্জাইন কারা ক্রাইসেন্টগুলি কিনতে যাচ্ছে তা সন্ধান করুন।
আদিপুস্তক 2: গিলস দ্বারা ক্রোয়েসেন্টগুলি কারা কিনতে যাচ্ছে তা সন্ধান করুন
এই প্রশ্নটি গিলসের সমান সংস্করণ, এবং বিভিন্ন সম্প্রদায় কীভাবে প্রোগ্রামিং চ্যালেঞ্জকে মোকাবেলা করে তা দেখার জন্য প্রোগ্রামারগুলিতে পুনরায় পোস্ট করা হয়েছে।


2
পোস্ট নোটিশ যুক্ত করা হয়েছে, আমি প্রয়োজনে রক্ষা করব তবে আমি যতটা পারব ততটুকু খোলা রাখতে চাই। এই প্রশ্নটি যে কোনওভাবেই অসুবিধে হওয়া সম্পর্কে, এটি একটি পরীক্ষা। এটি উন্মুক্ত থাকবে। বিজ্ঞানের জন্য!
ওয়ার্ল্ড ইঞ্জিনিয়ার

4
কোড গল্ফ জন্য আরও উপযুক্ত?
ওজ

3
কে পাত্তা দেয়? কোনও স্ব-সম্মানজনক দলের ক্রোয়েসেন্টস থাকবে না। এখন, ডোনটস , অন্যদিকে, এটি একটি আকর্ষণীয় প্রশ্ন।
রস প্যাটারসন 21

3
এটি ডিএ ফর্ম 6 (হ্যাক, এটি 1974 সাল থেকে সেনাবাহিনীর হয়ে কাজ করেছে!) এর জন্য উপযুক্ত ব্যবহারের মতো বলে মনে হচ্ছে case ব্যবহারের জন্য এআর 220-45 দেখুন। এটি একটি অ্যালগরিদমে অনুবাদ করার জন্য তুলনামূলকভাবে সহজ হওয়া উচিত।
আদম বালসাম

2
(@ অ্যাডামবালসাম এ ফর্মটি আর্মপাবস.আরমি.মিল / অ্যাপস / পিডিএফ / এ 6।পিডিএফ এবং ব্যবহারের জন্য apd.army.mil/pdffiles/r220_45.pdf ... এবং দয়া করে আমার প্রাক্তন নিয়োগকর্তাকে এটি প্রস্তাব করবেন না, তারা পর্যাপ্ত নীতিমালা এবং পদ্ধতি যেমন রয়েছে তেমন)

উত্তর:


26

আমি একটি স্কোরিং অ্যালগরিদম ব্যবহার করব। প্রতিটি ব্যক্তি শূন্য স্কোর দিয়ে শুরু হয়। প্রতিবার তারা ক্রাইসেন্টস এনেছে, তাদের স্কোরকে ১ দ্বারা বাড়িয়ে দেবে যারা ক্রোয়েস্যান্ট আনেনি এমন সমস্ত দলের সদস্যের স্কোর 1 / এন দ্বারা হ্রাস পেয়েছে। সুতরাং 0 এর স্কোর মানে কোনও দলের সদস্যের ক্রয়ও কম বা কম।

এলোমেলোতা ছাড়াই, যারা উপস্থিত থাকবেন তাদের তালিকার মধ্যে সর্বনিম্ন স্কোরযুক্ত ব্যক্তিকে বেছে নিন।

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

এই অ্যালগরিদমের সুবিধা হ'ল এটির historicalতিহাসিক রেকর্ড রাখার উপর কোনও নির্ভরতা নেই এবং এটি যেকোন সময় সহজেই নতুন দলের সদস্যদের যুক্ত করার অনুমতি দেয়।

ক্রোসেন্টদের উপভোগ করার জন্য উপস্থিত কেবলমাত্র স্কোরকে হ্রাস করে অনুপস্থিতি তুলনামূলকভাবে সাধারণ হওয়ার জন্য এটি রূপান্তরিত হতে পারে।


3
আমি মনে করি আপনার শেষ অনুচ্ছেদটি অপরিহার্য, অন্যথায় কেউ যদি এক মাসের জন্য ছুটিতে যায় (সম্ভবত হানিমুন) খুব বড় নেতিবাচক স্কোর এবং আরও কেনা ফিরে আসবে।
জেমস

8
এছাড়াও টুইট করতে পারে: -1 আপনি যদি অন্য কেউ নিয়ে আসা প্যাস্ট্রি খান তবে। (এন -১) যদি আপনি প্যাস্ট্রি কিনে থাকেন। এইভাবে যদি কেউ ভাগ্যবান হয় এবং কেবল 4 এর জন্য ক্রয় করে, তার পরের দিন ব্যক্তিটি দুর্ভাগ্য হয় এবং 7 টি ক্রয় করে those দুটি ক্রয় সমানভাবে করা হয় না। -1 কারণ নিজের জন্য কিনে নেওয়া প্যাস্ট্রি নিরপেক্ষ।
জেমস

@ জেমস, কোনও ভয় নেই; ওপি মার্কিন যুক্তরাষ্ট্রে রয়েছে এবং যুক্তরাষ্ট্রে কেউ এতো ছুটির কাছাকাছি কোথাও পায় না। :(
কিরেলেসা

@ জামেস হ্যাঁ, এটি একটি ভাল উন্নতি।
রোবট

7

আমি কী করব, যদি আমাকে এটি বাছাই করতে হয় তবে একটি টুপি পাওয়া যায় এবং একবার টুকরো টুকরো টুকরো করে প্রত্যেকের নাম টুপিতে রেখে দেওয়া হয়। তারপরে প্রতিদিন, আমি এলোমেলোভাবে টুপি থেকে কারও নাম আঁকতাম এবং পরের দিনেই সেই ব্যক্তি যিনি ক্রাইসেন্টদের নিয়ে আসেন। তারপরে সেই কাগজটি "ক্রিংস টেমোর্রো আনা" এর অধীনে বোর্ডে সজ্জিত হয়। বোর্ডে বর্তমানে থাকা কাগজগুলি ফেলে দেওয়া হয়।

আমার একটা বাক্সও ছিল এটি খালি শুরু হয়। প্রতিদিন, নাম আঁকার আগে, আমি বাক্সের সামগ্রীগুলি টুপিতে ফেলে দিয়েছি, তারপরে টুপিটির কাগজপত্রগুলি দিয়ে গিয়েছিলাম এবং যারা আগামীকাল অনুপস্থিত থাকবে তাদের সবাইকে সরিয়ে ফেলব। তাদের নাম বাক্সে যায়।

যদি কোনও নাম আঁকার সময় এসেছে এবং টুপিটি খালি থাকে তবে আমি আরও কিছু কাগজ ছিটিয়ে প্রত্যেকের নাম একবার যুক্ত করলাম, তারপরে আগামীকাল যে অনুপস্থিত থাকবে তাদের প্রত্যেকের নাম বাক্সে সরিয়ে ফেলব।

এই শেষ দুটি পদক্ষেপের কারণে একই নামটি একবারে একাধিকবার টুপিতে থাকা সম্ভব। আমি যে নামটি আঁকতে চাইছি তা বোর্ডে থাকা নামের মতো হলে আমি সেই কাগজটি বাক্সে সরিয়ে নিয়ে আবার আঁকতাম।

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


যারা বের হতে চলেছে তাদের টুপি দিয়ে বাছাই করা একটি বাস্তব বেদনা বলে মনে হচ্ছে।
ববসন

@ সাবসন: প্রশ্নটি স্পষ্টভাবে বলেছে যে দলের আকার তুলনামূলকভাবে কম। যদি আমি একটি বড় ডেটা সেট নিয়ে কাজ করতাম তবে আমি আরও পরিশীলিত কিছু করতাম।
ম্যাসন হুইলারের

6

অ্যালগরিদম, ক্ষুদ্রাকার। একটি ডিবি ব্যবহার করুন।

create table team_members 
(
    id integer auto_increment,
    name varchar(255),
    purchase_count integer,
    last_purchase_date datetime,
    present integer,
    prefers_donuts integer default 0,
    primary key( id)
)

কে কিনে?

select id from team_members where (present = 1) and (prefers_donuts = 0) order by purchase_count, last_purchase_date limit 1;

তারা কেনার পরে:

update team_members set purchase_count = purchase_count + 1, last_purchase_date = now() where id = ?

এবং তারপরে সেট করুন:

insert into team_members (name, prefers_donuts) values ('GrandmasterB', 1);

... কারণ আমি পুরানো স্কুল।

প্রথম ক্যোয়ারীটি টুইট করে সামান্য এলোমেলোতা যুক্ত করা খুব কঠিন হওয়া উচিত না - হতে পারে শেষ_পরিচয়ের তারিখ অনুসারে বাছাইয়ের পরিবর্তে একটি এলোমেলো () যোগ করে।


1
+1 টি। নতুন ভাড়া purchase_countনেওয়ার জন্য, আপনি কি প্রত্যেকের গড় থেকে শুরু করেন?
ড্যান পিচেলম্যান

6
হুম, খুব ভাল প্রশ্ন। সম্ভবত এটি কাজ করবে। অথবা আপনি নতুন লোকটিকে প্রতি সকালে সকালে ক্রাইসেন্টদের আনতে পারেন যতক্ষণ না সে না ধরে। তিনি সর্বোপরি নতুন লোক।
গ্র্যান্ডমাস্টারবি

4

বাস্তব সমস্যাটিতে আমাকে কিছুটা হলেও সমস্যার সমাধান করতে হয়েছিল:

remember how many times people have gotten donuts
every day:
  var candidates = everyone
  toss out people who aren't here tomorrow
  toss out people who aren't here today 
  toss out the person who got them today (unless they're the only one left)
  toss out everyone where "times they got donuts"/"times everyone has got donuts"
    is more than 1/number of people (unless that would eliminate everyone)

  pick someone at random from the candidates

যা ঘটেছিল তারা হ'ল যারা ডোনটগুলি "খুব বেশি" কিনেছেন (দুর্ভাগ্যের কারণে, অন্যরা ছুটিতে যাওয়ার সময় কাজ করছেন ইত্যাদি) পর্যাপ্ত অধিগ্রহণের পরে তাদের "ডান" শতাংশের অধীনে ফিরিয়ে না দেওয়া পর্যন্ত পুল থেকে বাদ দেওয়া হয় the কেনাকাটা।

নতুন লোক নিয়োগের জন্য এটি হ্যান্ডেল করার জন্য এটি আরও বাড়ানো দরকার যদিও ...

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


2

ইতিমধ্যে উপস্থাপিত অন্যান্য উত্তরগুলির মতো খুব ভাল নয়, তবে সমস্যাটি দেখার আরও একটি উপায়:

  1. অংশগ্রহণকারী সমস্ত কর্মচারীর একটি তালিকা তৈরি করুন
  2. তালিকাটিকে অনেক বার নকল করুন (বলুন, 1,000)
  3. তালিকা বদলান

প্রতি বিকেলে, পরবর্তী উপলব্ধ ক্রাইস্যান্ট-ব্রিংগার নির্বাচন করুন। প্রতি সকালে, ক্রাইস্যান্ট-ব্রিংগার তার নামটি তালিকার শীর্ষে ছাড়িয়ে যায়।

প্রতিদিনের প্রক্রিয়াজাতকরণ কলম এবং কাগজ সহজ।

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


আরও তথ্য (প্রতি অনুরোধ)

একটি ইচ্ছামত দীর্ঘ তালিকা সহ এই পদ্ধতির ব্যবহার করে, আপনি স্বচ্ছতার সুবিধা পাবেন।

আগামীকাল কে ক্রাইসেন্টদের নিয়ে আসবে তা কেবল আপনিই জানেন না, পরের দিনগুলিতে কে আনার সময় নির্ধারিত রয়েছে তা আপনি জানেন and অবশ্যই সময়ের বাইরে যত কম নিখুঁত দেখাবেন আপনি অনুপস্থিতি ইত্যাদির কারণে হবেন ইত্যাদি look

একটি টুপিতে কাগজের স্লিপগুলি কীভাবে ওজন করা যায় তা নির্ধারণকারী স্নেকি ডেভস তাদের ক্রাইস্যান্ট-আনার দায়িত্বগুলি এড়াতে তেমন সুযোগ পাবে না।

প্রক্রিয়াজাতিকে দণ্ডিত বলে দাবি করা নন-ডিভসরা সহজেই ডেটা পর্যালোচনা করতে পারে, ভুল উপসংহারের সাথে আসতে পারে এবং যেভাবেই হোক না কেন।


1
অবসান ? গেঙ্গিস খান এই পোস্টটির অনুমোদন দিয়েছেন।
হরিণ হান্টার

1
@ ডিয়ারহান্টার এইচআরটি "লোকেদের সমাপ্তি" সম্পর্কে যেভাবে কথা বলেছে তা আমি সর্বদা অপছন্দ করি। এটি ফায়ারিং স্কোয়াডের মনে রাখে। এর পরিবর্তে আমার "নতুন হায়ারস এবং প্রাক্তন ছাত্র ..." বলা উচিত ছিল।
ড্যান পিচেলম্যান

1

নন র্যান্ডম

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

বর্তমান অবস্থানের পরে তালিকায় নতুন ব্যক্তি প্রবেশ করান। যে ব্যক্তিরা ছাড়েন বা সমাপ্ত হন তাদের তালিকা থেকে সরানো হবে। বর্তমান অবস্থানটি প্রতিদিন 1 দ্বারা বৃদ্ধি পায়, যখন এটি শেষে পৌঁছায়, এটি আবার ফিরে যাবে।

এটি ধরে নিয়েছে যে তালিকায় পর্যাপ্ত লোকদের ন্যায্যতা প্রচারের জন্য গড় অনুপস্থিত সময়ের জন্য অ্যাকাউন্ট রয়েছে।

এলোমেলো

আমরা কেবল প্রতিদিন এলোমেলো মানুষকে বেছে নিতে পারি না কারণ স্বল্পমেয়াদী পক্ষপাত হবে, উদাহরণস্বরূপ একটি মুদ্রা 10 বার ফ্লিপ করুন এবং আপনি 8 টি এবং লেজ 2 মাথা উপরে আসতে পারেন, তাই স্বল্প সময়ের জন্য মাথা খারাপ হবে। সুতরাং, এটিকে সুষ্ঠু রাখার জন্য আমাদের বালতি লোক তৈরি করা দরকার।

বালতিটি মানুষ অতীতে ক্রসিয়েন্ট কিনেছে তার দ্বারা নির্ধারিত হয়। সুতরাং, এই ক্ষেত্রে, আমরা লোক এবং ক্রসিয়েন্ট ক্রয়ের একটি অভিধান সংরক্ষণ করব। দিন 1 প্রত্যেকের বালতি শূন্য হয়। লোকেদের ক্রোসিয়ান্ট কেনার সাথে সাথে তাদের পরবর্তী বালতিতে অর্থাত্ 1, 2 ইত্যাদি অর্পণ করা হবে The এলোমেলো অংশটি বালতিতে উপলব্ধ লোকদের পুল থেকে বেছে নিচ্ছে। প্রথমটি উপলব্ধ বালতিটি হ'ল খুব কম কেনা। বালতিতে যদি 10 জন লোক থাকে তবে 1 থেকে 10 এর মধ্যে একটি এলোমেলো সংখ্যা বেছে নিন এবং ক্রোয়েসেন্টগুলি কিনে নিন। নতুন লোককে সর্বনিম্ন বর্তমান বালতি বরাদ্দ করা হয় যাতে তারা অতিরিক্ত রাউন্ড ক্রসিয়েন্টগুলি কিনে শেষ না করে (যদিও তারা এখনই কেনার পুলেই থাকবে)। যদি সর্বনিম্ন বালতিতে কেউ উপলব্ধ না থাকে (তারা সকলেই অনুপস্থিত), তবে আপনি পরবর্তী সর্বোচ্চ বালতিতে যান। উদাহরণস্বরূপ, আসুন ' s বলে 10 জনের একটি তালিকা আছে। 8 দিনের দিন, 8 জন বালতিতে 1 এবং 2 বালতিতে রয়েছে 0 বালতিতে দু'জন লোক অনুপস্থিত। এই ক্ষেত্রে, বালতি 1 ব্যবহার করা হবে এবং এক ব্যক্তি বালতিতে শেষ হবে 2 তবে, লোকেরা সবসময় একে অপরের মধ্যে কয়েকটি ক্রসিয়েন্ট বয়েস (বালতি) এর মধ্যে থাকবে, কারণ এখন বালতি 2-তে ব্যক্তি সম্ভবত না থাকবেন কিছুক্ষণের জন্য কিনতে পুল।

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


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