ব্যবহারকারী-নির্দিষ্ট নম্বর ব্যবহার করে একটি বৈধ সমীকরণ তৈরি করুন


10

এটি আমার গনিত শিক্ষকদের মধ্যবর্তী স্কুলে খেলত এমন একটি গেমের উপর ভিত্তি করে তৈরি। তিনি বোর্ডে 5 টি এলোমেলো এক-অঙ্কের সংখ্যা এবং তারপরে একটি এলোমেলো দুই-অঙ্কের নম্বর লিখতেন। আমরা এমন একটি সমীকরণ তৈরি করার চেষ্টা করব যা দুটি সংখ্যার সংখ্যা অর্জনের জন্য এক-অঙ্কের সমস্ত 5 টি ব্যবহার করে। এটি আরও ভালভাবে ব্যাখ্যা করার জন্য সমাধান সহ কয়েকটি উদাহরণ এখানে দেওয়া হয়েছে:

Input:           Solution:
7 5 4 8 4 34     5*8-7+4/4 = 34
3 1 5 7 6 54     (7+3)*6-5-1 = 54
3 9 2 1 6 87     9*(2+1)*3+6 = 87
2 1 6 9 7 16     (9-7+6*1)*2 = 16
2 4 5 8 6 96     8*(5+6)+2*4 = 96
3 8 4 5 4 49     8*(4+4)-3*5 = 49

এই চ্যালেঞ্জটি এমন একটি প্রোগ্রাম লেখা যা কোনও প্রদত্ত ইনপুটটির জন্য এই জাতীয় সমীকরণ তৈরি করতে পারে write ইনপুটটি কমান্ড লাইনের মাধ্যমে বা প্রম্পটের মাধ্যমে সরবরাহ করা যেতে পারে। ৫ টি এক-অঙ্কের সংখ্যা সর্বদা প্রথমে প্রবেশ করা হবে (কোনও নির্দিষ্ট ক্রমে নয়) এবং তারপরে দুই-অঙ্কের নম্বর থাকবে। প্রোগ্রামটি এটির সলিউশন সমীকরণটি খুঁজে বের করে মুদ্রণ করবে; যেখানে কোনও সমাধান নেই সেখানে আপনাকে পরিস্থিতি পরিচালনা করতে হবে না। ফাংশনটি সমীকরণে নিম্নলিখিত ক্রিয়াকলাপগুলি ব্যবহার করতে সক্ষম হতে হবে: সংযোজন, বিয়োগফল, গুণ এবং বিভাগ। আপনি যদি অতিরিক্ত বেসিক ক্রিয়াকলাপের অনুমতি দিতে চান তবে যতক্ষণ না তারা চ্যালেঞ্জের মনোভাব অবধি থাকবে (অবহেলা, ক্ষতিকারক এবং মডুলাসটি সুন্দর সংযোজন হবে) fine ক্রমের ক্রম মান গণিতের নিয়ম অনুসরণ করে, সুতরাং গ্রুপিংয়ের জন্য প্রথম বন্ধনী প্রয়োজন।

কোড দৈর্ঘ্যের উপর ভিত্তি করে প্রোগ্রামগুলি স্কোর করা হবে (প্রয়োজনীয় সাদা স্থান সহ)। দ্রষ্টব্য: বিভাগটি অবশ্যই সঠিক হতে হবে, গোলাকার বা নিকটতম পূর্ণসংখ্যার সাথে কাটা উচিত নয়।



এটি অত্যন্ত অনুরূপ কাজ, তবে আমি মনে করি অতিরিক্ত শব্দ এবং কীভাবে এক্সপ্রেশনগুলি গোষ্ঠীভুক্ত করা হয় তার কোনও নিষেধাজ্ঞার সমস্যাটি এটি আকর্ষণীয়ভাবে আলাদা হওয়ার জন্য পর্যাপ্ত পরিমাণে প্রসারিত করা উচিত। অতিরিক্তভাবে, এটি কোড চ্যালেঞ্জের পরিবর্তে একটি গল্ফ চ্যালেঞ্জ, যা বিভিন্ন সমাধানের জন্য কল করবে।
স্যার_লাগসালোট

সংমিশ্রণ সম্পর্কে কি? উদাহরণস্বরূপ যদি 7 5 4 8 4 34 দেওয়া হয়, আউটপুট 7 + 54/8 * 4 অনুমোদিত হবে?
প্যাট্রিক রবার্টস

উত্তর:


7

পাইথন 2.7 (284), পাইথন 3.x (253)

from __future__ import division #(Remove for Python 3.x)
from itertools import *
a=raw_input().split()
for i in permutations(a[:-1],5):
 for j in product('+-*/',repeat=5):
  for k,l in combinations(range(1,12,2),2):
   d=''.join(sum(zip(i,j),()))[:-1];d='('+d[:l]+')'+d[l:]
   if eval(d)==int(a[-1]):print d;b

এটি bসমাধানে একটি ত্রুটি দেয় (অজানা ফাংশন কলিং )।

মূলত, এটি একটি বিশাল দৈত্য শক্তি। এটি ইনপুট নেয়, তার স্পেসগুলি দিয়ে ভাগ করে দেয় ( 1 2 -> [1,2]) এবং তারপরে সেই তালিকাটির মাধ্যমে অনুমতি দেয়। প্রতিটি অনুক্রমের সাথে, এটি 5 টি দৈর্ঘ্যের সমস্ত সম্ভাব্য স্ট্রিংগুলি অক্ষরগুলি ব্যবহার করে পুনরাবৃত্তি করবে +-*/। এই পুনরাবৃত্তির প্রত্যেকটির সাথে, এটি তালিকার 2 দৈর্ঘ্যের সংমিশ্রণ তৈরি করবে [1,3,5,7,9,11], ক্রমান্বয়ে এবং স্ট্রিংকে একসাথে ( 12345 *-/+- -> 1*2-3/4+5-) মিশ্রিত করবে এবং প্রথম বন্ধনীর মধ্যে রাখবে। অবশেষে, এটি এর মূল্যায়ন করবে এবং উত্তর এবং সমীকরণটি সত্য হলে এটি সমীকরণটি মুদ্রণ করে থামবে।

এটি মারাত্মকভাবে অদক্ষ, প্রায় O(n!/(n-5)!)=O(n^5), তবে এটি পরীক্ষার ইনপুটগুলির জন্য উপযুক্ত সময়ে চালিত হয়।


1
বিভাগ ব্যবহার করার সময় পূর্ণসংখ্যার গণিত ভুল আউটপুট তৈরি করতে পারে। উদাহরণস্বরূপ, ইনপুট "3 6 8 7 1 29" "ফলন দেয়" (3 + 8/6) * 7 + 1 "যা সমান 31/3, 29 নয় 29 আমি এটিকে স্পষ্ট করতে বিবরণটি আপডেট করব।
স্যার_লাগসালোট

এটা (3/6)*8*7+1আমার জন্য দেয় ।
beary605

ঠিক আছে, আমি এটি ব্যবহৃত দোভাষীর সাথে একটি সমস্যা হিসাবে চক করব।
স্যার_লগসালোট

3

স্কেলা 368:

২ য় জি = -লাইনটি পরীক্ষা করা আরও সহজ, প্রথমটি কমান্ড আর্গুমেন্টগুলি গ্রহণ করা নমনীয় এবং উভয়ই সমান দৈর্ঘ্যের, তাই আমি কেবল দ্বিতীয়টি থেকে গণনা করি - এটি পাস করার জন্য এটি সরান:

val g=(args.map(_.toDouble))
val g=Array(3,9,2, 1, 6, 87)
val k="+*/-DQ"
val i=(0 to 5)
val f:Seq[(Double,Double)=>Double]=Seq(_+_,_*_,_/_,_-_,(a,b)=>b-a,(a,b)=>b/a)
val h=g.init.permutations;
for(j<-h;o<-i;p<-i;q<-i;r<-i;z=try{f(r)(f(q)(f(p)(f(o)(j(0),j(1)),j(2)),j(3)),j(4))}catch{case _ => 0}
if(z==g(5)))printf("(((%d%c%d)%c%d)%c%d)%c%d=%d\n",j(0),k(o),j(1),k(p),j(2),k(q),j(3),k(r),j(4),g(5))

নমুনা আউটপুট (আপনার এখনই একটি প্রশ্ন থাকতে পারে - মাত্র একটি মুহূর্ত):

(((5+7)/1)+6)*3=54
(((5-7)D1)*6)*3=54
(((5D7)+1)*6)*3=54
(((5+7)+6)Q1)Q3=54

এই 5D7 জিনিস সম্পর্কে কি? D1? এটা কি হেক্স্স? এখানে কিউ 1, কিউ 3 আছে - এটি কি।

স্যার_লাগসালোট চ্যালেঞ্জের চেতনায় নতুন বেসিক ক্রিয়াকলাপের অনুমতি দিয়েছে এবং হ্যাঁ, এগুলি বেল্ট অপারেশন, ডেল্টা এবং কোটিয়েন্টিয়েন্ট।

এগুলি এ / বি থেকে আলাদা এবং এ কিউবি মানে বি / এ এবং এডিবি মানে বা হয়। একে একে ইউক্রেনীয় স্বরলিপি বলি।

সুতরাং

(((5-7)D1)*6)*3=54

মানে

((1-(5-7))*6)*3=54
 (1-(-2))*6*3
   3*6*3 = 18*3=54

কীভাবে এবং কেন তার আরও আকর্ষণীয় প্রশ্নের কাছে: প্রথমদিকে আমি প্রথম বন্ধনী স্থাপনের সম্ভাবনাগুলি সম্পর্কে পাগল হয়েছি, এবং (এ + বি) -সি = এ + বিসি = (এ + বিসি) = ((এ + বি) ) -সি) = (খ + ক) -সি ইত্যাদি। আপনি এই প্রশ্নটির জন্য পাগল হয়ে যেতে পারেন, তবে আপনি যদি সম্ভাব্য প্রথম বন্ধনী সংমিশ্রণগুলি লিখে রাখেন তবে আপনি কখনও কখনও স্ক্র্যাচ শীটটি ফেলে দেন এবং সত্যটির মুখোমুখি হন: আপনি সর্বদা 5 টি মানের মধ্যে 4 টি অপারেশন করেন এবং আপনি সর্বদা এর মধ্যে একটি দিয়ে শুরু করেন। যদি প্যাটার্নটি সর্বদা থাকে (((_x_)x_)x_)x_ ?= _(x 4 টি অপারেটরের একজন হ'ল) ​​এবং বিপরীত দিকটি (xb) এবং (বিএক্সএ) অনুমতি দেয় তবে আপনি প্রতিটি সম্ভাবনা সম্বোধন করেছেন।

এখন a + b এবং a * b এর জন্য আমাদের কোনও বিপরীত দিকের প্রয়োজন নেই, তারা পরিবর্তনশীল। সুতরাং আমি ডি এবং কিউ অপারেটর আবিষ্কার করেছি, যা কেবল দিকটি স্যুইচ করে। আমার কাছে এখন আরও 2 জন অপারেটর রয়েছে, তবে দিক পরিবর্তন করার দরকার নেই। ভাল - এটি সিকোয়েন্স ফাংশনে করা হয়:

 (a,b)=>b-a,(a,b)=>b/a

আমার বোধগম্যতা অ্যারে জি থেকে মানগুলি নিয়ে যায় এবং এগুলি একটি টু এ বিতরণ করে, তারপরে আমি ফাংশনটি বাছাই করার জন্য 4 টি সূচক এবং পরে (কেবলমাত্র সূচক দ্বারা) সম্পর্কিত অপারেটর প্রতীক বেছে নিয়েছি। আমাকে ডিভি / ০ টি ত্রুটিগুলি ধরতে হবে, যেহেতু বিয়োগ বিয়োগের কারণে শূন্য হতে পারে, যখন নমুনা ইনপুট ডেটাতে 0 থাকে না।


ডেল্টা এবং কোটিরিয়েন্ট অপারেটররা ভাল আছেন। আপনি যদি গল্ফিংয়ের পরিকল্পনা করেন তবে আউটপুটটিতে আপনাকে প্রথম বন্ধনী যুক্ত করতে হবে।
স্যার_লগসালোট

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