रेंज पैरामीटर्स को पुनर्प्राप्त करना


11

विवरण

आपको एक रेंज फ़ंक्शन का परिणाम दिया जाता है जहां हर तत्व को निकटतम पूर्ण संख्या में गोल किया गया है। आपका लक्ष्य मूल सूची को पुनर्प्राप्त करना है।

उदाहरण के लिए, निम्न कार्य (पायथन 3 में) आपके कार्यक्रम के लिए एक इनपुट तैयार करेगा:

from numpy import arange, floor
def floored_range(A, B, C):
    return list(floor(arange(A, B, C)))

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

उदाहरण

Input: [1,2,3,4]  
Output: [1,2,3,4]  

Input: [1,2,3,4]  
Output: [1.9,2.7,3.5,4.3]  

Input: [1,2,3,4,5,5]  
Output: [1.9,2.7,3.5,4.3,5.1,5.9]  

Input: [1,1,2,2,3,3,4,4]  
Output: [1,1.5,2,2.5,3,3.5,4,4.5]  

Input: [1,1,2,3,3,4]  
Output: [1,1.7,2.4,3.1,3.8,4.5]

Input: [56, 54, 52, 50, 48, 45, 43, 41, 39, 37, 35, 32, 30, 28, 26, 24, 22, 19, 17, 15, 13, 11]
Output: [56.7  , 54.541, 52.382, 50.223, 48.064, 45.905, 43.746, 41.587,
   39.428, 37.269, 35.11 , 32.951, 30.792, 28.633, 26.474, 24.315,
   22.156, 19.997, 17.838, 15.679, 13.52 , 11.361]

आपको दशमलव होने के लिए कम से कम एक आउटपुट मूल्य की आवश्यकता होनी चाहिए, अन्यथा हम हर बार इनपुट वापस कर सकते हैं।
यादृच्छिक आदमी

@Therandomguy जब का रेखांकन यह एक पूरी तरह से सीधी रेखा फार्म चाहिए
Arnauld

Oooooh। मैंने यह नहीं देखा। इसे चीजों को मसाला देना चाहिए।
यादृच्छिक आदमी

1
प्रश्न में सूत्र का उपयोग करना, A, B, Cकोई भी तीन फ्लोट हो सकता है। उदाहरण के लिए, इनपुट फ़्लोरेड श्रेणी, शुरू कर सकती है 56.7, समाप्त हो सकती है 10.2और एक कदम आकार हो सकती है -2.159। केवल एक चीज जो मायने रखती है वह यह है कि जब आप आउटपुट करते हैं, तो फ्लो किया जाता है, बिल्कुल इनपुट से मेल खाता है। मैंने एक उदाहरण जोड़ा है जो दिखा रहा है।
काइल जी

2
@Rod जैसा कि मैं इसे देखता हूं, मूल दूसरे टेस्ट केस का बिंदु यह स्पष्ट करना था कि एक ही इनपुट के लिए कई आउटपुट संभव हैं
लुइस मेंडो

जवाबों:


3

ऑक्टेव , 82 बाइट्स

function y=f(x)
while any(floor(y=linspace(x(1)+rand,x(end)+rand,numel(x)))-x),end

रनिंग टाइम गैर-नियतात्मक है, लेकिन कोड परिमित समय 1 के साथ समाप्त होता है।

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

व्याख्या

कोड एक को परिभाषित करता है functionकी xहै कि आउटपुट y। फ़ंक्शन में एक whileलूप होता है।

प्रत्येक पुनरावृत्ति में, numel(x)रैखिक रूप से अंतरित मानों की सही मात्रा ( ) उत्पन्न होती है ( linspace), पर शुरू x(1)+randऔर समाप्त होती है x(end)+randrandफंक्शन के लिए ये दो कॉल्स बीच 0- बीच में रैंडम ऑफसेट देते 1हैं, जिन्हें शुरुआती और अंतिम मानों पर लागू किया जाता है x

लूप को तब तक के लिए दोहराया जाता है जब तक anyकि floorएड रिजल्ट -में एंट्री डिफरेंशियल से अलग हो जाता है x


78 बाइट्स का उपयोग a!=bकरने की बजायany(a-b)
ओव्स

@ovs दुर्भाग्य से यह काम नहीं करता है, क्योंकि यह कुछ आउटपुट प्रविष्टि के रूप में जल्द ही बंद हो जाता है कि इनपुट में बराबर होता है, जब सभी नहीं करते हैं। अपने लिंक में दूसरे आउटपुट की दूसरी प्रविष्टि देखें
लुइस मेंडो

(क्योंकि यह साबित होता है कि एक यादृच्छिक रूप से चुनी गई रेखा के वैध होने की संभावना
नॉनज़रो है


3

आर , 86 बाइट्स

function(n){while(any(n-(x=seq(n[1]+runif(1),tail(n,1)+runif(1),l=sum(n|1)))%/%1))0;x}

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

लुइस मेंडो के उत्तर का आर पोर्ट ; यह anyजोर-जबरदस्ती की वजह से कई चेतावनी जारी करता है logicalलेकिन इन्हें नजरअंदाज किया जा सकता है।


1

पायथन 3 , 168 बाइट्स

def f(l):r=range(len(l));g=lambda n:[(l[b]+n-l[a])/(b-a)for a in r for b in r if b>a]or[0];s=(max(g(-1))+min(g(1)))/2;m=min(a*s-l[a]for a in r);return[a*s-m for a in r]

इसे ऑनलाइन आज़माएं! स्पष्टीकरण: gउस सीमा के लिए सीमित मूल्यों की गणना करता है Cजो मौजूद है Aऔर Bमौजूद है। तब औसत के लिए एक उपयोगी मूल्य देने के लिए लिया जाता है C, और फिर सबसे कम संभव सीमा तब उत्पन्न होती है।


0

जेली , 31 बाइट्स

ṾṚ”.;V×LḶ$}+©1ị$}IEȧḞ⁼¥ʋ
0ç1#®ḷ

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

चेतावनी : फ्लोटिंग-पॉइंट गलतियाँ।


1
[1,2,3,4,5,5]TIO पर 30 सेकंड के लिए समाप्त नहीं होता है । कुछ स्पष्टीकरण कृपया?
user202729

@ user202729 सबसे संभवत: फ्लोटिंग-पॉइंट अशुद्धि। मैं इसे देख लूँगा।
एरिक आउटोलॉफ़र


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