अगले शुक्रवार 13 वें


15

सबसे छोटा कार्यक्रम कौन सा है जो भविष्यवाणी कर सकता है कि अगली बार शुक्रवार महीने के 13 वें दिन आएगा?

  • एक पूर्ण कार्यप्रणाली कार्यक्रम होना चाहिए (केवल एक फ़ंक्शन / सबरूटीन नहीं)
  • निम्नलिखित प्रारूप में तारीख का प्रिंट आउट अवश्य लें: YYYY-MM-DD
  • उपयोगकर्ता को एक कमांड लाइन तर्क के माध्यम से या एक प्रारंभिक तिथि प्रदान करने की अनुमति दें STDIN
  • यदि उपयोगकर्ता कोई प्रारंभ दिनांक प्रदान नहीं करता है, तो आज प्रारंभ दिनांक के रूप में उपयोग करें।
  • यदि प्रारंभ दिनांक 13 शुक्रवार है, तो कार्यक्रम अगले शुक्रवार 13 वें को ढूंढना चाहिए ।

अगर मैं आज (16 फरवरी 2011) कार्यक्रम चलाता था, तो मुझे निम्न आउटपुट प्राप्त करना चाहिए।

$ ./fr13th 2013-05-09
2013-09-13
$ ./fr13th 2007-06-29
2007-07-13
$ ./fr13th 2007-07-13
2008-06-13
$ ./fr13th
2011-05-13

क्या 2013-9-13पहले उदाहरण के लिए आउटपुट ठीक होगा ?
जेबी

क्या आपका मतलब है कि हम यह तय कर सकते हैं कि हम तारीख को तर्क के रूप में लेना चाहते हैं या एसटीडीआईएन से या कि हमें दोनों का समर्थन करने की आवश्यकता है?
sepp2k

@ sepp2k आप तय कर सकते हैं, आपको दोनों का समर्थन करने की आवश्यकता नहीं है, उपयोगकर्ता को केवल एक तिथि इनपुट करने की आवश्यकता है।
डैनियल स्टैंडएज

@ जेबी हाँ, चूंकि कई अन्य समाधान हैं जो सभी आवश्यकताओं को पूरा करते हैं, मैं आपकी प्रतिक्रिया को समाधान के रूप में स्वीकार नहीं करूंगा, भले ही यह सबसे छोटा हो। इसका मतलब यह नहीं है कि आपकी प्रतिक्रिया जानकारीपूर्ण नहीं थी ... लेकिन हाँ, असंगत तारीख प्रारूप से निपटना निराशाजनक होगा।
डैनियल स्टैंडेज

वैसे यह एक गोल्फ गोल्फ के साथ वास्तव में संभव नहीं है क्योंकि यह आज की तारीख * नहीं जानता है। यह भी एक तारीख पुस्तकालय नहीं है तो संभवतः वैसे भी एक बड़ा जवाब होगा। (* आप इसे प्राप्त करने के लिए माणिक इवायल का उपयोग कर सकते हैं, लेकिन फिर रूबी तिथि का उपयोग भी कर सकते हैं)
gnibbler

जवाबों:


6

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

for($d="date $args"|iex;($d+='1').day*$d.dayofweek-65){}'{0:yyy-MM-d}'-f$d

काफी सरल। एक शायद भ्रमित करने वाली बिट का उपयोग "Get-Date $args" | Invoke-Expressionवर्तमान तिथि (यदि $argsखाली है) या $argsकिसी त्रुटि को बढ़ाए बिना निर्दिष्ट तिथि को प्राप्त करने के लिए किया जाता है।

72-बाइट प्रकार:

for($d="date $args"|iex;($d+=9).day*$d.dayofweek-65){}'{0:yyy-MM-d}'-f$d

उम्र लेता है, हालांकि ... यह एक पूरे दिन प्रत्येक पुनरावृत्ति लेकिन केवल 900 नैनोसेकंड के बजाय डेटाइम में वृद्धि नहीं करता है। लेकिन दो बाइट्स छोटी।

67-बाइट प्रकार:

for($d="date $args"|iex;($d+='1').day*$d.dayofweek-65){}'{0:d}'-f$d

यह थोड़ा स्थानीय-संवेदनशील है; यदि यह आपकी मशीन पर विफल रहता है, तो पहले से ही अपनी तारीख प्रारूप को ISO-8601 पर सेट करने का प्रयास करें। :-)

ओह, और इसे 72-बाइट संस्करण की तरह 65 बाइट्स में बनाया जा सकता है।

इतिहास:

  • 2011-02-17 00:33 (92) पहला प्रयास।
  • 2011-02-17 00:35 (85) एक प्रारंभिक तारीख में सुधार।
  • 2011-02-17 00:37 (79) व्यक्तिगत रूप से सप्ताह के दिन और दिन के बजाय उत्पाद की तुलना करें। वेंटरो से चुराया गया।
  • 2011-02-17 00:40 (76) में पहली पंक्ति खींची for। इसके बजाय बस घटाव के रूप में तुलना करें -eqजो एक और दो बाइट्स बचाता है।
  • 2011-02-17 00:53 (75) यूनिक्स dateप्रारूप स्ट्रिंग थोड़ा छोटा है।
  • 2011-02-17 11:42 (74) डिफॉल्ट डेट पैटर्न में वापस आ गया लेकिन yyy-MM-dपर्याप्त है (चूंकि वर्ष हमेशा तीन वर्णों से अधिक लंबा होता है और दिन हमेशा 13. होता है। इसके लिए Ty Auvil का धन्यवाद।

आप "दिनांक $ args" क्यों पास कर रहे हैं iex? इसके बजाय बस (तिथि $ args) का प्रयास करें।
इज़्ज़ी

@ आईज़ी: इसका उपयोग "यदि उपयोगकर्ता कोई प्रारंभ दिनांक प्रदान नहीं करता है, तो आज प्रारंभ तिथि के रूप में उपयोग करें।" राज करते हैं। आप एक खाली सरणी या पार कर लेते हैं $nullकरने के लिए Get-Dateआपको एक त्रुटि, नहीं आज की तारीख मिल जाएगा। "date $args"|iexहालाँकि, या तो दी गई तारीख $args या वर्तमान तिथि को हल करता है , जो कि हम यहाँ चाहते हैं।
जॉय

4

मारना, ,५

until set `date +%F -d$1+day`
date -d$1|grep -q '^F.* 13'
do :
done
echo $1

यह थोड़ा स्थानीय-संवेदनशील है; यदि यह आपकी मशीन पर विफल रहता है, तो exportआईएनजी का प्रयास करेंLC_ALL=C पहले से।

$ bash fri13th.sh 2013-05-09
2013-09-13                                             
$ bash fri13th.sh 2007-06-29
2007-07-13                                             
$ bash fri13th.sh 2007-07-13
2008-06-13
$ bash fri13th.sh
2011-05-13

4

रूबी, 96 75 वर्ण

require"date"
d=Date.parse(gets||"thu")+1
d+=1 while d.wday*d.day!=65
$><<d

स्टड से तारीख लेती है। दिनांक प्रेस नहीं करने के लिए ctrl-d दबाएं।

वेंटरो की मदद के लिए बहुत बहुत धन्यवाद।

Ungolfed:

require "date"
# Date.parse("thu") will return this week's thursday
date = Date.parse(gets || "thu")+1
date += 1 while d.wday * d.day != 5 * 13
$stdout << date

नमूना IO:

$ ruby fr13th.rb
2013-05-09
2013-09-13
$ ruby fr13th.rb
2007-06-29
2007-07-13
$ ruby fr13th.rb
2007-07-13
2008-06-13
$ ruby fr13th.rb
2011-05-13

1
d.wday*d.day==654 वर्ण छोटा है। और अगर आप को बदलने के लिए सक्षम होना चाहिए Date.today.to_sके साथ"thu"
Ventero

वास्तव में एक इटरेटर के बजाय लूप का उपयोग करने से कोड 76 वर्णों तक छोटा हो जाता है require"date";d=Date.parse($*[0]||"thu")+1;d+=1 while d.wday*d.day!=65;$><<d:। और आप किसी अन्य चरित्र को बचाने के getsबजाय स्टडेन से तारीख पढ़ सकते हैं $*[0](डिफ़ॉल्ट व्यवहार प्राप्त करने के लिए ईओएफ दर्ज करें)।
वेंटरो

@ वेंचरो: बहुत अच्छा, धन्यवाद।
sepp2k

3

सी #, 185

एंड्रयू कोएस्टर के सी # समाधान पर आधारित है , लेकिन भारी तरीके से संशोधित किया गया है। मैं अंततः अपने PowerShell समाधान के समान समाधान पर पहुंचा:

using System;class
P{static void
Main(string[]a){var
n=a.Length>0?DateTime.Parse(a[0]):DateTime.Now;for(;(n=n.AddDays(1)).Day*(int)n.DayOfWeek!=65;);Console.Write("{0:yyy-MM-d}\n",n);}}

2

पर्ल (और अन्य), 114

for(($y,$m,$d)=(shift//`date +%F`)=~/\d+/g,$d>12&&$m++;$m
>12&&($y++,$m=1),`cal $m $y`!~/14$/m;$m++){}say"$y-$m-13"

पर्ल 5.10 या बाद में, साथ चलाएं -E 'code here'या -M5.010 file। आवश्यकताएं date(लिनक्स के लिए कोर्यूटिल्स से) और cal(उपयोग- लिनेक्स से)

नमूना रन:

$ perl -M5.010 fr13.pl 2013-05-09
2013-9-13
$ perl -M5.010 fr13.pl 2007-06-29
2007-07-13
$ perl -M5.010 fr13.pl 2007-07-13
2008-6-13
$ perl -M5.010 fr13.pl
2011-5-13

मुझे यकीन नहीं है जब अक्टूबर से पहले महीनों के लिए अग्रणी शून्य रखा गया है। यह स्पष्ट रूप से खो जाता है जब वर्ष लुढ़कता है; लगता है कि रखा जा सकता है जब जवाब अगले महीने है। चलो उस अपरिभाषित व्यवहार को बुलाओ - अरे, यह गोल्फ है!


2

दे घुमा के

#!/bin/bash
from=$1
if [ "$from" = "" ]; then
from=`date +%Y-%m-%d`
fi
i=1
while [ "$isFri" = "" ] || [ "$is13" = "" ]
do
isFri=`date -d "${from} ${i} days" | grep Fri`
is13=`date -d "${from} ${i} days" +%Y-%m-%d | grep "\-13"`
((i++))
done
((i--))
date -d "${from} ${i} days" +%Y-%m-%d

अवधारणा का उपयोग:

$ date -d "2011-02-16 2 days" +%Y-%m-%d
2011-02-18

नमूना मैं / हे

:~/aman> ./fr13th.sh
2011-05-13
:~/aman> ./fr13th.sh 2013-05-09
2013-09-13
:~/aman> ./fr13th.sh 2007-06-29
2007-07-13
:~/aman> ./fr13th.sh 2007-07-13
2008-06-13

2

सी#

240 अक्षर। C # को "केवल फ़ंक्शन के अंदर रन" मोड की आवश्यकता है!

using System;class P{static void Main(string[] a){var n=DateTime.Now;if(a.Length>0)DateTime.TryParse(args[0],out n);while(true){n=n.AddDays(1);if((n.Day==13)&&(n.DayOfWeek==(DayOfWeek)5))break;}Console.WriteLine(n.ToString("yyyy-MM-dd"));}}

संयुक्त राष्ट्र के golfed:

using System;

class P
{
    static void Main(string[] a)
    {
        var n = DateTime.Now;
        if (a.Length > 0) DateTime.TryParse(args[0], out n);
        while (true)
        {
            n = n.AddDays(1);
            if ((n.Day == 13) && (n.DayOfWeek == (DayOfWeek)5)) break;
        }
        Console.WriteLine(n.ToString("yyyy-MM-dd"));
    }
}

परीक्षण उत्पादन

\Debug> f13.exe 2013-05-09
2013-09-13

\Debug> f13.exe 2007-06-29
2007-07-13

\Debug> f13.exe 2007-07-13
2008-06-13

\Debug> f13.exe
2011-05-13

2

D: 227 वर्ण

import std.datetime,std.stdio;void main(string[]a){auto d=a.length<2?cast(Date)(Clock.currTime()):Date.fromISOExtendedString(a[1]);for(;d.dayOfWeek!=DayOfWeek.fri||d.day!=13;d+=dur!"days"(1)){}writeln(d.toISOExtendedString());}

अधिक कानूनी रूप से:

import std.datetime, std.stdio;

void main(string[] a)
{
    auto d = a.length < 2 ? cast(Date)(Clock.currTime()) : Date.fromISOExtendedString(a[1]);

    for(; d.dayOfWeek != DayOfWeek.fri || d.day != 13; d += dur!"days"(1)) {}

    writeln(d.toISOExtendedString());
}

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


2

पायथन - 166 वर्ण

स्टड से पढ़ता है, इसलिए यदि आप आज की तारीख चाहते हैं तो आपको एक खाली लाइन खिलाने की आवश्यकता है

from datetime import*
D=datetime
e=timedelta(1)
I=raw_input()
d=e+(I and D.strptime(I,"%Y-%m-%d")or D.now())
while(d.weekday()+1)*d.day-65:d+=e
print d.strftime("%F")

जब तक मैं कुछ याद कर रहा हूं यह 4 वीं आवश्यकता को संबोधित नहीं करता है (यदि कोई तारीख प्रदान नहीं की गई है, तो आज से शुरू करें)।
डैनियल स्टैंडएज

@ डैनियल, वह एक चूक गया। 26 स्ट्रोक बाद में ...
gnibbler

पिछले खेद से ब्लास्ट :) अगर हम अपने समाधान में शामिल होते हैं, तो हमें एक सहयोगी 144 वर्ण मिलते हैं (नीचे देखें!) :)
रॉबर्टो

2

SQLite, 374 वर्ण

(लाइन ब्रेक पठनीयता के लिए यहां जोड़ा गया; गिनती में शामिल नहीं।)

तकनीकी सीमाओं के कारण छोड़े गए "कमांड लाइन तर्क के रूप में या STDIN के माध्यम से प्रारंभ तिथि प्रदान करने के लिए उपयोगकर्ता को अनुमति दें" की आवश्यकता।

CREATE TABLE R(N UNIQUE);
INSERT INTO R VALUES(0);
INSERT INTO R VALUES(1);
REPLACE INTO R SELECT A.N*2048|B.N*1024|C.N*512|D.N*256|E.N*128|F.N*64|
G.N*32|H.N*16|I.N*8|J.N*4|K.N*2|L.N FROM
R A,R B,R C,R D,R E,R F,R G,R H,R I,R J,R K,R L;
CREATE TABLE F AS SELECT DATE('2000-01-13','+'||N||'months') AS D
FROM R WHERE STRFTIME('%w',D)='5';
SELECT MIN(D) FROM F WHERE D>DATE('now');

पहले 4 कथनों में 0 से 4095 तक के सभी पूर्णांकों वाले एकल कॉलम के साथ एक तालिका (R) बनाते हैं।

5 वें बयान में 2000-10-13 और 2340-12-13 के बीच 13 वें शुक्रवार को एक टेबल (एफ) बनाया गया है।

6 वाँ बयान वर्तमान (UTC) तारीख के बाद पहले शुक्रवार को 13 वाँ रिटर्न देता है।


ग्रेगोरियन कैलेंडर में 400 साल का चक्र है, न कि 340 साल। या मुझसे यहां कुछ छूट रहा है?
जॉय

यह वर्ष 2000-2340 के बाहर के वर्षों को नहीं संभालता है। वह सिर्फ एक मनमाना विकल्प था।
dan04

2

PHP - 103

(पाशविक बल)

<?for($d=date_create(@$argv[1]);$d->modify('next fri')&&$d->format(@d)-13;);die($d->format("Y-m-d\n"));

Ungolfed:

<?
$d = new DateTime(@$argv[1]);
while ($d->modify('next fri')) {
        if ($d->format('d') == 13) {
                die($d->format("Y-m-d\n"));
        }
}

परीक्षा:

$ php 979.php 2013-05-09
2013-09-13
$ php 979.php 2007-06-29
2007-07-13
$ php 979.php 2007-07-13
2008-06-13
$ php 979.php 
2011-05-13

1
आप को बदलने के द्वारा 1 चरित्र बचत कर सकते हैं !=करने के लिए -। इसके अलावा आप $d->modify('next fri')लूप के वेतन वृद्धि अनुभाग में ऊपर जाकर 2 अक्षरों को बचा सकते हैं ।
HoLyVieR

मुझे लूप से पहले अगले शुक्रवार को संशोधित करने की आवश्यकता है, अगर दी गई तारीख पहले से ही एक फ्राइडे 13 है :-) (या यहां तक ​​कि सिर्फ 13)
अरनौद ले ब्लैंक

उपयोग करें -rऔर आपको टैग की आवश्यकता नहीं है। डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करें -nऔर आपको इसकी आवश्यकता नहीं है @\nअनावश्यक है। echoइसके बजाय dieएक और बाइट बचाता है। क्लास के strtotimeबजाय Dateएक या दो और बचा सकते हैं।
टाइटस

2

सी #, 206 194 वर्ण

अपडेट करें

यह समस्या पर थोड़ा अलग है, इसलिए मैंने अपना पूरा प्रयास यहां छोड़ दिया।

using System:class p{static void Main(string[]a){var n=a.Length>0?DateTime.Parse(a[0]):DateTime.Now;for(;(n=n.AddDays(5-(int)n.DayOfWeek).AddDays(7)).Day!=13;);Console.Write("{0:yyy-MM-d}",n);}}

यहाँ, मुझे "चालू" सप्ताह का शुक्रवार मिल रहा है और फिर 7 से बढ़ रहा है जब तक कि मुझे एक नहीं मिल जाता है 13. मैंने जॉय के लूप और आउटपुट स्वरूपण के लिए कुछ वर्णों को शेव करने के लिए भी उपयोग किया है।

Ungolfed:

using System;
class p
{
    static void Main(string[] a)
    {
        var n = a.Length > 0 ? DateTime.Parse(a[0]) : DateTime.Now;

        for (; (n = n.AddDays(5 - (int)n.DayOfWeek).AddDays(7)).Day != 13; ) ;

        Console.Write("{0:yyy-MM-d}", n);
    }
}

मूल:

यह एंड्रयू के ऊपर के समान है, लेकिन मेरे द्वारा टिप्पणी के बजाय एक अलग उत्तर पोस्ट करने और संपादन का सुझाव देने के लिए पर्याप्त मतभेद थे।

using System;class p{static void Main(string[]a){var n=a.Length>0?DateTime.Parse(a[0]):DateTime.Now;do n=n.AddDays(1);while(!(n.Day==13&&n.DayOfWeek+""=="Friday"));Console.Write(n.ToString("yyyy-MM-dd"));}}

Ungolfed:

using System;
class p
{
    static void Main(string[] a)
    {
        var n = a.Length > 0 ? DateTime.Parse(a[0]) : DateTime.Now;
        do
        {
            n = n.AddDays(1);
        } while (!(n.Day == 13 && n.DayOfWeek + "" == "Friday"));

        Console.Write(n.ToString("yyyy-MM-dd"));
    }
}

2

आर, 113 वर्ण

f="%Y-%m-%d";o=format;a=c(as.Date(scan(,""),f),Sys.Date())[1];repeat{a=a+1;if(o(a,"%w%d")==513)break};cat(o(a,f))

उदाहरण चलता है:

> f="%Y-%m-%d";o=format;a=c(as.Date(scan(,""),f),Sys.Date())[1];repeat{a=a+1;if(o(a,"%w%d")==513)break};cat(o(a,f))
1: 2007-06-29
2: 
Read 1 item
2007-07-13

> f="%Y-%m-%d";o=format;a=c(as.Date(scan(,""),f),Sys.Date())[1];repeat{a=a+1;if(o(a,"%w%d")==513)break};cat(o(a,f))
1:
Read 0 items
2013-12-13

> f="%Y-%m-%d";o=format;a=c(as.Date(scan(,""),f),Sys.Date())[1];repeat{a=a+1;if(o(a,"%w%d")==513)break};cat(o(a,f))
1: 2013-12-13
2: 
Read 1 item
2014-06-13

2

पर्ल 6 , 69 बाइट्स

$_=Date.new(@*ARGS[0]//Date.today);.++while .day*.day-of-week-65;.say

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

@ ASCII- केवल -5 के लिए धन्यवाद


अमान्य, उपयोगकर्ता को एक तर्क प्रदान नहीं करता है, तो मामले को संभालने की जरूरत है day-of-week==5
केवल

@ ASCII- केवल निश्चित
Ven

अरे हाँ, यह भी एक पूरा कार्यक्रम होना चाहिए, एक समारोह नहीं
ASCII-only

से लिंक करना चाह सकते हैं इस (इससे भी बेहतर, वहाँ जा सकते हैं, esc -> s -> g एक अच्छी तरह से स्वरूपित पोस्ट के लिए)
ASCII-only


1

जावास्क्रिप्ट

F13=function(x){
    z=function(x){return (''+x).replace(/^(.)$/,'0$1')}
    D=x?new Date(x):new Date(),Z=864e5,X=D.getDay()%7,X+=+D+(X?Z*(5-X):0);
    do{
        X+=Z*7;
        D=new Date(X);
    }while(D.getDate()!=13)
    return D.getFullYear()+"-"+z(D.getMonth()+1)+"-"+z(D.getDate());
}

ps: हाँ, मुझे पता है, मैंने पहला नियम तोड़ा (सिर्फ एक फंक्शन नहीं हो सकता)

जावास्क्रिप्ट शेल पर टेस्ट

F13("2013-05-09") // 2013-09-13
2013-09-13
F13("2007-06-29") // 2007-07-13
2007-07-13
F13("2007-07-13") // 2008-06-13
2008-06-13
F13() //2011-05-13
2011-05-13

+1 STDIN नियम के पक्षधर अभिजात्य सामान्य प्रयोजन की भाषा से लड़ें।
मूटिनेटर

1

टी-एसक्यूएल 359 285 253 वर्ण

CREATE PROCEDURE f13(@d DateTime=null)AS
SET @d=ISNULL(@d,GETDATE())
;WITH d AS
(SELECT @d+1 d
UNION ALL SELECT d+1 FROM d
WHERE DATEPART(dw,d)<>6 OR DAY(d)<>13)SELECT CAST(d AS DATE) FROM d
WHERE DATEPART(dw,d)=6 AND DAY(d)=13
OPTION (MAXRECURSION 999)

मैं बस अपने गैर चालाक वर्बोज़ दिनांक फ़ंक्शन के साथ SQL-SQL प्रक्रिया पर स्मैक को नीचे रखना चाहता था।

अद्यतन: मेरा मूल भय कि एक दिन की वेतन वृद्धि एक महीने की वेतन वृद्धि से अधिक स्थान लेती है बहुत गलत ।

परीक्षा परिणाम (SSMS):

f13 '2013-05-09';
GO

f13 '2007-06-29';
GO

f13 '2007-07-13';
GO

f13;
GO
--

d
----------
2013-09-13

d
----------
2007-07-13

d
----------
2008-06-13

d
----------
2011-05-13

1

एक और जावास्क्रिप्ट, 153

मैं एक और जावास्क्रिप्ट उत्तर पोस्ट करता हूं क्योंकि मैं पहले टिप्पणी नहीं कर सकता ...

a=new Date(process.argv[2]||Date.now());for(b=1;b;b=a.getDate()!=13||!/^F/.test(a))a.setTime(a.getTime()+864e5);console.log(a.toISOString().substr(0,10))

नोडजेएस के साथ निष्पादित करें:

$ node fr13th
2013-12-13

$ node fr13th 2007-06-29
2007-07-13

$ node fr13th 2013-05-09
2013-09-13

1

पायथन 3.3, 166 वर्ण

import datetime as d
t=input()
t=d.date(*map(int,t.split()))if t!=""else d.date.today()
while 1:
 t+=d.timedelta(1)
 if t.day==13and t.weekday()==4:
  print(t);break

इनपुट प्रारूप में है 2013 1 1,

>>> ================================ RESTART ================================
>>> 
2013 1 1
2013-09-13

या बस आज की तारीख का उपयोग करने के लिए एंटर दबाएं (इस आउटपुट के लिए 2013/12/11 होगा)

>>> ================================ RESTART ================================
>>> 

2013-12-13

(वास्तव में मेरे समाधान और @gnibbler का मिश्रण है जो 144 वर्णों को गिनता है)

import datetime as d
t=input()
t=d.date(*map(int,t.split()))if t!=""else d.date.today()
while t.day*t.weekday()-65:
 t+=d.timedelta(1)
print(t)

बहुत अच्छी लाइन while t.day*t.weekday()-65:@ gnibbler के समाधान से है।


1

जाप, 35 बाइट्स

ÐUªKs3 ¯A
@e ¶5©D¶Uf}a@f1Uf Ä
s3 ¯A

-8 बाइट्स @ASCIIOnly को धन्यवाद!

कोशिश करो!


अमान्य आउटपुट स्वरूप ...
ASCII-only


हाँ, मैं इस पर काम कर रहा हूँ :) स्पष्ट रूप toISOStringसे UTC में परिवर्तित होता है जो दिनांक
दाना

यह दिनांक कैसे बदलता है? क्या Kसमय को स्थानीय समय के रूप में संग्रहीत किया जाता है?
केवल

1
फिक्स्ड, 39 (अच्छी तरह से, यह यूटीसी (एएफएआईसीटी) में आज के लिए सही परिणाम का उत्पादन करता है और मेरे लिए काफी पर्याप्त है। मैं पहले से अधिक टाइमज़ोन के साथ गड़बड़ नहीं करना चाहता हूं)
एएससीआईआई-ओनली

1

स्विफ्ट 4 , 310 बाइट्स

import Foundation
let (u,f)=(Calendar.current,DateFormatter())
f.dateFormat="yyyy-MM-dd"
var t={(x:Date)->Int in let c=u.dateComponents([.weekday,.day],from:x);return c.weekday!*c.day!},d=readLine().map{f.date(from:$0)!} ?? Date()
while t(d) != 65{d=u.date(byAdding:.day,value:1,to:d)!}
print(f.string(from:d))

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

-4 टैग्टाको को धन्यवाद।

अफसोस ...:

  • तारीख / कैलेंडर के लिए फाउंडेशन की जरूरत है।
  • स्विफ्ट Intएस का उपयोग करने की अनुमति नहीं देता हैBool
  • शॉर्टहैंड एनुम सिंटैक्स मददगार होता है, हालांकि उतना नहीं।
  • चारों ओर स्थान आवश्यक है ??
  • != भी रिक्ति की जरूरत है, ऐसा नहीं है कि यह एक अलंकार के रूप में व्याख्या की है।

0

VB.net (96c *)

प्रवेश

Function NextFridayThe13th(d As Date) As Date
  While d.DayOfWeek<>DayOfWeek.Friday
    d=d.AddDays(1)
  End While
  While d.Day<>13
    d=d.AddDays(7)
  End While
  Return d
End Function
  • मुझे लगता है कि vb.net के लिए कोडगुल्फ की गिनती में फंक्शन सिग्नेचर , क्लोजिंग एंड फंक्शन और रिटर्न शामिल नहीं होना चाहिए । तो यह सिर्फ आंतरिक कार्यान्वयन के बारे में बनाता है।

इसलिए मेरा स्कोरिंग टूट गया है

While d.DayOfWeek<>DayOfWeek.Friday    '35c
d=d.AddDays(1)                         '13c  48c
End While                              ' 9c  57c
While d.Day<>13                        '15c  72c
d=d.AddDays(7)                         '14c  86c
End While                              ' 9c  95c
Return d                               ' 1c  96c

0

प्रतिबल, १३६

d: any[do system/script/args now]until[d: d + 1 all[d/day = 13 d/weekday = 5]]print format/pad[4"-"-2"-"-2]reduce[d/year d/month d/day]

Ungolfed:

d: any [do system/script/args  now]

until [
    d: d + 1 
    all [d/day = 13 d/weekday = 5]
]

print format/pad [4 "-" -2 "-" -2] reduce [d/year d/month d/day]

उदाहरण का उपयोग:

$ rebol friday13th.reb 2013-05-09
2013-09-13
$ rebol friday13th.reb
2014-06-13

0

जावा 8, 200 197 बाइट्स

interface M{static void main(String[]a){java.time.LocalDate z=null,r=a.length<1?z.now():z.parse(a[0]);for(;(r=r.plusDays(1)).getDayOfWeek().getValue()*r.getDayOfMonth()!=65;);System.out.print(r);}}

स्पष्टीकरण:

इसे यहां आज़माएं (वर्तमान तिथि का उपयोग करने के लिए तर्क हटा दें)।

interface M{                        // Class
  static void main(String[]a){      //  Mandatory main-method
    java.time.LocalDate z=null,     //   LocalDate to reduce bytes when using static calls
     r=a.length<1?                  //   If no argument is given:
        z.now()                     //    Start at the current date
       :                            //   Else:
        z.parse(a[0]);              //    Start at the date of the first argument
    for(;(r=r.plusDays(1))          //   Before every iteration, go to the next day
                                    //   Loop as long as:
         .getDayOfWeek().getValue()
                                    //    the 1-indexed day of the week (Friday = 5)
         *r.getDayOfMonth()         //    multiplied by the day of the month
        !=65;                       //    is not 65
                                    //    (5 and 13 are primes, so only 5*13 results in 65)
    );                              //   End of loop
    System.out.print(r);            //   Print the result Friday the 13th
  }                                 //  End of main-method
}                                   // End of class

नोट: मुद्रण के पहले से ही जावा का डिफ़ॉल्ट प्रारूप yyyy-MM-dd


0

05AB1E , 141 बाइट्स

gĀi'-¡ëžežfžg)}V[Y`2ô0Kθ4ÖUD2Qi\28X+ë<7%É31α}‹iY¬>0ëY1¾ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVY`UÐ3‹12*+>13*5÷s3‹Xα©т%D4÷®т÷©4÷®·()O7%6QYн13Q*#}YRεDgi0ì]'-ý

05AB1E में दिनांक ऑब्जेक्ट्स या परिकलन के लिए कोई भी भवन नहीं है। आज की तारीखों के बारे में एकमात्र बिल्टिन वर्ष / माह / दिन / घंटे / मिनट / सेकंड / माइक्रोसेकंड है।

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

ज्यादातर काम के दिन की उलटी गिनती में मेरे 05AB1E उत्तर से लिया गया है चुनौती (यही कारण है कि मैंने एक घंटे पहले जब मैं एक बग के पार आया था ..)

इनपुट प्रारूप में एक स्ट्रिंग है dd-MM-yyyy(लेकिन आउटपुट प्रारूप में है yyyy-MM-dd, क्योंकि यह चुनौती के नियमों में से एक है)।

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को सत्यापित करें

स्पष्टीकरण:

gĀi        # If an input is given:
   '-¡    '#  Split it by "-"
  ë        # Else:
   že      #  Push today's day
     žf    #  Push today's month
       žg  #  Push today's year
         ) #  Wrap them into a single list
  }V       # After the if-else statement: pop and store it in variable `Y`
[          # Start an infinite loop
 Y`2ô0Kθ4ÖUD2Qi\28X+ë<731α}‹iY¬>0ëY1¾ǝDÅsD12i>1ë\1Dǝ¤>2}}ǝV
           #  Go to the next day
           #  (see my linked The Work Day Countdown answer for an explanation)
 Y`UÐ312*+>13*5÷s3Xα©т%D4÷®т÷©4÷®·()O7%
           #  Calculate the day of the week (0 = Saturday, 1 = Sunday, ..., 6 = Friday)
           #  (see my linked The Work Day Countdown answer for an explanation)
 6Q        #  Check if the day of the week is a Friday
 Yн        #  Push the days of the current date
   13Q     #  Check if it's the 13th
 *         #  And if both checks are truthy:
  #        #   Stop the infinite loop
}YR        # After the infinite loop: push the resulting date-list, and reverse it
ε          # Map each value to:
 Dgi       #  If it's only a single digit:
    0ì     #   Prepend a leading "0"
]          # Close both the if-statement and map
 '-ý      '# Join the result by "-"
           # (and output the result implicitly)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.