जीसीडी / एलसीएम पॉलीग्लॉट्स!


26

आपकी चुनौती एक प्रोग्राम या फ़ंक्शन करना है जो एक भाषा में अपने इनपुट के जीसीडी और दूसरे में अपने इनपुट के एलसीएम को आउटपुट करता है । जीसीडी या एलसीएम (मैं आपको देख रहा हूं, गणितज्ञ) के लिए निर्मित अनुमति दी जाती है, लेकिन प्रोत्साहित नहीं किया जाता है। 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भाषा के एक संस्करण के आधार पर, यदि एक चर में संग्रहीत किया जाता है, तो अनुमति है?
IllidanS4, मोनिका

@ illidanS4 जो ठीक है।
प्रोग्रामर

जवाबों:


24

जेली / वास्तव में , 2 बाइट्स

00000000: 1e 67                                            .g

यह प्रस्तुत कार्यक्रम का एक हेक्सडंप (xxd) है। इसका परीक्षण ऑनलाइन नहीं किया जा सकता क्योंकि TIO CP437 एन्कोडिंग का समर्थन नहीं करता है। @Mego यह सत्यापित करने के लिए पर्याप्त था कि यह साइगविन पर काम करता है, जो वास्तव में CP437 को लागू करता है।

जेली: जीसीडी

जेली जेली कोड पृष्ठ का उपयोग करता है , इसलिए यह निम्नलिखित वर्णों को देखता है।

œg

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

œएक अधूरा टोकन है और इस तरह से अनदेखा किया गया है। gजीसीडी बिल्ट-इन है।

दरअसल: एलसीएम

वास्तव में CP 437 का उपयोग करता है , इसलिए यह निम्नलिखित वर्णों को देखता है।

▲g

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

LCM इनपुट है। चूंकि g(जीसीडी) को दो पूर्णांक इनपुट की आवश्यकता होती है, इसलिए इसे निष्पादित नहीं किया जाता है।


27

सी / सी ++, 79 78 73 बाइट्स

एक बाइट को बचाने के लिए @ETHproductions को धन्यवाद!

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;}

C GCD की गणना करता है: इसे ऑनलाइन आज़माएं!

C ++ LCM की गणना करता है: इसे ऑनलाइन आज़माएं!

सी में, auto e=.5ऑटो स्टोरेज क्लास (जो डिफ़ॉल्ट है) के साथ एक पूर्णांक चर की घोषणा करता है, जिसे बाद में 0 से प्रारंभ किया जाता है, जबकि C ++ 11 में यह एक डबल घोषित करता है, जो 0.5 के लिए प्रारंभिक है। तो चर का मान C ++ में सत्य और C में मिथ्या होगा।

फ़ंक्शन GCD द्वारा यूक्लिड के एल्गोरिथ्म, और LCM के साथ GCD के उत्पाद को विभाजित करके गणना करता है।

रिटर्न स्टेटमेंट को कम से कम जीसीसी पर काम करता है। नीचे दिए गए 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
यदि आप कर सकते हैं, तो एक स्पष्टीकरण अच्छा होगा
बिल्ली

@cat स्पष्टीकरण जोड़ा गया।
स्टेडीबॉक्स

1
अगर मैं गलत नहीं हूं, तो आप एक बाइट को बचा सकते हैंfor(;a;b=c)c=a,a=b%a;
ETHproductions

@ETHproductions धन्यवाद! मुझे पता था कि forइसके बजाय उपयोग करने का एक कारण है while;)
स्टेडीबॉक्स

18

वास्तव में / जेली , 3 बाइट्स

00000000: 11 1c 67                                         ..g

यह प्रस्तुत कार्यक्रम का एक हेक्सडंप (xxd) है।

इसे ऑनलाइन आज़माएं! 1

असल में: जीसीडी

वास्तव में CP 437 का उपयोग करता है , इसलिए यह निम्नलिखित वर्णों को देखता है।

◄∟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 TIO वास्तव में वास्तव में UTF-8 का उपयोग करता है। चूंकि दोनों ASCII वर्ण और CP437 पात्रों 0x11 और 0x1c असाइन नहीं किए गए हैं, फिर भी कार्यक्रम काम करता है।


9

ऐलिस और जेली , 9 बाइट्स

एलसी ने एलसीएम की गणना की:

//L
oi@g

इसे ऑनलाइन आज़माएं!

अंतरिक्ष जैसा दिखता है वास्तव में 0x7F, DELनियंत्रण चरित्र है।

जेली जीसीडी की गणना करती है। चूंकि जेली अपने स्वयं के कोड पृष्ठ का उपयोग करती है जो केवल मुद्रण योग्य ASCII के साथ संगत है, लाइनफीड और 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वास्तव में एक स्थान की तरह नहीं दिखता है।
1914

@EriktheOutgolfer फ़ॉन्ट पर निर्भर करता है, मुझे लगता है।
मार्टिन एंडर

मेरे लिए 0x7F (duh मिनी-मार्कडाउन) कभी भी किसी भी फ़ॉन्ट में एक स्थान की तरह नहीं देखा गया है, कम से कम मेरे अनुभव में। लेकिन यह हमेशा यह सम्मिलित करता है कि अतिरिक्त रेखा उस रेखा के नीचे स्थित होती है, जिसमें वह रहती है ...
एरिक आउटोलॉफ़र

7

ऑक्टेव / MATLAB, 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

MATLAB के लिए, gcdकी शक्ति के लिए उठाया है 1-2*any(version==82)any(version==82)है 1तो यह है MATLAB में, gcd(x,y)^-1। यह गुणा (x*y)^any(version==82), या (x*y)^1 = x*y। यह कम से कम lcm(x,y) == x*y/gcd(x,y)पॉजिटिव नंबर के लिए कॉमन मल्टीपल देता है ।


5

जेली और MATL , 6 5 बाइट्स

ZmD
g

यह दोनों भाषाओं में से एक में एक पूर्ण कार्यक्रम है। यह JCD में GCD की गणना करता है ( इसे ऑनलाइन आज़माएं! ) और MATL में LCM ( इसे ऑनलाइन आज़माएं! )। MATL प्रोग्राम सही आउटपुट उत्पन्न करने के बाद एक त्रुटि (डिफ़ॉल्ट रूप से अनुमत) के साथ बाहर निकलता है।

केवल ASCII वर्णों का उपयोग किया जाता है, इसलिए वे दो भाषाओं में समान एन्कोडेड बाइट्स के अनुरूप होते हैं।

जेली में जीसीडी की व्याख्या

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

MATL में LCM की व्याख्या

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

gcdजूलिया 0.4 में मूल्यांकन। ( यह ऑनलाइन प्रयास करें! ) और lcmजूलिया 0.5 में ( यह ऑनलाइन प्रयास करें! )।

यह काम किस प्रकार करता है

जूलिया 0.4 में, के log.(1)लिए एक आशुलिपि है getfield(log,1), जो logबेसिन, जैसे, पॉइंटर की मेमोरी लोकेशन को लौटाता है Ptr{Void} @0x00007f2846cb6660। परिणाम इस प्रकार गैर-शून्य है, तुलना झूठी है, और अभिव्यक्ति का मूल्यांकन करता है gcd

जूलिया 0.5 में, एक नया फ़ंक्शन वेक्टराइजेशन सिंटैक्स पेश किया गया था। log.(1)अब के लिए एक आशुलिपि है broadcast(log,1), जो - क्योंकि 1यह चलने योग्य नहीं है - बस मूल्यांकन करता है log(1)। परिणाम इस प्रकार शून्य है, तुलना सत्य है, और अभिव्यक्ति का मूल्यांकन करता है lcm


3

ऑक्टेव / MATLAB, 44 42 41 बाइट्स

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

यह @gcdऑक्टेव में जीसीडी ( ) और एलसीएम ( @lcm) के लिए MATLAB में एक अनाम फ़ंक्शन को परिभाषित करता है ।

ऑक्टेव में उदाहरण (या इसे ऑनलाइन आज़माएं! ):

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

MATLAB में उदाहरण:

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

1

JS (ES6), CGL (CGL गोल्फिंग भाषा) , 31 बाइट्स (गैर-प्रतिस्पर्धात्मक)

इस चुनौती के बाद CGL का LCM फीचर जोड़ा गया।

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

अंतरिक्ष की तरह दिखता है वास्तव में एक गैर-तोड़ने वाली जगह है, सीजीएल के लिए एक टिप्पणी। JS GCD की गणना करता है:

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

और CGL LCM की गणना करता है:

//  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">

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.