গ্রাফিং ক্যালকুলেটর প্রয়োগ করুন


12

ক্যালকুলেটর জড়িত অনেক প্রশ্ন আছে; তবে, এটি কোনও গ্রাফিং ক্যালকুলেটর বাস্তবায়নের সাথে জড়িত বলে মনে হয় না।

চ্যালেঞ্জ

আপনাকে একটি সম্পূর্ণ প্রোগ্রাম লিখতে হবে যা STDIN থেকে ইনপুট হিসাবে একাধিক সূত্র গ্রহণ করে এবং সেগুলি STDOUT এ লেখবে। ইনপুট ফর্ম গ্রহণ করবে f1(x)=x^2-x-1। এর fপরে 0-9 নম্বর সহ (অন্তর্ভুক্ত) থাকবে এবং তারপরে (x)=গ্রাফের সূত্র অনুসরণ করবে। আপনার প্রোগ্রামটি ইনপুট, গ্রাফ, আরও ইনপুট, গ্রাফ, ইত্যাদি নিতে সক্ষম হওয়া উচিত

এটি কোড গল্ফ।

আপনার গ্রাফের প্রতি 1/2 ইউনিটে কমপক্ষে একটি পয়েন্টের রেজোলিউশন সহ এক্স-অক্ষের পরিসর থাকা উচিত -5 থেকে 5 পর্যন্ত। Y- অক্ষের প্রয়োজনীয়তাগুলি একই। এটি আধুনিক ক্যালকুলেটরগুলির তুলনায় একটি ছোট পরিসরের মতো মনে হতে পারে তবে এটি সম্ভবত এটির চেয়ে তুচ্ছ হবে। +পূর্ণাঙ্গের আকারে টিক চিহ্ন সহ গ্রাফটির অক্ষটি আঁকতে হবে ।

অপারেশনের স্বাভাবিক ক্রম দিয়ে সূত্রটি মূল্যায়ন করা উচিত। এই সূত্রগুলিতে কোনও উল্লম্ব অ্যাসিম্পটোটস / অপরিজ্ঞাত অঞ্চল থাকবে না। পরিবর্তনশীল সর্বদা এক্স হবে be যদি একই সমীকরণ সংখ্যার সাথে দুটি সূত্র প্রবেশ করানো হয় তবে সবচেয়ে পুরনোটি মুছতে হবে এবং নতুন সূত্র দিয়ে প্রতিস্থাপন করা উচিত। ফাঁকা সূত্রগুলি শূন্যের মূল্যায়ন করা উচিত। যেহেতু সম্ভবত এটি সূত্রটি সর্বদা 1/2 এর একটি দুর্দান্ত একক দেয় না, তাই আপনাকে নিকটতম 1/2 এর সাথে গোল করতে হবে।

যখন কোনও সূত্র গ্রাফ করা হয় তখন সূত্রের সংখ্যার বাইরে এর লাইনটি গঠন করা উচিত। যখন একটি রেখা একটি অক্ষকে অতিক্রম করবে, তখন অক্ষটি শীর্ষে আঁকতে হবে। যখন দুটি লাইন একে অপরকে অতিক্রম করে, যা দেখানো হয় তাতে কিছু যায় আসে না।

উদাহরণ ইনপুট

f1(x)=x+1

আউটপুট

          +       1
          |      1
          +     1
          |    1
          +   1
          |  1
          + 1
          |1
          +
         1|
+-+-+-+-+-+-+-+-+-+-+
       1  |
      1   +
     1    |
    1     +
   1      |
  1       +
 1        |
1         +
          |
          +

ইনপুট

f2(x)=(x^2)^0.25

আউটপুট

          +       1
          |      1
          +     1
          |    1
          +   1
          |  1
2222      + 1    2222
    222   |1  222
       22 + 22
         2|2
+-+-+-+-+-+-+-+-+-+-+
       1  |
      1   +
     1    |
    1     +
   1      |
  1       +
 1        |
1         +
          |
          +

ইনপুট

f1(x)=-x  

(দ্রষ্টব্য, আপনার প্রোগ্রামের পক্ষে এই ইনপুটটিকে প্রত্যাখ্যান করা কেবল গ্রহণযোগ্য এবং কেবল 0-x বা x * -1 ব্যতীত, তবে এটি নথিভুক্ত করা উচিত)

আউটপুট

1         +
 1        |
  1       +
   1      |
    1     +
     1    |
2222  1   +      2222
    2221  |   222
       22 + 22
         2|2
+-+-+-+-+-+-+-+-+-+-+
          |1
          + 1
          |  1
          +   1
          |    1
          +     1
          |      1
          +       1
          |        1
          +         1

উত্তর:


5

পার্ল, 177 টি অক্ষর (+1 কমান্ড লাইন সুইচ)

perl -nE 's!\^!**!g;s!x!(\$k/2-6)!g;s/\d.*=/;/;$f[$&]=$_;my%a;for$k(@x=2..22){$i=0;$a{int 12.5-2*eval}[$k-2]=$i++for@f}$p="|";$$_[10]=$p^=W,$a{12}=[$p."-+"x10],say map$_//$",@$_ for@a{@x}'

প্রতি এই মেটা থ্রেড , আমার বিশ্বাস এই মোট 178 টি অক্ষর যেমন গণনা করা উচিত নয়।

রুবি সমাধান মতো আমিও ব্যবহার করছি evalএবং প্রতিস্থাপন ^সঙ্গে **

ইনপুট পার্সিং উভয় অবিশ্বাস্যভাবে ভঙ্গুর এবং একই সময়ে অবিশ্বাস্যভাবে শক্তসমর্থ হল: f1(x)=হিসেবে লেখা যেতে পারে f 1 ( x ) =বা foo 1 bar =বা এমনকি মাত্র 1=, কিন্তু আপনি যদি প্রতিস্থাপিত খুব অদ্ভুত ব্যাপার ঘটতে পারে fএমন কিছু বিষয় যা একটি বৈধ, পার্শ্ব-নিষ্ফল পার্ল বিবৃতি না দিয়ে। তোমাকে সতর্ক করা হইছে.

সুদের অন্যান্য বিশদ ভাবে উল্লম্ব অক্ষ টানা হয়, যা সত্য যে অক্ষরের, bitwise XOR যাও শোষণ অন্তর্ভুক্ত +এবং |হয় W। স্পষ্টতই, এটি EBCDIC সিস্টেমে কাজ করবে না।

আউটপুটটি অ্যারের একটি হ্যাশ হিসাবে রেন্ডার করা হয়, অ্যারের অ্যারে নয় - এটি দেখা যায় যে হ্যাশ কীগুলি সুস্পষ্টভাবে পূর্ণসংখ্যায় কাটতে এবং তারপরে কোনও অ্যারে না হয় তা নিশ্চিত করার চেয়ে হ্যাশের টুকরোটি লুপ করতে কম অক্ষর লাগে out নেতিবাচক মানগুলির সাথে সূচকযুক্ত। পার্লের বিরক্তিকর উপায়ে intশূন্যের দিকে নেতিবাচক মানগুলি ছাঁটাই না হলে আমি আরও দুটি চরিত্রের ছাঁটাই করতে পারি, যা উপরের প্রান্তে গোলাকার শিল্পকর্মগুলি এড়ানোর জন্য আমাকে 0 থেকে 20 এর পরিবর্তে আউটপুট সারিগুলি 2 থেকে 22 পর্যন্ত নাম্বার করতে বাধ্য করেছিল আউটপুট ক্ষেত্রের।

আমি ইনপুট পার্সিংয়ে পার্লের উদার স্ট্রিং-টু-নম্বর রূপান্তরটি ব্যবহার করি, যেখানে আমি পুরো স্ট্রিংটিকে 1(x)=অ্যারে সূচক হিসাবে ব্যবহার করি (এটি কেবল 1 এ রূপান্তরিত হয়)।

আমি পারতাম এছাড়াও সংরক্ষণ তিনটি অক্ষর (এবং পার্সিং সামান্য বেশি জোরালো করতে) প্রতিস্থাপন s/\d.*=/;/;$f[$&]=$_সঙ্গে /\d.*=/;$f[$&]=$', কিন্তু তারপর আমি লিখি অতিরিক্ত একই সংখ্যক অক্ষর খরচ করতে চাই $'যেমন $'\''একটি একক উদ্ধৃত শেল স্ট্রিং। আমি মনে করি প্রযুক্তিগতভাবে আমার সেগুলি গণনা করতে হবে না তবে এটি প্রতারণার মতো মনে হচ্ছে।


6

রুবি, 200 টি অক্ষর

f={}
r=0..20
(f[gets[1]]=$_[6..-1].gsub /\^/,'**'
s=r.map{' '*21}
f.map{|n,k|r.map{|y|x=y*0.5-5
v=(2*eval(k)).round
v.abs<11&&y!=10&&s[10-v][y]=n
s[y][10]='+|'[y%2]
s[10][y]='+-'[y%2]}}
puts s)while 1

অভিব্যক্তির জন্য স্ট্যান্ডার্ড মূল্যায়নকারী ব্যবহার করে একটি সরল রুবি বাস্তবায়ন ( ^প্রতিস্থাপন করা হবে যাতে উপরে দেওয়া উদাহরণগুলি সূক্ষ্মভাবে কাজ করে)। এটি খুব দৃust় নয় এবং প্রশ্নের ক্ষেত্রে নির্দিষ্টভাবে ইনপুট ধরেছে।


পঞ্চম লাইনে, আপনি কি দুটি চরিত্র y*0.5থেকে পরিবর্তন y/2এবং মুক্তি পেতে পারেন? আমি রুবিকে চিনি না, তাই আমি ঠিক থাকতে পারি না।
ফিনোটপিআই

2
@ ফিলনটপি: দুর্ভাগ্যক্রমে এটি কাজ করবে না। y/2পূর্ণসংখ্যা বিভাগ করে।
হাওয়ার্ড

আপনি কি loop{}পরিবর্তে ব্যবহার করতে পারেন ()while 1?
ডিফ্ল্ট করুন

এটি ডান হাতের পাশের বারের লিঙ্কের মাধ্যমে খুঁজে পেয়েছে। এটি বেশ ভালভাবে সম্পন্ন হয়েছে। আমি এটি আরও ছোট করার চেষ্টা করে কিছু মজা পেয়েছি , তবে আমি কেবল 9 বাইট পেয়েছি , একটি বাইট রুবি ২.১ (?)-এ প্রবর্তিত যুক্তিযুক্ত আক্ষরিক উপর নির্ভর করে।
ব্লুঞ্জরঞ্জ

5

পাইথন 2: 320 টি অক্ষর

N=20
r=range(N+1)
d={}
while(1):
 l=raw_input()
 d[l[1]]=l[6:].replace('^','**')
 g=[[' ']*(N+1) for i in r]
 for n,f in d.items():
  for x in r:
   v=N/2+int(round(2*eval(f.replace('x','(%f)'%(x/2.0-N/4)))))
   if 0<=v<=N:g[N-v][x]=n
 for i in r:
  g[i][N/2]='+|'[i%2]
  g[N/2][i]='+-'[i%2]
 for l in g:print''.join(l)

সম্ভবত আরও ছোট করা যেতে পারে, তবে আমি এতে এক নবাগত কিছুটা :)

Nভেরিয়েবল বানানো 9 টি অক্ষর নষ্ট করে তবে আমি সেভাবে ভাল পছন্দ করি।

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