কৌশলগত ভ্যানিশার্স


15

এই পোস্টটি এই গণিতফ্লো পোস্টটি আলগাভাবে অনুপ্রাণিত ।

ক্যানওয়ের গেম অফ লাইফের একটি ভ্যানিশার এমন কোনও প্যাটার্ন যা এক ধাপ পরে সম্পূর্ণ অদৃশ্য হয়ে যায়। উদাহরণস্বরূপ নীচের প্যাটার্নটি একটি আকার 9 ভ্যানিশার।

আকার 9 ভ্যানিশার

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

অ ভ্যানিশিংঘিরা

তবে আমরা আরও কম লাইভ সেল যুক্ত করে ভ্যানিশারে সেই প্যাটার্নটি তৈরি করতে পারি।

ছোট ঘের এমনকি ছোট ঘের

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

স্কোরিং

আপনার প্রোগ্রামটি স্কোর করতে আপনাকে এটি আকারের 6 টি পলিপলেটগুলিতে চালাতে হবে (প্রতিলিপি সমান্তরাল ক্ষেত্রে দ্বিগুণ নয়)। এখানে তার নিজস্ব লাইনে প্রতিটি পলিপলেটযুক্ত একটি পেস্টবিন রয়েছে। তাদের মোট 522 হওয়া উচিত। (x,y)এগুলিকে ছয়টি স্থানাঙ্কের ( টিপলস) প্রতিটি জীবন্ত ঘরের অবস্থান হিসাবে তালিকাভুক্ত করা হয় ।

আপনার স্কোর ভিনিশারে এই সমস্ত পলিপলেট তৈরি করতে মোট নতুন কোষ যুক্ত হবে।

টাইস

বন্ধনের ক্ষেত্রে আমি প্রোগ্রামগুলি চালুর জন্য the আকারের পলিপ্লেটের একটি তালিকা সরবরাহ করব।

আই

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

টাইমিং

আপনার প্রোগ্রামটি একটি যুক্তিসঙ্গত মেশিনে যুক্তিসঙ্গত পরিমাণ (প্রায় <1 দিন) চালানো উচিত। আমি সত্যিই এটিকে খুব বেশি প্রয়োগ করতে যাচ্ছি না তবে আমি পছন্দ করি যদি আমরা সবাই ভাল খেলি।


(অবশ্যই আপনার নিজের কোডটি স্কোর করতে সক্ষম হতে হবে)
ব্যবহারকারী 202729


আপনি কি হার্ডকোডিং নিষিদ্ধ করতে চলেছেন?
ফ্লিপট্যাক

1
@ ফ্লিপট্যাক আমি নিশ্চিত এটির একটি ইতিমধ্যে একটি মান ফাঁক। প্লাস একটি ভাল লিখিত প্রোগ্রাম সম্ভবত যাইহোক মানুষের মতো ঠিক তত ভাল।
পোস্ট রক গার্ফ হান্টার

1
@ Ousurous আমি মনে করি আমি তৃতীয় টাই ব্রেকারটি সরিয়ে ফেলব।
পোস্ট রক গারফ হান্টার

উত্তর:


4

পাইথন + জেড 3 , স্কোর = 3647

আমার আটটি মূল সিস্টেমে 14 সেকেন্ডে চলে।

from __future__ import print_function

import ast
import multiprocessing
import sys
import z3

def solve(line):
    line = ast.literal_eval(line)
    x0, x1 = min(x for x, y in line) - 2, max(x for x, y in line) + 3
    y0, y1 = min(y for x, y in line) - 2, max(y for x, y in line) + 3
    a = {(x, y): z3.Bool('a_{}_{}'.format(x, y)) for x in range(x0, x1) for y in range(y0, y1)}
    o = z3.Optimize()
    for x in range(x0 - 1, x1 + 1):
        for y in range(y0 - 1, y1 + 1):
            s = z3.Sum([
                z3.If(a[i, j], 1 + ((i, j) != (x, y)), 0)
                for i in (x - 1, x, x + 1) for j in (y - 1, y, y + 1) if (i, j) in a
            ])
            o.add(z3.Or(s < 5, s > 7))
    o.add(*(a[i, j] for i, j in line))
    o.minimize(z3.Sum([z3.If(b, 1, 0) for b in a.values()]))
    assert o.check() == z3.sat
    m = o.model()
    return line, {k for k in a if z3.is_true(m[a[k]])}

total = 0
for line, cells in multiprocessing.Pool().map(solve, sys.stdin):
    added = len(cells) - len(line)
    print(line, added)
    x0, x1 = min(x for x, y in cells), max(x for x, y in cells) + 1
    y0, y1 = min(y for x, y in cells), max(y for x, y in cells) + 1
    for y in range(y0, y1):
        print(''.join('#' if (x, y) in line else '+' if (x, y) in cells else ' ' for x in range(x0, x1)))
    total += added
print('Total:', total)

সম্পূর্ণ আউটপুট


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

কেন +এটি কিছু ক্ষেত্রে মূল আকৃতি থেকে সংযোগ বিচ্ছিন্ন হয়ে গেছে তা আমার কাছে অস্পষ্ট ছিল তবে মনে হয় নতুন কোষের স্পোনিং এড়ানোর জন্য এগুলি প্রয়োজনীয়। এই সমাধানগুলি কি তাই অনুকূল?
স্তর নদী সেন্ট

কৌতূহলের বাইরে, কেন z3.Orভ্যানিলার পরিবর্তে ব্যবহার করবেন a or b? এটি কি খাঁটি পারফরম্যান্স, না এর আলাদা কার্যকারিতা রয়েছে?
কেয়ার্ড কোইনরিঙ্গিংহিংহ

@Cairdcoinheringaahing দেখে মনে হচ্ছে এটি প্রতীকী সমাধান।
ব্যবহারকারী 202729

1
@ আন্ডারস ক্যাসরগ ১। আপনার সমাধানটি সর্বোত্তম কিনা তা জিজ্ঞাসা করে আপনি আমার মন্তব্যের জবাব দেননি। উত্তর পোস্ট করার বিষয়ে বিবেচনা করে অন্য কারও কাছে এটি অত্যন্ত গুরুত্বের বিষয়। ২. যদি আপনি জেড 3 আপনার উত্তরে কী করে তা ব্যাখ্যা না করেন তবে আমি কেবল এটি কী করে তা অনুমান করতে পারি, কারণ ডকুমেন্টেশন পড়ার আমার কাছে সময় নেই, সুতরাং আমার নিষ্ঠুর বলয়ের এলোমেলো অনুমান। 3 এই কোডটির কোডটির জন্য এই উত্তরটি একটি উঁচু (সত্যিকার অর্থে অনেকগুলি উপার্জনের দাবিদার) প্রাপ্য, তবে উত্তরের উপরের দুটি পয়েন্টগুলিকে অন্তর্ভুক্ত করে কোনও ব্যাখ্যা যুক্ত না করা পর্যন্ত আমি আপগ্রেট করব না।
লেভেল রিভার সেন্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.