来週の13日金曜日


15

次回金曜日が月の13日になると予測できる最短のプログラムは何ですか?

  • 完全に機能するプログラムである必要があります(単なる関数/サブルーチンではありません)
  • 次の形式で日付を印刷する必要があります。 YYYY-MM-DD
  • ユーザーがコマンドライン引数として、または STDIN
  • ユーザーが開始日を指定しない場合、開始日として今日を使用します。
  • 開始日が13日金曜日の場合、プログラムはの13日金曜日を見つける必要があります。

今日プログラムを実行する場合(2011年2月16日)、次の出力が表示されます。

$ ./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の出力は、最初の例のために大丈夫?
JB

日付を引数として使用するか、STDINから取得するか、または両方をサポートする必要があるかを決定できるということですか?
sepp2k

@ sepp2k両方をサポートする必要はなく、ユーザーは日付を入力する方法が必要なだけです。
ダニエルスタンダー

@JBええ、すべての要件に対処する他のソリューションがいくつかあるので、たとえ最短であっても、ソリューションとしての応答を受け入れません。それはあなたの応答が有益ではなかったことを意味しません...しかし、ええ、一貫性のない日付形式を扱うことはイライラするでしょう。
ダニエルスタンダーズ

それは今日の日付がわからないためです。また、日付ライブラリがないため、とにかくかなり大きな回答になるでしょう。(* ruby​​ evalを使用して取得できますが、ruby date libも使用できます)
-gnibbler

回答:


6

Windows PowerShell、74

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

かなり簡単です。おそらく混乱を招くビットの1つは、"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

ただし、年齢がかかります...これは、反復ごとに日時を1日ずつ増分するのではなく、代わりに900ナノ秒だけ増分します。ただし、2バイト短くなります。

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)曜日と曜日の代わりに製品を個別に比較しました。確かにVenteroから盗まれました。
  • 2011-02-17 00:40(76)最初の行をに引き込みましたfor。比較は、減算としてではなく、-eqさらに2バイトを節約します。
  • 2011-02-17 00:53(75)Unix date形式の文字列は少し短くなっています。
  • 2011-02-17 11:42(74)デフォルトの日付パターンに戻しましたが、yyy-MM-d十分です(年は常に3文字より長く、日は常に13であるため)。TyAuvilに感謝します。

なぜ "date $ args"を渡すのiexですか?代わりに(date $ args)だけを試してください。
イッツィ

@Iszi:これは、「ユーザーが開始日を指定しない場合、今日を開始日として使用する」の実装に使用されます。ルール。あなたは空の配列を渡したりした場合$nullGet-Date、あなたはエラーではなく、現在の日付を取得します。"date $args"|iexただし、ここで$args 必要なのは、指定された日付または現在の日付のいずれかに解決されます。
ジョーイ

4

bash、75

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

これは少しロケール依存です。それはあなたのマシンに障害が発生した場合、してみてくださいexportINGの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

stdinから日付を取得します。日付を指定しない場合は、ctrl-dを押します。

Venteroの協力に感謝します。

ゴルフをしていない:

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代わりに、stdinから日付を読み取ることができます$*[0](EOFを入力してデフォルトの動作を取得します)。
ヴェンテロ

@Ventero:とてもありがとう、ありがとう。
sepp2k

3

C#、185

Andrew KoesterのC#ソリューションに基づいていますが、途中で大幅に変更されました。最終的に、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

Perl(およびその他)、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(Linuxのcoreutilsから)およびcal(util-linuxから)

サンプル実行:

$ 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

10月より前の月の先行ゼロがいつ保持されるかはわかりません。年がくると明らかに失われます。答えがちょうど来月であるとき、それは保持されるようです。その未定義の動作を呼び出してみましょう-ちょっと、これはゴルフです!


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

サンプルI / O

:~/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

C#

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"));}}

ゴルフをしていない:

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

Python-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ストローク後
...-ニブラー

過去からの爆風ごめん:)ソリューションに参加すると、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日金曜日のテーブル(F)を作成します。

6番目のステートメントは、現在の(UTC)日付の13日後の最初の金曜日を返します。


グレゴリオ暦の周期は340年ではなく400年です。または、私はここで何かが欠けていますか?
ジョーイ

2000〜2340の範囲外の年は処理しません。それはただのarbitrary意的な選択でした。
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"));

ゴルフをしていない:

<?
$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日である場合:
-Arnaud Le Blanc

-rタグを使用する必要はありません。でデフォルト設定を使用し、-n必要ありません@\n不要です。別のバイトechodie保存する代わりに。クラスのstrtotime代わりにDateさらに1つまたは2つ保存できます。
タイタス

2

C#、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);}}

ここでは、「現在の」週の金曜日を見つけてから、13になるまで7ずつ増やしています。また、ループと出力フォーマットにJoeyを使用して、いくつかの文字を削ります。

ゴルフをしていない:

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);
    }
}

元の:

これは上記のAndrewに似ていますが、十分な違いがあったので、コメントではなく別の回答を投稿して編集を提案することにしました。

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"));}}

ゴルフをしていない:

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

R、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

Perl 6、69バイト

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

オンラインでお試しください!

-5の@ ASCII-onlyに感謝


無効は、ユーザーはまた、引数を提供しない場合を処理する必要があるday-of-week==5
ASCIIのみの

ASCIIのみの固定@
ヴェン

そうそう、それはまた、完全なプログラムではなく、機能にする必要があり
ASCIIのみ

リンクする場合があります。この(より良い、そこに行く、ESC - >よ- >グラムのためのきれいにフォーマットポスト)
ASCIIのみ


1

Javascript

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:ええ、私は知っています、私は最初のルールを破りました(単なる機能ではありませんでした)

JavaScriptシェルでのテスト

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ルールを支持するエリート主義の汎用言語と戦います。
-mootinator

1

T-SQL 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)

私は、T-SQLプロシージャを使用した非賢い詳細な日付関数を使用して、SQLiteソリューションにスマックを配置したかっただけです。

更新:1日の増分を行うと、1か月の増分よりも多くのスペースが必要になるという私の当初の恐怖は非常に間違っていました。

テスト結果(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

別のJavascript、153

最初にコメントできないため、別のjavascriptの回答を投稿します...

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))

nodeJSで実行します:

$ node fr13th
2013-12-13

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

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

1

Python 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

または、Enterキーを押して今日の日付を使用します(この出力では2013/12/11になります)

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

2013-12-13

(実際には私のソリューションと144文字を数える@gnibblerのミックスがあります)

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

Japt、35バイト

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

@ASCIIOnlyのおかげで-8バイト!

それを試してみてください!


無効な出力形式...
ASCIIのみ


ええ、私はそれに取り組んでいます:)どうやらtoISOString日付を変更UTCに変換
ダナ

日付はどのように変更されますか?いK店舗時間は現地時間として?
ASCIIのみ

1
修正済み、39(まあ、ちょっと。UTC(AFAICT)で今日の正しい結果を出力します。これで十分です。私がすでにいるよりもタイムゾーンをいじりたくないです)
ASCIIのみ

1

Swift 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 TagTacoに感謝します。

悲しいかな...:

  • 日付/カレンダーの財団が必要です。
  • SwiftはIntsを次のものとして使用することを許可しません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のCodeGolfカウントには、関数のシグネチャ終了関数、およびreturnを含めるべきではないと思います。したがって、内部実装についての説明になります。

だから私のスコアはそう分解されます

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

Rebol、136

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]

ゴルフをしていない:

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

Javaの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

注:印刷時のJavaのデフォルト形式はすでに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には、Dateオブジェクトまたは計算用の組み込み機能はありません。日付に関する唯一の組み込みは、今日の年/月/日/時間/分/秒/マイクロ秒です。

そのため、表示されるコードのほとんどは、翌日に移動して曜日を計算するための手動計算です。

大部分The Work Day Countdownチャレンジの私の05AB1E回答から派生したものです(これが、バグに遭遇した約1時間前に編集した理由です。)

入力は形式の文字列ですdd-MM-yyyy(ただし、出力の形式yyyy-MM-ddはチャレンジのルールの1つであるため)。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.