মাফিয়া খেলি!


42

মাফিয়া (ওয়ে্রুলুফ নামেও পরিচিত) একটি পার্টির খেলা যা মোটামুটিভাবে খেলে:

  • খেলাটি 0. দিন শুরু হয় প্রতি দিন পরে nএকটি রাত আসে n। প্রতি রাতের পরে nএকটি দিন আসে n+1। অর্থাৎ D0, N0, D1, N1, D2, N2...
  • 0 দিনের ভোরের দিকে, একটি হোস্ট গোপনে নির্দিষ্ট ভূমিকা পালনের জন্য খেলোয়াড়দের বেছে নেয়:  
    • কিছু সংখ্যক খেলোয়াড় মাফিয়ায় পরিণত হয়। প্রতি রাতে প্রতিটি মাফিওসো প্লেয়ার বেছে নেয়। পরের দিন ভোরবেলায় সর্বাধিক মাফিওসোস দ্বারা নির্বাচিত খেলোয়াড় মারা যায়। এগুলি স্থায়ীভাবে খেলা থেকে সরানো হয় এবং তাদের ভূমিকা প্রকাশ্যে প্রকাশিত হয়। মাফিয়া-প্রান্তিককৃত।  
    • কিছু সংখ্যক খেলোয়াড় পুলিশ হয়ে যায়। প্রতি রাতে প্রতিটি পুলিশ একজন খেলোয়াড় বেছে নেয়। পরের দিন ভোরের দিকে, পুলিশ সেই খেলোয়াড়দের সারিবদ্ধকরণ সম্পর্কে সচেতন হয়। গ্রাম-প্রান্তিককৃত।  
    • কিছু সংখ্যক খেলোয়াড় চিকিৎসক হন। প্রতি রাতে, প্রতিটি ডাক্তার একজন খেলোয়াড় চয়ন করেন। এই খেলোয়াড় যদি সেই একই খেলোয়াড় হয় যা মাফিয়া হত্যা করতে বেছে নিয়েছিল, সেই রাতের জন্য মাফিয়ার ক্রিয়া বাতিল করা হবে। গ্রাম-প্রান্তিককৃত।  
    • যে সমস্ত খেলোয়াড় অন্য ভূমিকার জন্য নির্বাচিত হয়নি তারা হলেন গ্রামবাসী। গ্রামবাসীদের এমন কোনও দক্ষতা নেই যা পুরো শহরে ভাগ করে নেওয়া হয় না। গ্রাম-প্রান্তিককৃত।
  • প্রতিদিন 0 দিন বাদে পুরো শহরটি (যা সমস্ত জীবিত খেলোয়াড়) কোনও খেলোয়াড়কে ভোট দেয়। দিনের শেষে, সেই খেলোয়াড়টি খেলা থেকে সরানো হয় এবং তাদের ভূমিকা প্রকাশিত হয়। (0 দিনের দিন, প্রত্যেকে কেবল রাত্রিবাস অবধি শীতল থাকে))
  • যদি, যে কোনও মুহুর্তে, কোনও মাফিয়োসো না থাকে, সমস্ত গ্রাম-প্রান্তিক খেলোয়াড় বিজয়ী (মৃতসহ) দিয়ে খেলাটি শেষ হয়।
  • যদি কোনও মুহুর্তে, গ্রাম-সংযুক্ত খেলোয়াড়রা মাফিয়া-সংযুক্ত খেলোয়াড়দের সংখ্যার তুলনা না করে, খেলাটি মাফিয়া-সংযুক্ত সমস্ত খেলোয়াড় বিজয়ী (মৃত সহ) দ্বারা শেষ হবে।

এই চ্যালেঞ্জের জন্য, আপনার লক্ষ্যটি মাফিয়ার অন্যান্য বটগুলিকে পরাজিত করতে একটি বট লিখতে হবে!

কিভাবে একটি ওয়ার্কিং বট করতে

সমস্ত আছে আমার জন্য সরবরাহ করার জন্য একটি ফাইল বলা হয় run। ডিরেক্টরি কাঠামোর ভিতরে যেখানে এই চ্যালেঞ্জটি ঘটবে, সেখানে আপনার বট এখানে বাস করবে:

start
controller/
tmp/
players/               # You are here!
    some_bot/          # Let's pretend you're some_bot.
        to_server
        from_server
        players
        run            # This is what you give me
    mafia-game-bot/
    skynet/

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

real_bot.py

#!/bin/python2

# code goes here

run

#!/bin/bash

./real_bot.py --flags --or --whatever

একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয় হ'ল আপনার বট প্রাপ্ত সমস্ত ইনপুট ফাইলটিতে পাওয়া যাবে from_serverএবং নিয়ন্ত্রণ প্রোগ্রামটি আপনার বটের আউটপুটটি সন্ধান করবে to_server। আমি এটি এইভাবেই বেছে নিয়েছি যাতে কোনও ভাষা যে ফাইল I / O ফাইল করতে পারে তাতে অংশ নিতে সক্ষম হয়। আপনার ভাষা যদি I / O ফাইলের চেয়ে স্টিডিন এবং স্টডআউট দিয়ে কাজ করা আরও সহজ করে তোলে তবে আপনি এমন runফাইল লিখতে চাইতে পারেন :

#!/bin/bash

./real_bot.py < from_server > to_server

এটি এটি তৈরি করবে যাতে স্টিডিন from_serverফাইল থেকে আসে এবং স্টডআউট সরাসরি চলে যায় to_server

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

কীভাবে কার্যক্ষম বট তৈরি করবেন

দিন

গেমের শুরুতে, ফাইলটি খেলায় playersসমস্ত খেলোয়াড়ের একটি নতুন লাইন-সীমিত তালিকা দিয়ে পূর্ণ হবে। খেলোয়াড়রা গেমটি ছাড়ার সাথে সাথে এটি আপডেট হবে না।

0 দিনের ভোরে, সমস্ত খেলোয়াড় তাদের from_serverফাইলে এই বার্তাটি খুঁজে পাবেন :

Rise and shine! Today is day 0.
No voting will occur today.
Be warned: Tonight the mafia will strike.

আপনি যদি পুলিশ হন, লাইনটি You are the copশেষের সাথে যুক্ত করা হবে। ডাক্তার দেখেন You are the doctorYou are a member of the mafia.\nYour allies are:খেলোয়াড়দের বার্তাটি পড়া বাদ দিয়ে মাফিয়া দেখায় এবং মাফিয়া সদস্যদের একটি নতুন লাইন-বিস্মৃত তালিকা।

অন্যান্য সমস্ত দিনের ভোরে, এই বার্তাটি উপস্থিত হবে:

Dawn of day `day_number`.
Last night, `victim` was killed. They were `victim_role`.
Investigations showed that `cop_target` is `target_alignment`-aligned.
These players are still alive: `remaining_players`

dayNumberদিনের সংখ্যার সাথে প্রতিস্থাপন করা হয়। victimগত রাতের শিকারের নামে প্রতিস্থাপন করা হয়েছে এবং এর victim_roleমধ্যে একটি:

  • a villager
  • a mafioso
  • the cop
  • the doctor

cop_targetখেলোয়াড় পুলিস গত রাতে তদন্ত নাম এবং target_alignmentহয় villageবা mafia। অবশেষে, remaining_playersএই ফর্ম্যাটটিতে এখনও বেঁচে থাকা খেলোয়াড়দের একটি তালিকা:player1, player2, player3

গত রাতে কোনও কিল না থাকলে দ্বিতীয় লাইন বাদ দেওয়া হয় এবং তৃতীয় লাইনটি কেবল পুলিশকে প্রদর্শিত হয়।

উদাহরণ স্বরূপ,

Dawn of day 42.
Last night, Xyzzy was killed. They were a villager.
Investigations showed that Randy is mafia-aligned.
These players are still alive: Randy, CopBot, JohnDoe, Steve

এই বার্তাটি বাইরে চলে যাওয়ার পরে, দিনটি শুরু হয়! প্রতিটি বট সারা দিন 50 টি ক্রিয়া করতে পারে, যেখানে একটি "অ্যাকশন" কোনও খেলোয়াড়কে ভোট দিচ্ছে বা জোরে কিছু বলছে।

কোনও খেলোয়াড়ের পক্ষে ভোট দিতে, vote player_nameআপনার to_serverফাইলে লিখুন এবং সমাপ্ত করুন। কাউকে হত্যা না করার জন্য ভোট দিতে, লিখুন vote no one। আপনি যখন ভোট দিবেন, সমস্ত খেলোয়াড় (আপনাকে সহ) দেখতে পাবেন your_bot votes to kill your_selection। ভোট 0 দিন উপেক্ষা করা হয়।

সমস্ত খেলোয়াড়কে বেশ কয়েকটি প্রাক-সংজ্ঞায়িত বার্তা প্রেরণ করা যেতে পারে। প্রতিটি সম্ভাব্য বার্তার আইডি এখানে তালিকাভুক্ত করা হয়েছে:

 0: No
 1: Yes
 2: I am the cop
 3: I am the doctor
 4: I am a normal villager
 5: I trust this player: 
 6: I think this player is suspicious: 
 7: I think this player is the cop: 
 8: I think this player is the doctor: 
 9: I think this player is a normal villager: 
10: I think this player is mafia: 
11: Do you think this player is mafia? 
12: I tried to save this player: 
13: I successfully saved this player: 
14: I investigated this player and found that they were mafia-aligned: 
15: I investigated this player and found that they were village-aligned: 
16: Will you please use your power on this player tonight?

প্রথম পাঁচটি বাদে এই সমস্ত বার্তা একটি নির্দিষ্ট প্লেয়ারকে উল্লেখ করছে। এই বার্তাগুলির মধ্যে একটি বলতে, লিখুন say message_id player_name। প্রথম পাঁচটি বার্তার একটির জন্য, কেবল লিখুন say message_id। আপনি যার সাথে কথা বলছেন এমন কোনও প্লেয়ারের নাম উল্লেখ করে আপনি এই উভয়টিতে একটি thirdচ্ছিক তৃতীয় যুক্তি যুক্ত করতে পারেন (সমস্ত খেলোয়াড় এখনও এটি পড়তে পারে তবে তারা জানতে পারবে যে উদ্দেশ্যগ্রস্থ প্রাপকটি কে)।

যখন আপনার বট কোনও বার্তা বলে, তখন সমস্ত খেলোয়াড় পড়েন your_bot says "message", messageআপনি যে আইডিটি লিখেছেন তার সাথে বার্তাটি কোথায় যুক্ত। যদি বার্তায় কোনও বিষয় অন্তর্ভুক্ত থাকে তবে একটি স্পেস অক্ষর এবং বিষয়টি বার্তা শেষ হওয়ার পরে সরাসরি inোকানো হয়। যদি এতে কোনও প্রাপক অন্তর্ভুক্ত থাকে তবে তাদের নাম, একটি কোলন এবং একটি স্পেস অক্ষর বার্তার আগে অবিলম্বে sertedোকানো হয়।

দিন শেষে, সমস্ত জীবিত খেলোয়াড়কে ভোটের ফলাফলটি দেখতে একবার শেষবারের জন্য চালানো হয়। যদি কোনও খেলোয়াড়কে ভোট দেওয়া হয়, তবে এটি লিখিত আছে:

The town has killed player_name!
They were a villager

... বা a mafioso, বা the cop, বা the doctor

যদি কোনও খেলোয়াড়কে ভোট না দেওয়া হয়, তবে পরিবর্তে এটি লিখিত রয়েছে:

The town opted to lynch no one today.

যখন নিয়ামক এই বার্তা প্রেরণ করেন, তখন এটি খেলোয়াড়দের কাছ থেকে পাওয়া কোনও প্রতিক্রিয়া উপেক্ষা করে। দিন শেষ।

রাত

রাতে, গ্রামবাসী ছাড়াও প্রত্যেকে তাদের শক্তিটি ব্যবহার করতে পারে।

মাফিয়া:

আপনি পড়বেন It is night. Vote for a victim.। যখন এটি ঘটে, আপনি যে খেলোয়াড়টিকে হত্যা করতে চান তার নাম আউটপুট দিন।

পুলিশ:

আপনি পড়বেন It is night. Who would you like to investigate?। এটি ঘটলে আপনি যে প্লেয়ারটি চেক করতে চান তার নাম আউটপুট দিন।

ডাক্তারঃ

আপনি পড়বেন It is night. Who would you like to save?। এটি হয়ে গেলে, আপনি যে প্লেয়ারটি রক্ষা করতে চান তার নাম আউটপুট করুন।

এর পরে, পরের দিনটি স্বাভাবিক হিসাবে শুরু হয়।

আপনি প্রতি খেলায় একবারে নিজেকে বাঁচাতে পারেন।

সাধারণ জ্ঞাতব্য

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

স্কোরিং

প্রতিটি রাউন্ডে, 100 টি গেমগুলি চালানো হবে (নমুনার আকারটি যথেষ্ট বড় রাখতে আরও বট যোগ দেওয়ার সাথে সাথে এটি বাড়তে পারে তবে তাত্ত্বিকভাবে যা কিছুতেই প্রভাব ফেলবে না)। আমি গ্রামে গ্রামে যে কতবার খেলি তার তুলনায় প্রতিটি বট গ্রামবাসী হিসাবে কতবার জিতবে তা রেকর্ড করব এবং মাফিয়ার ক্ষেত্রে একই। একটি বট villager_ratioহয় number of games won as villager / number of games played as villager, এবং mafia_ratioএকই কিন্তু s/villager/mafia/g। একটি বট স্কোর হয় (villager_ratio - mean villager_ratio) + (mafia_ratio - mean mafia_ratio)

উদাহরণ বট

র‌্যান্ডি রোবট ভাল মাফিয়ার খেলোয়াড় নয়। র‌্যান্ডি প্রায় সব কিছু উপেক্ষা করে এলোমেলোভাবে কী বলবে, কাকে ভোট দেবে, এবং রাতের শক্তি দিয়ে কে লক্ষ্যবস্তু করবে তা বেছে নিয়ে।

run.sh:

#!/bin/bash

./randy.py < from_server > to_server

randy.py:

#!/usr/bin/env python

import random

with open('players') as f:
    p = f.read().split() + ['no one']


day = True
try:
    line = raw_input()
    if line.endswith(('?', 'victim.')):
        day = False
    if not day:
        print random.choice(p)
    else:
        if random.random() > 0.5:
            if random.random() > 0.5:
                print 'vote {}'.format(random.choice(p))
            else:
                id = random.randint(0, 17)
                print 'say {}{}'.format(id, (' ' + random.choice(p)) if id > 4 else '')
except: pass

নিয়ামক

@undermonmonorail এই চ্যালেঞ্জের জন্য একটি নিয়ন্ত্রণ প্রোগ্রাম লিখেছেন, এখানে উপলভ্য ।

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


সংকলিত ভাষা ব্যবহারের জন্য @ ব্ল্যাকসিলভার দ্বারা তৈরি একটি মোড়ক স্ক্রিপ্ট এখানে রয়েছে:

#!/bin/bash

run="./a.out"
compile="gcc bot.c"

if [ -e $run ]; then
        $run
else
        $compile
        $run
fi

এটি ভিতরে রাখুন run


এই পোস্টটি লিখেছেন @underlandmonorail (আমি কয়েকটি সম্পাদনা করেছি)।

যে কেউ এটি শেষ করতে এবং পোস্ট করতে চায় তাদের এখানে এটি দিয়েছিল ।


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

উত্তর:


3

জুলু

run

#!/usr/bin/env php
<?php
error_reporting(E_ERROR|E_WARNING|E_PARSE);

$self = basename(__DIR__);

$msgids = array(
    "No",
    "Yes",
    "I am the cop",
    "I am the doctor",
    "I am a normal villager",
    "I trust this player:",
    "I think this player is suspicious:",
    "I think this player is the cop:",
    "I think this player is the doctor:",
    "I think this player is a normal villager:",
    "I think this player is mafia:",
    "Do you think this player is mafia?",
    "I tried to save this player:",
    "I successfully saved this player:",
    "I investigated this player and found that they were mafia-aligned:",
    "I investigated this player and found that they were village-aligned:",
    "Will you please use your power on this player tonight?"
);
$msgids = array_flip($msgids);

if(!file_exists('./from_server')){
    die;
}
$in = file('from_server');
if(count($in) && strpos($in[0],'day 0.') !== false){
    $game = array(
        'day'               =>0,
        'players'           =>array(),
        'alive'             =>array(),
        'dead'              =>array(),
        'mafia'             =>array(),
        'village'           =>array(),
        'cop'               =>'',
        'doctor'            =>'',
        'votes'             =>array(),
        'messages'          =>array(),
        'currentvotes'      =>array(),
        'currentmessages'   =>array()
    );
    $playersfile = file('players');
    foreach($playersfile as $name){
        $game['players'][trim($name)] = 1;
        $game['alive'][trim($name)] = 1;
        $game['votes'][trim($name)] = array();
        $game['messages'] = array();
    }
    $allies = false;
    foreach($in as $line){
        if($allies){
            if(array_key_exists(trim($line),$game['players'])){
                $game['mafia'][trim($line)] = 1;
            }
        }
        else if(strpos($line,"You are the cop") !== false){
            $game['cop'] = $self;
            $game['village'][$self] = 1;
        }
        else if(strpos($line,"You are the doctor") !== false){
            $game['doctor'] = $self;
            $game['village'][$self] = 1;
        }
        else if(strpos($line,"member of the mafia") !== false){
            $game['mafia'][$self] = 1;
        }
        else if(strpos($line,"allies are:") !== false && $game['mafia'][$self]){
            $allies = true;
        }
    }
    if(!$game['mafia'][$self]){
        $game['village'][$self] = 1;
    }
    else{
        foreach($game['players'] as $name=>$g){
            if(!$game['mafia'][$name]){
                $game['village'][$name] = 1;
            }
        }
    }
    $out = json_encode($game);
    write('myinfo',$out);
}
else{
    $myinfo = file_get_contents('myinfo');
    $game = json_decode($myinfo,true);
    if(count($in) && strpos($in[0],"town has killed") !== false){
        $e = explode(" ",trim($in[0]));
        $dead = trim($e[4],'!');
        unset($game['alive'][$dead]);
        $game['dead'][$dead] = 1;
        $e = explode(" ",trim($in[1]));
        $allegiance = trim($e[3],".");
        $game[$allegiance][$dead] = 1;
    }
    else if(count($in) && strpos($in[0],"town opted to") !== false){
        //
    }
    else if(count($in) && strpos($in[0],"night") !== false){
        if(strpos($in[0],"victim") !== false){
            $voted = false;
            if($game['day'] > 0){
                $possible = array();
                foreach($game['alive'] as $name=>$g){
                    if(!$game['mafia'][$name]){
                        foreach($game['votes'][$name] as $for){
                            if($voted && $game['mafia'][$for]){
                                $possible[] = $name;
                            }
                        }
                    }
                }
                if(count($possible)){
                    shuffle($possible);
                    write('to_server',$possible[0]);
                    $voted = 1;
                }               
            }
            if(!$voted){
                while($rand = array_rand($game['alive'])){
                    if(!$game['mafia'][$rand]){
                        write('to_server',$rand);
                        $voted = 1;
                        break;
                    }
                }
            }
        }
        else if(strpos($in[0],"investigate") !== false){
            $possible = array();
            foreach($game['alive'] as $name=>$g){
                if(!$game['village'][$name] && !$game['mafia'][$name] && $game['doctor'] != $name){
                    $possible[] = $name;
                }
            }
            if(count($possible)){
                shuffle($possible);
                write('to_server',$possible[0]);
            }
        }
        else if(strpos($in[0],"save") !== false){
            if($game['day'] == 0){
                write('to_server',$self);
            }
            else{
                if($game['cop'] != '' && $game['alive'][$game['cop']]){
                    write('to_server',$game['cop']);
                }
                else{
                    $voted = false;
                    foreach($game['alive'] as $name=>$g){
                        if($game['village'][$name] && $name != $self){
                            write('to_server',$name);
                            $voted = true;
                            break;
                        }
                    }
                    if(!$voted){
                        while($rand = array_rand($game['alive'])){
                            if($rand != $self){
                                write('to_server',$rand);
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
    else if(count($in) && strpos($in[0],"Dawn of day") !== false){
        $e = explode(" ",trim($in[0]));
        $game['day'] = trim($e[3],".");
        foreach($in as $line){
            if(strpos($line,"was killed") !== false){
                $e = explode(" ",trim($line));
                $dead = $e[2];
                if(strpos($line,"the cop") !== false){
                    $game['cop'] = $dead;
                    $game['village'][$dead] = 1;
                }
                else if(strpos($line,"the doctor") !== false){
                    $game['doctor'] = $dead;
                    $game['village'][$dead] = 1;
                }
                else if(strpos($line,"a villager") !== false){
                    $game['village'][$dead] = 1;
                }
                else if(strpos($line,"a mafioso") !== false){
                    $game['mafia'][$dead] = 1;
                }
                unset($game['alive'][$dead]);
                $game['dead'][$dead] = 1;
            }
            else if(strpos($line,"Investigations showed") !== false){
                $e = explode(" ",trim($line));
                $name = $e[3];
                $align = trim($e[5]);
                $e = explode("-",$align);
                $game[$e[0]][$name] = 1;
            }
        }
        $game['currentvotes'] = array();
        $game['currentmessages'] = array();
        foreach($game['alive'] as $name=>$g){
            $game['currentvotes'][$name] = '';
        }
    }
    else{
        foreach($in as $line){
            if(strpos($line," has voted to lynch no one") !== false){
                $e = explode(" ",trim($line));
                $game['votes'][$e[0]][] = false;
                $game['currentvotes'][$e[0]] = false;
            }
            else if(strpos($line," has voted to ") !== false){
                $e = explode(" ",trim($line));
                $game['votes'][$e[0]][] = trim($e[5]," .");
                $game['currentvotes'][$e[0]] = trim($e[5]," .");
            }
            else if(strpos($line," says ") !== false){
                foreach($msgids as $msg=>$id){
                    $chk = preg_match('/([^\s]+) says "(([^\s]+)[:,] )?'.preg_quote($msg).'( ([^\s]+))?"/',$line,$matches);
                    if($chk){
                        //                                  said by     said to     said  said about
                        $game['messages'][]         = array($matches[1],$matches[3],$msg, $matches[5]);
                        $game['currentmessages'][]  = array($matches[1],$matches[3],$msg, $matches[5]);
                    }
                }
            }
        }
        $written = false;
        $convo = array();
        foreach($game['currentmessages'] as $msg){
            if($msg[1] == $self){
                $convo[$msg[0]] = $msg;
            }
            else if($msg[0] == $self && $msg[1] != ''){
                unset($convo[$msg[1]]);
            }
        }
        if(count($convo)){
            foreach($convo as $c){
                if($msgids[$c[2]] == 11){
                    if($game['mafia'][$msg[3]]){
                        write('to_server',"say 1 ".$msg[0]);
                        $written = true;
                        break;
                    }
                    else if($game['village'][$msg[3]]){
                        write('to_server',"say 0 ".$msg[0]);
                        $written = true;
                        break;
                    }
                    else{
                        write('to_server',"say 11 ".$msg[0]);
                        $written = true;
                        break;
                    }
                }
                else if($msgids[$c[2]] == 16){
                    write('to_server',"say 0 ".$msg[0]);
                    $written = true;
                }
                else{
                    write('to_server',"say 4 ".$msg[0]);
                    $written = true;
                }
            }
        }
        if(!$written){
            $currentvote = false;
            if(array_key_exists($self,$game['currentvotes'])){
                $currentvote = $game['currentvotes'][$self];
            }
            if($game['mafia'][$self]){
                $votes = @array_count_values($game['currentvotes']);
                if($votes && count($votes)){
                    arsort($votes);
                    foreach($votes as $name=>$number){
                        if($game['village'][$name]){
                            if($currentvote != $name){
                                write('to_server','vote '.$name);
                                $written = true;
                                break;
                            }
                        }
                    }
                }
            }
            else{
                if(count($game['mafia'])){
                    foreach($game['mafia'] as $name=>$g){
                        if($game['alive'][$name]){
                            $written = true;
                            if($currentvote != $name){
                                write('to_server','vote '.$name);
                            }
                            break;
                        }
                    }
                    if(!$written){
                        foreach($game['mafia'] as $name=>$g){
                            $non = $game['alive'];
                            unset($non[$self]);
                            if(array_key_exists($name,$game['votes'])){
                                foreach($game['votes'][$name] as $vote){
                                    if(array_key_exists($vote,$non)){
                                        unset($non[$vote]);
                                    }
                                }
                            }
                            if(count($non)){
                                $rand = array_rand($non);
                                write('to_server','vote '.$rand);
                                $written = true;
                                break;
                            }
                        }
                    }
                }
                if(!$written && $game['cop']){
                    $possible = array();
                    foreach($game['votes'][$game['cop']] as $name){
                        if($game['alive'][$name] && $name != $self){
                            $possible[] = $name;
                        }
                    }
                    if(count($possible)){
                        shuffle($possible);
                        write('to_server','vote '.$possible[0]);
                        $written = true;
                    }
                }
                if(!$written && count($game['dead'])){
                    foreach($game['dead'] as $name=>$g){
                        if($game['village'][$name]){
                            $v = array();
                            foreach($game['votes'] as $voted=>$arr){
                                if($game['alive'][$voted] && in_array($name,$arr)){
                                    $v[$voted] = 1;
                                }
                            }
                            unset($v[$self]);
                            if(count($v)){
                                $rand = array_rand($v);
                                write('to_server','vote '.$rand);
                                $written = true;
                                break;
                            }
                        }
                    }
                }
                if(!$written){
                    $votes = @array_count_values($game['currentvotes']);
                    if($votes && count($votes) && array_key_exists($self,$votes)){
                        arsort($votes);
                        foreach($votes as $name=>$number){
                            if(!$game['village'][$name]){
                                if($name != $self){
                                    write('to_server','vote '.$name);
                                    $written = true;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    $myinfo = json_encode($game);
    write('myinfo',$myinfo);
}

function write($filename,$data){
    $fh = fopen($filename,"wb+");
    if($fh){
        $bytes = fwrite($fh,$data);
        fclose($fh);
    }
}

আমি আশা করি সব কিছু নয়। আমি মাঝে মধ্যে এটি টুইট শেষ হতে পারে।

এটি কীভাবে কাজ করে v1.0

দিনের নম্বর, কে জীবিত, কে মৃত, কে মাফিয়া, গ্রাম-সংযুক্ত, ভূমিকা, বর্তমান দিনের ভোট / বার্তা এবং সামগ্রিক ভোট / বার্তা ট্র্যাক করে।

  1. রাত

    ক। মাফিয়া - যে কোনও গ্রামবাসীর পক্ষে ভোট দিন যিনি সম্ভব হলে মাফিয়ার বিরুদ্ধে (এলোমেলোভাবে) ভোট দিয়েছেন, অন্যথায় এলোমেলো গ্রামবাসী।

    B ইংরেজী বর্ণমালার দ্বিতীয় অক্ষর. কপ - অজানা প্রান্তিককরণের যে কাউকে তদন্ত করুন।

    গ। চিকিত্সক - প্রথমে স্ব পালা বাঁচান, তারপরে পরিচিত হিসাবে পুলিশকে সংরক্ষণ করুন (আমি মনে করি না এটি এখনকার মতো এটি জানতে পারে), যদি গ্রামবাসী পরিচিত হয় তবে এটি সংরক্ষণ করুন (সম্ভবত এটি এটি জানেন না), অন্যথায় এলোমেলো ব্যক্তিকে সংরক্ষণ করুন।

  2. দিন

    ক। যদি কেউ সরাসরি নিজের কাছে কোনও বার্তা বলে থাকে তবে তাদের কাছে সাড়া দিন (সীমাবদ্ধ প্রতিক্রিয়া সম্ভব)।

    B ইংরেজী বর্ণমালার দ্বিতীয় অক্ষর. মাফিয়া - সবচেয়ে বেশি ভোট পাওয়া গ্রামবাসীর পক্ষে ভোট দিন।

    গ। যে কোনও জীবিত মাফিয়া-সংযুক্ত পরিচিতের সাথে গ্রামবাসী - মাফিওসোর পক্ষে ভোট দিন।

    ঘ। শুধুমাত্র মৃত মাফিয়া-প্রান্তিকৃত পরিচিতি সহ গ্রামবাসী - এমন একটি এলোমেলো বটকে ভোট দিন যিনি কখনও মাফিয়োসোর পক্ষে ভোট দেননি।

    ঙ। কপ পরিচিত গ্রামবাসী - পুলিশ এলোমেলো বটকে ভোট দিয়েছিল।

    চ। মৃত গ্রামের সাথে পরিচিত গ্রাম-প্রান্তিক পরিচিত - মৃতদের পক্ষে ভোট দিয়েছেন এমন একটি এলোমেলো বটকে ভোট দিন।

    ছ। স্ব-বিরুদ্ধে ভোট সহ গ্রামবাসী - বর্তমানে সর্বাধিক ভোটপ্রাপ্ত অ-গ্রাম-বিন্যাসিত বটকে ভোট দিন।


1
অপেক্ষা করুন, এটি কি করে?
সাইনস্ট্যাকএফএলএফ

1
কেন, এটি মাফিয়া খেলে, অবশ্যই! :)
জো।

আমি কৌশল বলতে চাই।
সিগস্ট্যাকফুল্ট

6

উদাহরণ কোডটি আমার পক্ষে কাজ করেনি, আমি পাইথন 3 ব্যবহার করি, সুতরাং main.pyফাইলটি কাজ করতে আমি পরিবর্তন করেছি।

পাইথন 3 এর জন্য এখানে আমার স্থির সংস্করণটি রয়েছে, পাইথনে আমি আগে কখনও প্রোগ্রাম করি নি তাই সম্ভবত এটি একটি ভয়াবহ কোড তবে এটি কার্যকর :)

run.sh:

#!/bin/bash

./randy.py < from_server > to_server

randy.py:

#!/usr/bin/env python3

import random

with open('players') as f:
    p = f.read().split() + ['no one']

with open('from_server') as f:
    fs = f.read().split()

msg = ""
day = True
try:
    line = fs[0]
    if line.endswith(('?', 'victim.')):
        day = False
    if not day:
        msg = (random.choice(p))
    else:
        if random.random() > 0.5:
            if random.random() > 0.5:
                msg = ('vote {}'.format(random.choice(p)))
            else:
                id = random.randint(0, 17)
                msg = ('say {}{}'.format(id, (' ' + random.choice(p)) if id > 4 else ''))

    with open('to_server', 'w') as f:
        f.write(msg)
    print(msg)
except: pass

আমি এই কাজটি করার সময় আমি কয়েকটি জিনিস শিখেছি (এবং এটি আমার বিবরণে পরিষ্কার ছিল না)

  • printএটি console.logজেএস-এর মতো গেমটি দিয়ে কিছুই করে না
  • input() প্রোগ্রামটি চলমানটিকে ব্লক করে ধাপে ধাপে ডিবাগিংয়ের জন্য ভাল হতে পারে
  • from_serverএবং to_serverপ্রতি রাউন্ড সাফ করা হয়।
  • স্ক্রিপ্টটি Ctrl+Cসংমিশ্রণ সহ বন্ধ করা অসম্ভব , যা বিরক্তিকর।

পিপিসিজিতে আপনাকে স্বাগতম! দুর্দান্ত প্রথম পোস্ট! আশা করি আপনি আটকে থাকবেন! আমি আপনার পোস্টটি সম্পাদন করে ক্রিয়াকলাপের সিনট্যাক্স হাইলাইট করার জন্য করেছি এবং ধারাবাহিকতার জন্য একটি যুক্ত করেছি run.sh
Rɪᴋᴇʀ

1
ধন্যবাদ! আমি নিশ্চিত < from_server > to_serverযে প্রয়োজনীয় নয় কারণ আমি কোডে হার্ড ফাইল কোডনাম দিয়েছি। গেম ইঞ্জিনটি কেবল ./runপাইপ ছাড়াই কল করে । সুতরাং input()এবং print()গেমটি নিয়ে কাজ করে না। mayn.pyলাইন 57:os.system('./run')
পিটার

2
আপনি কীভাবে চালক হিসাবে নিয়ন্ত্রণকারী পেতে পারেন? আমি এটা বুঝতে পারি না। আপনি একটি নমুনা প্রার্থনা প্রদান করতে পারেন?
Rɪᴋᴇʀ

দ্রষ্টব্য: মূলটি পাইথন 2randy.py এ লিখিত ছিল যা সমস্যাগুলির কারণ হয়েছিল।
সিগস্ট্যাকফুল্ট

কন্ট্রোলারের জন্য ./startআপনার মূল ফোল্ডারটি থেকে প্রয়োজন বা অজগর 3 সংস্করণটি দরকারmain.py
পিটার

5

লজিস্টিয়ান

#!/usr/bin/env python3
import sys
import os
import re
import random
from types import SimpleNamespace
def chooseSet(set):
    return random.choice(list(set))
sys.stdin = open("from_server")
sys.stdout = open("to_server","w")
def saveData(data):
    with open("gameData.txt", "w") as datafile:
        datafile.write(repr(data.__dict__))
MY_NAME = os.path.basename(os.getcwd())
opener = input()
DATABASES = ("targets","herd","mafiosos","guilty","innocent","unlikely", "requests",
            "selfvotes","players","used_roles")
ALLOW_SELF = ("players", "mafiosos")
LIESPERROLE = {"cop": ("I am the cop",
                "I investigated this player and found that they were mafia-aligned",
                "I investigated this player and found that they were village-aligned"),
              "doctor": ("I am the doctor",
                   "I tried to save this player",
                   "I successfully saved this player"
                   )
        }
#1: At the beginning of the game, parse beginning of day 0
if opener == "Rise and shine! Today is day 0.":
    #Next two lines are completely predetermined and hold no data
    assert input() == "No voting will occur today."
    assert input() == "Be warned: Tonight the mafia will strike."
    data = SimpleNamespace(cop=False, doctor=False, queued=[],askers={})
    for datum in DATABASES:
        setattr(data, datum, set())
    try:
        nextline = input()
        if nextline == "You are a member of the mafia.":
            data.mafiosos.add(MY_NAME)
            assert input() == "Your allies are:"
            while True:
                data.mafiosos.add(input())
        elif nextline == "You are the doctor":
            data.doctor = True
            data.used_roles.add("doctor")
        elif nextline == "You are the cop":
            data.cop = True
            data.used_roles.add("cop")
    except EOFError:
        #villager, or ran out of mafiosos to add
        pass
    with open("players") as playersfile:
        data.players = set(playersfile.read().strip().splitlines())
    saveData(data)
    exit()
with open("gameData.txt") as datafile:
    data = SimpleNamespace(**eval(datafile.read().strip()))
#2: Beginning of day nonzero
if opener.startswith("Dawn of day"):
    data.requests.clear()
    data.selfvotes.clear()
    data.askers.clear()
    data.voted = False
    try:
        while True:
            nextline = input()
            victim = re.match("Last night, (.*) was killed. They were (?:a|the) (.*).", nextline)
            if victim:
                victim, role = victim.groups()
                #remove dead people from lists
                for datum in DATABASES:
                    getattr(data, datum).discard(victim)
                if role == "cop" or role == "doctor":
                    data.used_roles.add(role)
                continue
            investigated = re.match("Investigations showed that (.*) is (.*)-aligned.", nextline)
            if investigated:
                assert data.cop
                who = investigated.group(1)
                if investigated.group(2) == "mafia":
                    data.guilty.add(who)
                    data.unlikely.discard(who)
                else:
                    data.targets.discard(who)
                    data.herd.discard(who)
                    data.innocent.add(who)
                    data.unlikely.add(who)
                continue
    except EOFError:
        pass
#3: We're being told some messages / news
elif " says " in opener or " voted " in opener:
    message = opener
    acted = question = False
    try:
        while True:
            if " voted " in message:
                message = "<vote against>"
                speaker, subject = re.match("(.*) has voted to lynch (.*)", message).groups()
                target = None
            else:
                speaker, target, message, subject = \
                    re.match("(.*) says \"(?:(.*), )?([^:\?]+)(?:[:\?]\s*(.*))?\"",
                             message).groups()
            if speaker == MY_NAME:
                continue
            BAD_MESSAGES = ("<vote against>", "I think this player is mafia",
                            "I investigated this player and found that they were mafia-aligned",
                            "I think this player is suspicious")
            GOOD_MESSAGES = ("I think this player is the cop",
                             "I think this player is the doctor",
                             "I think this player is a normal villager",
                             "I trust this player",
                             "I investigated this player and found that they were village-aligned")
            OUTS = "I am the cop", "I am the doctor"
            LIES = ()
            for role in data.used_roles:
                LIES += LIESPERROLE[role]
            if message == "Yes" or message == "No":
                if question and not target:
                    target = chooseSet(data.askers)
                if target in data.askers:
                    BAD_MESSAGES += "Yes",
                    GOOD_MESSAGES += "No",
                    subject = data.askers[target]
            if message in LIES and speaker not in data.mafiosos and speaker not in data.innocent:
                # What you just said is false, and I know it!
                data.unlikely.discard(speaker)
                data.targets.add(speaker)
                if subject and subject not in (data.unlikely.union(data.mafiosos)):
                    data.targets.add(subject)
            elif message in BAD_MESSAGES:
                if speaker in data.guilty:
                    #mafiosos rarely turn on eachother
                    data.unlikely.add(subject)
                    data.targets.discard(subject)
                elif speaker in data.unlikely:
                    #believe the herd, especially people who we trust
                    data.herd.add(subject)
                elif subject in data.unlikely:
                    #how dare you speak against players likely to be village-aligned!
                    data.targets.add(speaker)
                elif subject == MY_NAME or subject in data.mafiosos:
                    #DON'T ATTACK ME (or my fellow mafiosos)
                    data.targets.add(speaker)
                else:
                    #believe the herd
                    data.herd.add(subject)
                if not acted and message == "<vote against>":
                    if subject == MY_NAME:
                        data.selfvotes.add(speaker)
                        if len(data.selfvotes) >= (len(data.players)-len(data.mafiosos))/3:
                            if data.cop:
                                print("say 2")
                                #give a data point to prove it
                                if random.random() > .5 and data.guilty:
                                    data.queued.append("say 14 %s" % chooseSet(data.guilty))
                                elif data.innocent:
                                    data.queued.append("say 15 %s" % chooseSet(data.innocent))
                            else:
                                print("say 4") #Don't out myself if I'm the doctor
                                # and just lie if I'm a mafioso
                            acted = True
                    else:
                        data.selfvotes.discard(speaker)
            elif message in OUTS and data.mafiosos and speaker not in data.unlikely:
                data.targets.add(speaker) #Kill the fools who boast!
            elif message in GOOD_MESSAGES:
                chance = random.random() < .1 - (speaker in data.targets) / 20
                if speaker in data.guilty: #Mafia liars
                    if subject not in data.unlikely:
                        data.targets.add(subject)
                elif subject == MY_NAME and chance:
                    if speaker in data.targets:data.targets.remove(speaker)
                    data.unlikely.add(speaker)
                elif speaker in data.unlikely or chance:
                    data.unlikely.add(subject)
            elif message == "Do you think this player is mafia":
                if subject == MY_NAME:
                    data.targets.append(speaker)
                if target == MY_NAME or not target:
                    if speaker in data.guilty:
                        data.queued.append("say 14 %s %s" % (subject, speaker))
                    elif speaker in data.innocent:
                        data.queued.append("say 15 %s %s" % (subject, speaker))
                    elif subject in data.targets or subject in data.herd:
                        data.queued.append("say 1 %s" % (speaker))
                    elif subject in data.unlikely:
                        data.queued.append("say 0 %s" % (speaker))
                    if data.cop:
                        data.requests.add(subject)
                data.askers[speaker] = subject
                question = True
            elif target == MY_NAME and message == "Will you please use your power on this player tonight":
                data.requests.add(subject)
            message = input()
    except EOFError:
        pass
    for datum in DATABASES:
        if datum in ALLOW_SELF: continue
        getattr(data, datum).discard(MY_NAME)
    chance = random.random()
    if data.queued:
        print(data.queued.pop())
    elif chance < .1:
        target = chooseSet(data.targets or data.players)
        if target != MY_NAME:
            print("say 10 %s" % target)
            data.askers[MY_NAME] = target
    elif chance < .3 and data.targets:
        print("say 6 %s" % chooseSet(data.guilty or data.targets))
    elif chance < .5 and data.unlikely:
        print("say 5 %s" % chooseSet(data.innocent or data.unlikely))
    elif chance < .6 and not data.voted:
        target = chooseSet(data.guilty or data.targets or data.herd or data.players)
        if target not in data.mafiosos and target != MY_NAME:
            print("vote %s" % target)
        data.voted = True
    elif chance < .8:
        #do nothing
        pass
    elif chance < .9:
        #Confuse everybody
        print("say 1")
        data.queued.append("say 0")
######################
#4: End of day
elif "has killed" in opener:
    victim = re.match("The town has killed (.*)!", opener)
    if not victim:
        exit()
    victim = victim.group(1)
    #remove dead people from lists
    for datum in DATABASES:
        getattr(data, datum).discard(victim)
    role = input()
    role = re.match("They were (?:a|the) (.*)", role).group(1)
    if role == "cop" or role == "doctor":
        data.used_roles.add(role)
    #Misc: purge people from lists if too large
    for list in data.unlikely, data.targets, data.herd:
        while len(list) > len(data.players)/3:
            list.pop()
    for player in data.innocent:
        data.unlikely.add(player)
elif opener == "The town opted to lynch no one today.":
    #Do nothing
    pass
#5: Night
elif "night" in opener:
    if not data.mafiosos and data.requests and random.random() > .5:
        print(chooseSet(data.requests))
    if data.doctor:
        print(chooseSet(data.unlikely or data.players))
    else:
        while True:
            try:
              target = (data.targets or data.herd).pop()
            except KeyError:
              target = chooseSet(data.players)
            if target in data.mafiosos or target == MY_NAME:
                continue
            print(target)
            break
else:
    raise ValueError("Unknown message")
saveData(data)

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


আপনার run.shমান (কিছু পরীক্ষা নিরীক্ষা করা)
স্ট্যান স্ট্রাম

না, আমার রান.শ স্বাভাবিক ইনপুট এবং আউটপুট পাইপিং ছাড়াই খাঁটিভাবে "রান.পি" হতে পারে তবে মানকটি কাজ করবে।
পিপ্পারি

1
আমি সময় এবং প্রবণতা থাকলে আমি যা লিখেছিলাম তার সাথে এটি খুব মিল দেখাচ্ছে।
Draco18s

কোনও কারণে আমি মনে করি লজিস্টিয়ান অন্যান্য বটগুলির আশেপাশে এত ভাল কাজ করতে পারবেন না ... অন্য বটগুলির কোনওটিই পুলিশ তদন্তের খবর দেয় না
জাভাস্ক্রিপ্ট

1
... এবং আমি বুঝতে পারি, কয়েক মাস পরে, আমার উত্তরটি ভুলভাবে ধরে নিয়েছে যে কেবল একজন পুলিশ / ডাক্তার থাকতে পারে।
পিপ্পারি

4

বেঁচে থাকা (বনাম 1.0)

সংক্ষিপ্তসার

বেঁচে থাকা যিনি মাফিয়া হোন না কেন তার বিরুদ্ধে অভিযোগ করার সাহস করে এমন কাউকে মারধর করে কেবল নির্মমভাবে এই খেলাটি থেকে বেঁচে থাকে।

যুক্তিবিদ্যা

যদি আপনি গেমের শেষ অবধি বেঁচে থাকেন তবে আপনি যাই হোক না কেন জিতে যান। অতএব, আপনি যে কোনও মূল্যে বেঁচে আছেন

গল্পের

সৈন্যরা অন্ধকার, স্যাঁতসেঁতে জঙ্গলের মধ্য দিয়ে অগ্রসর হয়েছিল।

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

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

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

স্কাউটগুলি সম্প্রদায়কে বাঁচাতে তাদের অস্ত্র পাওয়ার সিদ্ধান্ত নিয়েছে। শত্রু বলবত্ গ্রামে আসার সাথে সাথে তারা তাদের অবস্থানগুলিতে পৌঁছতে সক্ষম হয়েছিল। "চার্জ!" আক্রমণকারী সেনাপতি চিৎকার করে। "ঘর পুড়িয়ে দাও! বাড়ি পুড়িয়ে দাও! প্রত্যেককে হত্যা কর, নারী এবং শিশুদের অন্তর্ভুক্ত! "

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


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

ভেটেরেন অন্ধকারে হেসেছিলেন। অন্ধকারের ভয়, কোনও উপায় নেই। বিছানার নিচে দানবদের ভয়? বন্দুকের ট্রিগারে হাত রেখে লোকটি হেসে হেসে উঠল। তিনি কিছুতেই ভয় পান নি, তিনি নিজেই বলেছিলেন। অবশ্যই, তিনি অতীত যুদ্ধের সময়কার নায়ক ছিলেন, তবে তিনি আত্মঘাতী ও জীবন-হুমকী পরিস্থিতিতে এতটাই অভ্যস্ত ছিলেন যে মানুষটিকে কেবল স্নায়বিক করে তুলেছিল। তার ট্রিগার আঙুলটি সহজ ছায়ায় মোচড়; তার হৃৎস্পন্দন প্রতিটি সামান্য শব্দ দিয়েই ত্বরান্বিত হয়। হ্যাঁ, তিনি এই মৃত্যুর ভয় পেয়েছিলেন। তিনি কীভাবে পারলেন না, এত লোককে ভয়ঙ্কর উপায়ে মারা দেখে? অপহরণ এবং অলৌকিকভাবে তাঁর শত্রুদের থেকে পালানো থেকে তিনি যা জানতেন তা হ'ল কোনও দয়া নেই।

ঝানু


কোড (আমি অজগরের এক ধোকা, কোডটি ভাল কিনা তা নিশ্চিত নই)

#!/bin/python2

import random

with open('players') as f:
    p = f.read().split() + ['no one']


day = True
target = "survivalist"
role = "villager"
try:
    line = raw_input()
    if "You are the cop" in line:
        role = "cop"
    else if "You are the doctor" in line:
        role = "doctor"
    else if "You are a member of the mafia" in line:
        role = "mafia"

    if line.endswith(('?', 'victim.')):
        day = False
    if not day:
        if target == "survivalist":
            print random.choice(p)
        else if role == mafia || role == sheriff:
            print target
        else if role == doctor:
            print random.choice(p)
    else:
        if "survivalist" in line && ("I think this player is suspicious:" in line || 
        "I think this player is mafia:" in line ||
        "I investigated this player and found that they were mafia-aligned:")):
            print 'say 0'
            if role == "villager" || role == "mafia":
                print 'say 4'
            else if role == "cop":
                print 'say 2'
            else if role == "doctor"
                print 'say 3'
            target = line.split(" ")[0]
            print 'vote ' + target

        else if target != "survivalist":
            print 'say 6 ' + target
            print 'vote ' + target
    else:
        pass

except: pass

আপনি কি orপরিবর্তে বোঝাতে চেয়েছিলেন ||? আপনি এটি পরীক্ষা করেছেন? এছাড়াও, আপনার সম্ভবত এটি উল্লেখ করা উচিত যে এটি পাইথন ২।
সোলায়মান উকো ২৯'১৮

3

অবতার

অবতার "এলোমেলোভাবে" শুরুতে একজন খেলোয়াড়কে বেছে নিয়ে যায় এবং অবিরামভাবে তাদেরকে রাউন্ডের বাকি অংশের জন্য ফোকাস করে।

এটি অনুরূপ-নামযুক্ত অ্যানিমেটেড টিভি শোতে কোনও রেফারেন্স নয়।

এটি একটি প্রাক অনলাইন রেফারেন্স।

সমস্ত প্রয়োজনীয় ফাইলের টার ডাউনলোড করুন

পরিবর্তণের

  • ভি 1 জন্মদিন
  • v2 কিছুই লগ ইন করে না stdout, শুধুমাত্র stderr। খুব
    দমন stderrকরতে, ফাইলের 2>/dev/nullশেষে যুক্ত runকরুন।
/*  Casting his sight on his realm, the Lord witnessed
    The cascade of evil, the torrents of war.
    Burning with wrath, He stepped 
    down from the Heavens
    To judge the unworthy,
    To redeem the pure.

    -The Scriptures, Revelation Verses 2:12
*/

#include <stdlib.h>
#include <stdio.h>
#include "mafia.h"

int getRandomNumber(){
    return 4; // Chosen by a fair dice roll.
              // Garunteed to be random.
}


void day0(){
    char * target = get_player(getRandomNumber()-1)->name;
    fprintf(stderr, "Target: `%s'\n", target);
    FILE * f = fopen("target", "w");
    if(!f){exit(1);}
    fprintf(f, "%s", target);
    fclose(f);
}


int main(){
    get_players();
    int cycle = get_cycle(day0);
    FILE * out = fopen("to_server", "w");
    if(!out){exit(1);}
    FILE * targetF = fopen("target", "r");
    if(!targetF){exit(1);}

    char target[64];

    fscanf(targetF, "%s", target);

    fprintf(stderr, "Target: %s\n", target);

    if(cycle == 0){
        // night
        fprintf(out,"%s\n", target);
        fprintf(stderr, "> Voting to kill %s\n", target);
        exit(0);
    } else if (cycle > 0) {
        // day
        fprintf(out, "vote %s\n", target);
        fprintf(stderr, "> Voting to lynch %s\n", target);
        exit(0);
    } else if (cycle == -1) {
        fprintf(stderr, "> saying 6, 10 at %s\n", target);
        fprintf(out, "say 6 %s\n", target);
        fprintf(out, "say 10 %s\n", target);
    }
}

এটি একই ডিরেক্টরিতে আমার লেখা লাইব্রেরিগুলির প্রয়োজন mafia.cএবং mafia.h

এগুলি মেকফিল এবং একটি রান স্ক্রিপ্ট সহ ডাউনলোডগুলিতে অন্তর্ভুক্ত রয়েছে।

করতে

  • লক্ষ্যবস্তুদের হত্যা করা বা লঞ্চ করে দেওয়া হলে তার বিরুদ্ধে ভোট দেওয়া বন্ধ করুন।

আমি এখানে থাকাকালীন, নন-বট, স্টিভ জমা দেব:


অবগতির জন্য, আমি টাকাপয়সা কল avatar, erebus, leviathan, এবংragnarok
SIGSTACKFAULT

"এটি অনুরূপ-নামযুক্ত অ্যানিমেটেড টিভি শোতে কোনও রেফারেন্স নয়" " এটা কি সিনেমার রেফারেন্স?
স্ট্যান স্ট্রাম

পছন্দ করুন
সিগস্ট্যাকফুল্ট

আমার বটের from_serverফাইলটি লিখিত হচ্ছে না। আপনার কি নির্দিষ্ট অনুমতি বা কিছু সেট করতে হয়েছিল?
Rɪᴋᴇʀ

1
কৌতূহলের জন্য দ্রষ্টব্য: এখানে বর্ণিত শাস্ত্রগুলি হ'ল ইভি অনলাইন থেকে আমাররের । সেখানে হয় একটি আপ্তবাক্য 2:12 বাইবেলে, কিন্তু এটা বরং ভিন্নভাবে পড়ে।
ডিএলসাস 11'18

2

মহাকায়

লিভিয়াথন playersফাইলের সমস্ত খেলোয়াড়কে পুনরুক্তি করে এবং একে একে লক্ষ্য করে।

ডাউনলোড

/*  Citizens of the State, rejoice!

    Today, a great milestone has been achieved by our glorious leaders.
    A stepping stone in the grand story of our empire has been traversed.
    Our individual fears may be quietened;
    the safety of our great nation has been secured.

    Today, unyielding, we have walked the way of the warrior.
    In our hands have our fates been molded.
    On the Leviathan's back will our civilization be carried home
    and the taint of the Enemy purged from our souls.

    Rejoice, citizens! Victory is at hand.

    -Caldari State Information Bureau Pamphlet, YC 12
*/

#include <stdio.h>
#include <stdlib.h>
#include "mafia.h"

void day0(){
    FILE * index = fopen("idx", "w");

    fprintf(index,"0");

    fclose(index);
}

int main(){
    get_players();
    int i, cycle = get_cycle(day0);

    FILE * out = fopen("to_server", "w");
    FILE * idx = fopen("idx", "r");

    fscanf(idx, "%d", &i);
    fclose(idx);

    char * target;
    target = get_player(i)->name;

    fprintf(stderr, "Idx: %d\n", i);
    fprintf(stderr, "Target: %s\n", target);

    if(cycle > 0){
        idx = fopen("idx", "w");
        i++;
        i = i%NPLAYERS;
        fprintf(idx, "%d", i);
        fprintf(out, "vote %s\n", target);
    } else if (cycle == -1) {
        printf("> saying 6, 10 at %s\n", target);
        fprintf(out, "say 6 %s\n", target);
        fprintf(out, "say 10 %s\n", target);
    }

    fclose(out);
}

অবতার হিসাবে, এটি প্রয়োজন mafia.cএবং mafia.hএকই ডিরেক্টরির মধ্যে।

এগুলি মেকফিল এবং একটি রান স্ক্রিপ্ট সহ ডাউনলোডগুলিতে অন্তর্ভুক্ত রয়েছে।


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