ইউক্লিডিয়ান অ্যালগরিদম ভিজ্যুয়ালাইজ করুন


17

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

অ্যালগরিদম

এই চ্যালেঞ্জের উদ্দেশ্যে, অ্যালগরিদমটি নীচে বর্ণিত হয়েছে:

  1. দুটি ইনপুট DISPLAY হিসেবে একটি নির্দিষ্ট চরিত্রের সংলগ্ন লাইন
    এর একটি ইনপুট যেমন 3,4সংলগ্ন লাইন দ্বারা প্রতিনিধিত্ব করা যাবে 000এবং0000

  2. ঘুরুন প্রথম length(short_line)অন্য চরিত্র মধ্যে আর লাইনে অক্ষর, বলতে -
    এখন এটি মত দেখায় 000এবং---0

  3. length(short_line)দীর্ঘ লাইনে প্রথম অক্ষরগুলি মুছুন ।
    এখন 000,0

  4. একই পদ্ধতি পুনরাবৃত্তি করুন ধাপ 2 এবং 3 দুই পর্যন্ত প্রতিটি পুনরাবৃত্তির পর খাটো এবং আর লাইন ব্যবহার করে, সমান দৈর্ঘ্য আছে, যেমন
    000, 0
    -00, 0
    00, 0
    -0, 0
    0,0

  5. আপনি এখানে থামতে চান বা পুনরুক্তি চালিয়ে যেতে চান এবং লাইনগুলির মধ্যে একটিকে একটি খালি লাইনে রূপান্তর করতে পারেন তা বেছে নিতে পারেন।

এই প্রতিটি পদক্ষেপের 0.3s এবং 1.5s এর মধ্যবর্তী ব্যবধান দ্বারা পৃথক করা উচিত।

চ্যালেঞ্জ

একটি প্রোগ্রাম লিখুন যা ইনপুট হিসাবে দুটি প্রাকৃতিক সংখ্যা দেওয়া হয়েছে, একটি আউটপুট তৈরি করে যা উপরের অ্যালগরিদমের আউটপুটটির মতো দেখতে ঠিক একই দেখাচ্ছে। আপনি ছাড়া অন্য অ হোয়াইটস্পেস মুদ্রণযোগ্য ASCII অক্ষর ব্যবহার করতে পারেন 0এবং -, কিন্তু সামঞ্জস্যপূর্ণ হতে হবে এবং মাত্র দুটি অক্ষর ব্যবহার করুন। আপনি সময় মতো আউটপুট সরবরাহের সাথে বিকল্প অ্যালগরিদমও ব্যবহার করতে পারেন, উপরের অ্যালগরিদমের দ্বারা উত্পাদিত হবার মতো।

উদাহরণ

এটি ইনপুট সহ একটি উদাহরণ 24,35, যা কপিরাইট তাই তাদের জিসিডি 1 হয়।

এখানে চিত্র বর্ণনা লিখুন

এটি ইনপুট সহ একটি উদাহরণ 16,42, যা জিসিডি 2 রয়েছে।

এখানে চিত্র বর্ণনা লিখুন

বিধি


ব্যাখ্যা

  • সংখ্যার প্রতিনিধিত্বকারী রেখাগুলি তাদের মূল ক্রমে থাকা প্রয়োজন, অর্থাত্ প্রথম প্রদর্শিত "ফ্রেম" এর প্রথম এবং দ্বিতীয় লাইনগুলি পরবর্তী সমস্ত ফ্রেমে যথাক্রমে প্রথম এবং দ্বিতীয় লাইন হওয়া দরকার lines
  • অ্যালগরিদম শেষ হওয়ার পরে কোনও অতিরিক্ত দৃশ্যমান সত্তা প্রদর্শিত হবে না। যাইহোক, এর অর্থ এটিও হ'ল লাইনগুলি ফাঁকা করা ঠিক আছে, যদি আপনি নিশ্চিত হন যে শেষ "ফ্রেম" কমপক্ষে একই সময়ের জন্য অন্য সমস্ত ফ্রেমের ফাঁকে ফাঁকে ফাঁকে দেওয়ার আগে প্রদর্শিত হয়েছিল did

@ ওয়েট উইজার্ড দুর্দান্ত পরামর্শ, এটিতে
busukxuan

লাইনগুলি কি একই আপেক্ষিক ক্রমে থাকতে হবে? বা তাদের পুনরাবৃত্তির মধ্যে পুনরায় সাজানো যেতে পারে? (চেক করা হচ্ছে কারণ বেশিরভাগ ভাষায় সম্ভবত পরবর্তীকালে আরও সংক্ষিপ্ত হওয়ার সম্ভাবনা রয়েছে এবং এসইপিসি লঙ্ঘনের কারণে আমার সেই অপটিমাইজেশনটি ব্যবহার করা উচিত বা এটি উপেক্ষা করা উচিত কিনা তা আমার জানতে হবে))

@ ais523 হ্যাঁ তারা করেন:-)
বুস্কুকুয়ান

@ আইস ৫৩৩ হ্যাঁ এটিকে ফাঁকা রাখা ঠিক আছে তবে নিশ্চিত করুন যে শেষ ফ্রেমটি অন্য ফ্রেমের মতো একই সময় প্রদর্শনের সময় দেওয়া হয়েছে
বুসুক্সুয়ান

1
@ বুসুক্সুয়ান ব্যক্তিগতভাবে আমি মনে করি যে আমি পিছনের জায়গাগুলির অনুমতি দেব, তবে সম্ভবত "অর্থবহ" চরিত্রগুলির মধ্যে একটি হিসাবে স্থান নয়
লুইস মেন্ডো

উত্তর:


3

জেলি , 29 বাইট

VY“ñc‘ỌœS.⁸
1ẋǵ+M¦ṚÇt€2ǵ⁻/¿

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

এটি একটি ফাংশন সংজ্ঞায়িত করে 2Ŀ(পুরো প্রোগ্রাম নয়; টিআইও লিঙ্কে একটি ফুটার রয়েছে যা একটি ফাংশনকে প্রোগ্রামে রূপান্তর করে) যা দুটি উপাদানকে ইনপুট হিসাবে তালিকাভুক্ত করে এবং স্ক্রিনে আউটপুট প্রদর্শন করে (আমাদের বৈধ আই / ও পদ্ধতিগুলির মধ্যে একটি) , এবং এই চ্যালেঞ্জের জন্য এটি সদয় প্রয়োজন কারণ এটি পর্দায় উপস্থিতি সম্পর্কে কথা বলে)। এটি ধরে নিয়েছে যে প্রোগ্রামটি একটি টার্মিনালে চালিত হয়েছে যা এএনএসআই মান মেনে চলে (আমি ব্যবহার করেছি gnome-terminalতবে বেশিরভাগ কাজ করবে), এবং টার্মিনালটি প্রাথমিকভাবে খালি (যা সবচেয়ে বোধগম্য ডিফল্ট বলে মনে হয়); অনলাইনে চেষ্টা করে দেখুন! এই অনুমানগুলির সাথে সামঞ্জস্য হয় না এবং এভাবে আউটপুটটি বিকৃত হয় (এটি প্রত্যাশার মতো অ্যানিমেটেড যাচাই করতে আমি প্রোগ্রামটি স্থানীয়ভাবে চালিয়েছি)। আমি 1যেখানে প্রশ্ন ব্যবহার করি ব্যবহার করি 0এবং2জায়গায় -

ব্যাখ্যা

সহায়ক ফাংশন 1Ŀ (দুটি অঙ্কের দুটি তালিকার একটি তালিকা দেওয়া, তাদের পর্দার প্রথম এবং দ্বিতীয় লাইনে আউটপুট দেয়, তারপরে 0.5 সেকেন্ড অপেক্ষা করে; তার ইনপুট ফেরত দেয়)

VY“ñc‘ỌœS.⁸
V                   Convert each list of digits to an integer
 Y                  Separate these integers by newlines
  “ñc‘              {Output that; then restart with} the list [27, 99]
      Ọ             Convert codepoints to characters (i.e. "\x1bc"
       œS.          Wait (œS) 0.5 (.) seconds
          ⁸         {Output that; then return} the initial argument

"\ X1bc" স্ট্রিংটি যখন এএনএসআই-সামঞ্জস্যপূর্ণ টার্মিনালে প্রেরণ করা হয় তখন টার্মিনালটি পুনরায় সেট করার জন্য একটি নিয়ন্ত্রণ কোড হিসাবে ব্যাখ্যা করা হয়; এটি স্ক্রিনটি সাফ করে এবং কার্সারটিকে উপরের বাম কোণায় নিয়ে যায় (এভাবে পরবর্তী আউটপুটটির জন্য প্রস্তুত টার্মিনালটি পুনরায় সেট করা)।

সহায়ক ফাংশনটির নাম দেওয়া হয়েছে 1Ŀ(জেলি এই ফর্মের নামগুলি ফাংশনগুলির জন্য অটোজেটারেট করে, এবং বাস্তবে তাদের নামকরণের কোনও উপায় নেই) তবে এটি কেবল Çমূল প্রোগ্রাম হিসাবে উল্লেখ করা যেতে পারে (কারণ ভাষাটি নিকটবর্তী সংখ্যার সাথে ফাংশনগুলির জন্য সংক্ষিপ্তকরণ রয়েছে )।

প্রধান ফাংশন 2Ŀ (প্রশ্নে অনুরোধ করা টাস্কটি প্রয়োগ করে)

1ẋǵ+M¦ṚÇt€2ǵ⁻/¿
1ẋ                  Convert input to unary
  Ç                 Call helper function (producing one animation frame)
   µ         µ  ¿   While
              ⁻/      the elements differ:
     M¦               Change the largest element
    +  Ṛ                by adding corresponding elements of the other element
        Ç             Call helper function (producing one animation frame)
         t€2          Delete all 2s from each side of each element
            Ç         Call helper function (producing one animation frame)

6

জাভাস্ক্রিপ্ট (ES6), 128 124 বাইট

t=0
f=
(a,b,o,c,d)=>setInterval(e=>{e=[b,d,a,c];o.data=`-0
-0`.replace(/./g,c=>c.repeat(e.pop()));c|d?c=d=0:a>b?a-=c=b:b-=d=a},1e3)
<form><input id=a><input id=b><button onclick=clearTimeout(t),t=f(+a.value,+b.value,o.firstChild)>Go!</button><pre id=o>


3

পাইথন 2 , 152 146 বাইট

import time
s,o='-0'
a,b=input()
while a*b:
 d,e=o*a,o*b
 if a>b:a=a-b;d=s*b+o*a
 elif b>a:b=b-a;e=s*a+o*b
 else:a=0
 print d+'\n'+e;time.sleep(1)

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


ইনপুট হিসাবে দুটি কমা-বিভাজিত পূর্ণসংখ্যার গ্রহণ করে


এটি একটি দুর্দান্ত উত্তর।
এলপেড্রো

2

জাভাস্ক্রিপ্ট (ES6), 215 194 ... 135 129 127 বাইট

a=>b=>F=(c=0)=>alert('-'[d='repeat'](e=c&a>b&&b)+'0'[d](a-=e)+`
`+'-'[d](f=c&a<b&&a)+'0'[d](b-=f))|a-b|c&&setTimeout(F,1e3,1-c)

ব্যবহার

এটি কারিংয়ের ক্ষেত্রে পরিবর্তনের ক্ষেত্রে ইনপুট নেয়। এটি ব্যবহার করতে, মুঠোটি একটি ভেরিয়েবলের জন্য ফাংশনটি বরাদ্দ করুন (উদাহরণস্বরূপ G), তারপরে এটিকে কল করুন:

G(5)(6)()

ব্যাখ্যা

কিছুটা রিকার্সিভ ফাংশন যা অ্যালগরিদম শেষ না হওয়া অবধি 1 সেকেন্ডের পরে নিজেকে কল করে। এটা একটা তৃতীয় পরিবর্তনশীল ট্র্যাক রাখে cযে কিনা তা নির্ধারণ করে aএবং bপরিবর্তন করা উচিত (যদি cহয় 1পরিবর্তনের জন্য, এটি এর সময়)।

প্রথমত, ফাংশনটি কনসোলকে কিছু লিখেছে। যদি cতা হয় তবে 0এটি একটি নতুন লাইনের অভ্যন্তরীন দুটি জিরোর স্ট্রিং লিখেছে। যেহেতু cশুরু করা হয়েছে 0, আমরা এর সুবিধা নিতে পারি, এবং গ্লোবাল ভেরিয়েবল সেট আপ করতে পারি fএবং gএটিতে আমাদের প্রায়শই প্রয়োজন মতো কিছু স্ট্রিং রয়েছে (যেমন 0এবং repeat)।

অন্যথায়, এটি শূন্য এবং বিয়োগের সাথে একটি স্ট্রিং তৈরি করে। এ জাতীয় সমস্ত স্ট্রিং দুটি অংশ নিয়ে গঠিত: প্রথমে কিছু (এই পরিমাণটি কল করুন A) বিয়োগগুলি, তারপরে কিছু (এই পরিমাণটি কল করুন B) শূন্য, তারপরে একটি নতুন লাইন, পরে কিছু (এই পরিমাণটিকে কল করুন D) বিয়োগ এবং শেষ পর্যন্ত কিছু (এই পরিমাণকে কল করুন E) জিরো।

প্রথম ইনপুট যদি দ্বিতীয় ইনপুটটির চেয়ে ছোট হয় তবে আমাদের দ্বিতীয় ইনপুট থেকে শূন্যগুলি সরিয়ে ফেলতে হবে, তাই Aশূন্য, Bপ্রথম ইনপুটটির Dসমান, প্রথম ইনপুট সমান এবং প্রথম ইনপুট Eবিয়োগের সমান হয়। প্রথম ইনপুটটি যদি দ্বিতীয় ইনপুটটির চেয়ে ছোট না হয়, তবে বিপরীতটি প্রয়োগ হয় ( Aদ্বিতীয় ইনপুটটি Bহ'ল প্রথম ইনপুটটি দ্বিতীয় ইনপুটটি হয়) ইত্যাদি।

ইনপুট এবং পরিবর্তিত পরিবর্তনশীলগুলির জন্য এই নতুন মানগুলির সাথে cফাংশনটি আবার 1e3মিলিসেকেন্ডে কল করার সময় নির্ধারিত হয় যা এক সেকেন্ডের সমান।

মন্তব্য

  • alertআউটপুট জন্য ব্যবহার করে
  • ব্যবহার 0এবং -, যেমন উদাহরণগুলিতে
  • পদক্ষেপগুলির মধ্যে বিলম্বটি 1000 এমএস (1 সেকেন্ড)
  • প্রথম পদক্ষেপের পরে, ফাংশনটি (জাভাস্ক্রিপ্টের প্রকৃতির কারণে) কিছু নম্বর ফিরিয়ে দেবে যা উপেক্ষা করা হবে
  • টিআইওর সংস্করণটি একবারে সমস্ত কিছু আউটপুট করে দেয়, ব্রাউজার কনসোলে কোডটি আটকানো যথাযথভাবে বিলম্বগুলি অ্যাকাউন্টে গ্রহণ করবে

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

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


2

পাইথন 2 , 208 204 194 বাইট

-4 ধন্যবাদ স্পষ্টতই কৌতুকের জন্য @ ম্যাথ_জুনকিকে time.sleep

-10 "ক্লিয়ার স্ক্রিন" বিধিটি পরিষ্কার করার জন্য @ বসুকক্সুয়ানকে ধন্যবাদ জানাতে।

def z(a,b,y='-',w=1):
 import time;c,d,n,s='0'*a,'0'*b,'\n',time.sleep
 if w:print c+n+d;s(1)
 if b>a:d=y*a+d[a:]
 else:c=y*b+c[b:]
 print c+n+d;s(1)
 if c!=d:z(len(c),len(d),('','-')[y!='-'],0)

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

খুব নিশ্চিত যে এটি আরও গল্ফ হতে পারে। এটা আমার কষ্ট অনুরূপ printএবং forবিরতি তৈরি করতে লুপ কিন্তু আমি মুহূর্তে উপায় এটা বৃত্তাকার খুঁজে পাচ্ছি না।

মন্তব্য

  • বিরতিতে এখন @ ম্যাথ_জানকি থেকে একটি ইঙ্গিত ব্যবহার করা হয়েছে
  • টিআইওতে সম্পূর্ণরূপে কাজ করে না কারণ এটি আউটপুট সংরক্ষণ করে এবং প্রোগ্রাম শেষ হয়ে গেলে এটি ডাম্প করে দেয়। কনসোলে যদিও দুর্দান্ত কাজ করে।

1
আপনি কিছু বাইট ব্যবহার করে সংরক্ষণ করতে সক্ষম হবেন import time, s=time.sleepএবং s(1)বিলম্বের জন্য একটি লুপের পরিবর্তে
গণিত জাঙ্কি

ধন্যবাদ @ মাথ_জুনকি - আমি বেশিরভাগ সংমিশ্রণগুলি ব্যবহার করে চেষ্টা করেছি তবে সেটিকে time.sleepমিস করেছি। এক বার যেতে হবে।
এলপিড্রো

@ ম্যাথ_জানকি - আমার জন্য 215 এ আসে। আমি বোকা কিছু মিস করছি। আপনি এটি অনলাইনে চেষ্টা করে একটি উদাহরণ পোস্ট করতে পারেন ?
এলপেড্রো


1

পার্ল, 161 149 বাইট

... ইনডেন্টেশন এবং নিউলাইন ছাড়া:

($a,$b)=map 0 x$_,@ARGV;
sub p{say"\n$a\n$b";sleep 1}p;
while($a ne$b){
  ($A,$B)=$b lt$a?(\$a,\$b):(\$b,\$a);
  map$$A=~s/0/-/,1..length$$B;
  p;
  $$A=~s/-//g;
  p
}

এটি একটি gcd.pl ফাইলের মধ্যে রাখুন এবং এটি চালান:

perl -M5.010 gcd.pl 16 42

1
-M5.010তাই আপনি ব্যবহার করে একটি কয়েক বাইট সংরক্ষণ করতে পারবেন Perl করার পতাকা, মুক্ত sayওভার print…\n। অতিরিক্তভাবে, আমি নিশ্চিত যে এটি আপনার ভেন্যুতে সাবমেরিনকে একটি ভেরিয়েবলের মধ্যে সঞ্চয় করার পরিবর্তে একটি নাম দেওয়া ভাল ers

12 বাইট ছাঁটাই করার টিপসগুলির জন্য থেক্স থেকে আইস 523
কেজেটিল এস

1

জিএনইউ শেড ( eএক্সইসি এক্সটেনশন সহ), 88

স্কোরের -zrfবিকল্পগুলির জন্য +3 অন্তর্ভুক্ত sed

p
:
x
esleep 1
g
ta
:a
s/o+//p
t
s/^((O+)(O+)\n\2\b|(O+)\n\4\B)/\L\2\U\3\4\n\2\L\4\U/p
t

উপরের কেসকে Oঅঙ্ক হিসাবে ব্যবহার করে ইনপুটটি দুটি নতুন লাইন দ্বারা পৃথক অ্যানারি পূর্ণসংখ্যা হিসাবে দেওয়া হয় ।

উদাহরণস্বরূপ, 16, 42 উদাহরণ হিসাবে চালানো যেতে পারে:

printf "%0*d\n%0*d\n" 16 0 42 0 | tr 0 O | sed -znrf euclidvis.sed

সর্বশেষ মন্তব্য অনুসারে, আমি পুনরাবৃত্তির মধ্যে পর্দা সাফ করছি না।


0

ভি , 47 44 বাইট

Àé0á
Àé0Hqwmmjlhmmkl@wqòHî@w
gs`mlhv0r-gsÓ-ò

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

টিআইও-তে শিরোনাম এবং পাদচরণগুলি কেবলমাত্র gsপর্দার নীচে বর্তমান দুটি লাইন অনুলিপি করতে সংশোধন করুন এবং তারপরে প্রথমে দুটি মুছুন। এটি টিআইওর জন্য অপারেশনটি কল্পনা করে, তবে আপনি যদি এটি ভিতে চালিয়ে যান (শিরোনাম এবং পাদচরণ ছাড়া) এটি প্রতিটি অপারেশনের মধ্যে কেবল একটি সেকেন্ড অপেক্ষা করতে পারে।

Àé0                     " Print (Arg1) zeroes
   á                    " Newline
Àé0                     " Print (Arg2) zeroes
   H                    " Go home
    qwmmjlhmmkl@wq      " Store a recursive macro in w that finds the shorter line
                  ò     " recursively
                   Hî@w " find the longest line
gs                      " wait a second
  `mlhv0r-              " replace the zeroes of the long line with -
          gs            " wait a second
            Ó-          " delete all -
              ò         " end recursion

আপনার কি সত্যিই শেষের দরকার ò?
কৃতিমিক লিথোস

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