कौन सा साल है?


9

यह दिसंबर 2014 है, और 2015 लगभग शुरू हो गया है। हालांकि, ऐसा प्रतीत होता है कि हर किसी को इसका एहसास नहीं हुआ है।

जॉन: "2009 यकीन है कि एक लंबा साल रहा है" |  गारफील्ड कैलेंडर में दिखता है |  गारफील्ड: "हमें एक नया कैलेंडर मिलेगा"

लेकिन पीपीसीजी के लोग बचाव में आते हैं!

इनपुट

आपके कार्यक्रम को एक दीवार की तरह एक ग्रिड दिया जाता है, जहां महीने में दिसंबर के दिन नवंबर और जनवरी में उन लोगों से अलग दिखते हैं। प्रत्येक सप्ताह रविवार से शुरू होता है और शनिवार से समाप्त होता है।

महीने के भीतर दिनों का प्रतिनिधित्व ए #। महीने के बाहर आने वाले दिन एक (अंतरिक्ष, ASCII कोड 32) द्वारा दर्शाए जाते हैं । प्रत्येक सप्ताह एक अलग लाइन पर है। लाइनों को एक नई लाइन वर्ण ( \n) से अलग किया जाता है । आपके प्रोग्राम को इनपुट के अंत में एक नई लाइन के ommission या समावेशन की आवश्यकता हो सकती है।

उदाहरण के लिए, यह दिसंबर 2009 का इनपुट है:

  #####
#######
#######
#######
#####  

कैलेंडर हमेशा दिसंबर महीने का होता है।

कार्य

इनपुट को देखते हुए, आपको कैलेंडर से संबंधित वर्ष ढूंढना होगा। चूंकि कई वर्ष हैं, जिसके लिए एक कैलेंडर मैच होता है, तो आपको वर्ष 2015 से पहले (2015 से पहले) वापस लौटना होगा (2015 को ही छोड़कर)

आपके कार्यक्रम को किसी भी वर्ष <2015 के लिए सही आउटपुट का उत्पादन करना चाहिए, जिसमें दिसंबर के लिए एक कैलेंडर लेआउट है, जो 2015 के करीब एक और वर्ष (2015 से पहले) के बराबर है।

यदि वर्ष <2014 है, तो आपको वर्ष 2014 के अंतर की भी गणना करनी चाहिए। उदाहरण के लिए, 2012 का अंतर है 2

उत्पादन

आपके प्रोग्राम का आउटपुट होना चाहिए:

  • पाठ: Your calendar is for <year>.(नोट: चूंकि यह मूल रूप से "कैलेंडर" के रूप में लिखा गया था, इसलिए मैं उस वर्तनी को भी स्वीकार करूंगा।)
  • एक नई लाइन ( \nया \r\n) द्वारा पीछा किया ।
  • पाठ द्वारा अनुसरण किया गया: It's almost 2015.
  • यदि वर्ष <2014 है, तो इसे पाठ द्वारा पालन किया You're <difference> years behind.जाना चाहिए : यह एक अलग लाइन पर होना चाहिए।
  • एक नई लाइन ( \nया \r\n) द्वारा पीछा किया ।
  • पाठ द्वारा अनुसरण किया गया: Go buy a new calendar!
  • वैकल्पिक रूप से एक नई पंक्ति ( \nया \r\n) के बाद।

नियम

  • आप चुन सकते हैं कि क्या आप कैलेंडर को कमांड-लाइन तर्क (जैसे yourprogram.exe <calendar>) के रूप में प्राप्त करना चाहते हैं या उपयोगकर्ता इनपुट के लिए संकेत दे सकते हैं।
  • आप मान सकते हैं कि आपका कार्यक्रम अमान्य इनपुट प्राप्त नहीं करेगा। अमान्य इनपुट में कैलेंडर लेआउट शामिल है जिसके लिए कोई वर्ष मौजूद नहीं है।
  • सबसे छोटा कोड (बाइट्स में, किसी भी भाषा में) जीतता है।
  • कोई भी गैर-मानक कमांड-लाइन तर्क (तर्क जो आमतौर पर स्क्रिप्ट चलाने के लिए आवश्यक नहीं हैं) कुल वर्ण गणना की ओर गिनते हैं।

  • आपका कार्यक्रम क्या नहीं करना चाहिए :

    • किसी भी बाहरी संसाधनों पर निर्भर।
    • एक विशिष्ट फ़ाइल नाम होने पर निर्भर करता है।
    • आवश्यक आउटपुट के अलावा कुछ भी आउटपुट करें।
    • असाधारण रूप से लंबे समय तक चलना। यदि आपका कार्यक्रम औसत उपयोगकर्ता के कंप्यूटर पर एक मिनट से अधिक चलता है, तो यह अमान्य है।
  • आपके प्रोग्राम को एक प्रोग्रामिंग भाषा में नहीं लिखा जाना चाहिए, जिसके लिए इस चुनौती को पोस्ट करने से पहले सार्वजनिक रूप से उपलब्ध संकलक / दुभाषिया मौजूद नहीं था।

उदाहरण

इनपुट:

  #####
#######
#######
#######
#####  

आउटपुट:

Your calendar is for 2009.
It's almost 2015.
You're 5 years behind.
Go buy a new calendar!

इनपुट:

 ######
#######
#######
#######
####   

आउटपुट:

Your calendar is for 2014.
It's almost 2015.
Go buy a new calendar!

इनपुट:

      #
#######
#######
#######
#######
##     

आउटपुट:

Your calendar is for 2012.
It's almost 2015.
You're 2 years behind.
Go buy a new calendar!

ओह। UTC (जो SE द्वारा उपयोग किया जाता है) में 2014 से 6 सेकंड पहले इसे पोस्ट करने का प्रबंधन किया गया था। साथ ही, सभी को नया साल मुबारक हो!
user2428118

कहो, काल्पनिक रूप से, 2016 और 2009 का आकार एक जैसा है। फिर कौन सा निकटतम है? (इसका मतलब है कि आप निकटतम दूरी से निकटतम हैं, या निकटतम लेकिन 2015 से पहले?)
Sp3000

@ SP3000 उत्तरार्द्ध। मैंने पोस्ट को स्पष्ट करने के लिए संपादित किया है।
user2428118

2
क्या वास्तव में कैलेंडर को आउटपुट में दो अलग-अलग तरीकों से वर्तनी देना आवश्यक है?
feersum

3
"आप चुन सकते हैं कि क्या आप कमांड-लाइन तर्क के रूप में अंश प्राप्त करना चाहते हैं (जैसे yourprogram.exe 2/5)" ... क्या?
feersum

जवाबों:


2

सीजेएम, 126 बाइट्स

"Your calendar is for "2e3q'##"DE9AB6C"=~+".
It's almost "2015_(".
You're 5 years behind"9@5$-:TtTg*".
Go buy a new calendar!"

3

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

s=input();i=42157313>>s.index("#")*4&15;print("Your calendar is for %d.\nIt's almost 2015.\n%sGo buy a new calendar!"%(2014-i,(i>0)*("You're %d year%s behind.\n"%(i,"s"*(i>1)))))

पहले के स्थान के आधार पर एक साधारण लुकअप टेबल #

विस्तारित:

s=input()
i=42157313>>s.index("#")*4&15
print("Your calendar is for %d.\nIt's almost 2015.\n%sGo buy a new calendar!"\
    %(2014-i,(i>0)*("You're %d year%s behind.\n"%(i,"s"*(i>1)))))

2

पर्ल - 187

$ARGV[0]=~/^( *)/;my@a=(7,8,3..5,0,6);my$b=($a[length$1]+2006);print"Your calendar is for $b.\nIt's almost 2015.\n".($b<2014?"You're ".2014-$b." years behind.\nGo buy a new calendar!":"")

"।" और "-" में एक ही ऑपरेटर पूर्वता है, इसलिए आपको "2014- $ b" के आसपास कोष्ठक की आवश्यकता है।
नटकी


@ कुटकी आह, मुझे लगा कि मैंने पहले ही तय कर लिया है।
केएसएफटी

2

पर्ल 5: 137 143

#!perl -p
$_="Your calendar is for ".(2014-($%=w834506&s/#/?/r)).".
It's almost 2015.
".("You're $% years behind.
")x!!$%."Go buy a new calendar!"

पिछला दृष्टिकोण:

#!perl -p
/#/;$_="Your calendar is for ".(2014-($b=1558279/9**"@-"%9)).".
It's almost 2015.
".("You're $b years behind.
")x!!$b."Go buy a new calendar!"

मानक इनपुट पर कैलेंडर (केवल पहली पंक्ति निश्चित रूप से महत्वपूर्ण है)

perl 2014.pl <<<" ######"

2

सी # 235

न्यूनतम किया गया:

class P{static void Main(string[] a){var y=new[]{1,0,5,4,3,8,2}[a[0].IndexOf('#')];var z=2014-y;System.Console.Write("Your calendar is for "+z+"\nIt's almost 2015.\n"+(z>0?"You're "+z+" years behind.":"")+"\nGo buy a new calendar!");}}

Ungolfed

class P
{
    static void Main(string[] a)
    {
        var y = new[]{1,0,5,4,3,8,2}[a[0].IndexOf('#')];
        var z = 2014-y; 
        System.Console.Write("Your calendar is for "+z+"\nIt's almost 2015.\n"+(z>0 ? "You're "+z+" years behind.":"")+"\nGo buy a new calendar!");
    }
}

खैर, भाषा क्रिया है :)


1
आपकी कक्षा और मुख्य को सार्वजनिक नहीं होना है। इसके अलावा, आप आसानी से नाम बदल सकते हैं Programकरने के लिए P। कि आप कुछ पात्रों को बचाना चाहिए :)
ProgramFOX

20 अक्षर वास्तव में, धन्यवाद :)
मैनुअल शूवेगर्ट

1
आप बदल रहा है कैसे द्वारा कुछ वर्ण बचा सकता है yगणना की जाती है, अगर आप सूचकांक एक स्ट्रिंग आप वाक्य रचना बचा सकता है सरणी का वर्णन करने के लिए आवश्यक (यानी var y = "1054382"[index]-48( 0ASCII 48 है))। आगे की बचत के लिए गणना yमें भी इनबिल्ट किया जा सकता है z
विजुअलमेल

2

सी #, 384 , 363 325 बाइट्स

C # समय, कृपया मुझे बताएं कि क्या मैं किसी एक नियम आदि से चूक गया।

string a(string s){var l=s.IndexOf('#');var x=(DayOfWeek)Enum.Parse(typeof(DayOfWeek),""+l);l=1;for(;;){var y=DateTime.Now.Year-l;var t=(new DateTime(y,12,1).DayOfWeek==x)?"Your calendar is for "+y+"\nIt's almost 2015\n"+((y < 2014)?"You're "+--l+"years behind\n":"")+"Go buy a new calendar":null;if(t!=null){return t;}l++;}}

इनपुट

" ######" 
"#######"  
"#######" 
"#######" 
"#####  "

उत्पादन

"Your calendar is for 2014
 It's almost 2015
 Go buy a new calendar

इनपुट 2

"  #####"
"#######"  
"#######"
"#######" 
"#####  "

आउटपुट 2

"Your calendar is for 2009
 It's almost 2015
 You're 5 years behind
 Go buy a new calendar"

संपादित करें: अपडेट किया गया, कुछ बाइट्स निकालने में कामयाब रहे


आपके आउटपुट से विराम चिह्न गायब है।
टाइटस

2

जावा, 243 बाइट्स

यह एक क्रिया भाषा है :-)

class A{public static void main(String[]s){int y=2005+new int[]{8,9,4,5,0,6,7}[s[0].indexOf("#")],d=2014-y;System.out.print("Your calendar is for "+y+".\nIt's almost 2015.\n"+(d>0?"You're "+d+" years behind.\n":"")+"Go buy a new calendar!");}}

unminified

class A {
    public static void main(String[] s) {
        int y = 2005 + new int[]{8,9,4,5,0,6,7}[s[0].indexOf("#")],
            d = 2014 - y;
        System.out.print("Your calendar is for " + y + ".\nIt's almost 2015.\n"
            + (d > 0 ? "You're " + d + " years behind.\n" : "") + "Go buy a new calendar!");
    }
}

1

जावास्क्रिप्ट (ईएस 6), 199 170 बाइट्स

मुझे ES6 लिखने की आदत नहीं है फिर भी किसी भी सुझाव की सराहना की जाएगी:

लुकअप टेबल, 170 बाइट्स

a=(i)=>{y=[8,9,4,5,0,6,7][i.search('#')]+2005,f=2014-y;return`Your calendar is for ${y}.\nIt's almost 2015.\n${f?`You're ${f} years behind.\n`:''}Go buy a new calendar!`}

मूल, 199 बाइट्स

a=i=>{y=2015,f=-1;do{f++;d=new Date(`${y--}-12-01`)}while(d.getDay()!=i.search('#'))return`Your calendar is for ${y}.\nIt's almost 2015.\n${f?`You're ${f} years behind.\n`:''}Go buy a new calendar!`}

unminified

a = i => {
    y = 2015;
    f = -1;
    do {
        f++;
        d = new Date(`${y--}-12-01`);
    } while (d.getDay() != i.search('#'));
    return `Your calendar is for ${y}.\nIt's almost 2015.\n${f ? `You're ${f} years behind.\n` : ''}Go buy a new calendar!`;
}

जावास्क्रिप्ट (ईएस 5), 212 182 बाइट्स

मैंने नीचे अपना मूल संस्करण भी शामिल किया है

लुकअप सरणी, 182 बाइट्स

function a(i){y=[8,9,4,5,0,6,7][i.indexOf('#')]+2005,f=2014-y;return"Your calendar is for "+y+".\nIt's almost 2015.\n"+(f?"You're "+f+" years behind.\n":'')+"Go buy a new calendar!"}

unminified

function a(i) {
    y = [8,9,4,5,0,6,7][i.indexOf('#')] + 2005;
    f = 2014 - y;
    return "Your calendar is for " + y + ".\nIt's almost 2015.\n" + (f ? "You're " + f + " years behind.\n" : '') + "Go buy a new calendar!";
}

मूल, 212 बाइट्स

function a(i){y=2015,f=-1;do{f++;d=new Date(y--+"-12-01")}while(d.getDay()!=i.indexOf('#'));return"Your calendar is for "+y+".\nIt's almost 2015.\n"+(f?"You're "+f+" years behind.\n":'')+"Go buy a new calendar!"}

unminified

function a(i) {
    y = 2015;
    f = -1;
    do {
        f++;
        d = new Date(y-- + "-12-01");
    } while (d.getDay() != i.indexOf('#'));
    return "Your calendar is for "+y+".\nIt's almost 2015.\n" + (f ? "You're "+f+" years behind.\n" : '') + "Go buy a new calendar!";
}

1

कॉफ़ीस्क्रिप्ट, 211 177 बाइट्स

मेरे PHP उत्तर के समान, लेकिन CoffeeScript में do-whileछोरों नहीं हैं और न ही इसके पास एक छोटा टर्नरी ऑपरेटर है:

a=(i)->y=2015;f=-1;loop(f++;d=new Date y--+"-12-01";break if d.getDay()==i.indexOf '#');"Your calendar is for "+y+".\nIt's almost 2015.\n"+(if f then"You're "+f+" years behind.\n"else'')+'Go buy a new calendar!'

Unminifed

a = (i)->
    y = 2015
    f = -1
    loop
        f++
        d = new Date y-- + "-12-01"
        break if d.getDay() == i.indexOf '#'
    "Your calendar is for " + y + ".\nIt's almost 2015.\n" + (if f then "You're " + f + " years behind.\n" else '') + 'Go buy a new calendar!'

लुकअप तालिका का उपयोग करके छोटा किया गया:

a=(i)->y=[8,9,4,5,0,6,7][i.indexOf '#']+2005;f=2014-y;"Your calendar is for "+y+".\nIt's almost 2015.\n"+(if f then"You're "+f+" years behind.\n"else'')+'Go buy a new calendar!'

1

PHP, 215 181 बाइट्स

लुकअप टेबल, 181 बाइट्स

लघु सरणी सिंटैक्स के कारण, केवल PHP 5.4+ पर काम करता है:

function a($i){$y=2005+[8,9,4,5,0,6,7][strpos($i,'#')];$f=2014-$y;echo "Your calendar is for $y.\nIt's almost 2015.\n".($f?"You're $f years behind.\n":'')."Go buy a new calendar!";}

unminified

function a($input) {
    $year = 2005 + [8,9,4,5,0,6,7][strpos($input, '#')];
    $difference = 2014 - $year;
    echo "Your calendar is for $year.\nIt's almost 2015.\n" . ($difference ? "You're $difference years behind.\n" : '') . "Go buy a new calendar!";
}

मूल, 215 बाइट्स

PHP 5 के अधिकांश (यदि सभी नहीं) संस्करण के साथ काम करता है:

<?function a($c){$y=2015;$f=-1;do{$f++;$d=strtotime(--$y."-12-1");}while(date(w,$d)!=strpos($c,'#'));echo"Your calendar is for $y.\nIt's almost 2015.\n".($f?"You're $f years behind.\n":'')."Go buy a new calendar!";}

unminified

<?php

function a($input) {
    $year = 2015;
    $difference = -1;
    do {
        $difference++;
        $date = strtotime(--$year . "-12-1");
    } while (date('w', $date) != strpos($input, '#'));
    echo "Your calendar is for $year.\nIt's almost 2015.\n" . ($difference ? "You're $difference years behind.\n" : '') . "Go buy a new calendar!";
}

1

रूबी, 174

def a(i)y=2005+[8,9,4,5,0,6,7][i.index('#')];d=2014-y;puts"Your calendar is for #{y}.\nIt's almost 2015.\n"+(d>0?"You're #{d} years behind.\n":'')+"Go buy a new calendar!"end

1

PHP, 145 बाइट्स

समापन टैग के पीछे दो लाइनब्रेक क्योंकि PHP पहले वाले को अनदेखा करेगी

Your calendar is for <?=2014-$y=_1054382[1+strspn($argv[1]," ")],".
It´s almost 2015.",$y?"
You're $y years behind.":""?>

Go buy a new calendar!

कमांड लाइन तर्क से इनपुट लेता है;

PHP 5.6 (18 दिसंबर 2014 को जारी) या बाद में स्ट्रिंग शाब्दिक अनुक्रमण के लिए आवश्यक है।


1

स्माइलबासिक, 159 बाइट्स

DEF C C
Y=VAL("2834501"[INSTR(C,"#")])?"Your calender is for ";2014-Y;".
?"It's almost 2015.
IF Y THEN?"You're ";Y;" years behind.
?"Go buy a new calendar!
END

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