मौसम का पूर्वानुमान


13

अगले 7 दिनों के लिए मौसम का पूर्वानुमान करने के लिए सबसे छोटा कार्यक्रम लिखें

कार्यदिवस (स्टडिन से) सप्ताह का दिन और मौसम है

आउटपुट (स्टडआउट के लिए) सप्ताह के दिनों में सात लाइनें और सेंटीग्रेड में तापमान होता है

कार्यदिवस इनपुट कार्यदिवस पर शुरू होता है

तापमान मौसम के आधार पर रेंज के साथ यादृच्छिक संख्याएं हैं

वसंत 10 - 30 डिग्री  
ग्रीष्मकालीन 20 - 40 डिग्री  
शरद ऋतु 5 - 25 डिग्री (शरद ऋतु का पर्यायवाची शब्द)
सर्दी -5 - 15 डिग्री

नमूना इनपुट

Thursday Winter

नमूना आउटपुट

गुरुवार -1
शुक्रवार ३
शनिवार 8
रविवार 7
सोमवार १०
मंगलवार १०
बुधवार -1

आपके प्रोग्राम में समान इनपुट के साथ चलने पर हर बार समान आउटपुट नहीं होना चाहिए


क्या यह पर्याप्त है कि केवल एक दिन में यादृच्छिक तापमान होता है? इस तरह, आउटपुट प्रत्येक रन के लिए समान नहीं होगा।
१०:२२ पर हॉलवबो

1
के बारे में Ive सोच रहा टैगिंग मुद्दों और सुझाव है कि यह एक सिमुलेशन एक है कि क्या पूर्वानुमान की।
dmckee --- पूर्व-मध्यस्थ ने 20

@ हालावाबो, मैं किसी भी अतिरिक्त शर्तों को प्रश्न में जोड़ने का इरादा नहीं रखता, यह वही है: :)
gnibbler

एफडब्ल्यूआईडब्ल्यू: कम से कम मेरे समाधान के दृष्टिकोण से, केवल एक दिन के लिए प्रत्येक दिन के लिए यादृच्छिक तापमान उत्पन्न करना कहीं अधिक आसान है। सभी दिनों को संभालना गोल्फ के लिए कहीं अधिक आसान और बेहतर है।
जॉय

क्या यह एक मजाक है?
मैकेनिकल घोंघा

जवाबों:


8

रूबी 1.8, 95 वर्ण

#!ruby -nrdate
7.times{|i|puts (Date.parse($_)+i).strftime"%A #{"\023\004\016\016\035"[$_[-3]%5]-9+rand(21)}"}

स्ट्रिंग के अंदर भाग जाने वाले चरित्र को उन चरित्र शाब्दिकों द्वारा प्रतिस्थापित किया जाना चाहिए जिनका वे प्रतिनिधित्व करते हैं।

  • डेटा पैक करने के लिए एक छोटा तरीका मिला, रूबी 1.9 अब 4 अक्षर लंबा होगा ( .ordबाद में जोड़ें $_[-3])।
  • 112 -> 105 इनपुट को विभाजित न करने के जॉय के विचार को चुराकर।
  • 105 -> 101. ध्यान दें कि पहली पंक्ति वास्तव में रूबी दुभाषिया द्वारा पार्स की गई है, इसलिए यह समाधान की तरह चलने पर भी काम करती है echo "Thursday Winter" | ruby1.8 forecast.rb
  • 101 -> 96. जॉय के विचार को फिर से सरणी के बजाय तापमान को एक स्ट्रिंग में एम्बेड करने के लिए फिर से चुरा लिया।
  • वूप्स, बस ध्यान दिया यह रैंड (21) होना चाहिए, रैंड (20) नहीं।
  • 96 -> 95. अनावश्यक व्हाट्सएप को हटा दिया।

4

विंडोज पॉवरशेल, 104

[dayofweek]$d,$s=-split$input
(0..6*2)[+$d..(6+$d)]|%{''+[dayofweek]$_,((random 20)-5+'☼

↓'[$s[3]%5])}

वहाँ के तार थोड़े icky हैं, इसलिए आपकी सुविधा के लिए एक हेक्स दृश्य:

000: 5B 64 61 79 6F 66 77 65 │ 65 6B 5D 24 64 2C 24 73  [dayofweek]$d,$s
010: 3D 2D 73 70 6C 69 74 24 │ 69 6E 70 75 74 0A 28 30  =-split$input◙(0
020: 2E 2E 36 2A 32 29 5B 2B │ 24 64 2E 2E 28 36 2B 24  ..6*2)[+$d..(6+$
030: 64 29 5D 7C 25 7B 27 27 │ 2B 5B 64 61 79 6F 66 77  d)]|%{''+[dayofw
040: 65 65 6B 5D 24 5F 2C 28 │ 28 72 61 6E 64 6F 6D 20  eek]$_,((random
050: 32 30 29 2D 35 2B 27 0F │ 00 0A 0A 19 27 5B 24 73  20)-5+'☼ ◙◙↓'[$s
060: 5B 33 5D 25 35 5D 29 7D │                          [3]%5])}

इतिहास:

  • 2011-02-04 00:16 (179) - पहला, सीधा प्रयास।
  • 2011-02-04 00:20 (155) - जब आप व्यक्तिगत पात्रों और रेगेक्स मैच से दूर हो सकते हैं तो पूरे सीजन के नाम क्यों मैच करें? अमान्य इनपुट से अच्छी तरह से नहीं निपटेंगे, लेकिन गोल्फिंग में हमेशा उम्मीद की जाती है।
  • 2011-02-06 13:12 (149) - छुटकारा पा लिया $tजिसमें केवल लंबी चीजें हैं।
  • 2011-02-10 22:50 (142) - डे नेम जेनरेशन ने सरल बनाया। मैं सिर्फ एक सप्ताह में दो बार उत्पन्न करता हूं, सही स्थिति में सूचकांक करता हूं और सात वस्तुओं को बाहर निकालता हूं।
  • 2011-02-10 22:52 (138) - शुरुआती $dबाइट को कुछ बाइट्स के रूप में अच्छी तरह से बचाता है - और इससे छुटकारा मिलता है $x
  • 2011-02-10 23:03 (135) - एक अरेंज कास्ट (जिसे अतिरिक्त की जरूरत है []) से बचने के लिए पाइपलाइन को और नीचे ले जाना । साथ ही वस्तुओं की एक सूची को स्ट्रिंग करने के लिए आउटपुट में बदलाव किया गया है, जो स्पष्ट रूप से एक स्थान ( $OFSडिफ़ॉल्ट) सम्मिलित करता है ।
  • 2011-02-11 20:54 (132) - रीजेक्स मैच को चरित्र कोड की सूची में बदल दिया और सीजन के तीसरे चरित्र के साथ हैशमैप में अनुक्रमित किया।
  • 2011-02-11 21:00 (122) - एक सरणी द्वारा हैश मानचित्र को बदल दिया।
  • 2011-02-11 21:12 (117) - अधिक सरणी-वाई अच्छाई। और बूट करने के लिए छोटा है। मोडुलो 8 सरणी को थोड़ा छोटा करता है।
  • 2011-02-11 21:16 (116) - पांच का एक कारक निकाला 0,0,2गया, 0..2जिसके स्थान पर यह छोटा है।
  • 2011-02-11 21:22 (114) - थोड़ी अलग गणना का उपयोग किया। यह अभी भी शरद ऋतु का मानचित्र बनाता है और एक ही सूचकांक में गिरता है और केवल पांच मूल्यों की आवश्यकता का लाभ होता है। बहुत अच्छा। स्ट्रिंग में नेगेटिव इंडेक्स »फॉल« बाकी की तुलना में कम होने के साथ भी बहुत अच्छा खेलता है।
  • 2011-02-11 21:45 (112) - सीजन के तापमान की सीमा निर्धारित करने का स्टेंट वेंटरो का तरीका जो दो बाइट्स छोटा है।
  • 2011-02-12 03:16 (105) - एक अलग प्रयास के बाद 105 से वापस एक ही लाइन छपी।
  • 2011-02-12 13:23 (104) - फिर से विभाजित होने के बाद से सीज़न में एक सकारात्मक सूचकांक का उपयोग करते हुए, फिर से 104 पर वापस।

टेस्ट स्क्रिप्ट (जब तक यह परिणाम ठीक नहीं है, तब तक):

foreach ($d in 'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday') {
    foreach ($s in 'Winter','Summer','Spring','Autumn','Fall') {
        $o=-split("$d $s"|./weather_foo.ps1)
        if ($o.Count -ne 14) { "Wrong output length" }
        $days = $o -notmatch '\d'
        $temps = $o -match '\d'
        if ($days[0]-ne$d) { "Found "+ $days[0] + " instead of $d" }
        $m = $temps | measure -min -max
        switch ($s) {
            'Summer'{ $min = 20 }
            'Spring'{ $min = 10 }
            'Fall'  { $min = 5  }
            'Autumn'{ $min = 5  }
            'Winter'{ $min = -5 }
        }

        if ($m.Minimum -lt $min) { "Minimum temperature $($m.Minimum) didn't match for $s" }
        if ($m.Maximum -gt $min + 20) { "Maximum temperature $($m.Maximum) didn't match for $s" }
    }
}

3

गोल्फस्क्रिप्ट - 110 वर्ण

' ':^/){*}*43845%7&5*:|;){*}*333121%7&:$;7,{($+'Sun Mon Tues Wednes Thurs Fri Satur'^/.+='day '+20rand|+5-+n}/
  • पूरी तरह से सभी तापमान सीमाओं, मौसमों का समर्थन करते हैं और "शरद ऋतु" के पर्याय के रूप में "पतन" का भी समर्थन करते हैं।
  • मुझे लगता है कि सुधार के लिए कुछ कमरे हैं, लेकिन मेरा वर्तमान गोल्फ ज्ञान अभी तक सीमित है।

यहाँ परीक्षण है, 2 यादृच्छिकता की पुष्टि करने के लिए प्रत्येक गुजरता है

$ echo -n Thursday Spring | gs codegolf-404.gs
Thursday 23
Friday 28
Saturday 25
Sunday 22
Monday 19
Tuesday 14
Wednesday 25

$ echo -n Thursday Spring | gs codegolf-404.gs
Thursday 27
Friday 12
Saturday 26
Sunday 12
Monday 27
Tuesday 17
Wednesday 21


$ echo -n Friday Autumn | gs codegolf-404.gs
Friday 10
Saturday 5
Sunday 17
Monday 24
Tuesday 24
Wednesday 12
Thursday 18

$ echo -n Friday Autumn | gs codegolf-404.gs
Friday 13
Saturday 7
Sunday 14
Monday 6
Tuesday 14
Wednesday 21
Thursday 5


$ echo -n Sunday Summer | gs codegolf-404.gs
Sunday 39
Monday 31
Tuesday 35
Wednesday 34
Thursday 21
Friday 36
Saturday 28

$ echo -n Sunday Summer | gs codegolf-404.gs
Sunday 34
Monday 20
Tuesday 30
Wednesday 39
Thursday 30
Friday 31
Saturday 37


$ echo -n Monday Fall | gs codegolf-404.gs
Monday 6
Tuesday 7
Wednesday 18
Thursday 13
Friday 7
Saturday 5
Sunday 14

$ echo -n Monday Fall | gs codegolf-404.gs
Monday 16
Tuesday 22
Wednesday 19
Thursday 23
Friday 21
Saturday 9
Sunday 17


$ echo -n Saturday Winter | gs codegolf-404.gs
Saturday 0
Sunday -5
Monday 10
Tuesday -3
Wednesday -5
Thursday 13
Friday -1

$ echo -n Saturday Winter | gs codegolf-404.gs
Saturday -4
Sunday 13
Monday 11
Tuesday 0
Wednesday 0
Thursday -5
Friday 9


$ echo -n Tuesday Summer | gs codegolf-404.gs
Tuesday 38
Wednesday 29
Thursday 25
Friday 29
Saturday 34
Sunday 20
Monday 39

$ echo -n Tuesday Summer | gs codegolf-404.gs
Tuesday 33
Wednesday 26
Thursday 31
Friday 37
Saturday 39
Sunday 24
Monday 28


$ echo -n Wednesday Winter | gs codegolf-404.gs
W    ednesday 7
Thursday 12
Friday 0
Saturday -3
Sunday 11
Monday 14
Tuesday 8

$ echo -n Wednesday Winter | gs codegolf-404.gs
Wednesday 0
Thursday -1
Friday 7
Saturday 12
Sunday -5
Monday -3
Tuesday 2

2

D: 436 वर्ण

import std.algorithm, std.random, std.range, std.stdio, std.typecons;

void main(string[] g)
{
    alias canFind w;
    alias tuple t;

    auto s = g[2];
    auto e = w(s, "g") ? t(10, 30) : w(s, "Su") ? t(20, 40) : w(s, "W") ? t(-5, 15) : t(5, 25) ;
    auto r = rndGen();

    int v()
    {
        r.popFront();
        return e[0] + cast(int)(r.front % (e[1] - e[0]));
    }

    auto x = findSplitBefore(["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], [g[1]]);

    foreach(q; chain(x[1], x[0]))
        writefln("%s %s", q, v());
}

एक्स्ट्रासियस व्हाट्सएप से हटाए गए संस्करण (जो कि 436 वर्णों की बात है):

import std.algorithm,std.random,std.range,std.stdio,std.typecons;void main(string[] g){alias canFind w;alias tuple t;auto s=g[2];auto e=w(s,"g")?t(10,30):w(s,"Su")?t(20,40):w(s,"W")?t(-5,15):t(5,25);auto r=rndGen();int v(){r.popFront();return e[0]+cast(int)(r.front%(e[1]-e[0]));}auto x=findSplitBefore(["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],[g[1]]);foreach(q;chain(x[1],x[0]))writefln("%s %s",q,v());}

निश्चित रूप से, आप केवल सभी नईलाइनों और इंडेंटेशन को निचोड़कर बहुत सारे पात्रों को बचा सकते हैं, और अधिकांश अन्य रिक्त स्थान, बाहर? ;-)
क्रिस जस्टर-यंग

मैंने सभी अतिरिक्त व्हाट्सएप हटाए गए पात्रों को गिना। इसे पढ़ना इतना कठिन है कि इसे इस तरह से पोस्ट करना मूर्खतापूर्ण लगता है।
जोनाथन एम डेविस

2

PHP, 353 319 305 304 288 अक्षर

<?$i=split(" ",fgets(STDIN));$d=$i[0][0].$i[0][1];$s=$i[1][2];$r=json_decode('{"i":[10,30],"m":[20,40],"t":[5,25],"n":[-5,15]}',true);$n=array(Sun,Mon,Tues,Wednes,Thurs,Fri,Satur);$z=$x=0;while($z<7)if($n[++$x][0].$n[$x][1]==$d||$z){$z++;echo$n[$x%7]."day ".rand($r[$s][0],$r[$s][1])."
";}

Ungolfed

<?php
    $input = fgets(STDIN);
    $info = split(" ", $input);
    $day = substr($info[0], 0, 2);
    $season = $info[1][2];
    $range[i][] = 10;
    $range[i][] = 30;
    $range[m][] = 20;
    $range[m][] = 40;
    $range[t][] = 5;
    $range[t][] = 25;
    $range[n][] = -5;
    $range[n][] = 15;
    $days[0] = "Sun";
    $days[1] = "Mon";
    $days[2] = "Tues";
    $days[3] = "Wednes";
    $days[4] = "Thurs";
    $days[5] = "Fri";
    $days[6] = "Satur";

    $i = $d = 0;

    while($i<7)
        if(substr($days[++$d], 0, 2)==$day||$i){
            $i++;
            echo $days[$d%7]."day ".rand($range[$season][0], $range[$season][1])."\n";
        }
?>

305 -> 304: ने नई पंक्ति को स्विच किया
304 -> 288: PHP सरणियों के बजाय JSON सरणियों का उपयोग करता है


1
कार्य विवरण में निर्दिष्ट Fallपर्याय के Autumnरूप में स्वीकार नहीं करता है ।
जॉय

1

C # 350 अक्षर

इससे अधिक कुशल तरीका होना चाहिए। लेकिन यहाँ मुझे अब तक क्या मिला है:

using System;class P{static void Main(string[]x){var r=new Random();var s=x[1][2];int l=s=='r'?10:s=='m'?20:s=='n'?-5:5,u=s=='r'?31:s=='m'?41:s=='n'?16:26,i=0,z=(int)Enum.Parse(typeof(DayOfWeek),x[0]);for(;i<7;i++){var d=z<1?"Sun":z<2?"Mon":z<3?"Tues":z<4?"Wednes":z<5?"Thurs":z<6?"Fri":"Satur";Console.WriteLine(d+"day "+r.Next(l,u));z=z>5?0:z+1;}}}

या अधिक पठनीय प्रारूप में, कुछ टिप्पणियों के साथ:

using System;
class P 
{
    static void Main(string[] x) 
    {
        var r = new Random();
        var s = x[1][2]; //3rd char of season, first where all have unique letter

   // lower & upper limits for random, based on season
        int l = s == 'r' ? 10 : s == 'm' ? 20 : s == 'n' ? -5 : 5, 
            u = s == 'r' ? 31 : s == 'm' ? 41 : s == 'n' ? 16 : 26, 
            i = 0,
   // this line makes me cringe, but converting to an int and back seems
   // the easiest way to loop through days
            z = (int)Enum.Parse(typeof(DayOfWeek), x[0]); 

        for (; i < 7; i++) 
        { 
            var d = z < 1 ? "Sun" : z < 2 ? "Mon" : z < 3 ? "Tues" : z < 4 ? "Wednes" : z < 5 ? "Thurs" : z < 6 ? "Fri" : "Satur";
            Console.WriteLine(d + "day " + r.Next(l, u)); 
            z = z > 5 ? 0 : z + 1; // increments day, resets to 0 after saturday
        }
    }
}

C # को आम तौर पर मिलने वाली सभी सहायता की आवश्यकता होती है, इसलिए आप अपने लूप की सामग्री को इस (मुझे लगता है) के साथ बदल सकते हैं: Console.WriteLine (Enum.GetName (typeof (DayOfWeek)), z +++ 7) + "+ + r। अगला (एल, यू));
स्टीव

1

PHP - 150 वर्ण

<?$t=array("m"=>15,"r"=>5,"n"=>-10);for($a=split(" ",fgets(STDIN));$i<7;$i++)echo date("l ",strtotime($a[0]."+$i day")),rand(5,25)+$t[$a[1][2]],"\n";

मुझे लगा कि मैं अपना खुद का PHP सॉल्यूशन लिखूंगा, क्योंकि वर्तमान में भी चुनौती की स्थितियों को पूरी तरह से संतुष्ट नहीं किया जा सकता है।

यह दिन को पार्स करने के लिए स्ट्रेटोटाइम पर निर्भर करता है, और इसे वापस प्रतिध्वनित करने की तारीख। सीज़न को निर्धारित करने के लिए, यह सीज़न नाम के तीसरे अक्षर का अनुसरण करता है, जो अद्वितीय है (जैसा कि दिया गया है)।

ठीक से चलाने के लिए, इसे अक्षम करने के लिए नोटिस की आवश्यकता होती है और छोटे टैग को सक्षम किया जाना चाहिए।


0

जावास्क्रिप्ट - 251 वर्ण

d=['Mon','Tues','Wednes','Thurs','Fri','Satur','Sun'],g=function(c){return Math.random()*21+c|0},p=prompt();for(i=0,j=7,t=true;i<j;i++){t=t&&p.indexOf(d[i])!=0;t?j++:console.log(d[i>6?i-7:i]+'day '+g(/mm/.test(p)?20:/g/.test(p)?10:/te/.test(p)?-5:5))}

दुर्भाग्य से स्क्रिप्ट स्टड / स्टडआउट आवश्यकता को पूरा नहीं करती है, लेकिन यह शरद ऋतु के पर्याय के रूप में फॉल्स को स्वीकार करती है।

Whitespaced:

  d = [
    'Mon'
  , 'Tues'
  , 'Wednes'
  , 'Thurs'
  , 'Fri'
  , 'Satur'
  , 'Sun'
  ]
, g = function(c) {
    return Math.random()*21+c|0
  }
, p = prompt()

  ;

  for(i = 0, j = 7, t = true; i < j; i++) {
    t = t && p.indexOf(d[i]) != 0; 
    t ? 
      j++ : 
      console.log(d[i > 6 ? i - 7 : i] + 'day ' + g(/mm/.test(p) ? 
                                                      20 : 
                                                    /g/.test(p) ? 
                                                      10 : 
                                                    /te/.test(p) ? 
                                                      -5 : 
                                                      5
                                                    )
                  )
  }

0

गणितज्ञ 218

s_~g~d_ := 
Grid@RotateLeft[r = Thread@{DateString[{2012, 1, #}, {"DayName"}] & /@ Range@7, 
  RandomInteger[Cases[{{"Spring", {10, 30}}, {"Summer", {20, 40}}, {"Autumn", {5, 25}}, 
  {"Winter", {-5, 15}}}, {s, _}][[1, 2]], 7]}, Position[r, d][[1, 1]] - 1]

प्रयोग

g["Winter", "Sunday"]

यहाँ छवि विवरण दर्ज करें


0

पायथन 2, 220 वर्ण

थोड़ा बड़ा लेकिन (लगभग) पठनीय।

import random
c,e=raw_input().split()
a=[d+'day'for d in'Mon Tues Wednes Thurs Fri Satur Sun'.split()]*2
x='rmtn'.index(e[2])*2
g=(10,30,20,40,5,25,-5,15)[x:x+2]
f=a.index(c)
for b in a[f:f+7]:
 print b,random.randint(*g)

उत्पादन

# echo "Monday Summer" | python forecast.py 
Monday 33
Tuesday 29
Wednesday 33
Thursday 28
Friday 25
Saturday 21
Sunday 30
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.