কীভাবে ডিডিওএস-এর ইন্টারনেট থেকে পুনরুদ্ধার করবেন


17

ইন্টারনেট ব্যর্থ হয়েছে। ডিডিওএসের আক্রমণগুলি এখন ব্যাপক এবং ব্যাপক। ইন্টারনেট নিয়ন্ত্রণ এবং মেরামত করা আপনার উপর নির্ভর করে।

প্রতিটি বট এই নেটওয়ার্কে 20 টি নোড নিয়ন্ত্রণ করবে। প্রতিটি নোড হয় সক্রিয় বা নিরাপদ , তার মালিক রয়েছে এবং একটি শক্তি রয়েছে যা শুরু হয় ২ থেকে শুরু হয় প্রতিটি সক্রিয় নোড অন্যান্য সমস্ত সক্রিয় নোডের সাথে সংযুক্ত থাকে।

প্রতিটি পালা, আপনি তাদের শক্তির সাথে সমস্ত সক্রিয় নোডের একটি তালিকা পাবেন। আপনার মালিকানাধীন প্রতিটি সক্রিয় নোডের জন্য আপনি হয়:

  1. আপনার সম্পূর্ণ শক্তি, বা তে স্থানান্তর করতে চান এমন একটি সক্রিয় নোডের নাম দিন
  2. সংরক্ষণ করুন এবং এর শক্তি বৃদ্ধি করুন

তারপরে নিম্নলিখিতটি ক্রমে ঘটে :

  1. একটি নোড তার শক্তি বাঁচানোর জন্য চয়ন করে এর শক্তি 1 দ্বারা বাড়িয়ে তোলে।
  2. সমস্ত শক্তি যা তাদের শক্তি স্থানান্তর করতে পছন্দ করে তা একই সাথে তাদের সম্পূর্ণ শক্তি নতুন নোডে স্থানান্তরিত করে।
  3. যদি শত্রু নোড থেকে কোনও নোড শক্তি স্থানান্তরিত হয় তবে আক্রমণটি ঘটবে। যদি কোনও শত্রু মালিক সম্মিলিতভাবে মূল মালিকের (এবং অন্যান্য সমস্ত আক্রমণকারী) চেয়ে বেশি শক্তি স্থানান্তর করে, তবে সেই শত্রু নতুন মালিক হয়ে যায়। সেই নোডের শক্তি তখন আক্রমণকারীর শক্তি হয়ে যায়। যদি শক্তির জন্য কোনও টাই থাকে, তবে মালিক এলোমেলোভাবে বেছে নেওয়া হবে।
  4. কোনও শক্তি ব্যতীত সমস্ত নোড নিরাপদ হিসাবে বিবেচিত হবে এবং মালিককে 1 পয়েন্ট দেয়।

100 টি মোড়ের 100 গেমসের পরে, সমস্ত গেম জুড়ে সর্বাধিক সুরক্ষিত নোডের মালিক জিতেন। সম্পাদনা: আমি এটিকে 2000 থেকে 100 টার্নে পরিবর্তন করেছি, কারণ শেষ হওয়ার সাথে সাথে শেষ 1900 টার্নটি অকেজো ছিল

আই

আপনাকে নীচের মত সক্রিয় নোডের তালিকা (কমান্ড লাইন আরগগুলির মাধ্যমে) পাস করা হবে:

F20 F4 E7 E2 E20 F2

Fনোডটি একটি বন্ধুত্বপূর্ণ নোডকে Eমনোনীত করে এবং নোডকে শত্রু বলে উপস্থাপন করে।

আপনার প্রতিটি বন্ধুত্বপূর্ণ নোডের জন্য আপনার নীচের মত একটি ক্রিয়া (STDOUT এর মাধ্যমে) ফেরত দেওয়া উচিত:

0,0 1,3 5,0

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

ফিরে আসার পরে, আপনার প্রোগ্রামটি ছেড়ে দেওয়া উচিত।

স্কোরবোর্ড

সংগ্রহকারী 3240 পয়েন্ট পেয়েছে

উত্কৃষ্ট 2370 পয়েন্ট পেয়েছে

dumbot পেয়েছে 2262 পয়েন্ট

এলোমেলো_বোট 1603 পয়েন্ট পেয়েছে

smarter_random_bot 1319 পয়েন্ট পেয়েছে

স্থির_বোট 1097 পয়েন্ট পেয়েছে

নিয়ামকটি এখানে পাওয়া যাবে: https://github.com/nathanmerrill/NetAttack


নিয়ামক এই স্পেসিফিকেশনের সাথে বিরোধিতা করে: "যদি কোনও শত্রু মালিক সম্মিলিতভাবে মূল মালিকের চেয়ে আরও শক্তি স্থানান্তর করে ..."। বর্তমানে এটি সমান বা আরও বেশি
এলোমেলো

@ আরন্ডোমরা: এক্ষেত্রে বলা হয়েছে: শক্তির জন্য যদি টাই থাকে তবে মালিককে এলোমেলোভাবে বেছে নেওয়া হবে
নাথান মেরিল

@ নাথানম্যারিল আমি ধরে নিয়েছি হামলাকারীরা টাই হলে।
এলোমেলো

শেষের শেষ নোডটি খেলা শেষ হওয়া অবধি আটকে আছে, তাই না? তার পালানোর কোন উপায় নেই?
আয়েববিস

@ অ্যাকাব্যাবিস সঠিক, তবে আমি আসলে এটির জন্য পরীক্ষা করেছিলাম এবং সেই মুহুর্তে গেমটি অকালে শেষ করি।
নাথান মেরিল

উত্তর:


5

আহরণকারী, পাইথন

এই পার্টি শুরু করা যাক! আমার জমা দেওয়ার জন্য পাইথন 2 এবং পাইথন 3 উভয়ই কাজ করা উচিত।

import sys

inputs = [(i, x[0], int(x[1:])) for (i, x) in enumerate(sys.argv[1].split())]

own_nodes = sorted([(s,i) for (i,o,s) in inputs if o == 'F'])
targets = sorted([(s,i) for (i,o,s) in inputs if o == 'E'])

if targets:
    t_copy = targets[:]
    out = ""
    total_str = 0
    attackers = []
    for (s,i) in own_nodes:
        attackers += [i]
        if t_copy:
            total_str += s
            if t_copy[0][0] < total_str - 1:
                j = max([j for j in range(len(t_copy)) if t_copy[j][0] < total_str - 1])
                out += " ".join([str(k) + "," + str(t_copy[j][1]) for k in attackers]) + " "
                attackers = []
                total_str = 0
                t_copy = t_copy[:j] + t_copy[j+1:]
    if attackers:
        if t_copy:
            out += " ".join([str(k) + "," + str(t_copy[0][1]) for k in attackers])
        else:
            out += " ".join([str(k) + "," + str(attackers[0]) for k in attackers])
else:
    out = " ".join([str(i) + "," + str(own_nodes[0][1]) for (s,i) in own_nodes])

print(out.rstrip())
sys.stdout.flush()

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

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


4

উত্কৃষ্ট, পাইথন 3

import random, sys
f,e,p=[],[],[]
for si,s in enumerate(sys.argv[1].split()):
    if s[0]=='F': f+=[(int(s[1:]),si)]
    else: e+=[(int(s[1:]),si)]
f=sorted(f,key=lambda t:t[0]);r=4
f1,f2,f3=f[:len(f)//r],f[len(f)//r:len(f)//r*2],f[len(f)//r*2:]
for fa in f3:
    ea=[t for t in e if t[0]<fa[0]]
    p+=[(fa[1],random.choice(ea)[1])] if ea else [(fa[1],fa[1])]
for fd,fs in zip(f1,reversed(f2)):
    p+=[(fs[1],fd[1])]
    p+=[(fd[1],fd[1])]
if len(e)==0: p=[(fe[1],0) for fe in f]
for t in p: print(t[0],',',t[1],' ',sep='',end='')
sys.stdout.flush()

বোট তার নিজস্ব নোডগুলিকে শক্তির ভিত্তিতে 3 টি বিভাগে বিভক্ত করে এবং প্রতিটি নোড তার বিভাগ অনুসারে কাজ করে।

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

সংগ্রহকারী এবং দুটি নমুনা বটের বিরুদ্ধে ফলাফল:

smarter_random_bot got 1301 points
random_bot got 1841 points
Accumulator got 2178 points
Classy got 2580 points

2

ডুমবট, নোডেজ

var input = process.argv.splice(2);
var regexp = new RegExp(" ", "gm");
input = String(input).split(regexp);
var nodes = [];
var targets = [];
for(var i = 0; i < input.length; i++){
    if(input[i].charAt(0) == "F")
        nodes.push(i);
    else
        targets.push(i);
}
var result = "";
var length = nodes.length;
for(var i = 0; i < length; i++){
    if(targets.length>0)
        result += nodes.shift() + "," + targets.shift() + " ";
    else
        result += nodes.shift() + ",0 ";
}
console.log(result);

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


2

স্টেডিবট, নোড.জেএস

(new Promise(function(resolve, reject) {
    var input = process.argv[2];
    if(input) {
        resolve(input);
    } else {
        process.stdin.once('data', function(data){
            resolve(data.toString());
        });
    }
})).then(function(input) {
    return input.trim().split(' ');
}).then(function(nodes) {
    var friends = [], enemies = [];
    nodes.forEach(function(value, index) {
        var data = { index: index, strength: parseInt(value.substring(1)) };
        if(value[0] === 'F') {
            friends.push(data);
        } else {
            enemies.push(data);
        }
    });

    function weaknessCompare(a, b) {
        return (a.strength > b.strength) ? -1 : ((a.strength < b.strength) ? 1 : 0);
    }

    friends.sort(weaknessCompare);
    enemies.sort(weaknessCompare);

    if(enemies.length === 0) {
        friends.forEach(function(friend) {
            friend.target = 0;
        });
    } else {
        if(friends.length > 0) {
            var strongest = friends[0];
            for(var i = 0; i < enemies.length; i++) {
                var enemy = enemies[i];
                if(enemy.strength + 1 < strongest.strength) {
                    strongest.target = enemy.index;
                    break;
                }
            };
        }
        if(friends.length > 1) {
            friends[1].target = friends[friends.length - 1].index;
        }
    }

    console.log(friends.map(function(friend) {
        return friend.index + ',' +
                (typeof friend.target === 'number' ? friend.target : friend.index);
    }).join(' '));
});
  • ধরে নেওয়া শত্রুরা বড় নোডগুলিকে শক্তিশালী করবে না: বৃহত্তম বন্ধুত্বপূর্ণ নোড সবচেয়ে শক্তিশালী শত্রু আক্রমণ করে যা এই অনুমানের অধীনে পরাজিত করতে পারে।
  • ধরে নিই যে দুর্বলতম টার্গেট আক্রমণ করা হবে: দ্বিতীয় বৃহত্তম বন্ধুত্বপূর্ণ নোড প্রতিটি রাউন্ডে দুর্বলতম বন্ধুত্বপূর্ণ নোডে চলে আসে।
  • প্রচুর বিনামূল্যে শক্তি চায়: অন্যান্য নোড অপেক্ষা করে।

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

সতর্ক থাকুন জন্য ধন্যবাদ. আমি যখন করি তখন node SteadyBot.js F20 F4 E7 E2 E20 F2এটি আমার পক্ষে কাজ করে। আপনি কি দয়া করে আমাকে যে ইনপুটটির জন্য ব্যর্থ হচ্ছে তা বলতে পারেন?
aebabis

@ নাথানমারিল আমি স্ট্যান্ডিনের সাথে কাজ করার জন্য এটি আবারও লিখেছি। আশা করি এটি ঠিক করে দিয়েছে। cat F20 F4 E7 E2 E20 F2 | node SteadyBot.js
aebabis

@acbabis ইনপুটটিকে একটি বড় যুক্তি হিসাবে দেওয়া হয়।
এলোমেলো

@acbabis এলোমেলো সঠিক। আপনি ১ টি বড় আর্গুমেন্ট, তালিকা পেতে চলেছেন (যদি না আপনি কলটি সি ++ এর মতো পাবেন তবে এই ক্ষেত্রে আপনি 2 পাবেন) get
নাথান মেরিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.