জিসিডি / এলসিএম পলিগ্লট!


26

আপনার চ্যালেঞ্জ একটি প্রোগ্রাম বা ফাংশন যা আউটপুট করা হয় GCD এক ভাষা তার ইনপুট এবং LCM অন্য তার ইনপুট। জিসিডি বা এলসিএমের জন্য বিল্টিনগুলি (আমি আপনাকে দেখছি, ম্যাথামেটিকা) অনুমোদিত কিন্তু উত্সাহিত নয়। 2 ইনপুট থাকবে, যা সর্বদা ইতিবাচক পূর্ণসংখ্যার হবে, কখনও 1000 এর বেশি হবে না।

পরীক্ষার মামলা

প্রতিটি লাইন বিন্যাসে একটি পরীক্ষার কেস x y => GCD(x,y) LCM(x,y):

1 1 => 1 1
1 2 => 1 2
4 1 => 1 4
3 4 => 1 12
7 5 => 1 35
18 15 => 3 90
23 23 => 23 23
999 1000 => 1 999000
1000 999 => 1 999000
1000 1000 => 1000 1000

সম্ভাব্য সমস্ত ইনপুটগুলির সাথে এই পেস্টবিনটি দেখুন0 < x, y < 31 । নোট করুন যে একই ভাষার বিভিন্ন সংস্করণ বিভিন্ন ভাষা হিসাবে গণনা করে।


সুতরাং ... ifভাষার কোনও সংস্করণের উপর ভিত্তি করে, যদি কোনও ভেরিয়েবলে সংরক্ষণ করা থাকে তবে তা অনুমোদিত?
ইলিডানএস 4 মনিকে

@ IllidanS4 ঠিক আছে।
programmer5000

উত্তর:


24

জেলি / আসলে , 2 বাইট

00000000: 1e 67                                            .g

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

জেলি: জিসিডি

জেলি জেলি কোড পৃষ্ঠাটি ব্যবহার করে তাই এটি নীচের অক্ষরগুলি দেখে।

œg

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

কিভাবে এটা কাজ করে

œএটি একটি অসম্পূর্ণ টোকেন এবং এভাবে উপেক্ষা করা হবে। gএটি জিসিডি অন্তর্নির্মিত।

আসলে: এলসিএম

প্রকৃতপক্ষে সিপি 437 ব্যবহার করে , সুতরাং এটি নিম্নলিখিত অক্ষরগুলি দেখে sees

▲g

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

কিভাবে এটা কাজ করে

এটি এলসিএম ইনপুট। যেহেতু g(জিসিডি) এর জন্য দুটি পূর্ণসংখ্যা ইনপুট প্রয়োজন, এটি কার্যকর হয় না।


27

সি / সি ++, 79 78 73 বাইট

বাইট সংরক্ষণের জন্য @ ইটিএইচ প্রডাকশনগুলিকে ধন্যবাদ!

int f(int a,int b){int c,d=a*b;for(;a;b=c)c=a,a=b%a;auto e=.5;c=e?d/b:b;}

সি জিসিডি গণনা করে: অনলাইনে চেষ্টা করে দেখুন!

সি ++ এলসিএম গণনা করে: অনলাইনে চেষ্টা করে দেখুন!

সি-তে, auto e=.5অটো স্টোরেজ ক্লাসের সাথে একটি পূর্ণসংখ্যার ভেরিয়েবল (যা পূর্বনির্ধারিত) ঘোষণা করে, যা পরে 0-এ শুরু করা হয়েছে, যখন সি ++ 11 এ এটি একটি ডাবল ঘোষণা করে, যা 0.5 থেকে শুরু করা হয়। সুতরাং ভেরিয়েবলের মান সি ++ এ সত্যবাদী এবং সি-তে মিথ্যা হবে

ফাংশনটি ইউসিডিডের অ্যালগরিদম এবং জিসিডি দ্বারা a এবং b এর পণ্য ভাগ করে LCM গণনা করে।

রিটার্নের বিবৃতি ছাড়াই কমপক্ষে জিসিসিতে কাজ করে। নীচের by 78 বাইট সমাধানটি যে কোনও সংকলকের সাথে কাজ করা উচিত:

int f(int a,int b){int c,d=a*b;for(;a;b=c)c=a,a=b%a;auto e=.5;return e?d/b:b;}

1
একটি ব্যাখ্যা দুর্দান্ত হবে, আপনি যদি পারেন
বিড়াল

@ কেট ব্যাখ্যা যোগ করা হয়েছে।
স্টেডিবক্স

1
যদি আমার ভুল না হয় তবে আপনি এই বাইটটি সংরক্ষণ করতে পারেনfor(;a;b=c)c=a,a=b%a;
ETH Productions

@ ইথ প্রডাকশন ধন্যবাদ! আমি জানতাম যে এর forপরিবর্তে ব্যবহার করার কোনও কারণ আছে while;)
স্টিডিবক্স

18

আসলে / জেলি , 3 বাইট

00000000: 11 1c 67                                         ..g

এটি জমা দেওয়া প্রোগ্রামটির একটি হেক্সডাম্প (এক্সএক্সডিডি)।

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

আসলে: জিসিডি

প্রকৃতপক্ষে সিপি 437 ব্যবহার করে , সুতরাং এটি নিম্নলিখিত অক্ষরগুলি দেখে sees

◄∟g

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

কিভাবে এটা কাজ করে

     (implicit) Read a and b from STDIN and push them on the stack.
◄    Unassigned. Does nothing.
 ∟   Unassigned. Does nothing.
  g  Pop a and b and push gcd(a,b).
     (implicit) Write the result to STDOUT.

জেলি: এলসিএম

জেলি জেলি কোড পৃষ্ঠাটি ব্যবহার করে তাই এটি নীচের অক্ষরগুলি দেখে।

×÷g    

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

কিভাবে এটা কাজ করে

×÷g  Main link. Left argument: a. Right argument: b

×      Multiply; yield ab.
  g    GCD; yield gcd(a,b).
 ÷     Division; yield ab/gcd(a,b) = lcm(a,b).

দ্রষ্টব্য: সূত্রটি gcd (a, b) lcm (a, b) = ab ধারণ করে কারণ a এবং b ধনাত্মক।


1 টিআইও প্রকৃতপক্ষে ইউটিএফ -8 ব্যবহার করে। যেহেতু ASCII অক্ষর এবং সিপি 437 অক্ষর 0x11 এবং 0x1c উভয়ই স্বাক্ষরিত নয় , তবুও প্রোগ্রামটি কাজ করে।


9

অ্যালিস এবং জেলি , 9 বাইট

এলিস এলসিএম কে গণনা করে:

//L
oi@g

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

কোনও জায়গার মতো দেখতে যা সত্যই 0x7Fতা DELনিয়ন্ত্রণের অক্ষর।

জেলি জিসিডি গণনা করে। যেহেতু জেলি তার নিজস্ব কোড পৃষ্ঠা ব্যবহার করে যা কেবল প্রিন্টযোগ্য এএসসিআইআইয়ের সাথে সামঞ্জস্যপূর্ণ, তাই লাইনফিড এবং ডেল অক্ষর ½যথাক্রমে রূপান্তরিত হয় এবং লাইনফিড:

//L½oi@
g

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

ব্যাখ্যা

জেলি তুচ্ছ: প্রথম লাইনটি একটি অযৌক্তিক সহায়ক লিংকটি সংজ্ঞায়িত করে, দ্বিতীয় লাইনটি প্রকৃত প্রোগ্রাম এবং এতে কেবল অন্তর্নির্মিত জিসিডি থাকে।

অ্যালিস কিছুটা কৌতুকপূর্ণ তবে এটি বিল্ট-ইন ব্যবহার করে:

/   Reflect to SE. Switch to Ordinal.
    While in Ordinal mode, the IP bounces diagonally up and down through the grid.
i   Read all input as a single string.
L   Compute the shortest common superstring of an empty string and the input. That
    is simply the input itself, so this does nothing.
    After two more bounces, the IP hits the top right corner and turns
    around, continuing to bounce up and down while moving west.
L   Still does nothing.
i   Try to read more input, but this simply pushes an empty string.
/   Reflect to W. Switch to Cardinal.
    The IP wraps to the last column.
L   Implicitly discard the empty string and convert the input to two integers.
    Compute their LCM.
/   Reflect to NW. Switch to Ordinal.
    The IP immediately reflects off the top boundary to move SW instead.
o   Implicitly convert the LCM to a string and print it.
    Reflect off the bottom left corner and move back NE.
/   Reflect to S. Switch to Cardinal.
i   Try to read a byte, but we're at EOF, so this pushes -1 instead. Irrelevant.
    The IP wraps back to the first line.
/   Reflect to NE. Switch to Ordinal.
    The IP immediately reflects off the top boundary to move SE instead.
@   Terminate the program.

What looks like a spaceসত্যিই কোনও জায়গার মতো দেখাচ্ছে না।
এরিক আউটগল্ফার

আমার ধারণা, এরিকথ আউটগল্ফার ফন্টের উপর নির্ভর করে।
মার্টিন এন্ডার

আমার জন্য 0x7F (ডু মিনি-মার্কডাউন) কমপক্ষে আমার অভিজ্ঞতায় কোনও ফন্টের কোনও জায়গার মতো দেখেনি। তবে এটি সর্বদা যে অতিরিক্ত রেখার
ফাঁকে ফাঁকে ফাঁকে

7

অক্টাভা / ম্যাটল্যাব, 66 61 বাইট

@(x,y)gcd(x,y)^(1-2*any(version==82))*(x*y)^any(version==82))

ফুনকে ধন্যবাদ 5 বাইট সংরক্ষণ করা। (x*y)^any()অবশ্যই চেয়ে কম ছিল 1+(x*y-1)*any()


ভাল, অন্তত এটি অন্তর্নির্মিত জন্য ব্যবহার করে না lcm

ব্যাখ্যা:

এটি gcdসর্বশ্রেষ্ঠ সাধারণ বিভাজক গণনা করতে বিল্টিন ব্যবহার করে ।

অক্টাভাতে, এটি এর শক্তিতে উত্থাপিত হয় 1-2*any(version==82)any(version==82)হয় 0তাই এই কেবল নয়, অক্টেভ মধ্যে gcd(x,y)^1। এটি দ্বারা গুণিত হয় (x*y)^any(version==82), বা (x*y)^0 = 1

ম্যাটল্যাবের জন্য, উত্পন্ন gcdহয় 1-2*any(version==82)any(version==82)হয় 1তাই এই হল ম্যাটল্যাব এ, gcd(x,y)^-1। এটি দ্বারা গুণিত (x*y)^any(version==82), বা (x*y)^1 = x*y। এটি lcm(x,y) == x*y/gcd(x,y)ইতিবাচক সংখ্যার জন্য অন্তত সাধারণকে একাধিক দেয় ।


5

জেলি এবং এমএটিএল , 6 5 বাইট

ZmD
g

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

কেবলমাত্র ASCII টি অক্ষর ব্যবহার করা হয়, সুতরাং এগুলি দুটি ভাষার একই এনকোডেড বাইটগুলির সাথে মিল রয়েছে।

জেলিতে জিসিডির ব্যাখ্যা

ZmD    Unused link
g      Main link (gets called automatically). Builtin GCD function (g)

এমএটিএলে এলসিএমের ব্যাখ্যা

ZmD    Compute LCM (builtin function Zm) and display immediately (D)
g      Tries to implicitly take input to do something with it (depending
       on the type of the input). Since there is no input, it errors out

5

জুলিয়া 0.4 / জুলিয়া 0.5 , 18 বাইট

log.(1)==0?lcm:gcd

জুলিয়ায় gcd0.4-এ মূল্যায়ন হয় ( এটি অনলাইনে চেষ্টা করুন! ) এবং lcmজুলিয়া ০.০ এ ( এটি অনলাইনে চেষ্টা করুন! )।

কিভাবে এটা কাজ করে

জুলিয়া 0.4 সালে log.(1)জন্য একটি সাঁটে লেখার হয় getfield(log,1), যার মধ্যে মেমরি অবস্থানকে ফেরৎ logbuiltin, যেমন, পয়েন্টার Ptr{Void} @0x00007f2846cb6660। ফলস্বরূপ এইভাবে শূন্য নয়, তুলনাটি মিথ্যা এবং অভিব্যক্তিটি মূল্যায়ন করে gcd

জুলিয়া ০.০ তে একটি নতুন ফাংশন ভেক্টরাইজেশন সিনট্যাক্স চালু হয়েছিল was log.(1)এটি এখন একটি সংক্ষিপ্ত হাত broadcast(log,1), যা - যেহেতু 1পুনরাবৃত্তিযোগ্য নয় - কেবল মূল্যায়ন করে log(1)। ফলস্বরূপ শূন্য, তুলনাটি সত্য এবং অভিব্যক্তিটি মূল্যায়ণ করে lcm


3

অক্টাভা / ম্যাটল্যাব, 44 42 41 বাইট

eval(['@' 'lcm'-[5 0 9]*all(version-82)])

এটি অক্টাভেতে জিসিডি @gcd( @lcm) এবং ম্যাটল্যাজে এলসিএম ( ) এর জন্য একটি বেনামি ফাংশন সংজ্ঞা দেয় ।

অক্টাভে উদাহরণ (বা এটি অনলাইনে চেষ্টা করুন! ):

>> eval(['@' 'lcm'-[5 0 9]*all(version-82)])
warning: implicit conversion from numeric to char
ans = @gcd
>> ans(12,16)
ans =  4

ম্যাটল্যাবের উদাহরণ:

>> eval(['@' 'lcm'-[5 0 9]*all(version-82)])
ans =
    @lcm
>> ans(12,16)
ans =
    48

1

জেএস (ইএস)), সিজিএল (সিজিএল গল্ফিং ল্যাঙ্গুয়েজ) , ৩১ বাইট (প্রতিযোগী নয়)

এই চ্যালেঞ্জের পরে সিজিএলের এলসিএম বৈশিষ্ট্য যুক্ত করা হয়েছিল।

 g=(a,b)=>b?g(b,a%b):a
//-LⓍ

কোনও জায়গার মতো দেখতে আসলে এটি একটি অবিচ্ছেদ্য স্থান, সিজিএলের জন্য একটি মন্তব্য। জেএসসি জিসিডি গণনা করে:

g=(a,b)=>b?g(b,a%b):a

এবং সিজিএল এলসিএম গণনা করে:

//  does nothing
- decrements the current stack number, resulting in it pointing to input
L computes the LCM of the first and second stack items and pushes it to the stack
Ⓧ prints out the last stack item

চেষ্টা কর:

Snippetify( g=(a,b)=>b?g(b,a%b):a
//-LⓍ
);
<script src="https://programmer5000.com/snippetify.min.js"></script>
<input type = "number">
<input type = "number">

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