ম্যাথাগলফ ম্যানিয়া!


12

ম্যাথেমেনিয়া স্পেস:

ম্যাথেমেনিয়া কোডের প্রতিটি টুকরোটি নম্বর দিয়ে শুরু হয় 2। থেকে 2, আপনি নিম্নলিখিত ক্রিয়াকলাপগুলি করতে পারেন:

  • e: এক্সপেনশনেশন। এই কমান্ডের ডিফল্ট নম্বরটি স্কোয়ার করছে।
  • f: কারখানা। এই কমান্ডের ডিফল্টটি ( using f on 2 = 2! = 2) সংখ্যার একক ফ্যাক্টরিয়াল ব্যবহার করছে ।
  • r: রুট এই কমান্ডের ডিফল্ট সংখ্যাটি স্কোয়ার-রুট করে is
  • c: সিলিং ফাংশন।
  • l: মেঝে ফাংশন।

ম্যাথেমেনিয়ায় একটি সংখ্যা তৈরি করতে, আপনাকে অবশ্যই এই কমান্ডগুলি একসাথে স্ট্রিং করতে হবে, যা সংখ্যায় বাম থেকে ডান সঞ্চালিত হয় 2

উদাহরণ:

ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
      = ceil(sqrt(sqrt(24)))
      = ceil(sqrt(4.89...))
      = ceil(2.21...)
      = 3

e, fএবং rকমান্ড অতিরিক্ত Mathemania কমান্ড (যা দিয়ে চলতে শুরু পরিবর্তন করা যেতে পারে 2তার "বেস" সংখ্যা হিসাবে) পরিবর্তিত ফাংশন পর বন্ধনী স্থাপন এবং এটা ভিতরে Mathemania কমান্ড স্থাপন দ্বারা বিভিন্ন exponentiations, ফ্যাক্টরিয়ালগুলির এবং শিকড় তৈরি করতে।

উদাহরণস্বরূপ, কোনও সংখ্যাটিকে স্কোয়ারের পরিবর্তে ঘনক্ষন করতে, আপনি পছন্দটির 3পরে কমান্ডটি রাখতে eপারেন:

e(efrrc) -> cube a number, "efrrc" = 3

দ্রষ্টব্য: আমাদের উদ্দেশ্যে, ফ্যাকটোরিয়াল কমান্ড ( f) 2একক ফ্যাক্টরিয়াল হিসাবে শুরু করে । সুতরাং আপনি যদি তা করেন তবে f(efrrc)এটি দ্বিগুণ ফ্যাক্টরিয়ালকে মূল্যায়ন করবে, ট্রিপল ফ্যাক্টরিয়াল নয়।

nফ্যাক্টরিয়ালগুলির জন্য (যেমন ডাবল ফ্যাক্টরিয়ালস = ২-ফ্যাক্টরিয়াল, ট্রিপল ফ্যাক্টরিয়াল = 3-ফ্যাক্টরিয়াল ইত্যাদি), বেস সংখ্যাটি nতার চেয়ে nকম এবং এটির চেয়ে কম সংখ্যার দ্বারা গুণিত হয় এবং যতক্ষণ না চূড়ান্ত সংখ্যাটি না হতে পারে বা নেতিবাচক nনা হয়ে বিয়োগ0

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

7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
                           1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
                        3 - 3 = 0, which is 0)

আরও তথ্যের জন্য, এখানে দেখুন

আপনি এটি যে কোনও জায়গায় সন্নিবেশ করতে পারেন এবং এটি ম্যাথেমেনিয়া দ্বারা একক ফাংশন হিসাবে বিবেচিত হবে:

e(efrrc)rc = ceil(sqrt(2^3))
           = ceil(2.82...)
           = 3

এগুলি একে অপরের অভ্যন্তরে বাসা বাঁধার অনুমতিও রয়েছে:

e(e(e)) = e(4th power)
        = (2^4)th power
        = 16th power

ম্যাথেমেনিয়া কোডের একজন অনুবাদকের জন্য, এখানে ক্লিক করুন (চিয়ার্স, @ ব্র্যাডগিলবার্টব 2 গিলস!)

টাস্ক:

আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করা যা nইনপুট হিসাবে ইতিবাচক পূর্ণসংখ্যার দেওয়া হলে একটি ম্যাথেমেনিয়া প্রোগ্রাম উত্পন্ন করে যা কার্যকর করা হলে ফিরে আসে n

যাইহোক, Mathemania প্রোগ্রাম যা আপনাকে উৎপন্ন ছোট (golfed) যতটা সম্ভব হতে হবে, এবং আপনার চূড়ান্ত স্কোর নমুনা উত্পন্ন Mathemania প্রোগ্রাম, যা পূর্ণসংখ্যা বাইট সংখ্যা এর সমষ্টি দ্বারা নির্ধারিত হয় 10,000থেকে 10,100। সর্বনিম্ন স্কোর জয়।

বিধি এবং চশমা:

  • তোমার প্রোগ্রাম আবশ্যক আউটপুট কোন ধনাত্মক পূর্ণসংখ্যা জন্য একটি বৈধ Mathemania প্রোগ্রাম, কিন্তু শুধুমাত্র সংখ্যার মধ্যে 10,000এবং 10,100পরীক্ষা করা হবে।
  • আপনাকে ম্যাথেমেনিয়া প্রোগ্রামগুলি আউটপুট দেওয়ার অনুমতি নেই যা কোনও পূর্ণসংখ্যার ফলাফল দেয় না। আপনি যদি এটি করেন তবে আপনার প্রোগ্রামটি অযোগ্য ঘোষণা করা হবে।
  • কমান্ডগুলির জন্য e, fএবং r, সেই ফাংশনের অভ্যন্তরে ম্যাথেমেনিয়া কোড (উদাহরণস্বরূপ e(efrrc), ফাংশনের অভ্যন্তরে কোডটি যেখানে efrrc) অবশ্যই উপরের ধনাত্মক পূর্ণসংখ্যার মূল্যায়ন করতে হবে 2। যদি আপনার প্রোগ্রামটি এই নিয়মটি অনুসরণ না করে তবে এটি অযোগ্যও বটে।
  • আপনার প্রোগ্রামটি একটি আধুনিক ল্যাপটপে সর্বোচ্চ 30 মিনিটের মধ্যে 101 টেস্ট ইন্টিজারের যেকোন একটির জন্য অবশ্যই ম্যাথেমেনিয়া প্রোগ্রামটি ফিরিয়ে আনতে হবে।
  • আপনার প্রোগ্রামটি প্রতিবার চালিত হওয়ার সাথে সাথে কোনও পূর্ণসংখ্যার জন্য একই সমাধানটি ফিরে আসতে হবে। উদাহরণস্বরূপ, যখন কোনও প্রোগ্রামকে একটি ইনপুট দেওয়া হয় 5এবং এটি আউটপুট হয় efrc, প্রতিবার ইনপুট দেওয়ার সময় এটি অবশ্যই আউটপুট দেয় 5
  • কোনও ধনাত্মক পূর্ণসংখ্যার জন্য আপনি কোনও সমাধান হার্ড-কোড নাও করতে পারেন।
  • আপনার আউটপুটে পুরোপুরি গল্ফিংয়ের সম্ভাব্যতা বাড়ানোর জন্য, আপনার প্রোগ্রামটি নির্বিচারে বড় পূর্ণসংখ্যাগুলি পরিচালনা করতে সক্ষম হওয়া উচিত। এটি কোনও প্রয়োজন নয়, যদিও আপনার ভাষা যদি এটিকে সমর্থন না করে তবে সৌভাগ্য।

এটি , তাই সর্বনিম্ন স্কোর জয়!


2
আমি একজন লিখেছিলেন এই ভাষার জন্য evaluator মধ্যে পার্ল 6 Tio নেক্সাস উপর।
ব্র্যাড গিলবার্ট

@ ব্র্যাডগিলবার্ট বিগিলস ওয়াও, ধন্যবাদ! আমি চ্যালেঞ্জের একটি লিঙ্ক রাখব।
3:30 এ ক্লিমেজিক

যদি ইনপুট efউদাহরণস্বরূপ হয়, কোডটি কি "এড়িয়ে যেতে" অনুমতি দেয় এবং efঅপারেশনের আগে ফলাফলটি আউটপুট দেয় ?
devRicher

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

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

উত্তর:


1

পাইথন 3.5, স্কোর ??

এখন পর্যন্ত আমার সকল 101 ইনপুটগুলির আউটপুট নেই, তবে একবার আমি সমস্ত পরীক্ষার ক্ষেত্রে প্রোগ্রামটি চালিয়ে দিলে আমি আমার স্কোর দিয়ে আপডেট করব।

from math import *

memoized = {}
same = {}

def _(mathmania, n):
    memoized[n] = mathmania
    return mathmania

def is_prime(n):
    if n == 2:
        return True
    if n % 2 == 0 or n <= 1:
        return False
    for divisor in range(3, int(sqrt(n)) + 1, 2):
        if n % divisor == 0:
            return False
    return True

def pair_key(pair):
    low, high = pair
    diff = high - low
    if diff == 0:
        return 100
    low_done, high_done, diff_done = low in memoized, high in memoized, diff in memoized
    if high_done and memoized[high] == None or low_done and memoized[low] == None:
        return -1
    return (high_done + diff_done + (diff + 1 == low)) * 33 + low / high

def major_pairs(n):
    for i in range(n, int(sqrt(n)), -1):
        d = n / i
        if i - d < d - 1:
            break
        if d == int(d):
            yield (int(d), i)

def fact_key(pair):
    i, f = pair
    if i in memoized:
        if memoized[i] == None:
            return -1
        return 1
    return i / f

def near_fact(n, level):
    s = 4
    if n in same:
        s = same[n]
    for i in range(s, n ** 2 ** level):
        f = factorial(i)
        if f > (n - 1) ** 2 ** level:
            if f < (n + 1) ** 2 ** level:
                same[n] = i
                yield (i, f)
            else:
                return

def generate_mathmania(n):
    if n in memoized and memoized[n] != None:
        return memoized[n]
    memoized[n] = None
    binx = log(n, 2)
    if binx == int(binx):
        if binx == 2:
            return _("e", n)
        if binx == 1:
            return _("er", n)
        if binx == 0:
            return _("rl", n)
        return _("e(" + generate_mathmania(int(binx)) + ")", n)
    sq = sqrt(n)
    if sq == int(sq):
        return _(generate_mathmania(int(sq)) + "e", n)
    low, high = max(major_pairs(n), key=pair_key)
    if pair_key((low, high)) == -1:
        level = 1
        while True:
            try:
                i, f = max(near_fact(n, level), key=fact_key)
            except:
                level += 1
                continue
            if fact_key((i, f)) == -1:
                return _(generate_mathmania((n - 1) ** 2 + 1) + "rc", n)
            if f == n ** 2 ** level:
                return _(generate_mathmania(i) + "f" + "r" * level, n)
            if f < n ** 2 ** level:
                return _(generate_mathmania(i) + "f" + "r" * level + "c", n)
            return _(generate_mathmania(i) + "f" + "r" * level + "l", n)
    if low != 1:
        if low == high:
            return _(generate_mathmania(low) + "e", n)
        if high - low == 1:
            return _(generate_mathmania(high) + "f", n)
        return _(generate_mathmania(high) + "f(" + generate_mathmania(high - low + 1) + ")", n)
    good = None
    for i in range(n ** 2 - 1, (n - 1) ** 2, -1):
        if i in memoized:
            return _(generate_mathmania(i) + "rc", n)
        if not is_prime(i):
            good = i
    if good:
        return _(generate_mathmania(good) + "rc", n)
    for i in range((n + 1) ** 2 - 1, n ** 2, -1):
        if i in memoized:
            return _(generate_mathmania(i) + "rl", n)
        if not is_prime(i):
            good = i
    if good:
        return _(generate_mathmania(good) + "rl", n)
    return _(generate_mathmania((n - 1) ** 2 + 1), n)

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


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

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