আইএমপি: অন্তর্ভুক্ত গুণক পার্সার


9

জ্যাক সি প্রোগ্রামিংয়ের ভাষা পছন্দ V=a*b*h; করে তবে মানগুলি গুণিত করতে পছন্দ লিখতে পছন্দ করে না।

তিনি V=abh;পরিবর্তে লিখতে চান , abhপ্রতীক int a, b, h;সংজ্ঞায়িত হওয়ার পরে প্রতীককে সংজ্ঞায়িত করার বিষয়ে কেন সংকলন করা উচিত , যাতে আমরা গুণন করতে পারি?

তাকে বর্তমানের স্কোপে সংজ্ঞায়িত ভেরিয়েবলের সেটটি জানা থাকলে একটি পার্সার কার্যকর করতে সহায়তা করে যা একটি একক গুণ গুণকে বোঝায় provided

সরলতার জন্য, সংখ্যা দ্বারা গুণিত করা (হিসাবে হিসাবে 2*a*b) অ্যাকাউন্টে নেওয়া হয় না, কেবলমাত্র ভেরিয়েবল উপস্থিত হয়।

ইনপুটটি একটি গুণ গুণ টি , টি রেগ এক্সপ্যাক্ট পূর্ণ করে:

[a-zA-Z_][a-zA-Z_0-9]*

এবং একটি পরিবর্তনশীল সেট জেড

ভেরিয়েবল সেট জেড ওভার টি শব্দটির একটি পার্সিং পি হ'ল একটি স্ট্রিংটি পরিপূর্ণ করে:

  1. *পি থেকে সমস্ত উপস্থিতি অপসারণের পরে আমরা টি পাই,
  2. হয় জেড থেকে একটি পরিবর্তনশীল নাম বা একক *অক্ষর দ্বারা বিভক্ত Z থেকে সঠিক পরিবর্তনশীল নাম সমন্বিত ।

সমাধানটি কোনও পদটির সমস্ত বিশদ মুদ্রণ করা উচিত।

নমুনা:

Vars           a, c, ab, bc
Term           abc
Solution       ab*c, a*bc

Vars           ab, bc
Term           abc
Solution       -

Vars           -
Term           xyz
Solution       -

Vars           xyz
Term           xyz
Solution       xyz

Vars           width, height
Term           widthheight
Solution       width*height

Vars           width, height
Term           widthheightdepth
Solution       -

Vars           aaa, a
Term           aaaa
Solution       aaa*a, a*aaa, a*a*a*a

ইনপুট (ভেরিয়েবলের তালিকা এবং শব্দটির তালিকা) ভাষার জন্য উপযুক্ত কোনও উপায়ে সরবরাহ করা যেতে পারে।

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

কোনও শব্দটির পার্সিং সম্ভব না হলে খালি আউটপুট গ্রহণযোগ্য (

এটি একটি কোড গল্ফ, তাই সংক্ষিপ্ততম কোডটি জয়ী।


1
আপনার প্রথম উদাহরণে, আমি বিশ্বাস করি ab*cযে একটি ভুল পার্স, কারণ cকোনও অনুমোদিত ভেরিয়েবল নয়।
isaacg

1
একটি পুনরাবৃত্ত স্ক্যানের সাথে আমি নমুনায় আপনার ফলাফলটি ঠিক খুঁজে পাই। তবে এটি প্রশ্নবিদ্ধ: কেন a*aaa aaa*aএবং নাab*c c*ab
edc65

বিধি বিধানের কারণে 1.। হ্যাঁ, গুণটি সাধারণত পরিবর্তিত হয়, তবে আমরা এতদূর এগিয়ে যাই না - আমরা কেবল এটির ক্রমে গুণটি "পুনর্গঠন" করতে চাই। আসলে জ্যাকের ভাষায় আমরা একটি ম্যাট্রিক্স টাইপ করতে পারতাম - গুণটি তখন পরিবর্তিত হয় না। এবং "আআ" উভয়ই "আআ" এবং "এ" বা "এ" এবং "আআ" উভয়ের সংক্ষিপ্ত অবস্থান হতে পারে - এটি যোগাযোগের জন্য নয়, বরং দ্বিপাক্ষিকতার জন্য আমরা উভয়কে বিবেচনায় নিচ্ছি।
pawel.boczarski

উত্তর:


4

পাইথ, 18 টি অক্ষর

mj\*dfqzsTsm^Qkhlz

এই দ্রবণটি আমার ইন্টারপ্রেটিং ফিশ সলিউশন থেকে অভিযোজিত । সমস্যাগুলি আসলে খুব একই রকম।

যেমন ইনপুট আশা করে:

aaaa
"a", "aaa"

এভাবে আউটপুট দেয়:

['a*aaa', 'aaa*a', 'a*a*a*a']

এখানে চেষ্টা করুন।

  • sm^Qkhlz: ভেরিয়েবলের ইনপুট স্ট্রিং সংখ্যার দৈর্ঘ্য পর্যন্ত ভেরিয়েবলের সমস্ত ক্রম উত্পন্ন করে।

  • fqzsT: ইনপুট স্ট্রিংয়ের সাথে মেলে এমন চলক ক্রমগুলি ফিল্টার করে

  • mj\*d: *প্রতীক এবং মুদ্রণ সন্নিবেশ করান ।


3

পাইথন 2 - 147 94 বাইট


R=lambda S,V,F=[]:S and[R(S[len(v):],V,F+[v])for v in V if v==S[:len(v)]]or print("*".join(F))

এটি এমন কোনও ফাংশনটিকে Rযেমন ব্যবহার করার জন্য সংজ্ঞা দেয় :

>>> R("abc", ["a", "bc", "ab", "c"])

প্রিন্ট আউটপুট যেমন:

a*bc
ab*c

1

জাভাস্ক্রিপ্ট (ES6) 111

আমার "ফিশ" উত্তর থেকে অভিযোজিত , মূল পার্থক্যটি কেবল প্রথম নয়, সমস্ত সমাধান সন্ধান করছে।

F=(v,t)=>(k=(s,r)=>s?v.map(v=>s.slice(0,l=v.length)==v&&k(s.slice(l),[...r,v])):console.log(r.join('*')))(t,[])

আউটপুট কনসোলে মুদ্রিত হয়। ফাংশন ফলাফলের কোনও অর্থ নেই এবং অবশ্যই তা বাতিল করতে হবে।

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F(['a','c','ab','bc'],'abc')  
a*bc  
ab*c

F(['ab','bc'],'abc')

F(['aaa','a'],'aaaa')
aaa*a
a*aaa
a*a*a*a

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