ননারি সংখ্যা কতটা শক্ত?


10

আপনাকে যথারীতি 0 থেকে 8 এর সংখ্যার সমন্বয়ে একটি ননারি (বেস 9) অ-নেতিবাচক পূর্ণসংখ্যা দেওয়া হয়। তবে এই সংখ্যায় ডিজিটের সংখ্যা (শীর্ষস্থানীয় শূন্যগুলির সাথে নেই) একটি প্রিফেক্ট বর্গক্ষেত্র।

এ কারণে, নম্বরটি বর্গাকার গ্রিডে সাজানো যেতে পারে (পড়ার ক্রমটি এখনও সংরক্ষিত রয়েছে)।

1480 (1125 বেস 10) সহ উদাহরণ:

14
80

এখন এই জাতীয় ননারি গ্রিডের প্রতিটি অঙ্ক অন্য গ্রিড স্পেসের (গতিসম্পন্ন সীমানা শর্ত সহ ) গতি নির্দেশ করে :

432
501
678

এই যে বলছে

0 = stay still
1 = move right
2 = move right and up
3 = move up
...
8 = move right and down

সুতরাং, যদি 1480 গ্রিডে আপনি 4 এ শুরু করেন তবে আপনি উপরে চলে যান (পিবিসি মনে রাখবেন) এবং 8 এ চলে যান, যার অর্থ আপনি সময়কাল 2 সহ একটি চক্র শুরু করে ডান এবং নীচে 4 এর দিকে চলে যান।

সাধারণভাবে এই প্রক্রিয়াটি অব্যাহত থাকে যতক্ষণ না আপনি 0 বা কোনও চক্রের নজরে আসেন। (A 0 কে 1 কালক্রমে একটি চক্র হিসাবে বিবেচনা করা হয়))

1480 এর ক্ষেত্রে, পর্যায়ক্রমে 2 2 2 1যথাক্রমে 4 টি শুরু অঙ্কের প্রতিটিটিতে পৌঁছায় ।

বৃহত্তর গ্রিডের জন্য এই সংখ্যাগুলি 8 এর চেয়ে বেশি হতে পারে তবে আমরা এখনও তাদেরকে একটি নতুন ননারি সংখ্যায় "অঙ্ক" হিসাবে ব্যবহার করতে পারি (কেবল 9 ^ n এর সহগগুলি যেমন তারা অঙ্ক হিসাবে ছিল):

2*9^3 + 2*9^2 + 2*9 + 1 = 1639 (base 10) = 2221 (base 9)

আমরা এটিকে মূল ন্যানারি সংখ্যার শক্তি বলব। সুতরাং 1480 এর শক্তি 1639 (বেস 10) বা সমতুল্য, 2221 (বেস 9)।

চ্যালেঞ্জ

সংক্ষিপ্ততম প্রোগ্রামটি লিখুন যা জানায় যে ন্যানারি সংখ্যার শক্তিটি ন্যানারি সংখ্যার চেয়ে কম, কম বা সমান whether (আপনার অবশ্যই শক্তি গণনা করার দরকার নেই))

ইনপুটটি একটি অ-নেতিবাচক ননারি নম্বর হবে যাতে বর্গ সংখ্যা রয়েছে (এবং 0 এর নিজস্ব ক্ষেত্রে ছাড়া কোনও শীর্ষস্থানীয় শূন্য)। এটি কমান্ড লাইন বা স্টিডিন থেকে আসা উচিত।

আউটপুটটি স্টাডাউটে যেতে হবে:

G if the strength is larger than the original number (example: 1480 -> strength = 2221)
E if the strength is equal to the original number (example: 1 -> strength = 1)
L if the strength is less than the original number (example: 5 -> strength = 1)

ফান বোনাস চ্যালেঞ্জ:
আপনি যে সর্বোচ্চ ইনপুট খুঁজে পেতে পারেন তা তার শক্তির সমান? (কোন সীমা আছে?)


ইনপুট হিসাবে, এটি দশমিক সংখ্যা হিসাবে দেওয়া হয় যাগুলির অঙ্কগুলি ননারি সংখ্যার মতো বা ননারি সংখ্যার দশমিক (বা বাইনারি) প্রতিনিধিত্ব হিসাবে? অর্থাত্: 1480 (নন) এর জন্য ইনপুটটি 1480 বা 1125 হবে?
ওভাররেક્ટર

@overactor ননারি ফর্ম্যাটে


@ ওভেনেক্টর 8 বছরেরও বেশি সময়কাল ধরে এটি সম্ভব হতে পারে বলে আমি মনে করি।
মার্টিন ইন্ডার

@ মার্টিনবাটনার আপনি যদি এর মধ্যে কোনটি পান তবে আমি পুরোপুরি মুগ্ধ হব।
ওভাররেੈਕਟਰ

উত্তর:


2

পাইথন 2, 213 209 202

সম্পাদনা করুন: সর্ট শর্টকিউটিং সরানো হয়েছে যা কখনও কখনও ভুল incor নিচে দেখ.

(বৃহত্তরভাবে) @ কেএসএবির মতো একই অ্যালগরিদম তবে খুব ভারি গল্ফ হয়েছে।

n=`input()`
s=int(len(n)**.5)
c=0
for i in range(s*s):
 a=[]
 while(i in a)<1:a+=[i];x='432501678'.find(n[i]);i=(i+x%3-1)%s+((i/s+x/3-1)%s)*s
 c=c*9+len(a)-a.index(i)
d=long(n,9)
print'EGL'[(c>d)-(c<d)]

Golfs:

  • 213: শর্ট সার্কিট, ত্রুটিযুক্ত সমাধান।

  • 209: প্রথম কাজ সমাধান।

  • 202: দুটি স্ট্রিং লুকআপকে এক সাথে সংযুক্ত করে।

সম্পাদনা: আমি ঠিক বুঝতে পেরেছি যে এই প্রোগ্রামটি, এবং কেএসবেরও খুব ত্রুটিযুক্ত ছিল যে তারা মাল্টিডিজিট চক্রের দৈর্ঘ্যকে উপেক্ষা করে। উদাহরণ ব্যর্থতা:

3117
2755
3117
7455

যদিও 3 এর চক্র দৈর্ঘ্য 2 হয়, এবং এইভাবে উপরের অ্যালগরিদম শর্ট সার্কিটগুলি 'এল' তে ফিরে আসে তবে এটি আসলে 'জি' প্রত্যাবর্তন করে, কারণ চক্রের দৈর্ঘ্য দ্বিতীয় অঙ্কে 14 এর চেয়ে বেশিকে কাটিয়ে ওঠে। আমি তাই প্রোগ্রাম পরিবর্তন করেছি। এটিও খাটোভাবে মজাদারভাবে খাটো হয়ে গেছে। আপনার প্রোগ্রামটি পরীক্ষা করতে, ব্যবহার করুন 3117275531177455। এটা ফিরে আসা উচিত G


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

@ কেস্যাব ধন্যবাদ - আপনার অ্যালগরিদমটি শুরু করার জন্য খুব চালাক ছিল - এটি করার আরও ভাল কোনও উপায় আমি পাই না।
isaacg

2

পাইথন 296

আসলে খুব অদক্ষ নয়, এটি কেবল এটির যতগুলি সংখ্যা প্রয়োজন তা পরীক্ষা করে।

n=raw_input();s=int(len(n)**.5);t=0
for i in range(s**2):
    l=[]
    while i not in l:l.append(i);c=n[i];i=(i%s+(-1 if c in'456'else 1 if c in'218'else 0))%s+((i/s+(-1 if c in'432'else 1 if c in'678'else 0))%s)*s
    t=t*9+len(l)-l.index(i)
print'EGL'[cmp(t,long(n,9))]

তাদের শক্তির সমান সংখ্যক হিসাবে, আমি মনে করি একমাত্র সমাধানগুলি হ'ল প্রতিটি এন x এন বর্গের জন্য এন = 8 পর্যন্ত প্রতিটি স্পেসে এন সমেত একটি বর্গক্ষেত্র। আমার চিন্তাভাবনাটি হ'ল যেহেতু একটি লুপের প্রতিটি সংখ্যা অবশ্যই একই সংখ্যা (লুপের দৈর্ঘ্য) হতে হবে প্রতিটি লুপটি সমস্ত এক দিক হতে হবে। অবশ্যই এটির অর্থ লুপের আকার অবশ্যই এন (এবং প্রতিটি উপাদান অবশ্যই এন হতে হবে)। আমি দৃ sure়ভাবে নিশ্চিত যে এই যুক্তিটি কোনও আকারের স্কোয়ার এবং লুপগুলিতে প্রয়োগ করা যেতে পারে, যার অর্থ প্রথম 8 বাদে তাদের শক্তির সমান কোনও স্কোয়ার নেই।


যদিও সম্ভাবনা কম, 8 এর চেয়ে বড় লুপের পক্ষে এটি সম্ভব হতে পারে
ওভাররেেক্টর

2
আমি মনে করি এটি 31172755311774558 টিরও বেশি লুপের আকারের কারণে ভুল ফলাফল দেয় my আমার পোস্টটি দেখুন।
isaacg

1
@ আইসাকগ ওহ, আমি এটি দেখতে পাইনি, এটি এটিকে কাজ করার জন্য আমি এটি পরিবর্তন করেছি তবে আমি আরও চেষ্টা করব না এবং এটি আরও গল্ফ করব না কারণ এটি আপনার উত্তরটি কেবল অনুলিপি-পেস্ট করা হবে be ওহ এবং আমি মনে করি আপনি ব্যবহার করে আপনার শেষ দুটি লাইন উন্নত করতে পারেন cmp
কেএসব


0

লুয়া - এখনও গল্ফ না

নিরাপদ রক্ষার জন্য এখানে রাখা। আমি এটিকে গল্ফ করব (এবং "বৃহত্তর গ্রিডের জন্য এই সংখ্যাগুলি 8 এর চেয়ে বেশি হতে পারে তবে আমরা এখনও তাদের" অঙ্ক "হিসাবে ব্যবহার করতে পারি) পরে। যদিও কাজ করে।

d={{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1}}
d[0]={0,0}ssd=''
n=arg[1]
q=math.sqrt(#n)t={}

    for y=1,q do
    table.insert(t,y,{})
    for x =1,q do
        v=(y-1)*q+x
        table.insert(t[y],x,n:sub(v,v)+0)
        io.write(t[y][x])
    end
end
for y=1,q do
    for x=1,q do
        cx=x cy=y pxy=''sd=0
        while pxy:match(cx..':%d*:'..cy..' ')==nil do
            pxy=pxy..cx..':'..sd..':'..cy.." "
            ccx=cx+d[t[cx][cy]][2]
            ccy=cy+d[t[cx][cy]][1]
            cx=ccx cy=ccy
            if cx<1 then cx=q elseif cx>q then cx=1 end
            if cy<1 then cy=q elseif cy>q then cy=1 end
            sd=sd+1
        end
        dds=(pxy:sub(pxy:find(cx..':%d+:'..cy)):match(':%d*'))
        ssd=ssd..(sd-dds:sub(2))
    end
end
print(ssd)
nn=tonumber(n,9) tn=tonumber(ssd,9)
if tn>nn then print("G") elseif tn==nn then print("E") else print("L") end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.