একটি ন্যামপ্যাডের আশেপাশে সম্ভাবনা তৈরি করুন


12

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

একটি নামপ্যাড যেমন সংজ্ঞায়িত করা হয়:

7 | 8 | 9
- - - - -
4 | x | 6
- - - - -
1 | 2 | 3

দয়া করে মনে রাখবেন, 5 হ'ল একটি অবৈধ সংখ্যা, কারণ আপনি নিজের দিকে যেতে পারেন না।

সমস্ত উদাহরণ এই সম্ভাবনাগুলি ব্যবহার করবে: [50, 40, 30, 20, 10]

আমি যদি আশেপাশে সম্ভাবনা তৈরি করতে চাইতাম তবে 8এটি এমন দেখাবে:

40 | 50 | 40 
-- | -- | --
30 | xx | 30
-- | -- | --
20 | 10 | 20

আউটপুটটি হবে [20, 10, 20, 30, 30, 40, 50, 40](বাদ দেওয়া ৫ টি সহ) বা [20, 10, 20, 30, null, 30, 40, 50, 40](বর্তমানের সাথে 5)

আমি যদি এগুলি চারপাশে উত্পন্ন করতে চাইতাম তবে 1এটি দেখতে এমন হবে:

30 | 20 | 10
-- | -- | --
40 | xx | 20
-- | -- | --
50 | 40 | 30

আউটপুটটি হবে [50, 40, 30, 40, 20, 30, 20, 10](বাদ দেওয়া ৫ টি সহ) বা [50, 40, 30, 40, null, 20, 30, 20, 10](বর্তমানের সাথে 5)

আপনি একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন যা কোনও সাধারণ উপায়ে ইনপুট নেয় (কমান্ড লাইন, স্টিডিন) এবং আউটপুট প্রিন্ট করে, বা আপনি একটি সংখ্যা যুক্তি সহ একটি ফাংশন লিখতে পারেন, যা আউটপুট প্রিন্ট করে বা রিটার্ন করে। আপনার প্রোগ্রাম বা ফাংশনটিতে একটি নম্বর গ্রহণ করা উচিত - চারপাশে উত্পন্ন করার অবস্থান। আপনার এই সম্ভাবনাগুলি ব্যবহার করা উচিত: [50, 40, 30, 20, 10]( এগুলিকে হার্ডকোড করতে হবে না)।

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

(এটি আমার প্রথম প্রশ্ন, আমার উপর সহজ হয়ে যান!)

উত্তর:


5

সিজেম, 27 বাইট

12369874s_$\_r#m<f{#4-z)0S}

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ধারণা

যদি আমরা ঘড়ির কাঁটার বিপরীতে ফ্যাশনে প্রায় 5 টি সংখ্যার মধ্য দিয়ে যাই তবে আমরা স্ট্রিং 12369874বা এর কোনও আবর্তন পাই (প্রারম্ভিক বিন্দুর উপর নির্ভর করে)।

এই স্ট্রিং আবর্তিত পর যাতে ইনপুট অঙ্ক এন বামদিকের অবস্থানে হয়, আবর্তিত স্ট্রিং ডিজিটের নিম্নলিখিত সম্ভাব্যতা আছে:

50 40 30 20 10 20 30 40

আমরা যদি এই সংখ্যার সূচকগুলি বিবেচনা করি তবে যা হয়

 0  1  2  3  4  5  6  7

ফলনের জন্য প্রতিটি থেকে 4 বিয়োগ করুন

-4 -3 -2 -1  0  1  2  3

এবং নিখুঁত মান পেতে

 4  3  2  1  0  1  2  3

কাঙ্ক্ষিত সম্ভাব্যতা পেতে আমাদের কেবলমাত্র 1 যুক্ত করতে হবে এবং একটি 0 যুক্ত করতে হবে।

কোড

12369874s                   e# Push "12369874".
         _$                 e# Push a sorted copy, i.e., "12346789".
           \                e# Swap it with the unsorted original.
            _r#             e# Find the index of the input in an unsorted copy.
               m<           e# Rotate the unsorted original that many units left.
                 f{       } e# For each character C in "12346789":
                            e#   Push the rotated string.
                   #        e#   Find the index of C.
                    4-      e#   Subtract 4.
                      z     e#   Compute the absolute value.
                       )    e#   Add 1.
                        0S  e#   Push a 0 and a space.

2

প্রোলোগ, 166 বাইট

a(A,R):-I:J:K:L:M=50:40:30:20:10,B is abs(5-A),member(B:S,[4:[I,J,K,J,L,K,L,M],3:[J,I,J,K,K,L,M,L],2:[K,J,I,L,J,M,L,K],1:[J,K,L,I,M,J,K,L]]),(A/5>1,reverse(S,R);S=R).

এটি 9 টির ফলাফলের জন্য 1 এর ফলাফলের বিপরীত, 2 এবং 8, 3 এবং 7 এবং 4 এবং 6 এর একই ফলাফলের সত্যতা ব্যবহার করে যে 1 টি ফলাফল থেকে 2,3 এর ফলাফলের দিকে যাওয়ার জন্য স্বীকৃতিযোগ্য প্যাটার্ন রয়েছে এবং 4 তবে আমি নিশ্চিত যে এটির কোডটি 1 থেকে 4 এর জন্য হার্ডকোডিংয়ের চেয়ে দীর্ঘতর হবে, যা আমি করেছি।

উদাহরণ: a(7,R).আউটপুটস R = [30, 20, 10, 40, 20, 50, 40, 30]


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

@ সিয়েরিয়া আমি ধরে নিয়েছি অ্যারে-ভিত্তিক ভাষাগুলি ঠিক সেটাই করবে। দুর্ভাগ্যক্রমে আপনি সাধারণত প্রোলোগে স্বল্প পরিমাণে বাইটের তালিকাগুলির অনুমতি দিতে পারবেন না।
ফ্যাটালাইজ করুন

0

পাইথন - 115

a=[50,40,30,20,10,20,30,40]
b=[0,1,2,7,8,3,6,5,4]
def v(n):
 c=8-b[n-1]
 return[(a[c:]+a[:c])[e]for e in b if e-8]

aনামপ্যাডের আশেপাশের মানগুলির সাথে একটি অ্যারে (1 থেকে পাল্টা ঘড়ির কাঁটা), এবং bনামপ্যাডের চারপাশে অবস্থিত সংখ্যার মানচিত্র। ইনপুট নম্বর (ব্যবহার করে নির্ধারিত b) জন্য নামপ্যাডের চারপাশের ফাঁকের সংখ্যার উপর ভিত্তি করে , এটি অনেকগুলি এলিমেন্টের সামনে থেকে aশেষ প্রান্তে সরে যায় , তারপরে bনামপ্যাড সংখ্যার সাথে সামঞ্জস্য করার জন্য উপাদানগুলিকে পুনরায় সাজানোর জন্য আবার ব্যবহার করে ।


আপনি একটি তৈরি করে /10এবং তারপরে একটি *10লুপ রেখে অনেকগুলি সঞ্চয় করতে পারেন ।
মালটিসেন

(a[c:]+a[:c])[e]একই না হয় a[(c+e)%8]নাকি a[c+e-8]? এবং তারপরে প্লাগ ইন করা ভাবটি cসরল করে।
xnor

0

পাইথ - 38 বাইট

দুটি অ্যারের জন্য বেস সংকোচন বাদে পাইথন উত্তরের মতো একই কৌশলটি ব্যবহার করে a

J_jC"3ê"T*RTm@.<jC"<àR"T-8@JtQd.DJ4

এটি এখানে অনলাইনে চেষ্টা করে দেখুন


Ê এবং What কি করছে?
ফেজ

@ উল্লিখিত বেস সংকোচনের পর্যায়ে দিন
৪০০39

এই সংক্ষিপ্ত উত্তরগুলি আমাকে বিস্মিত করতে কখনও থামবে না।
সেয়ারিয়া

@ সিয়েরিয়া আমি পাইথটি শিখতে সত্যিই পরামর্শ দিতে পারি - এই প্রোগ্রামগুলি তাদের তুলনায় অনেক জটিল
দেখায়

0

জাভা, 190

void g(int n){int i[]={8,0,1,2,7,8,3,6,5,4};String v="54321234",s="";n=i[n];if(n>0)v=v.substring(8-n)+v.substring(0,8-n);for(n=0;n++<9;s=", ")if(n!=5)System.out.print(s+v.charAt(i[n])+"0");}

String v ইনপুট = 1 ডিফল্ট 50 হওয়ায় গণ্যমানের ঘড়ির কাঁটার ক্রমতে সম্ভাব্যতাগুলি (10 দ্বারা বিভক্ত) রাখে।

int[]iবনাম মধ্যে একটি সূচক মধ্যে ইনপুট অনুবাদ। উদাহরণস্বরূপ, v.charAt(i[1])হয় 5। ইনপুট 0 এবং 5 অবৈধ তাই আমি [0] এবং i [5] উভয়েরই একটি স্থানধারকের মান 8 যা v এর শেষে '\ 0' এর সূচক।

আমি সংখ্যাগুলিতে v এর ডানদিকে ডান দিকে ঘোরান I [n] এবং তারপরে সম্ভাব্যতাগুলি কমা দ্বারা পৃথক স্ট্রিং হিসাবে মুদ্রণ করি।

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