ম্যাটল্যাব, 103 99 97 95 93 বাইট
আমি কয়েকটি ভিন্ন জিনিস চেষ্টা করছি, এবং এটি কয়েকটা বাইট সংরক্ষণের জন্য কাজ করতে পেরেছি:
eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);
যদি আমি এটিকে আরও কমিয়ে দিতে পারি তবে আমি একটি ব্যাখ্যা পোস্ট করব।
পুরাতন কোড একটি ব্যাখ্যা
t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))
এটি অষ্টাভেও কাজ করে । আপনি এটি অনলাইনে চেষ্টা করতে পারেন । আমি প্রোগ্রামটিকে একটি স্ক্রিপ্ট হিসাবে সংরক্ষণ করেছি isFactor.m, যাতে আপনি কেবল isFactorপ্রম্পটে প্রবেশ করতে পারেন । [দ্রষ্টব্য: অক্টোবায় চলার সময় একটি সতর্কতা ছড়িয়ে দেওয়া - ম্যাটল্যাব এটি তৈরি করে না]।
'(x^1+7),(x^2-49)'প্রশ্ন অনুযায়ী ইনপুট অবশ্যই ফর্ম্যাটে থাকতে হবে । উদ্ধৃতি চিহ্নগুলি যুক্ত করা হয়েছে যাতে ম্যাটল্যাব / অক্টাভা জানে যে এটি একটি স্ট্রিং।
আউটপুট হয় একটি হল 0বা 1থাকুক বা না থাকুক উপর নির্ভর করে এটা সত্য বা মিথ্যা।
সুতরাং, কোড নিম্নলিখিত হিসাবে কাজ করে। প্রথমে আমরা একটি ইনপুট অনুরোধ করব এবং তারপরে পার্স করব। পার্সিং স্ট্রিং স্ট্রিংয়ে প্রথমটির পরে স্বাক্ষরিত নম্বরটি বের করে (x^1- এটি আমাদের মান n। তারপরে এটি ইনপুট-এর %sপরে ( ) স্ট্রিংটি বের করা অবিরত করে ),- এটি আমাদের এক্সপ্রেশন।
t=sscanf(input(''),'(x^1%d),%s')';
এরপরে, আমরা এর মানটি বের করব nএবং এর xসমান সেট করব - আমরা এক্সারেশনটি শূন্যের সমান কিনা কিনা তা মূল্যায়ন করতে যাচ্ছি n==x, সুতরাং আমরা এই মানটি x এ সঞ্চয় করি। পার্সিং করার সময় বিয়োগ চিহ্নের কারণেও আমরা নিষ্কাশিত নম্বরটিকে অস্বীকার করি।
x=-t(1);
এরপরে আমরা আউটপুটটি প্রদর্শন করব যা একটি বুলিয়ান
disp(
আউটপুটটি মূলত আমাদের মূল্যায়িত সমীকরণের যৌক্তিক অবহেলা। যদি f(x)শূন্য হয়, এটি 1 ফিরে আসবে, অন্যথায় এর ফলাফল শূন্য হবে।
~eval(
আমরা ইনপুট এক্সপ্রেশনটি মূল্যায়ন করছি, তবে এটি করার জন্য আমাদের এটিকে সামান্য পুনরায় ফর্ম্যাট করতে হবে যাতে ম্যাটল্যাব বুঝতে পারে। যখন আমরা স্ট্রিংটি পড়ি, এটি আসলে doubleটাইপের একটি অ্যারে , তাই আমাদের এটিকে একটি অক্ষরের অ্যারেতে রূপান্তর করতে হবে। রূপান্তরকরণের আগে আমরা প্রথম উপাদানটি থেকে মুক্তি পেতাম যা আমরা ব্যবহার করি n। তারপরে আমাদের কোনও xসংখ্যার (যেমন 4x) একই জিনিস দ্বারা একটি সংখ্যার (যেমন ) পূর্বে রয়েছে তবে প্রতিস্থাপন *করতে হবে তবে ম্যাটল্যাব এটি গণনা করতে পারে তার মধ্যে একটি গুণ ( ) সাইন ইন করে।
regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
)
)