बीच-बीच में फ्रैक्चर


13

बीच-बीच में फ्रैक्चर

चुनौती:

आपको कोड बनाने की आवश्यकता होगी जो कम से कम 3 इनपुट लेता है; 2 पूर्णांक और "एक अंश निरूपण" - जो भी प्रकार अंश वृद्धि का प्रतिनिधित्व करने के लिए आपकी भाषा के अनुरूप है) अर्थात। यदि आप स्ट्रिंग का चयन करते हैं तो इनपुट "1/4" होगा या आप 2 अतिरिक्त पूर्णांक इनपुट या ट्यूपल या w / e चुन सकते हैं।

इनपुट कहीं भी वाजिब हो सकता है (STDIN, फंक्शन आर्ग्युमेंट्स, किसी फाइल आदि से), और इसलिए आउटपुट (STDOUT, फंक्शन रिटर्न वैल्यू, एक फाइल आदि के लिए) कर सकते हैं।

नियम:

  1. इनपुट "अंश" हमेशा एक मान्य अंश होगा, 1 से कम; उदाहरण "1/4"
  2. दूसरा इनपुट पूर्णांक हमेशा पहले पूर्णांक की तुलना में अधिक मूल्य का होगा। IE पहला इनपुट पूर्णांक हमेशा दूसरे की तुलना में कम मूल्य का होगा।
  3. इनपुट पूर्णांक नकारात्मक हो सकता है।
  4. आउटपुट फ्रैक्चर को जितना संभव हो उतना कम किया जाना चाहिए (सरलीकृत)

कोड को इनपुट अंश की वृद्धि में 2 संख्याओं के बीच हर "अंश चरण" को आउटपुट करने की आवश्यकता होगी।

कोड एक कार्यक्रम या फ़ंक्शन होना चाहिए जैसा कि यहां कहा गया है

उदाहरण 1:

इनपुट: -2,3,"1/2"

आउटपुट:

 -2
 -3/2 
 -1 
 -1/2 
  0 
  1/2 
  1 
  3/2  
  2 
  5/2 
  3

उदाहरण 2:

इनपुट: 1,2,"2/3"

आउटपुट:

1
5/3
2

या

1
4/3
2

नोट: गिनती या तो दिशा से शुरू हो सकती है (साभार @Mego)

यह , इसलिए बाइट्स में सबसे कम उत्तर जीतता है।


क्या अंश को 2 पूर्णांक इनपुट के रूप में लिया जा सकता है, जिससे 4 कुल इनपुट हो सकते हैं?
मेगो

मुझे लगता है कि बीमार को अधिकतम 3 इनपुट का संयम रखना है - मैं 4 इनपुट के लिए कोड देखना चाहूंगा
एलेक्स कार्लसन

उस स्थिति में, तीसरे इनपुट के लिए दो पूर्णांकों वाली सूची / ट्यूपल / सरणी / कुछ अन्य चलने योग्य प्रकार होने के बारे में क्या? यह मूल रूप से 4 पूर्णांक इनपुट से अलग नहीं है। आपको यह भी स्पष्ट करना चाहिए कि अंश 0.
Mego

@Mego इसे सोचने के बाद, मैं यह नहीं देख सकता कि इसे "कोड में परिवर्तन करने की अनुमति क्यों नहीं दी जानी चाहिए जो कम से कम 3 इनपुट लेता है"
एलेक्स कार्लसन

1
@ बीकर जब तक आउटपुट सही है और इनपुट कम से कम 2 पूर्णांक से आता है, बाकी आप पर निर्भर है :) - मैंने इनपुट भाग को बहुत खुला रखा है, अलग-अलग उत्तर देखने के लिए
एलेक्स कार्लसन

जवाबों:


5

ऑक्टेव, 34 30 बाइट्स

@(a,b,c)rats(union([a:c:b],b))

अब अंश को अलग-अलग अंश और हर के बजाय एक संख्यात्मक अभिव्यक्ति के रूप में लेता है।

Ideone पर नमूना


1
तो आप इसका उपयोग क्यों नहीं कर सकते @(a,b,c)rats(union([a:c:b],b))?
लुइस मेंडो

@LuisMendo अगर गणितीय अभिव्यक्तियाँ स्वीकार्य इनपुट हैं ( 1/2स्ट्रिंग इनपुट के बजाय एक संख्यात्मक के रूप में प्रभावी परिणाम ), लेकिन ऐसा नहीं है कि मैंने "अंश प्रतिनिधित्व" की व्याख्या की है। यदि ओपी सहमत है, तो मुझे 4 बाइट्स से दाढ़ी बनाने में खुशी होगी।
बीकर

ओह मैं समझा। खैर, मैं अपने Matlab उत्तर में इसका उपयोग कर रहा हूं। तो क्या मैथेमेटिका स्पष्ट रूप से जवाब देती है, जब तक कि "तर्कसंगत संख्या" एक विशिष्ट डेटा प्रकार नहीं है
लुइस मेंडो

@ बीकर ने वास्तव में जवाब दिया था
एलेक्स कार्लसन

@VisualBean कोड पहले से अपडेट किया गया है।
बीकर

11

गणितज्ञ, 16 बाइट्स

Range@##⋃{#2}&

एक अनाम फ़ंक्शन जो दो पूर्णांक और एक परिमेय संख्या लेता है और संख्याओं की सूची देता है, जैसे:

Range@##⋃{#2}&[-2, 3, 1/2]
(* {-2, -(3/2), -1, -(1/2), 0, 1/2, 1, 3/2, 2, 5/2, 3} *)

Mathematica Rangeवही करता है जो चुनौती पूछता है, सिवाय इसके कि यह ऊपरी बाउंड को छोड़ देता है अगर लोअर और अपर बाउंड के बीच का अंतर बिल्कुल स्टेप साइज का एक से अधिक नहीं है। इसलिए हम केवल ऊपरी सीमा वाली सूची के साथ Union(उपयोग ) करते हैं जो यह सुनिश्चित करता है कि यह एक बार बिल्कुल दिखाई दे। ध्यान दें कि Unionपरिणाम को क्रमबद्ध किया जाएगा, लेकिन हम चाहते हैं कि यह वैसे भी हल हो, क्योंकि चरण आकार हमेशा सकारात्मक होता है। जब से हम तर्क के साथ काम कर रहे हैं, वे स्वचालित रूप से यथासंभव कम हो गए हैं।


10

टी-एसक्यूएल 2012+, 831 535 477 270 246 240 219 बाइट्स

कृपया ध्यान दें कि यह एक लाइनर है - sql में फंक्शन को कम करने के लिए बिल्ड नहीं है। इस प्रकार के प्रश्न के लिए सबसे अच्छी भाषा नहीं हो सकती है। यह मानव पठनीय है (कुछ अन्य भाषाओं की तुलना में - इसका प्रकार)।

DECLARE @f INT=-5,@t INT=3,@n INT=3,@ INT=8;

WITH C as(SELECT
top((@t*@-@f*@)/@n+1)ROW_NUMBER()OVER(ORDER BY @)M
FROM sys.messages)SELECT(SELECT
IIF(V%@=0,LEFT(V/@,9),CONCAT(V/MAX(M),'/',ABS(@)/MAX(M)))FROM c
WHERE V%M=0AND @%M=0)FROM(SELECT
@f*@+@n*~-M V FROM c)k

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


क्या भाषा को T-SQL नहीं कहा जाता है, और न ही "Sqlserver"?
डेविड कॉनरैड

1
@DavidConrad भाषा TSQL है, लेकिन इसमें sqlserver के अलग-अलग संस्करण हैं और इसके लिए TSQL कीवर्ड IIF के कारण sqlserver 2012 के लिए काम करेगा। जो पुराने संस्करणों में कीवर्ड CASE का उपयोग करेगा। अपने सुझाव को जोड़ा
t-clausen.dk

बहुत बढ़िया। आप @nया तो बदलकर या @dसादे से कुछ बचा सकते हैं @। N के लिए आपकी CTE क्वेरी N AS(SELECT N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N))या हो सकती है N AS(SELECT 1N FROM sys.all_views)। यह देखते हुए कि इस दृश्य में कुछ सौ होने की गारंटी है, आप क्रॉस जॉइन को भी कम कर सकते हैं। ISNULLसे कम है COALESCEऔर काम करना चाहिए
मिकी टीटी

@ मिक्की आपके सुझावों और मेरे खुद के धन्यवाद के कारण, मैंने लंबाई को 296 बाइट्स तक कम करने में कामयाब रहा,
t-clausen.dk

वहाँ महान काम
मिकी


5

हास्केल, 31 26 बाइट्स

f a b c=min[b]$a:f(a+c)b c

आलसी मूल्यांकन FTW! डेमो:

*Main> import Data.Ratio
*Main Data.Ratio> f (-2) 3 (1%2)
[(-2) % 1,(-3) % 2,(-1) % 1,(-1) % 2,0 % 1,1 % 2,1 % 1,3 % 2,2 % 1,5 % 2,3 % 1]
*Main Data.Ratio> f 1 2 (2%3)
[1 % 1,5 % 3,2 % 1]

(मैं शुरू में हास्केल के [a,a+c..b]संकेतन द्वारा लुभाया गया था , लेकिन इसमें कुछ विचित्रताएँ हैं जो f a b c|l<-[a,a+c..b-c/2]=l++[b|last l<b]41 बाइट्स या f a b c=[x|x<-[a,a+c..],x<b]++[b]33 के लिए कुछ की आवश्यकता होती हैं ।)


मुझे आपका समाधान पसंद है! हालाँकि मुझे लगता है कि आपको import Data.Ratioअपनी बाइट गिनती में भी शामिल करने की आवश्यकता है, मुझे लगता है कि आप इसके fबिना उपयोग नहीं कर सकते हैं , है ना?
दोष

2
@flawr: अच्छा बढ़त मामला: आप की जरूरत नहीं है Data.Ratioके लिए fहै क्योंकि यह सब सांख्यिक प्रकार के लिए बहुरूपी है, जो अपने आप। हालांकि, जब आप इसे प्रकार के मूल्यों के साथ कॉल करना चाहते हैं Ratio, तो आपको आयात की आवश्यकता है। चुनौती केवल "कोड बनाने के लिए आवश्यक है ...", इसका उपयोग करने के लिए नहीं। मुझे लगता है कि यह आयात के बिना ठीक है।
nimi

1
दरअसल, आप केवल आयात के लिए की जरूरत है %ऑपरेटर परीक्षण अंशों बनाने के लिए 1 % 2और 2 % 3। मैं यहां धोखा नहीं दे रहा हूं: आप वास्तव में उन 26 बाइट्स को एक फ़ाइल में स्वयं डाल सकते हैं, उस मॉड्यूल पर दुभाषिया चला सकते हैं, और मेरे द्वारा प्रदर्शित इंटरैक्शन हो सकता है। (आप import Data.Ratioडेमो इंटरेक्शन में टाइप करने से भी बच सकते हैं , यदि आप इसके बजाय वर्तनी के %अनुसार Data.Ratio.%।)
एंडर्स केसोर्ग

5

MATL , 16 15 बाइट्स

3$:3Gvu9X10ZGZD

यह बहुत बड़े हर के लिए विफल हो सकता है। मुझे उम्मीद है कि आउटपुट स्वरूप स्वीकार्य है।

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

3$:    % take three inputs and generate range
3G     % push third input again
v      % vertically concatenate. Gives vertical array as output 
u      % get unique elements (i.e. remove the last one if it is repeated)
9X1    % predefined literal 'rat'
0ZG    % set rational format
ZD     % display using that format

5

रूबी , 32 54 48 बाइट्स

->a,b,c{(a..b).step(c){|x|p x%1>0?x:x.to_i};p b}

यह समाधान Mego के पायथन उत्तर पर आधारित है और मानता है कि cहमेशा Rationalरूबी का अंश स्वरूप होगा। इसे ऑनलाइन आज़माएं!

संपादित करें: एक बग फिक्स्ड जहां पूर्णांक पूर्णांक की तरह प्रस्तुत नहीं किए गए थे। -6 बाइट्स थैंक्स टू नॉट चार्ल्स एंड मेगाटॉम।

कार्यों को इस तरह से कहा जाता है:

> f=->a,b,c{(a..b).step(c){|x|p x%1>0?x:x.to_i};p b}
> f[1,4,Rational(2,3)]
1
(5/3)
(7/3)
3
(11/3)
4

(३/१) क्या मात्र ३ नहीं होना चाहिए?
edc65

रूबी का सबसे सरल Rationalरूप 3है(3/1)
शर्लक

.step(b,c).mapयहाँ बाइट की संख्या को कम करना चाहिए
नहीं कि

(a==a.to_i)a%1==0-4 बाइट्स के लिए हो सकता है ।
मेगाटॉम

-2,3,1/2r(उदाहरण 1) अंतिम 3दो बार प्रिंट करता है ।
मूल्य स्याही

3

जूलिया, 14 बाइट्स

f(a,b,c)=a:c:b

यह मैथेमेटिका के उत्तर के समान है, सिवाय इसके कि जूलिया की श्रेणियाँ पहले से ही वांछित प्रारूप में हैं, इसलिए यह और भी छोटी है। साथ ही संख्याओं का संग्रह भी लौटाता है। उदाहरण आउटपुट:

11-element StepRange{Rational{Int64},Rational{Int64}}:
 -3//1,-5//2,-2//1,-3//2,-1//1,-1//2,0//1,1//2,1//1,3//2,2//1

ध्यान दें कि पूर्णांक में 1 के साथ पूर्णांक प्रदर्शित होते हैं, और भिन्न के लिए एक डबल-स्लैश का उपयोग किया जाता है। आउटपुट को प्रश्न में परिभाषित करने के लिए कुछ और कोड की आवश्यकता होती है:

f(a,b,c)=map(x->println(x.num,x.den<2?"":"/$(x.den)"),a:c:b)

3

प्रतीकात्मक टूलबॉक्स के साथ मतलाब / प्रतीक के साथ अष्टक, 27 बाइट्स

त्रुटि को इंगित करने के लिए @sanchises का धन्यवाद, अब सही किया गया

@(a,b,c)sym(union(a:c:b,b))

यह एक अनाम फ़ंक्शन है। इसे कॉल करने के लिए, इसे किसी वैरिएबल या यूज़ को असाइन करें ans

उदाहरण:

>> @(a,b,c)sym(union(a:c:b,b))
ans = 
    @(a,b,c)sym(union(a:c:b,b))
>> ans(-2,3,1/2)
ans =
[ -2, -3/2, -1, -1/2, 0, 1/2, 1, 3/2, 2, 5/2, 3]

यह कल्पना के अनुरूप नहीं है, क्योंकि ऊपरी बाउंड हमेशा शामिल नहीं होता है (उदाहरण 2 का प्रयास करें)।
Sanchises

@sanchises धन्यवाद! अब ठीक किया गया
लुइस मेंडू

और यह भी, मुझे लगता है कि cआप का उपयोग कर सकते हैं, मैं बोली, जो भी अंश वृद्धि [...] या w / ई का प्रतिनिधित्व करने के लिए अपनी भाषा के अनुरूप है । मुझे लगता है कि यह बहुत स्पष्ट है कि symbolicएक तार्किक और अनुमति है (@VisualBean इस बात की पुष्टि करना चाहता है)। बृहदान्त्र ऑपरेटर का परिणाम तब एक symbolicसरणी में 'उन्नत' होता है , जिसका अर्थ है कि आप sym()कॉल से पूरी तरह छुटकारा पा सकते हैं।
16१६

@sanchises धन्यवाद, मैंने स्पष्टीकरण के लिए कहा है
लुइस

2

जावास्क्रिप्ट, 108 90 86   81 बाइट्स

(a,b,n,d)=>{var s="";for(a=a*d;a<b*d;a+=n)s+=(a%d?a+"/"+d:a/d)+" ";s+=b;return s}

एक अनाम फ़ंक्शन। सफेद स्थान के साथ नामित चर को असाइन करने के बाद:

var f=(a,b,n,d)=>
{ var s="";
  for(a=a*d; a<b*d; a+=n)
    s+= (a%d ? a + "/" + d : a/d) + " ";
  s+=b;
  return s
}

परीक्षण उदाहरण:

console.log(f(1,2,1,8)); //writes:
1 9/8 10/8 11/8 12/8 13/8 14/8 15/8 2

console.log(f(-3,3,4,7)); // writes:
-3 -17/7 -13/7 -9/7 -5/7 -1/7 3/7 1 11/7 15/7 19/7 3 

जावास्क्रिप्ट, कोई पुनरावृत्ति, पुस्तकालय या कार्यात्मक प्रोग्रामिंग का उपयोग कर एक अनिवार्य दृष्टिकोण।


1

स्मॉलटाक - 89 बाइट्स

एक बार के लिए स्मालटाक लगभग प्रतिस्पर्धी है!

Number extend[p:e q:i[|h|self to:e by:i do:[:x|h:=x. x printNl].h=e ifFalse:[e printNl]]]

इस तरह कॉल करें:

> 2 p:5 q:1/2
2
5/2
3
7/2
4
9/2
5

> 1 p:2 q:2/3
1
5/3
2

1

आर - 71 बाइट्स

मान लें कि आपने पहले ही MASSपैकेज स्थापित कर लिया है

f=function(x,y,z)MASS::fractions(union(seq(x,y,eval(parse(text=z))),y))

> f(1, 2, '1/3')
[1]   1 4/3 5/3   2
> f(2, 5, '1/2')
[1]   2 5/2   3 7/2   4 9/2   5

1

पाइरेट, 56 बाइट्स

{(b,e,n,d):link(e,map(_ / d,range(b * d, e * d))).sort()}

शुरुआत (बी), अंत (ई), अंश (एन), और हर (डी) में ले जाता है। पूर्णांक की एक श्रृंखला बनाता है, उन के माध्यम से विभाजित करता है और सूची के अंत में जोड़ता है (लिंक करके और फिर छाँटकर)।

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