特定の期間、ジョーカーを使用して日付の最小リストを取得する


13

でフォーマットされた日付を考えYYYY-MM-DDます。*日付文字列の最後にジョーカーを使用できます。たとえば2016-07-2*、から2016-07-20までのすべての日付を記述し2016-07-29ます。

次に、開始日と終了日で表される期間を考えます。

アルゴリズムは、期間を表す日付の最小のリストを見つける必要があります。

例を使用しましょう。次の期間:

  • 開始日: 2014-11-29
  • 終了日: 2016-10-13

アルゴリズムは、次の日付リストを含む配列を返す必要があります。

  • 2014-11-29
  • 2014-11-30
  • 2014-12-*
  • 2015-*
  • 2016-0*
  • 2016-10-0*
  • 2016-10-10
  • 2016-10-11
  • 2016-10-12
  • 2016-10-13

1
勝利の目標はあいまいです。codegolfに変更する(つまり、可能な限り少ないバイト数でタスクを解決する)ことをお勧めします。また、日付の最小リストを出力するには、常に回答が必要です。
ビリーウォブ

たぶん、これは最高のサイトではないかもしれません。「楽しみのため」の挑戦というよりも、質問(つまり、「Ruby on Railsでこのアルゴリズムを見つけることができません」)です。私はここでかなり新しいです
ラファエル

stackoverflowを試してから、チャレンジではなく質問として質問することをお勧めします。言い換えると、挑戦は私の意見ではまだ興味深いものであり、(コードゴルフとして)チャンスに値します。
ビリーウォブ

6
ええ、アルゴリズムを見つけるのはまだ楽しくてやりがいがあると思いますが、私はコードゴルフの側面には興味がありませんでした...まあ私はそれを言い換え、タグを変更しました、そして今、私はまだこの投稿をフォローしながらstackoverflowを尋ねます。ありがとう!
ラファエル

1
フォローアップ:(それはほとんど存在しない「jokerize」ヶ月行いますが、)私は昨日のStackOverflowに掲載さが、今日、私はRubyで動作するコードを持っていた:stackoverflow.com/questions/40506639/...を
ラファエル

回答:


1

PHP、541 343バイト

そもそもアルゴリズムを動作させたかったのです。しかし、実際にゴルフをするのは、私が予想したよりもはるかに楽しかったですサポートされている日付と時刻の形式を参照する)。

3つの主要なアクションにより約130バイトが節約されました。しかし、マイナーなゴルフ
(大きなステップの1つも廃止された)からの70バイトは、多くの楽しみをもたらしました。

for($a=($f=strtotime)($argv[1]);!$p=$a>$z=$f($argv[2]);$a+=86400){$x=$z<$e=$f(Dec31,$a);(101<$q=date(md,$a))?$q-1001|$x?:$a=$e+$p="1*":($x?($t=$f(IX30,$a))>$z?:$a=$t+$p="0*":$a=$e+$p="*");$p?:($q%100>1|$z<($t=$f(date(Ymt,$a)))?$q%10>0&$q%100>1|$z<($t=min($t,$a+777600))?:$a=$t+$p="m-$q[2]*":$a=$t+$p="m-*");echo date("Y-".($p?:"m-d"),$a),"
";}

コマンドライン引数から入力を受け取ります。オンラインで実行する-nr、オンラインでテストします

ノート

  • 印刷物Y-m-3*のためY-m-30、修正する7バイトを追加:|$a==$t後に挿入し777600))ます。
  • PHP 7.1で警告をスローします。修正に5つのバイトを追加:交換してください+$p+!$p
  • 内訳と説明されたいくつかのゴルフは投稿する準備ができています。
    しかし、私が甘やかす前に、誰かが提出するかどうかを確認するために少し待ちます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.