ফোর-ম্যান স্ট্যান্ডফ


54

4-স্ট্যান্ড অফ

বিবরণ

আপনি কোনওভাবে নিজেকে চার দিকের স্টাফ অফে পেয়ে গেছেন। বোঝাই বন্দুকটি আপনার হাতে রয়েছে এবং কিছুটা গ্রেনেড আপনার বেল্টে লাগানো আছে।

স্ট্যান্ডঅফের শেষে সর্বাধিক স্বাস্থ্য থাকা উদ্দেশ্য। যখন একজনের স্বাস্থ্যের ইতিবাচক পরিমাণ থাকে তখন স্ট্যান্ডঅফ হয়ে যায়।

প্রতিটি খেলোয়াড়ের 5স্বাস্থ্য আছে এবং যখন তার স্বাস্থ্য / নীচে নেমে যায় তখন মারা যায় 0। যে খেলোয়াড় মারা যায় তার প্লেয়ারটি যে ক্ষতি করতে পারে সেটাই শেষ বার turn

স্ট্যান্ডঅফের শেষে যদি কোনও লাইভ প্লেয়ার থাকে তবে সেই খেলোয়াড় জিতবে। অন্যথায়, কমপক্ষে নেতিবাচক স্বাস্থ্যের সাথে প্লেয়ার জিততে পারে।

ক্রিয়াকলাপ

  • শ্যুট করুন : কারও দিকে গুলি করুন।

    • 2 একটি জীবিত শত্রু শুটিং যদি ক্ষতি
    • 0 একটি মৃত শত্রু শুটিং যদি ক্ষতি
    • health_at_start_of_turn+2নিজেকে গুলি করে ফেললে ক্ষতি (দ্রষ্টব্য যে এটি আপনাকে বেশিরভাগ -2স্বাস্থ্যের সাথে ছেড়ে দেবে ))
    • যদি কোনও শত্রু যদি আপনাকে একই পালটে গুলি করে তবে আপনি নিজেকে গুলি করেন তবে আপনি -4 স্বাস্থ্যের সাথে স্ট্যান্ডঅফ বন্ধ করবেন (আপনি এখনও অন্য খেলোয়াড়দের নিজেরাই ক্ষতিগ্রস্থ হবেন)
    • আপনার ক্রিয়াকলাপটি নিম্নলিখিত পালাটিকে উপেক্ষা করা হবে (এবং ধরে নেওয়া হয়েছে Nothing)।
  • ডজ : একক প্রতিপক্ষের শট ডজ করার চেষ্টা করুন।

  • প্রস্তুত : আপনার গ্রেনেড আনহুক এবং এটি নিক্ষেপ করার জন্য প্রস্তুত।

    • এটি ছুঁড়ে ফেলার আগে আপনার কাছে কেবল তিনটি পালা রয়েছে ( 6নিজের 3ক্ষতি, সমস্ত জীবিত শত্রুর ক্ষতি)
    • অখণ্ডিত গ্রেনেডের সাথে মারা মারা তিনটি পালার জন্য গ্রেনেড নিক্ষেপ করার সমান।
  • নিক্ষেপ : কারও দিকে গ্রেনেড চক এবং সেরা আশা করি।

    • 8বেঁচে থাকলে টার্গেট ক্ষতি করে
    • 3জীবিত থাকলে অন্য প্রত্যেকে (নিজেকে সহ) ক্ষতিগ্রস্থ হন
  • কিছুই নয় : ঘুরে দাঁড়ানোর জন্য অলসভাবে দাঁড়িয়ে থাকুন এবং প্রত্যেকে মরতে দেখুন।

ইনপুট

আপনার প্রোগ্রামটি নিম্নলিখিত তথ্যগুলি প্রদান করবে:

  • প্রতিটি খেলোয়াড়ের স্বাস্থ্য
  • স্ট্যান্ডঅফ শুরু হওয়ার পরে সেই খেলোয়াড় কর্তৃক গৃহীত পদক্ষেপের একটি তালিকা নীচে প্রতি খেলোয়াড় প্রতি উত্তীর্ণ তথ্যের ফর্ম্যাট:

    [Health],[Action 1],[Action 2],[Action 3],...
    

আউটপুট বিভাগে উল্লিখিত বিন্যাসে ক্রিয়া দেওয়া হবে ।

আপনি এই জাতীয় 4 টি স্ট্রিং পাবেন যা কোনও স্থান দ্বারা পৃথক করে একক যুক্তি হিসাবে পাস করা হবে। এই স্ট্রিংয়ের ক্রমটি হ'ল:

[Player Info] [Opponent 1 Info] [Opponent 2 Info] [Opponent 3 Info]

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

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

$./Player.bash 5 "3,S2,N 5,P,N 3,S0,N -2,S3,N"

বর্তমানে, খেলোয়াড় এবং দ্বিতীয় প্রতিপক্ষের স্বাস্থ্য 3, প্রথম প্রতিপক্ষের 5 স্বাস্থ্য, এবং তৃতীয় প্রতিপক্ষের -2 স্বাস্থ্য রয়েছে এবং মারা গেছে।

প্রথম টার্নে:

  • প্লেয়ার 1 শট শত্রু 2
  • শত্রু 1 একটি গ্রেনেড প্রস্তুত
  • শত্রু 2 শট খেলোয়াড়
  • শত্রু 3 নিজেকে গুলি করেছিল

দ্বিতীয় বারে:

  • সব খেলোয়াড় কিছুই করেনি। (খেলোয়াড় এবং শত্রু 2 কিছুই করতে পারে না যেহেতু তারা আগের টার্নে গুলি করেছিল E শত্রু 3 মারা গেছে: তিনি Nothingবাকি স্ট্যান্ডঅফের জন্য করবেন do )

একটি অচলাবস্থা শুরুতে দ্বিতীয় প্রমাণ হচ্ছে, 5 5 5 5

আউটপুট

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

  • S[target]: কান্ড [লক্ষ্য]।
  • D[target]: ফাঁসানোর চেষ্টা [লক্ষ্য]।
  • P: একটি গ্রেনেড প্রস্তুত।
  • T[target]: [টার্গেট] এ গ্রেনেড নিক্ষেপ করুন।
  • N: কিছু করনা.

একটি কমান্ড যা একটি লক্ষ্য প্রয়োজন, কিন্তু একটি লক্ষ্য প্রদান করা হয় 0এবং 3একটি লক্ষ্য সম্পূর্ণরূপে সরবরাহ করা হয় না এবং লক্ষ্য পুরোপুরি সরবরাহ করা হয় না তা লক্ষ্য করা হবে 0(প্লেয়ার)।

স্কোরিং

প্রতিটি স্ট্যান্ডঅফের শেষে, খেলোয়াড়গণ নিম্নলিখিত সূত্র দ্বারা গণনা করা স্কোর পান:

35 + health at end of standoff 

ক্ষেত্রে যে একটি প্লেয়ার স্বাস্থ্যের নেতিবাচক সঙ্গে একটি অচলাবস্থা শেষ হয়, তারা হবে একটি স্কোর গ্রহণ 35 নিচে । নিম্নলিখিত পয়েন্টগুলিও বোনাস হিসাবে পুরস্কৃত হয়:

  • সর্বাধিক স্বাস্থ্য: +4 পয়েন্ট
  • দ্বিতীয় সর্বাধিক স্বাস্থ্য: +২ পয়েন্ট
  • তৃতীয় সর্বাধিক স্বাস্থ্য: +1 পয়েন্ট।

টাই করার ক্ষেত্রে, নিম্ন বোনাসটি দেওয়া হয় (যদি দুটি ব্যক্তি বেশিরভাগ স্বাস্থ্যের সাথে টাই করেন, উভয়কে +2 প্রদান করা হয়; যদি সর্বাধিক স্বাস্থ্যসম্পন্ন 3 জন লোক থাকে, +1, এবং যদি সবাই সমানভাবে শেষ হয় তবে +0)।

চূড়ান্ত স্কোরটি সমস্ত স্বতন্ত্র স্কোরের গড় গণনা করে নির্ধারিত হয়।

বিধি / বিবরণ

  • একটি ঘুরতে ইভেন্টগুলির ক্রম নিম্নরূপ:
    • সমস্ত খেলোয়াড় তাদের ক্রিয়া করে।
    • যে খেলোয়াড়ের স্বাস্থ্য 0 বা তার কম রয়েছে তারা মারা যান।
    • বিস্ফোরণ ঘটাতে হবে এমন অ্যানথ্রাউন গ্রেনেডগুলি বিস্ফোরিত হবে (সবেমাত্র মারা যাওয়া খেলোয়াড়েরা এখনও আহত হয়েছেন, কারণ তারা এখনও মারা গেছে)
  • এন্ট্রিগুলির মধ্যে কোনও সহযোগিতা নেই।
  • তিনটি * স্ট্যান্ডঅফস 4 জন খেলোয়াড়ের প্রতিটি সেটের মধ্যে ঘটবে। (প্রতিটি স্ট্যান্ডঅফের সাথে প্লেয়ারদের অর্ডার আলাদা হতে পারে)।
  • ডিস্ক স্পেসের অতিরিক্ত পরিমাণে মেমরি গ্রহণকারী এন্ট্রিগুলি অযোগ্য ঘোষণা করা হবে।
  • আপনার এন্ট্রি ছাড়া অন্য ফাইলগুলি পড়া বা সংশোধন করা আপনার প্রবেশকে অযোগ্য ঘোষণা করবে।
  • একটি ট্রাক, মাতাল দ্বারা চালিত, টার্নের পরে 50thস্ট্যান্ডঅফটি এখনও শেষ না হলে, টার্নের পরে সমস্ত জীবিত খেলোয়াড়ের উপরে চলে যাবে 50th
    • এই ট্রাকটি সমস্ত জীবিত খেলোয়াড়ের 20 টি ক্ষতি করে।
  • স্ট্যান্ডঅফস দ্রুত ঘটে। প্রোগ্রামগুলি 1 সেকেন্ড পরে কাটা হয়।
  • আপনি মারা যাওয়ার পরেও আপনার প্রোগ্রামটি প্রতিটি পালা বলা হবে।
  • আপনি কেবল আপনার ডিরেক্টরিতে ফাইল পড়তে বা লিখতে পারেন (যদি আপনার এন্ট্রিটির নাম জনডো হয়, আপনি ডিরেক্টরি প্লেয়ার / জনডো /) এ ফাইলগুলি সংরক্ষণ করতে পারেন; তবে আপনার স্ক্রিপ্টটি চলাকালীন এটি বর্তমান ডিরেক্টরি হবে না।
  • স্ট্যান্ডঅফগুলি আর্ক লিনাক্স (2014.08.01 প্রকাশ করুন) চালিত একটি মেশিনে অনুষ্ঠিত হবে।

কন্ট্রোলারটি গিটহাবে পাওয়া যায় ।

আপনার পোস্টে নিম্নলিখিত অন্তর্ভুক্ত করুন:

  • আপনার বট জন্য একটি নাম
  • বট চালানোর জন্য একটি শেল কমান্ড (উদা। java Doe.java) ইনপুট একক যুক্তি হিসাবে কমান্ড লাইনের মধ্য দিয়ে যাবে ( java Doe.java 5 "-2,S0 -2,S1 -2,S2 5,N")
  • আপনার বট কোড
  • বটটি কীভাবে সংকলন করা উচিত (প্রযোজ্য ক্ষেত্রে)
  • ভাষা (এবং প্রযোজ্য সংস্করণ, বিশেষত পাইথনের জন্য)

* কন্ট্রোলার ছয় বছরের জন্য খুব দীর্ঘ সময় নিচ্ছে।

স্কোরবোর্ড

                      Observer 43.280570409982
                   MuhammadAli 43.134861217214
                         Osama 43.031983702572
                    LateBoomer 42.560275019099
                 SimpleShooter 42.412885154062
             LessSimpleShooter 42.3772
                           Neo 42.3738
                        Scared 42.3678
                     Richochet 42.3263
                   Equivocator 42.2833
  TwentyFourthsAndAHalfCentury 42.2640
                        Darwin 42.1584
                       HanSolo 42.1025
                        Coward 42.0458
           ManipulativeBastard 41.8948
                        Sadist 41.7232
                     Aggressor 41.7058
                 CourageTheDog 41.5629
                     Grenadier 40.9889
                     Bomberman 40.8840
                         Spock 40.8713
                        Sniper 40.6346
                 DONTNUKEMEBRO 39.8151
               PriorityTargets 39.6126
                     Hippolyta 39.2480
                     EmoCowboy 39.2069
                      Zaenille 39.1971
                 AntiGrenadier 39.1919
      PoliticallyCorrectGunman 39.1689
                 InputAnalyzer 39.1517
                      Rule0Bot 39.1000
                     BiasedOne 39.0664
                      Pacifist 39.0481
               StraightShooter 39.0292
                         Ninja 38.7801
                           MAD 38.2543
                        Monkey 37.7089
                   Label1Goto1 36.2131
Generated: 2014/08/22 03:56:13.470264860 UTC

লগস: গিটহাবে


1
আপনার কাছে ঠিক একটি গ্রেনেড আছে, নাকি আপনার অনেকগুলি রয়েছে? আপনি কি একসাথে একাধিক গ্রেনেড প্রস্তুত করতে পারেন?
isaacg

2
@ بابি খুব নিশ্চিত যে ইমোওল্ফ স্ট্যান্ডার্ড লুফোলগুলিতে যুক্ত হয়েছে যা আর মজার নয় । যদিও আত্মঘাতী এন্ট্রি আসলে ভয়াবহভাবে এটি করতে পারে না।
es1024

3
প্রত্যেকের কাছে পাঠ: পান এবং গাড়ি চালাবেন না।
গ্যাব্রিয়েলকে চিহ্নিত করুন

8
@ es1024 যেখানে আত্মহত্যা প্রকৃতপক্ষে একটি কার্যকর কৌশল, সেখানে একটি ইমোওল্ফ-ধরণের জমা দেওয়ার অনুমতি দেওয়া উচিত। বিশেষত যখন উপলভ্য ক্রিয়াগুলি স্পষ্টভাবে আত্মহত্যা অন্তর্ভুক্ত করে! এখন এতটা "লুফোল" নয়, তাই না? এবং প্রকৃতপক্ষে একটি অন্যায্য সুবিধা নয়, যা বেশিরভাগ ছন্দগুলি সত্যই। তবে এটাই আমার মতামত।
বব

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

উত্তর:


7

পর্যবেক্ষক

এই লোকটি তার শত্রুদের বিশ্লেষণ করে। লক্ষ্যটি হ'ল কেবলমাত্র "আক্রমণাত্মক" প্রতিপক্ষের বাকি না হওয়া পর্যন্ত বেঁচে থাকা এবং তারপরে একটি মহাকাব্যিক স্টাফ অফে সেইটিকে হত্যা করা।

সংকলন: javac Observer.javaচালান:java Observer arg0 arg1

import java.util.List;
import java.util.ArrayList;
import java.util.Random;

class Observer {
    private static List<Integer> aggressiveEnemies = new ArrayList<>();
    private static List<Integer> enemyGrenadiers = new ArrayList<>();
    private static List<Integer> aliveEnemies = new ArrayList<>();

    public static void main(String[] args) {
        if (args[1].length() <= 7) { //first round
            Random rand = new Random();
            printResult("D" + (rand.nextInt(3) + 1));
        }
        String players[] = args[1].split(" ");

        if (truckIsOnWay(players[0])) {
            printResult("P");
        }       

        calcEnemyInfo(players);

        // end this standoff now
        if (truckWillHit(players[0])) {
            if (isGrenadier(players[0]))
                printResult("T" + aliveEnemies.get(0));
            else
                printResult("S0");
        }

        // shoot enemy who is not aggressive
        if (aggressiveEnemies.size() == 0) {
            printResult("S" + aliveEnemies.get(0));
        }

        // only one enemy to handle
        if (aggressiveEnemies.size() == 1) {
            String player = players[aggressiveEnemies.get(0)];
            if (isGrenadier(player)) {
                printResult("S" + aggressiveEnemies.get(0));
            } else if (shotLastTurn(player, aggressiveEnemies.get(0))) {
                //safe to shoot him without receiving damage
                printResult("S" + aggressiveEnemies.get(0));
            } else {
                printResult("D" + aggressiveEnemies.get(0));
            }
        }

        // multiple aggressive enemies
        if (enemyGrenadiers.size() > 0) {
            printResult("S" + enemyGrenadiers.get(0));
        } else {
            int id = aggressiveEnemies.get(0);
            for (int playerId : aggressiveEnemies) {
                if (!shotLastTurn(players[playerId], playerId)) {
                    id = playerId;
                }
            }
            printResult("D" + id);
        }
    }

    private static void printResult(String result) {
        System.out.print(result);
        System.exit(0);
    }

    private static boolean isAlive(String player) {
        return !(player.charAt(0) == '-' || player.charAt(0) == '0');
    }

    private static void calcEnemyInfo(String[] players) {
        for (int i = 1; i < players.length; i++) {
            if (isAlive(players[i])) {
                aliveEnemies.add(i);
                if (isAggressive(players[i], i)) {
                    aggressiveEnemies.add(i);
                }
                if (isGrenadier(players[i])) {
                    enemyGrenadiers.add(i);
                }
            }
        }
    }

    private static boolean truckIsOnWay(String player) {
        return player.length() - player.replace(",", "").length() == 48;
    }

    private static boolean truckWillHit(String player) {
        return player.length() - player.replace(",", "").length() == 49;
    }

    private static boolean isAggressive(String player, int id) {
        return (player.contains("S") || player.contains("P")) && !player.contains("S" + id);
    }

    private static boolean isGrenadier(String player) {
        return player.contains("P");
    }

    private static boolean shotLastTurn(String player, int id) {
        return player.charAt(player.length() - 2) == 'S' && !player.contains("S" + id);
    }
}

!player.contains("S" + id)"ইসাগ্রেসিভ" ফাংশনে এটি কি প্রয়োজনীয় শর্ত? একজন আত্মঘাতী খেলোয়াড় যেকোনোভাবেই মারা যাবে
ক্রুঙ্কার

22

সৈনিকবিশেষ

বন্দুকগুলি ওভাররেটেড হয়। একজন সত্যিকারের স্কটসম্যানের স্ট্যান্ডঅফ এভাবে চলে:

  • প্রস্তুত করা
  • সর্বাধিক স্বাস্থ্য সহ শত্রুকে নিক্ষেপ করুন
  • পুনরাবৃত্তি করুন (যদি কোনও অলৌকিক চিহ্ন দিয়ে আপনি এখনও বেঁচে থাকেন)

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

অবশ্যই, তিনটি প্রতিপক্ষই যদি প্রথম রাউন্ডে আমাকে গুলি করে, তবে এটি ভাল নয়। তবে অন্য কিছু হয় না, হয়।

public class Grenadier {
    public static void main(String[] args) {
        if(args.length < 2)
            return;
        String[] list = args[1].split(" ");
        if(list.length < 4)
            return;

        if(list[0].charAt(list[0].length()-1) != 'P'){
            System.out.print("P");
            return;
        }

        int target = 1;
        for(int i=2;i<4;i++)
            if(list[i].charAt(0)>list[target].charAt(0))
                target = i;

        System.out.print("T"+target);
    }
}

স্ট্যান্ডার্ড জাভা পদ্ধতিতে সংকলন / রান করুন:

> javac Grenadier.java
> java Grenadier arg0 arg1

1 অর্থহীন পাদটীকা


41
পাদটীকা
হাহাহা

আমি মনে করি একটি গ্রেনেড নিক্ষেপ, এবং তারপরে শুটিং আরও দক্ষ more এই কৌশলটি দিয়ে আপনার 4 পালা বেঁচে থাকার সম্ভাবনা অবিশ্বাস্যভাবে কম। তবে 3 হতে পারে (হ্যাঁ, দু'জনেই নেবেন, তবে শুটিংয়ের জন্য দ্বিতীয় পালা অ্যাকশনের পরে হবে, আগে নয়)
ক্রাঙ্কার

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

@ জিওবিটস যেহেতু আমি এটি সম্পর্কে চিন্তা করি, এটি আরও ভাল হতে পারে। যে বিষয়টি সবচেয়ে বেশি গুরুত্বপূর্ণ তা হ'ল আপনার এবং বিরোধীদের মধ্যে ব-দ্বীপ। যখন গ্রেনেডটি ফুঁকতে থাকে, আপনি যার দিকে এটি ছুঁড়েছিলেন তার সাথে +3 ডেল্টা এবং বাকীটি দিয়ে +0 পাবেন। +3 এর নেট। শুটিং। আপনি কাকে শুটিং করেছেন তার সাথে একটি +2 ডেল্টা লাভ করে। বাকী +0 আমি মনে করি যে সমস্যাটি আপনি ইতিমধ্যে মারা গেছেন এমন লোকদের সাথে already কেউ মারা গেলে আপনার গুলি করা উচিত :)
ক্রંચার

2
@ কোডড্রেকার কখনই এটি খেলেনি। এটি একটি বাস্তব জীবনের রেফারেন্স।
Geobits

16

অসীমভের বিধি নম্বর 0 বট - পাইথন

কোনও রোবট মানবতার ক্ষতি করতে পারে না, বা নিষ্ক্রিয় হয়ে মানবতার ক্ষতি করতে দেয়।

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

import sys

def total_humans_alive(humans):
  return sum([is_alive(human) for human in humans])

def is_alive(x):
  return int(x.split(",")[0]) > 0  

def is_threat_to_humanity(lastAction):
  return lastAction == "P"

action = "N"
threat_id = 1
humans = sys.argv[2].split()[1:];

if total_humans_alive(humans) == 3:
  for human in humans:
    if is_threat_to_humanity(human[-1]):
      action = "S" + str(threat_id)
      break
    threat_id= threat_id+ 1

print action

এটি চালান:

python rule0bot.py

2
আপনার রোবট অযৌক্তিক। যদি গ্রেনেড ধারণকারী প্লেয়ারটি ছুড়ে ফেলে তবে মানবতা 8 + 3 + 3 + 3 = 17 ক্ষতি করে। আপনি যদি তাকে গুলি করে হত্যা করেন, মানবিকতা 2 + 6 + 3 + 3 + 3 = 17 ক্ষতি গ্রহণ করে। উভয় দৃশ্যে, যার যার কাছে গ্রেনেড ছোঁড়া হয়েছে তার 8 জন লাগে এবং অন্যরা 3 জন নেয় (যদি না তারা আগে মারা গিয়েছিল)। সামগ্রিকভাবে মানবতা প্রভাবিত হয় না। যদিও আমি এখনও এটি পছন্দ করি। +1: ডি
জিওবিটস

4
প্রকৃতপক্ষে, মানবতার জন্য সেরা
দৃশ্যটি

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

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

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

14

হান সলো - পাইথন

হান প্রথমে গুলি করল। এক্ষেত্রে নিকটতম টার্গেটটি জীবন্ত অবস্থায় তুলে নিয়ে সে প্রথমে গুলি করবে।

import sys

def is_alive(player):
  return int(player.split(",")[0]) > 0

closest_living_target = 1;

for player in sys.argv[2].split()[1:]:
  if is_alive(player):
    action = "S" + str(closest_living_target)
    break

  closest_living_target = closest_living_target + 1

print action

এটি চালান:

python hansolo.py

দ্রষ্টব্য : পাইথনে এটি আমি প্রথম লিখেছিলাম, তাই যদি আপনি অজগর-নির্দিষ্ট কোনও খারাপ অভ্যাস দেখে থাকেন তবে দয়া করে আমাকে জানান।


1
পিইপি 8 শৈলীর পরামর্শ দেয় আপনার পদ্ধতিটি হওয়া উচিতis_alive
দেনিথ

4
@ উইলিয়ামবার্বোসা এর পেপ ৮ দেখুন, এটি পাইথন স্টাইল গাইড যা সবাই ব্যবহার করে। legacy.python.org/dev/peps/pep-0008
দেনিথ

2
8/11 রাউন্ডে 0 টিরও বেশি গড় স্বাস্থ্য সহ একমাত্র বট হওয়ার জন্য অভিনন্দন।
isaacg

6
আইএমও, "স্টাইল গাইড" হ্যান্ড ড্রেসারগুলির জন্য, প্রোগ্রামারদের জন্য নয়।
কাইল কানোজ

2
@ কাইলক্যানোস যদিও কিছুটা ধারাবাহিকতা বজায় রাখার জন্য ভাল nice আমি বলতে চাইছি, যদি কোনও প্রকল্পের অর্ধেক বিকাশকারী উটের কেস এবং অন্যান্য অর্ধেক ধরণের ব্যবহার করে তবে ফলাফলটি "ব্লারঘ" হবে
উইলিয়াম বারোবোসা

12

EmoCowboy

মরার অপেক্ষা কেন? শুধু এখন নিজেকে হত্যা। আশা করি বাকী বোকারা প্রত্যেকে -2 এর থেকে অনেক কম পর্যন্ত উড়িয়ে দেবে।

স্কোরটি সাধারণত -2 হবে। কখনও কখনও -4 লোকেরা আমাকে ব্যাট থেকে গুলি করার সিদ্ধান্ত নেয়। এর চেয়ে কমই বেশি, যার অর্থ এটি বর্তমান বেশ কয়েকটি জমা দিতে পারে।

পাইথন

print('S0')

python EmoCowboy.py

সম্পাদনা: এটি কোনও রসিকতা নয়, সাধারণত এই কারণেই এই ইমো সাবমিশনগুলিকে ভ্রান্ত করা হয়। এটি একটি বৈধ কৌশল। বেঁচে থাকা প্রাণঘাতী!


11

শান্তিবাদী

সে একজন সত্যিকারের স্ফীত লোক, সবেমাত্র ভুল জনতার সাথে ধরা পড়ে।

main = putStr "N"

হিসাবে চালান runghc pacifist.hs, তবে দক্ষতা যদি সমস্যা হয় তবে আপনি এটি -O3 দিয়ে সংকলন করতে চাইতে পারেন।


1
দয়া করে এর নাম পরিবর্তন করুন লুইজি এবং আসুন দেখুন তিনি কিছু জিতবেন কিনা!
উইলিয়াম বার্বোসা

1
@ উইলিয়াম বারবোসা লুইজি? তুমি কি লুইগি বলেছ ?
মারাত্মক

7
লোল যেন -O3ফ্রিকিনের পার্থক্য করে।
টমসডিং

@ টমসডিং এটি runghcপাশের দিকে ধীর আসলে এটি আমার লিনাক্স বাক্সে 10 গুণ ধীর।
রায়

5
এটি সহিংসতার অস্তিত্বের ইঙ্গিত দেয়, এই
নিহিততাটি আমাদের প্রশান্তবাদী

9

বানর - পাইথন (প্রথমবারের মতো প্রবেশ!)

বানর দেখ, বানর কর। এলোমেলো খেলোয়াড়ের দ্বারা নেওয়া শেষ ক্রিয়াটির পুনরাবৃত্তি করবে।

import sys, random
targetData = sys.argv[2].split()[random.randint(0,3)]
print(targetData.split(',')[len(targetData.split(','))-1])

এভাবে চালানো যেতে পারে: "পাইথন monkey.py আরগস" কোনও অতিরিক্ত পদক্ষেপের প্রয়োজন নেই।


2
আমি আশা করি তারা আপনাকে গুলি করছিল না! পাইথন নেতিবাচক অ্যারে সূচকগুলি সমর্থন করে, সুতরাং আপনাকে দৈর্ঘ্য গণনা করতে হবে এবং একটিকে বিয়োগ করতে হবে না; শুধু -1সরাসরি ব্যবহার করুন ।
প্রতিযোগিতামূলক

@ কম্পেরেনডিনোস বলুন আমি তাদের তালিকায় এস 3। যদি আমি এস 3 কার্যকর করি তবে এটি আমাকে নির্বোধ করবে না। এছাড়াও, -1 সূচক শেষ উপাদানটি ফেরত দেবে? যদি তাই হয়, শীতল! আমি এটি যুক্ত করা নিশ্চিত হবে।
ইলিয়াস

এবং প্রথম (পূর্ণসংখ্যার) যুক্তিটি ভুলে যাবেন না। আপনার যা দরকার তা argv[2]খেলোয়াড়দের ইতিহাস জন্য।
প্রতিযোগিতামূলক

আশা করি আপনি ইমো কাউবয়ের সাথে মেলে না।
কোডব্রেকার

6

সাধারণ শ্যুটার - পার্ল (স্থির বাগ)

এই বটটি সবচেয়ে বেশি স্বাস্থ্য নিয়ে প্রতিপক্ষকে গুলি করে। এটি একটি খুব সাধারণ কৌশল, তবে আমি মনে করি এটির পক্ষে আসলে ভাল করার একটি উপযুক্ত সুযোগ রয়েছে।

@history = map([split(",",$_)],split(" ",$ARGV[1]));
$target = 1;
for(2..3){
 if($history[$_][0] >= $history[$target][0]){$target = $_}
}
print "S$target"

এটি উদাহরণস্বরূপ কিছু ইনপুট ব্যবহার করে এটি চালাবেন:

perl simpleshooter.plx 7 "3,S2,N 5,P,N 3,S0,N -2,S3,N"

কি দারুন. সহজ এবং স্মার্ট।
সোহম চৌধুরী

6

স্পোক, পাইথন 3.x এ

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


এই গেমের উদ্দেশ্য স্কোর সর্বাধিক করা , যা কেবল দাঁড়িয়ে থাকা প্রত্যেকেই সম্পন্ন করবে, যা ট্র্যাকের কারণে সম্ভব নয়।

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

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

  • যদি কোনও খেলোয়াড় কোনও গ্রেনেড আগে থেকে না নিয়ে থাকে, তবে এখনও অবিরত কমপক্ষে স্বাস্থ্যকর খেলোয়াড়কে লক্ষ্য করুন।
  • যদি এমন খেলোয়াড় থাকে যে গ্রেনেডগুলি প্রাকদর্শন করে, তবে সেগুলি থেকে স্বল্পতম স্বাস্থ্যকর লক্ষ্যমাত্রা রয়েছে।

যুক্তিটি হ'ল, দুর্বলতম খেলোয়াড়দের লক্ষ্য করে আমরা ক্ষতির উত্স শেষ করছি ating গ্রেনেডের পিছনে যুক্তি হ'ল তারা নির্বিশেষে চলে যাচ্ছে এবং যদি তারা নিক্ষেপ না করা হয় তবে তারা কম ক্ষতি করে।


এবং তাই এই বট কাজ করে। ইনপুট ব্যর্থতার জন্য আমি ব্যাপকভাবে পরীক্ষা করে দেখিনি (সুতরাং কিছু ঘৃণিত হয়ে থাকলে আমাকে সতর্ক করুন) তবে আমি আত্মবিশ্বাসী যে বেশিরভাগ কিঙ্কস আমি কাজ করেছি। আমি হ্যানসোলো বট থেকে কোডের একটি ছোট্ট অংশটি ভিত্তিক করেছি তবে বেশিরভাগ অংশের জন্য এটি কোডের জট বেঁধেছে। উপভোগ করুন।

def IsAlive(player):
  return int(player[1].split(",")[0]) > 0
def IsTarget(player, target_health):
  return int(player[1].split(",")[0]) < target_health
def HasGrenade(player):
  max_range = max(-4,-current_turn)
  for foo in range(-1,max_range,-1):
    if "P" in player[1].split(",")[foo]:
      for bar in range(-1,foo-1,-1):
        if player[1].split(",")[bar] not in ["T0", "T1", "T2", "T3"]:
          return True
  return False

import sys
info_list = sys.argv[2].split()
current_turn = len(info_list[0].split(","))
action = "N"

def Startgame():
  global action

  target = 1
  target_health = 5
  grenade_list=[]

  for player in zip(range(1,4),info_list[1:]):
    if HasGrenade(player):
      grenade_list.append(player)

  if not grenade_list:
    foo_list = []
    for player in zip(range(1,4),info_list[1:]):
      foo_list.append(player)
    target_list = foo_list
  else:
    target_list = grenade_list

  # Choose the least healthy player
  for player in target_list:
    if IsAlive(player) and IsTarget(player, target_health):
      target = player[0]
      target_health = int(player[1][0])

  action = "S" + str(target)

def Endgame(turn):
  global action

  if turn in [47, 49]:
    # Check if in 2 moves he can do enough damage
    rem_health = 0
    for player in zip(range(1,4),info_list[1:]):
      if IsAlive(player): rem_health += player[0]

    if rem_health < 5:
      Startgame() # It's lazy, but it should work
      return
    else:
      action = "P"
      return

  if turn in [48, 50]:
    # If Spock shot someone before, it needs to shoot again
    if info_list[0].split(",")[-1] in ["S0", "S1", "S2", "S3"]:
      Startgame()
      return
    else:
    # There's no rule against throwing grenades to dead bodies, so if
    # possible it will be thrown there.    
      target = 1
      target_health = 5

      foo_list = []
      for player in zip(range(1,4),info_list[1:]):
        foo_list.append(player)
      target_list = foo_list

      for player in target_list:
        if IsTarget(player, target_health):
          target = player[0]
          target_health = int(player[1][1])

      action = "T" + str(target)
      return

if current_turn > 46:
  Endgame(current_turn)
else:
  Startgame()

print(action)

এটি চালান:

python spock.py

2014-08-12 - গ্রেনেড সনাক্তকরণ সম্পর্কিত
মাইনর বাগফিক্স 2014-08-14 - এন্ড্যাগাম সম্পর্কিত মাইনর বাগফিক্স, এর আগে এটি চিহ্নিত করার জন্য আইএএসএজিকে ধন্যবাদ


আপনাকে প্রতি দুটি রাউন্ডে একাধিকবার গুলি করার অনুমতি নেই not শ্যুটিং উপর অনুমিত পড়ুন।
isaacg

@ আইস্যাক এই অনুস্মারকটির জন্য ধন্যবাদ (যা আচরণটি ব্যাখ্যা করে) তবে কিছু সুপ্ত বাগ রয়েছে বলে মনে হচ্ছে। উদাহরণস্বরূপ, এই স্পকে ইনপুট অ্যানালিজার গুলি করা উচিত ছিল কারণ তার একটি লাইভ গ্রেনেড ছিল (এমনকি যদি সোলোর আরও 2 স্বাস্থ্য থাকে)।
ডক্টোরো রিচার্ড

Traceback (most recent call last): File "./players/Spock/Spock.py", line 87, in <module>: Endgame(current_turn) File "./players/Spock/Spock.py", line 79, in Endgame: if IsTarget(player, target_health): File "./players/Spock/Spock.py", line 4, in IsTarget: return int(player[1].split(",")[0]) < target_health TypeError: unorderable types: int() < str()
es1024

player[1][1]হওয়া উচিত int(player[1][1])
isaacg

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

5

রাজনৈতিকভাবে সঠিক বন্দুকধারী

খুব রাজনৈতিকভাবে সঠিক, কারণ এটি কোনও কিছুর সাথে বৈষম্য করে না। সুতরাং এটি খুব স্মার্ট নয়।

import random

array = ["P", "N", "S0", "S1", "S2", "S3", "D1", "D2", "D3", "T1", "T2", "T3"]

print(array[random.randrange(0,11)])

এটি ... কী যুক্তিতে এটি যুক্ত করা যায় তা আসলেই কিছু যায় আসে না। python politicallycorrectgunman.py


বর্গাকার বন্ধনীগুলির আউটপুট অংশ হওয়ার কথা বলে আমি মনে করি না। সম্ভবত @ es1024 এটি নিশ্চিত করতে পারে। এবং আপনি এলোমেলো.চয়েস সম্পর্কে জানেন? এই ধরণের নির্বাচনের জন্য এটি দুর্দান্ত।
প্রতিযোগিতামূলক

আউটপুটে অ্যাকশন এবং টার্গেটের আগে কিছুই হতে পারে না, যদিও এর পরে কিছু উপেক্ষা করা হয়
es1024

এটি কি আরও ভাল @ es1024 দেখায়?
পূর্বাবস্থা

@ ইন্দো হ্যাঁ, এখন নিখুঁতভাবে কাজ করে
es1024

7
আপনি কি শুধু ব্যবহার করতে পারবেন না random.choice(array)?
ব্যবহারকারী 2357112

5

স্ট্রেট শ্যুটার

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

print('S2')

পার্ল, পাইথন 2/3, রুবি: এই ঘোড়াটি সত্যই বহুগোটের প্রবেশ।

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

এমন উত্তরের জন্য যা এতে আরও কিছুটা চিন্তাভাবনা (এবং কিছু কার্যকরী দৃষ্টান্ত) রেখেছিল, দেখুন চব্বিশতম এবং একটি অর্ধ শতাব্দী দেখুন


5

এন্টি-সৈনিকবিশেষ

গ্রেনেড খারাপ। খুব খারাপ. তাই যদি কেউ একটি প্রস্তুত করে রাখে তবে করণীয় হ'ল সর্বোত্তম বিষয় হ'ল তাদের shoot অন্যথায়, আমরা কেবল hangout করব।

-- Antigrenadier
local args = {...}  -- command line arguments

match = args[2]     -- store the set of matches

-- why this isn't standard in Lua....
function string:split( inSplitPattern, outResults )
  if not outResults then
    outResults = { }
  end
  local theStart = 1
  local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
  while theSplitStart do
    table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) )
    theStart = theSplitEnd + 1
    theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart )
  end
  table.insert( outResults, string.sub( self, theStart ) )
  return outResults
end

-- set up the players
players = match:split(" ")

-- search other players for someone who pulled a grenade
for i=2,#players do
   moves = players[i]
   -- test if person is alive
   if moves:sub(1,1) ~= "-" then
      -- cycle through all elements of the string
      for j=#moves,2,-1 do
         -- if found, shoot!
         if moves:sub(j,j) == "P" then
            print("S"..i-1)
            os.exit()
         end
      end
   end
end

-- otherwise we just relax
print("N")

4

রিকোচেট - পার্ল

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

@history = map([split(",",$_)],split(" ",$ARGV[1]));
$health = $history[0][0];
@options = ();
for(1..3){
 if($history[$_][0] > 0){
  push(@options,$_);
 }
}
$target = @options[int(rand(~~@options))];
if(~~@{$history[0]} == 50){
 $target = 0;
}
print"S$target";

এর মতো চালান:

perl ricochet.plx 5 "-2,S0 -2,S1 -2,S2 5,N" 

4

আক্রমণকারী

এক রাউন্ডে টানা, দ্বিতীয় রাউন্ডে সর্বোচ্চ স্বাস্থ্য প্রতিপক্ষকে ছুড়ে ফেলে, তারপরে সর্বোচ্চ স্বাস্থ্য প্রতিপক্ষকে গুলি করে।

#include <cstdio>
#include <cstring>

int main(int argc, char** argv){
   char* t;
   t = strtok(argv[2]," ");
   int len = strlen(t);
   int max = -50, maxP;
   for(int i=1;i<4;i++){
      int cur;
      t = strtok(NULL," ");
      if(t[0]=='-'){cur = -1*(t[1]-'0');}
      else{cur = t[0]-'0';}
      if(cur>max){
         max = cur;
         maxP = i;
      }
   }
   if(len == 1){printf("P\n"); return 0;}
   if(len == 3){printf("T%d\n",maxP); return 0;}
   printf("S%d\n",maxP);
   return 0;
}

এইটিকে ./agg আইডি "5 5 5 5" এর মতো চালান।


4

নিনজা

আঘাত হ্রাস এড়াতে এলোমেলোভাবে চেষ্টা চালাও।

math.randomseed(os.time())
print("D"..tostring(math.random(4)-1))

হিসাবে চালান

lua ninja.lua

আরগগুলি অপ্রয়োজনীয়, তবে ডাব্লু / ও ইস্যু যুক্ত করা যেতে পারে।


2
স্থাপিত টুইট
skeggse

2
@ ডিসিলেটেডচোস: ... হ্যাঁ, হ্যাঁ তিনি করবেন।
কাইল কানোজ

4

নাম : অগ্রাধিকারকাজ

শেল কমান্ড : রুবি অগ্রাধিকারশিক্ষা.আরবি 5 [গেম_স্টেট]

ভাষা : রুবি ভি 2.1.2

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

দ্রষ্টব্য : প্রথম কোড গল্ফ জমা! অন্যান্য সাবমিশনের চেয়ে অনেক বড় কারণ আমি কিছুটা পাগল হয়ে গেলাম।

#!/usr/bin/env ruby

class PriorityTargets
  class PlayerAction
    SHOOT = 'S'
    DODGE = 'D'
    PREPARE_GRENADE = 'P'
    THROW_GRENADE = 'T'
    NOTHING = 'N'
    attr_accessor :action, :target

    def initialize(action_string)
        @action = action_string[0, 1]
        @target = self.has_target? ? action_string[1, 1].to_i : false
    end

    def to_s
      string = @action
      string << @target.to_s if self.has_target?
      string
    end

    def has_cooldown?
      [SHOOT].include? @action
    end

    def is_aggressive?
      [SHOOT, PREPARE_GRENADE, THROW_GRENADE].include? @action
    end

    def has_target?
      [SHOOT, DODGE, THROW_GRENADE].include? @action
    end
  end


  class Player
    attr_reader :identifier, :health, :history
    attr_accessor :playstyles

    def initialize(player_identifier, player_string)
      @identifier = player_identifier
      @playstyles = []

      player_info = player_string.split(',')
      @health = player_info.shift.to_i
      @history = parse_history(player_info)
    end


    def has_attacked?(player, round = nil)
      round ||= self.history.length - 1
      player.history[0, round].each do |turn|
        did_attack = true and break if turn.is_aggressive? && turn.has_target? && turn.target == player.identifier
      end
      did_attack ||= false
    end

    def is_holding_grenade?(round = nil)
      round ||= self.history.length
      turn_history = self.history[0, round]
      is_holding = false

      turn_history.each_with_index do |turn, curr_round|
        if turn.action == PlayerAction::PREPARE_GRENADE && curr_round >= round - 3
          is_holding = true if turn_history.drop(curr_round).select{|turn| turn.action == PlayerAction::THROW_GRENADE }.length == 0
        end
      end

      is_holding
    end

    def is_dead?; self.health <= 0; end
    def is_on_cooldown?
      return false if self.history.length == 0
      self.history.last.has_cooldown?
    end

    def turn_at_round(round); self.history[round-1]; end

    private

      def parse_history(history_array)
        parsed = []
        history_array.each {|action_string| parsed << PlayerAction.new(action_string) }
        parsed
      end
  end

  class PlayerList
    include Enumerable

    def initialize(player_list = [], filter_list = false)
      @list = player_list
      @filter = filter_list if filter_list
    end

    #Enumerable Methods
    def each
      list = @list.select{|player| @filter.include?(player.identifier) } if @filter
      list = @list unless @filter
      list.each {|player| yield(player) }
    end

    def <<(player); @list << player; end
    def [](key)
      player = @list.select{|player| @filter.include?(player.identifier) }[key] if @filter
      player = @list[key] unless @filter
      player
    end

    def length
      list = @list.select{|player| @filter.include?(player.identifier) } if @filter
      list = @list unless @filter
      list.length
    end

    def empty?; self.length == 0; end
    def not_empty?; self.length > 0; end

    def create_filtered_list(player_ids)
      new_player_list = PlayerList.new(@list, player_ids)
      new_player_list
    end

    #PlayerList Methods
    def includes_playstyle?(playstyle)
      (self.with_playstyle(playstyle).length > 0)
    end

    def have_executed_action?(action)
      action_found = false
      self.each {|player| action_found = true and break if player.history.select {|turn| turn.action == action}.length > 0 }
      action_found
    end

    def direct_damages(round = nil)
      round ||= self.first.history.length

      damage_list = {}
      @list.each {|player| damage_list[player.identifier] = 0 }

      if round >= 1
        @list.each do |player|
          player.history[0, round].each_with_index do |turn, curr_round|

            if turn.has_target?
              target_player = @list.select{|curr_player| curr_player.identifier == turn.target }.first
              target_turn = target_player.turn_at_round(curr_round)

              damage_list[turn.target] += 8 if turn.action == PlayerAction::THROW_GRENADE

              if turn.action == PlayerAction::SHOOT
                damage_list[turn.target] += 2 unless target_turn.action == PlayerAction::DODGE && target_turn.target == player.identifier
              end
            end
          end
        end
      end

      damage_list.select! {|key| @filter.include? key } if @filter
      damage_list
    end


    def filtered_with_condition(&condition_block)
      player_ids = []
      self.each {|player| player_ids << player.identifier if condition_block.call(player) }
      create_filtered_list(player_ids)
    end

    def on_cooldown; filtered_with_condition {|player| player.is_on_cooldown?} end
    def not_on_cooldown; filtered_with_condition {|player| !player.is_on_cooldown?} end

    def dead; filtered_with_condition {|player| player.is_dead?} end
    def not_dead; filtered_with_condition {|player| !player.is_dead?} end

    def with_playstyle(playstyle); filtered_with_condition {|player| player.playstyles.include?(playstyle)} end
    def not_with_playstyle(playstyle); filtered_with_condition {|player| !player.playstyles.include?(playstyle)} end

    def with_max_health(round = nil)
      round ||= self.first.history.length
      player_damages = direct_damages(round)
      filtered_with_condition {|player| player_damages[player.identifier] == player_damages.values.min }
    end

    def with_identifier(identifier)
      matches = self.with_identifiers([ identifier ])
      return nil if matches.empty?
      matches.first
    end

    def with_identifiers(identifiers)
      create_filtered_list(identifiers)
    end
  end

  class PlayerTypes
    GRENADIER = :GRENADIER
    COWBOY = :COWBOY
    SKIDDISH = :SKIDDISH
    AGGRESSOR = :AGGRESSOR
    DEFENSIVE = :DEFENSIVE
    ANTI_GRENADIER = :ANTI_GRENADIER
    PLAYSTYLE_ORDER = [GRENADIER, COWBOY, SKIDDISH, AGGRESSOR, DEFENSIVE, ANTI_GRENADIER]

    def initialize(player_list)
      @players = player_list
    end

    def analyze_playstyles
      return if @players.first.history.length == 0

      PLAYSTYLE_ORDER.each do |playstyle|
        check_fnc = "is_"+playstyle.to_s+'?'
        @players.each {|player| player.playstyles << playstyle if self.send(check_fnc, player) }
      end
    end

    def is_GRENADIER?(player)
      #Grenade on first turn
      #Used more than one grenade
      #Never used gun, only grenade
      shoot_count = player.history.count {|turn| turn.action == PlayerAction::SHOOT }
      grenade_count = player.history.count {|turn| turn.action == PlayerAction::PREPARE_GRENADE }

      profiled ||= true if player.history.first.action == PlayerAction::PREPARE_GRENADE
      profiled ||= true if grenade_count > 1
      profiled ||= true if shoot_count == 0 && grenade_count > 0
      profiled ||= false
    end

    def is_COWBOY?(player)
      #Never used grenade, only gun
      shoot_count = player.history.count {|turn| turn.action == PlayerAction::SHOOT }
      grenade_count = player.history.count {|turn| turn.action == PlayerAction::PREPARE_GRENADE }

      profiled ||= true if grenade_count == 0 && shoot_count > 0
      profiled ||= false
    end

    def is_SKIDDISH?(player)
      #Dodged more than once
      #Never hurts anybody
      dodge_count = player.history.count {|turn| turn.action == PlayerAction::DODGE }
      attack_count = player.history.count {|turn| turn.is_aggressive? }

      profiled ||= true if dodge_count > 1
      profiled ||= true if attack_count == 0 && player.history.length > 1
      profiled ||= false
    end

    def is_AGGRESSOR?(player)
      #Only shoots person >= most health
      profiled = false
      player.history.each {|turn| profiled = true if turn.is_aggressive? && turn.has_target? }

      player.history.each_with_index do |turn, round|
        if turn.is_aggressive? && turn.has_target?
          profiled = false if !@players.with_max_health(round).include? @players.with_identifier(turn.target)
        end
      end
      profiled
    end

    def is_DEFENSIVE?(player)
      #Only hurts people who hurt them first
      player.history.each {|turn| profiled = true if turn.is_aggressive? && turn.has_target? }

      player.history.each_with_index do |turn, round|
        if turn.is_aggressive? && turn.has_target?
          target_player = @players.with_identifier(turn.target)
          profiled = false unless target_player.has_attacked?(player, round)
        end
      end
      profiled ||= false
    end

    def is_ANTI_GRENADIER?(player)
      #After a Grenadier has been shown, only shoots grenadier
      shots_fired = 0
      shots_fired_while_holding = 0

      player.history.each_with_index do |turn, round|
        if turn.is_aggressive? && turn.has_target?
          target_player = @players.with_identifier(turn.target)
          shots_fired += 1
          shots_fired_while_holding += 1 if target_player.is_holding_grenade?(round)
        end
      end

      (shots_fired > 0 && shots_fired/2.0 <= shots_fired_while_holding)
    end
  end




  def initialize(game_state)
    players_info = game_state.split(' ')
    @player = Player.new(0, players_info.shift)
    @players = PlayerList.new
    @players << @player
    enemy_identifiers = []

    players_info.each_with_index {|info, index| @players << Player.new(index+1, info); enemy_identifiers << index+1; }

    @enemies = @players.with_identifiers(enemy_identifiers  )
  end

  def analyze_playstyles
    types = PlayerTypes.new(@players)
    types.analyze_playstyles
  end

  def find_dodge_target
    armed_aggressors = @enemies.with_playstyle(PlayerTypes::AGGRESSOR).not_on_cooldown().not_dead()

    if armed_aggressors.not_empty?
      return armed_aggressors.with_max_health().first if @players.with_max_health().include?(@player) && @players.with_max_health().length == 1
    end

    return @enemies[Random.rand(3)] if @player.history.length == 0
    nil
  end

  def find_target
    unarmed_aggressors = @enemies.with_playstyle(PlayerTypes::AGGRESSOR).on_cooldown().not_dead()
    anti_grenadiers = @enemies.with_playstyle(PlayerTypes::ANTI_GRENADIER).not_dead()
    grenadiers = @enemies.with_playstyle(PlayerTypes::GRENADIER).not_dead()
    cowboys = @enemies.with_playstyle(PlayerTypes::COWBOY).not_dead()
    skiddish = @enemies.with_playstyle(PlayerTypes::SKIDDISH).not_dead()
    defensive = @enemies.with_playstyle(PlayerTypes::DEFENSIVE).not_dead()

    if unarmed_aggressors.not_empty?
      return unarmed_aggressors.with_max_health().first if @players.with_max_health().include?(@player) && @players.with_max_health().length == 1
    end

    return anti_grenadiers.with_max_health().first if anti_grenadiers.not_empty?
    return grenadiers.with_max_health().first if grenadiers.not_empty?
    return cowboys.with_max_health().first if cowboys.not_empty?
    return skiddish.with_max_health().first if skiddish.not_empty?
    return defensive.with_max_health().first if defensive.not_empty?
    return @enemies.with_max_health().not_dead().first if @enemies.with_max_health().not_dead().length > 0
    nil
  end

  def find_weapon
    return PlayerAction::THROW_GRENADE if @player.is_holding_grenade?

    anti_grenadiers = @enemies.with_playstyle(PlayerTypes::ANTI_GRENADIER).not_dead()

    return PlayerAction::PREPARE_GRENADE if anti_grenadiers.empty? && @enemies.have_executed_action?(PlayerAction::PREPARE_GRENADE)
    PlayerAction::SHOOT
  end

  def make_decision
    dodge_target = self.find_dodge_target
    target = self.find_target
    weapon = self.find_weapon

    decision ||= PlayerAction.new(PlayerAction::NOTHING) if @player.is_on_cooldown? || @enemies.with_max_health().not_dead().length == 0
    decision ||= PlayerAction.new(PlayerAction::DODGE + dodge_target.identifier.to_s) if dodge_target
    decision ||= PlayerAction.new(weapon + target.identifier.to_s)
    STDOUT.write decision.to_s
  end
end

priority_targets = PriorityTargets.new(ARGV[1])
priority_targets.analyze_playstyles
priority_targets.make_decision

1
আমি আপনার পদ্ধতির পছন্দ করি, এটি কীভাবে হবে তা দেখার জন্য আমি প্রতীক্ষিত।
ওভাররেেক্টর

দুঃখজনকভাবে, দেখে মনে হচ্ছে এটিতে একটি বাগ ছিল যা গ্রেনেডিয়র তৈরি করেছিল। আহ্, পরের বার আরও ভাল করবে :)
আঙ্গুলের

3

কাপুরুষ - পার্ল

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

#!/usr/bin/perl

@allinfo = map { [split/,/] } split / /, $ARGV[1];
@life = map { $_->[0] } @allinfo;
@action = map { @$_>1 ? $_->[-1] : () } @allinfo;

if($life[0] < 3 && rand() < .5 )
{
    printf "D%d", +(sort { ($life[$a]>0)*($action[$a] eq "N") <=> ($life[$b]>0)*($action[$b] eq "N") } 1..3)[2]
}
else
{
    @score = map { $life[$_]>0 ? (5/$life[$_] + 2*($action[$_] =~ /S./)) : 0 } 1..3;
    printf "S%d", +(sort { $score[$a] <=> $score[$b] } 1..3);
}

সুন্দর স্ট্যান্ডার্ড পার্ল কোড; এটি কোনও ফাইলে সংরক্ষণ করুন এবং তারপরে চালান perl file argument argument [...]। আমি বাক্য গঠন পরীক্ষা করেছি এবং এটি ঠিক আছে, তাই আমি এটির সাথে কোনও সমস্যার আশা করি না।

ই: 0 ত্রুটি দ্বারা বিভাগের জন্য একটি সম্ভাব্যতা মুছে ফেলা।


3

Bomberman

আর-তে লেখা বট, কমান্ড লাইনটি হওয়া উচিত: Rscript Bomberman.R arg0 arg1
আমি এই বটটি লিখতে শুরু করার পরে বুঝতে পেরেছিলাম যে জিওবিটস ইতিমধ্যে একটি গ্রেনেডিয়র তৈরি করেছে তবে আমি মনে করি খনিটি উল্লেখযোগ্যভাবে আলাদা, কারণ এটি একটি গ্রেনেড প্রস্তুত করার আগে এর স্বাস্থ্য 3 এর উপরে রয়েছে এটি পরীক্ষা করে, সর্বশেষ শ্যুটার প্রথমে এবং সবচেয়ে স্বাস্থ্যকর দ্বিতীয়টি এবং এর স্বাস্থ্য 3 এর নিচে থাকলে এটি বিপজ্জনক খেলোয়াড়কে ধাক্কা দেবে (শেষ রাউন্ডে মৃত বা শ্যুটার নয়) বা বাকি একজন খেলোয়াড়কে গুলি করবে।

input <- commandArgs(TRUE)
history <- do.call(rbind,strsplit(scan(textConnection(input[2]),"",quiet=TRUE),","))
health <- as.integer(history[,1])
last_shooter <- which(grepl("S",history[-1,ncol(history)]))
last_prepare <- which(history[1,]=="P")
if(!length(last_prepare)) last_prepare <- -1
last_throw <- which(grepl("T",history[1,]))
if(!length(last_throw)) last_throw <- 0
most_healthy <- which.max(health[-1])
dead <- which(health[-1]<=0)
inoffensive <- c(last_shooter,dead)
danger <- which(!(1:3)%in%inoffensive)
alive <- which(!(1:3)%in%dead)
if(health[1]>3 & last_throw > last_prepare) out <- "P"
if(last_throw < last_prepare) out <- ifelse(length(last_shooter),paste("T",last_shooter[1],sep=""),paste("T",most_healthy[1],sep=""))
if(health[1]<=3 & last_throw > last_prepare){
    if(length(danger)){
        out <- paste("D",sample(danger,1),sep="")
    }else{
        out <- paste("S",sample(alive,1),sep="")
    }
}
cat(out)

সম্পাদন করা

এই বট এবং আপনার নিয়ামকের মধ্যে কোনও যোগাযোগের সমস্যা আছে বলে মনে হচ্ছে যেহেতু আমি যে সমস্ত লগগুলি দেখেছিলাম তা আমার বটটি কেবলমাত্র আউটপুটকে দেখায় N। সুতরাং, এখানে একই বট কিন্তু পাইথনে আবারও লিখেছেন, এই আশায় যে এটির যদি যোগাযোগের সমস্যা হয় তবে কেউ এটি দেখতে পাবে।
সাথে ডাকা হবে python Bomberman.py arg0 arg1

import sys,re,random

history = sys.argv[2]
history = [k.split(",") for k in history.split()]
health = [k[0] for k in history]
last_turn = [k[-1] for k in history]
last_shooter = [i for i,x in enumerate(last_turn) if re.search(r'S[0-3]',x)]
last_prepare = [i for i,x in enumerate(history[0]) if x=='P']
if not len(last_prepare):
    last_prepare = [-1]

last_throw = [i for i,x in enumerate(history[0]) if re.search(r'T[0-3]',x)]
if not len(last_throw):
    last_throw = [0]

most_healthy = [i for i,x in enumerate(health) if x==max(health)]
dead = [i for i,x in enumerate(health) if x<=0]
inoffensive = last_shooter+dead
danger = [k for k in range(1,4) if k not in inoffensive]
alive = [k for k in range(1,4) if k not in dead]
if health[0]>3 and last_throw[-1] > last_prepare[-1]:
    out = 'P'

if last_throw[-1] < last_prepare[-1]:
    if len(last_shooter):
        out = 'T'+random.choice(last_shooter)
    else:
        out = 'T'+random.choice(most_healthy)

if health[0]<=3 and last_throw[-1] > last_prepare[-1]:
    if len(danger):
        out = 'D'+random.choice(danger)
    else:
        out = 'S'+random.choice(alive)

print(out)

বটের নাম তুলনামূলকভাবে দুর্বল, তবে আমি ধারণা থেকে দূরে সরে এসেছি, যদি কেউ আরও ভাল নামটি ভাবতে পারেন তবে মন্তব্য করুন :)
প্ল্যানাপাস

GymnastBomber !!
ক্রাঙ্কার

3

নিও

এমন জীবন্ত খেলোয়াড়কে ডজ করুন যিনি শেষ মুহুর্তটি শ্যুট করেননি। যদি প্রত্যেকে বেঁচে থাকে শেষ মুহুর্তে, এলোমেলো জীবন্ত খেলোয়াড়কে গুলি করুন। আপনি যখন হেডলাইটগুলি দেখেন তখন আত্মহত্যা।

import java.util.Random;
public class Neo {
    public static void main(String[] args) {
        if(args.length < 2)
            return;
        String[] list = args[1].split(" ");
        if(list.length < 4)
            return;
        Random rand = new Random();
        int turn = list[0].split(",").length;
        if(turn == 49){
            System.out.print("S0");
            return;
        }
        int target=0;
        for(int i=1;i<4;i++)
            if(list[i].length()<2 || (list[i].charAt(0)!='-' && list[i].charAt(list[i].length()-2)!='S'))
                target=i;
        if(target>0){
            System.out.print("D"+target);
            return;
        }
        while(target<1){
            int i=rand.nextInt(3)+1;
            if(list[i].charAt(0)!='-')
                target=i;
        }
        System.out.print("S"+target);
    }
}

গ্রেনেড-চাকারদের বিরুদ্ধে আমি এই লোকটির কাছ থেকে খুব বেশি আশা করি না, তবে শ্যুটারদের বিরুদ্ধে এটি খুব ভালভাবে কাজ করতে পারে। আমরা দেখব.


আমি আমার উত্তরে আপনার কিছু বয়লারপ্লেট কোড ব্যবহার করেছি । আমি আশা করি ঠিক আছে।
ওভাররেक्टर

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.charAt(String.java:658) at Neo.main(Neo.java:17)
es1024

@ es1024 এখন যাওয়া ভাল হওয়া উচিত, এবং প্রতিটি প্রথম পালা করে কিছু করবেন না।
Geobits

2

চব্বিশ এবং একটি অর্ধশতক

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

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

#!/usr/bin/env python
import sys
import random

## ==== Move Types ================================================== ##
def move_type (move):
    if "" == move:
        return "N"
    return move[0]

def is_passive_move (move):
    if "N" == move:
        return True
    if "D" == move_type (move):
        return True
    return False

def is_aggressive_move (move):
    return not is_passive_move (move)

def passive_moves (moves):
    return [m for m in moves if is_passive_move (m)]

def aggressive_moves (moves):
    return [m for m in moves if is_aggressive_move (m)]
## ================================================== Move Types ==== ##

## ==== Player Model ================================================ ##
class Player:
    def __init__ (self, number, health, moves):
        self.number = number
        self.health = health
        self.moves  = moves

    def last_move (self):
        if 0 == len (self.moves):
            return ""
        return self.moves[-1]

def player_from (number, player_string):
    x = player_string.split (",")
    health = int (x[0].strip ())
    moves = [move.strip () for move in x[1:]]

    return Player (number, health, moves)

def players_from (game_state):
    return [player_from (n, p) for (n, p) in
                                   zip (range(4), game_state.split ())]

def is_alive (player):
    return 0 < player.health

def i_am_dead (me):
    return not is_alive (me)

def can_shoot (player):
    return "S" != move_type (player.last_move ())

def is_passive (player):
    passive_move_count = len (passive_moves (player.moves))
    aggressive_move_count = len (aggressive_moves (player.moves))

    return passive_move_count > (aggressive_move_count + 1)

def players_who_can_breathe (players):
    return [p for p in players if is_alive (p)]

def players_who_can_shoot (players):
    return [p for p in players if can_shoot (p)]

def players_who_stand_around (players):
    return [p for p in players if is_passive (p)]
## ================================================ Player Model ==== ##

## ==== Actions ===================================================== ##
def shoot_randomly_at (possible_targets):
    chosen_target = random.choice (possible_targets)
    return "S{0}".format (chosen_target.number)

def dodge_one_of_the (potential_shooters):
    chosen_shooter = random.choice (potential_shooters)
    return "D{0}".format (chosen_shooter.number)

def do_nothing ():
    return "N"

def pick_move (game_state):

    players = players_from (game_state)
    me = players[0]
    enemies = players[1:]

    if i_am_dead (me):
        return do_nothing ()

    living_enemies = players_who_can_breathe (enemies)
    if 1 == len (living_enemies):
        return shoot_randomly_at (living_enemies)

    passive_enemies = players_who_stand_around (living_enemies)
    if len (living_enemies) == len (passive_enemies):
        return shoot_randomly_at (passive_enemies)

    potential_shooters = players_who_can_shoot (living_enemies)
    if 0 < len (potential_shooters):
        return dodge_one_of_the (potential_shooters)

    return do_nothing ()
## ===================================================== Actions ==== ##

if "__main__" == __name__:

    game_state = sys.argv[2]
    print (pick_move (game_state))

হিসাবে চালান:

python twenty-fourth-and-a-halfth-century.py 0 "5 5 5 5"

2

কাঁচুমাচু

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

import sys
import random


def is_alive(player):
    return int(player.split(",")[0]) > 0


# Anyone with a live grenade who is alive is dangerous
def is_dangerous(player):
    return player.count("P") > player.count("T") and \
        int(player.split(",")[0]) > 0


def health(player):
    return int(player.split(",")[0])


# Failing that, healthy people are dangerous
def danger_rating(player):
    return 6 if is_dangerous(player) else health(player)

enemies = sys.argv[2].split()[1:]

highest_danger = max(danger_rating(enemy) for enemy in enemies)
most_dangerous_enemy = random.choice(
    [enemy_num+1 for enemy_num in range(len(enemies))
     if danger_rating(enemies[enemy_num]) == highest_danger])

print("S"+str(most_dangerous_enemy))

এটি অজগর (2 বা 3, উভয় ক্ষেত্রে একই ফলাফল)) সংরক্ষণ করুন scared.py, চালানpython3 scared.py


2

ম্যানিপুলেটিভ জাস্টার্ড - পাইথন

গ্রেনেড প্রস্তুত এবং নিক্ষেপ করে। যদি সে মনে করে যে সময় নেই বা খুব কম শত্রু রয়েছে তবে সে গুলি করে। যদি সে একা থাকে তবে সে অন্য লোকটিকে ছাড়িয়ে যাওয়ার চেষ্টা করে।

import sys

def health(p):
    return int(p[0])

def is_alive(p):
    return health(p) > 0

def can_act(p):
    return is_alive(p) and p[-1][0] != 'S'

def can_throw(p):
    return is_alive(p) and p[-1][0] == 'P'

def shot_first(p):
    if len(p) == 1:
        return False
    return p[1][0] == 'S'

def act(a):
    print a
    sys.exit(0)

player = sys.argv[2].split()[0].split(',')
enemies = [e.split(',') for e in sys.argv[2].split()[1:]]
healthiest = sorted(enumerate(enemies, 1), key=lambda e:health(e[1]))[-1]
alive = sum(is_alive(e) for e in enemies)

if alive == 1:
    i, e = healthiest
    if health(e) <= 2 and not can_act(e):
        act('S%d' % i)
    if can_throw(player):
        act('T%d' % i)
    if can_throw(e):
        act('S%d' % i)
    if can_act(e) and shot_first(e) and len(player) < 40:
        act('D%d' % i)
    if len(player) > 45:
        act('P')
    act('S%d' % i)

if can_throw(player):
    i, e = healthiest
    act('T%d' % i)

if len(player) > 45:
    act('P')

if health(player) <= 2 or any(can_throw(e) for e in enemies) or alive == 2:
    i, e = healthiest
    act('S%d' % i)

act('P')

2

ওসামা

আমি এক-এক দিন ধরে এটি চেষ্টা করে যাচ্ছি, এখন সময় এসেছে পোস্ট করার এবং এর মধ্যে অন্যরা কীভাবে বিকশিত হয়েছে তা দেখার।

module Main where

import Data.List
import Data.Ord
import System.Environment

words' "" = []
words' s = s' : words' (tail' s'')
  where
    (s', s'') = break (==',') s
    tail' (',':r) = r
    tail' r = r

nRound = length . words'

lastAction = last . words'

health :: String -> Int
health = read . head . words'

alive = (>0) . health

grenadeAge :: String -> Int
grenadeAge p | not (alive p) = 0
             | otherwise = g 0 $ tail $ words' p
  where
    g n (a:b:r) | head a == 'S' = g (if n>0 then n+2 else 0) r
    g 0 ("P":r) = g 1 r
    g n (('T':_):r) | n>0 = g 0 r
    g n (_:r) | n>0 = g (n+1) r
    g n (_:r) = g n r
    g n [] = n

prepared :: String -> Bool
prepared p = alive p && head (lastAction p) /= 'S'

nShotMe = length . filter (=="S0") . words'

getPlayer = (!!)

action players@(me:them) | not (prepared me) = "S2" -- bogus
                         | nRound me >= 49 = "S0"
                         | grenadeAge me >= 1 = 'T':(show $ maximumBy (comparing (nShotMe . getPlayer players)) l)
                         | any prepared them && nRound me > 0 = 'D':(show $ maximumBy (comparing (nShotMe . getPlayer players)) l)
                         | otherwise = 'S':(show $ maximumBy (comparing (health . getPlayer players)) l)
  where l = filter (alive . (getPlayer players)) [1..3]



main = do
  players <- fmap (words . head . tail) getArgs
  putStrLn $ action players

সঙ্গে কম্পাইল ghc -O2 osama.hs, তারপর ব্যবহার করে চালানো ./players/Osama/osama


2

স্নিপার - লুয়া

প্রথম টার্নে এটি কোনও এলোমেলো ব্যক্তিকে গুলি করবে, তারপরে এটি যে কোনও খেলোয়াড়কে হত্যা করতে পারে (2 বা 1 স্বাস্থ্য) গুলি করবে। যদি সেগুলির কোনও কাজ না করে তবে এটি যে প্লেয়ারটিকে শেষ পর্যন্ত গুলি করেছিল, তাকে গুলি করার চেষ্টা করবে, অন্যথায় এটি একটি এলোমেলো খেলোয়াড়কে গুলি করবে। সাথে চালাওlua Sniper.lua

turns = arg[2]
health = string.sub(turns, 1, 1)
--make random numbers random
math.randomseed(io.popen("date +%s%N"):read("*all"))
math.random(); math.random(); math.random()
function Split(str, delim, maxNb)
    -- Eliminate bad cases...
    if string.find(str, delim) == nil then
        return { str }
    end
    if maxNb == nil or maxNb < 1 then
        maxNb = 0    -- No limit
    end
    local result = {}
    local pat = "(.-)" .. delim .. "()"
    local nb = 0
    local lastPos
    for part, pos in string.gmatch(str, pat) do
        nb = nb + 1
        result[nb] = part
        lastPos = pos
        if nb == maxNb then break end
    end
    -- Handle the last field
    if nb ~= maxNb then
        result[nb + 1] = string.sub(str, lastPos)
    end
    return result
end
enemies = Split(turns, " ")
--first turn
if #enemies[1] == 1 then
  print(string.format("S%i",math.random(1,3)))
  os.exit()
end
--kills if possible
for enemy=1,3 do
  if (tonumber(string.sub(enemies[enemy + 1],1,1)) or 0) < 3 and string.sub(enemies[enemy + 1],1,1) ~= "-" then
    print(string.format("S%i",enemy))
    os.exit()
  end
end
--shoots the last person that shot at it
for enemy=1,3 do
  if string.sub(enemies[enemy + 1],#enemies[enemy + 1]-1) == "S0" and tonumber(string.sub(enemies[enemy + 1],1,1)) > 0 then
    print(string.format("S%i",enemy))
    os.exit()
  end
end
--otherwise shoot a random alive person
local aliveEnemies = {}
for enemy=1,3 do
  if string.sub(enemies[enemy + 1],1,1) ~= "-" then
    aliveEnemies[#aliveEnemies+1]=enemy
  end
end
print(string.format("S%i",math.random(1,#aliveEnemies)))

এটি প্রথমে একটি অতিরিক্ত যুক্তি দিয়ে চালানো হবে; যেমন lua Sniper.lua 3 "5,S1 3,D3 5,N 5,P",। আপনার আপনার argসূচকটি পরীক্ষা করতে হবে ।
প্রতিযোগিতামূলক

@ কম্পেরেন্ডিনাস, ধন্যবাদ, এখনই ঠিক করা হয়েছে
ওয়েলোন 531

হাই, @ Waylon531, লুয়া সম্পর্কে প্রশ্ন: এলোমেলো গণিত.আরন্ডমস "math.randomseed (os.time ()) math.random (); math.random (); math.random ()" এলোমেলোভাবে যথেষ্ট নয় লিপি?
AndoDaan

1
AndoDaan অনুযায়ী lua-users.org/wiki/MathLibraryTutorial কিছু অপারেটিং সিস্টেম এর সবসময় একই সংখ্যা প্রথমবার math.random আসতে () বলা হয়।
Waylon531

lua: ./players/Sniper/Sniper.lua:38: attempt to compare nil with numberস্ট্যাক ট্রেসব্যাক:./players/Sniper/Sniper.lua:38: in main chunk [C]: in ?
es1024

2

ডারউইন

ফিটস্টেস্টের বেঁচে থাকার অর্থ হ'ল কমপক্ষে স্বাস্থ্যকর মারা উচিত।

যুক্তিসহ ব্যাখ্যা

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

#!/usr/bin/env python

import sys
import random

## ==== Player Model ================================================ ##
class Player:
    def __init__ (self, number, health):
        self.number = number
        self.health = health

def player_from (number, player_string):
    x = player_string.split (",")
    health = int (x[0].strip ())

    return Player (number, health)

def players_from (game_state):
    return [player_from (n, p) for (n, p) in
                                   zip (range(4), game_state.split ())]

def is_alive (player):
    return 0 < player.health

def i_am_dead (me):
    return not is_alive (me)

def players_who_can_breathe (players):
    return [p for p in players if is_alive (p)]

def players_by_health (players):
    return sorted (players, key=lambda p: p.health)

def least_healthy_players (players):
    sorted_living_players = \
        players_by_health (players_who_can_breathe (players))
    lowest_living_health = sorted_living_players[0].health
    return [p for p in players if lowest_living_health == p.health]
## ================================================ Player Model ==== ##

## ==== Actions ===================================================== ##
def shoot_randomly_at (possible_targets):
    chosen_target = random.choice (possible_targets)
    return "S{0}".format (chosen_target.number)

def do_nothing ():
    return "N"

def pick_move (game_state):
    players = players_from (game_state)
    me = players[0]
    enemies = players[1:]

    if i_am_dead (me):
        return do_nothing ()

    least_healthy_enemies = least_healthy_players (enemies)
    return shoot_randomly_at (least_healthy_enemies)
## ===================================================== Actions ==== ##

if "__main__" == __name__:

    game_state = sys.argv[2]
    print (pick_move (game_state))

এটি আমার আগের চব্বিশতম এবং একটি অর্ধ শতাব্দীর সামান্য পরিবর্তিত সংস্করণ , এবং এর আহ্বানটি ভাগ করে:

python darwin.py 3 "5 5 5 5"

2

জেনিল - সি

অগ্রাধিকারগুলি:

  1. এটি 1 টিতে 1 টি ছেড়ে গেলে গুলি করুন Shoot
  2. গ্রেনেডিয়ার্স গুলি করুন
  3. ছল
  4. কিছুই না (কিছু কিছু বিভ্রান্ত করার জন্য)

সঙ্গে সংকলন gcc <filename.c>

সাথে চালাও ./a.out <parameters>

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]){
    char* input = argv[2];
    int enemyCount=1;
    int aliveCount=0;
    int aliveEnemy=0;

    //default
    char action = 'N';
    int target = NULL;

    const char delim[1] = " ";
    char *token;

    //first turn
    if(strcmp(input,"5 5 5 5")==0){
        printf("D1");
        return 0;
    }

    token = strtok(input, delim);
    token = strtok(NULL, delim); //skip to the first enemy

    while(token != NULL){
        //if someone is alive :
        if(strstr(token,"-")==NULL && token[0]!='0'){
            aliveCount++;
            aliveEnemy=enemyCount;
            //if that person did nothing this turn, take it as a tip that he will shoot next turn, and dodge
            if(strstr(token, "N")!=NULL){
                action = 'D';
                target=enemyCount;
            }

            //if that person prepared a grenade, shoot him down
            if(strstr(token, "P")!=NULL){
                action = 'S';
                target=enemyCount;
            }
        }

        token = strtok(NULL, delim);
        enemyCount++;
    }

    //if there is 1 enemy left, shoot him down
    if(aliveCount==1){
        action='S';
        target=aliveEnemy;
    }

    printf(action=='N'?"N":"%c%d",action,target);

    return 0;
}

1
প্রথম (পূর্ণসংখ্যা) যুক্তিটি রাউন্ড গণনা নির্দেশ করে না, যদি প্রশ্নে দেওয়া উদাহরণগুলি অনুসরণ করার মতো কিছু থাকে are আপনি প্রথম
টার্নে

সত্যি? ডি: ধন্যবাদ @ কম্পেরেন্ডিনাস কোডটি সম্পাদনা করবে।
গ্যাব্রিয়েল

2

InputAnalyzer

এই জাতীয় কীটি আপনার সমস্ত প্রতিপক্ষ সেই অনুসারে প্রতিক্রিয়া জানাতে কীভাবে খেলছে তা বিশ্লেষণ করে is আমার বটটি কেবল এমনটি করবে যে জটিল অ্যালগরিদমগুলি ব্যবহার করার ফলে আমার বিরোধীরা ব্যবহার করার ফলে সিদ্ধান্ত গ্রহণযোগ্য জয় দিয়ে আমার সুবিধা ফিরে আসে!

সম্পাদনা: আমি এখন

  1. লাইভ গ্রেনেড রয়েছে এমন যে কোনও খেলোয়াড়কে ডজ করুন
  2. আর নিজেকে ছুঁড়ে ফেলার / ছোঁড়াবার চেষ্টা করবে না।

import System.Environment   
import Data.Char (ord)
import Data.List.Split

main = do 
    args <- getArgs
    let secondArg = (last args)
    let opt = (argCount secondArg 0)
    let list = (splitOn " " secondArg)
    let enemysToCheck = [1,2,3]
    let target = (avoidShootingSelf (findTarget (last args) 0 0 0 0))
    putStrLn (decide list enemysToCheck opt target)

argCount :: String -> Int -> Int
argCount (s:str) i
    |(length str) == 0 = i `mod` 4
    | otherwise = (argCount str (i + (ord s)))

--myPseudo takes number 0-3, and a possible target and translates it to a command 
myPseudo :: Int -> Int -> String
myPseudo 0 b = "S" ++ (show b)
myPseudo 1 b = "D" ++ (show b)
myPseudo 2 b = "P"
myPseudo 3 b = "T" ++ (show b)

decide :: [String] -> [Int] -> Int -> Int -> String
decide [] [] a b = (myPseudo a b)
decide (x:xs) [] a b = (myPseudo a b)
decide xs (y:ys) a b
    | (liveGrenade z 0) == True = "D" ++ (show y)
    | otherwise = (decide xs ys a b)
    where z = xs!!y

--checks if a player has a live grenade
liveGrenade :: String -> Int -> Bool
liveGrenade [] a = a > 0
liveGrenade (s:str) a
    | s == 'T' = (liveGrenade str (a - 1))
    | s == 'P' = (liveGrenade str (a + 1))
    | otherwise = (liveGrenade str a)

--findTarget picks a target by doing some irrelevant string processing on the 2nd argument
findTarget :: String -> Int -> Int -> Int -> Int -> Int
findTarget [] a b c d = ((maximum [a,b,c,d]) `mod` 4)
findTarget (s:str) a b c d
    | s == 'S' = (findTarget str (a + 1) b c d)
    | s == 'D' = (findTarget str a (b + 1) c d)
    | s == 'P' = (findTarget str a b (c + 1) d)
    | s == 'T' = (findTarget str a b c (d + 1))
    | s == 'N' = (findTarget str a b c (d + 1))
    | otherwise = (findTarget str a b c d)

--Makes sure I do target myself takes int 0-3
avoidShootingSelf :: Int -> Int
avoidShootingSelf 0 = 1
avoidShootingSelf a = a

নিম্নলিখিত কমান্ড দিয়ে বটটি সঙ্কলন করুন (জিএইচসি হওয়া দরকার)

ghc - মেক ইনপুটআনলেজার.হেসস

চালনার জন্য শেল কমান্ড নিম্নলিখিত হওয়া উচিত

./InputAnalyzer

দ্রষ্টব্য: আমি উইন্ডোজগুলিতে পরীক্ষা করেছি সুতরাং আপনার যদি কমপ্লিং / রানিং সম্পর্কে কোনও সমস্যা হয় তবে দয়া করে মন্তব্যে মন্তব্য করুন এবং আমি সঠিক কমান্ডটি জানার জন্য যথাসাধ্য চেষ্টা করব।


1
ওয়েল, আমি মনে করি এটি হাস্কেলের ওয়েট সিউডোরেন্ডম জেনারেটর পাওয়ার এক উপায়।
প্রতিযোগিতামূলক

2

সাহস নামে কুকুর

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

সম্পাদনা: এখন যেমনটি ভেবেছিল ঠিক তেমন বাস্তবায়ন করা হয়েছে। আগে, স্কোর ছিল: 35.9

আপডেট করা: কখনও কখনও ডজিংয়ের পরিবর্তে অঙ্কুর

couragethedog.py

import sys
from collections import defaultdict as ddict
from random import choice
args = sys.argv
info = " ".join(args[2:]).strip('"').split(" ")
players = ddict(dict)
for i,s in enumerate(info):
    parts = s.split(",")
    players[i]["health"]=int(parts[0])
    players[i]["last"]=parts[-1]
    players[i]["history"]=parts[1:]
    players[i]["turn"]=len(parts)
me=0
others=[1,2,3]
turn=players[me]["turn"]
alive = filter(lambda p:players[p]["health"]>0,others)
def act():
    if turn is 1:
        return "S%d" % choice(alive)
    if "P" == players[me]["history"][-1]:
        targets = set(alive)
        for i in alive:
            if "P" == players[i]["history"][-2]:
                targets.remove(i)
        return "T%d" % choice(list(targets))
    for i in others:
        if players[i]["history"][-1] is "P":
            return "P"
    if choice([True,False,False]):
        return "S%d" % choice(alive)
    return "D%d" % choice(alive)
print act()

হিসাবে চালান

python couragethedog.py

2

এমএডি - জাভা

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

    import java.util.ArrayList;
import java.util.Random;

public class MAD 
{
    public static void main(String[] args) 
    {
        if(args.length < 2)
        {
            return; // nothing to do here
        }
        String[] players = args[1].split(" ");
        if(players.length < 4 || !isAlive(players[0]))
        {
            return; // nothing to do here
        }
        Random rand = new Random();

        int grenadeExplodes = grenadeExplodes(players[0]);        
        if(grenadeExplodes==-1)
        {
            System.out.print("P"); // I don't feel safe without a prepared grenade in my hand
            return;
        }

        int highestDamage = -1;
        int playerToShoot = -1;        
        for(int i=1; i<4; i++) // did anyone try to hit me?
        {
            int damage = damageAttempted(players[i], 0);
            if(isAlive(players[i]) && (damage>highestDamage || (damage==highestDamage && rand.nextDouble()>0.5)))
            {
                highestDamage = damage;
                playerToShoot = i;
            }           
        }

        if(highestDamage > 0)
        {
            System.out.print("T" + Integer.toString(playerToShoot)); // don't tell me I didn't warn you
            return;
        }

        int highestHealth = -1;
        int healthiestPlayer = -1;      
        for(int i=1; i<4; i++) // who is doing too well for their own good?
        {
            int health = getHealth(players[i]);
            if(health>highestHealth || (health==highestHealth && rand.nextDouble()>0.5))
            {
                highestHealth = health;
                healthiestPlayer = i;
            }
        }

        if(grenadeExplodes==0)
        {
            System.out.print("T" + Integer.toString(healthiestPlayer).charAt(0)); // get this hot head outta here!!
            return;
        }

        // I've got time to flaunt my grenade around

        ArrayList<Integer> playersToDodge = new ArrayList<Integer>();       
        for(int i=1; i<4; i++) // lets see who could shoot me
        {
            if(canMove(players[i]) && grenadeExplodes(players[i])!=0)
            {
                playersToDodge.add(i);
                if(grenadeExplodes(players[i])==-1) // players who have no grenade are more likely to shoot
                {
                    playersToDodge.add(i);
                }
            }
        }

        if(playersToDodge.size()>0)
        {
            System.out.print("D" + Integer.toString(playersToDodge.get(rand.nextInt(playersToDodge.size() - 1))).charAt(0)); // what do we say to would-be gunners?
            return;
        }

        if(grenadeExplodes!=1)
        {
            System.out.print("S" + Integer.toString(healthiestPlayer).charAt(0)); // seems like I can take a free shot at someone
        }
        else
        {
            System.out.print("N"); // wouldn't want to end up with an exploding grenade in my hand while being unable to throw it.
        }

    }

    public static boolean isAlive(String player) 
    {
        return player.charAt(0)!='-'; 
    }

    public static boolean canMove(String player)
    {
        return isAlive(player) && player.charAt(player.length()-2)!='S';
    }

    public static int grenadeExplodes(String player)
    {
        String[] actions = player.split(",");

        if(actions.length>3 && actions[actions.length - 3].charAt(0)=='P' 
            && actions[actions.length - 2].charAt(0)=='T' 
            && actions[actions.length - 1].charAt(0)=='P')
        {
            return 0;
        } 
        else if(actions.length>2 && actions[actions.length - 2].charAt(0)=='P' 
            && actions[actions.length - 1].charAt(0)=='T')
        {
            return 1;
        } 
        else if(actions.length>1 && actions[actions.length - 1].charAt(0)=='P')
        {
            return 2;
        }
        else
        {
            return -1;
        }
    }

    public static int damageAttempted(String player, int target)
    {
        String[] actions = player.split(",");
        int damage = 0;
        char targetChar = Integer.toString(target).charAt(0);
        for(int i=0; i<actions.length; i++)
        {
            if(actions[i].charAt(0)=='S' && actions[i].charAt(1)==targetChar)
            {
                damage += 2;
            } 
            else if (actions[i].charAt(0)=='T')
            {
                if(actions[i].charAt(1)==targetChar)
                {
                    damage += 8;
                }
                else
                {
                    damage += 3;
                }
            }
        }

        return damage;
    }

    public static int getHealth(String player)
    {
        return Integer.parseInt(player.split(",")[0]);
    }
}

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


কিছু ক্রেডিট শওডল জিওবিটসে যায়, আমি তার নিও প্রবেশের কিছু বয়লার প্লেট কোডটি চুরি করেছি।
ওভাররেक्टर

আপনি খুব বেশি গ্রহণ করেন নি, কোনও credit
ণের

কলিং java MAD 43 "5 5 5 5"কিছুই আউটপুট প্রদর্শিত হবে।
es1024

2

ধর্ষকামী

পাইথন

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

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

import sys    

def ident(thatguy):

    return int(thatguy.split(",")[0])

def health(thatguy):
    return int(thatguy.split(",")[1])

def shooter(thatguy):
    if(len(thatguy.split(","))<3):
        return 1==1
    else: return thatguy.split(",")[2][0]=="S"

def mosthealth(group):
    bigbad=group[0]
    for foe in group:
        if (health(foe)>health(bigbad)): bigbad=foe
    return bigbad

def igotanuke(mine):
    return mine.count("P")-mine.count("T")>0

def guytonuke(allguys,fighters):
    backup=allguys[:]
    for Aguy in backup:
        if(health(Aguy)<4):
            allguys.remove(Aguy)
            if (shooter(Aguy)): fighters.remove(Aguy)

    if(len(allguys)==0): return mosthealth(backup)
    if (len(allguys)==len(fighters)):
        return mosthealth(allguys)
    else:
        for fighter in fighters: allguys.remove(fighter)
        return mosthealth(allguys)

raw = sys.argv[2]
player = raw.split(" ")
thisisme=player.pop(0)
turn = len(player[0].split(","))-1

guys=[]
gunners=[]
c=1
for dude in player:
    dude=str(c)+","+dude
    c+=1
    if (health(dude)>0): 
        guys.append(dude)
        if (shooter(dude)):
            gunners.append(dude)

if (turn==0): print "P"
elif(turn==49): print"S0"
elif(igotanuke(thisisme))&( turn % 2 == 1): print "T"+str(ident(guytonuke(guys,gunners)))
elif(len(guys)<2)&(len(gunners)>0) & (turn % 2 == 1): print P
elif(turn % 2 == 0) & (len(gunners)>0): print "D"+str(ident(mosthealth(gunners)))
elif(turn % 2 == 1) & (len(gunners)>0): print "S"+str(ident(mosthealth(gunners)))
else: print "S"+str(ident(mosthealth(guys)))

আমি মনে করি না যে raw_inputএটি কাজ করবে। sys.argv[2]পাইথন এন্ট্রিগুলির জন্য sensক্যমত্য বলে মনে হচ্ছে। আপনি এটির জন্য ব্যবহারও সন্ধান করতে পারেন popযা আপনাকে thisisme=player[0];player.remove(player[0])সহজতর করে তুলতে দেয় thisisme=player.pop(0)
প্রতিযোগিতামূলক

@ কম্পেরেন্ডিনাস আমি আইডিয়নে কোডটি পরীক্ষা করছিলাম এবং sys.argv মোটেও কাজ করে না (সিস আমদানির কারণে সম্ভবত)। এজন্য আমি কাঁচা_পিন্ড ব্যবহার করেছি। এমন কোনও পার্থক্য রয়েছে যা পরবর্তীকালে কাজ না করার কারণ হতে পারে? যদি তা হয় তবে আমার সম্ভবত পাইথনের জন্য আরও একটি অনলাইন সংকলক খুঁজে বের করতে হবে। পপ সহ পরামর্শের জন্য ধন্যবাদ! আমি বুঝতে পারি নি যে কমান্ডটি সূচকটি নির্দিষ্ট করার অনুমতি দেয়। আমি এটি ভবিষ্যতের যে কোনও অজগর কোডের জন্য ব্যবহার করব।
কেইন

1
raw_inputথেকে টানতে পারে STDIN, তবে প্লেয়ারের ইতিহাসটি আপনার প্রোগ্রামে একটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে প্রেরণ করা হয়, এজন্য আপনার প্রয়োজন sys.argv। পরীক্ষার খাতিরে, আপনি এটি দিয়ে ম্যানুয়ালি সেট করতে পারেন sys.argv = ["sadist.py", "0", "5 5 5 5"]। তারপরে আপনার কল করা উচিত player=sys.argv[2].split()। যদি আমদানি করা sysসত্যিই অসম্ভব, তবে পরীক্ষার জন্য আপনি বিন্দুটি ফেলেও অ্যারেতে কল করতে পারেন sysargv। যতক্ষণ অন্য সব কিছু কাজ করে এবং আপনি sys.argvআপনার জমা দেওয়ার ক্ষেত্রে ফিরে যান , ঠিক আছে it
প্রতিযোগিতামূলক

@ কম্পেরেন্ডিনোয়াস এটি নিশ্চিত করতে, যদি আমি sys.argv কল করি তবে এটি 0 তে প্রোগ্রামের নাম হিসাবে অ্যারে হিসাবে ফিরে আসবে, 1-এ একক সংখ্যা এবং আমি আসল অংশটি 2 তে ব্যবহার করব? তারা সব স্ট্রিং হয়। এই তথ্যের সাহায্যে আমার এটি সঠিকভাবে সম্পাদনা করতে সক্ষম হওয়া উচিত। আপনাকে অনেক ধন্যবাদ!
কেইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.