ISO 8601標準の日付形式についての彼のxkcd で、ランドールはかなり奇妙な代替表記法に潜んでいます:
大きな数字はすべて通常の順序で現在の日付に表示される数字であり、小さな数字はその数字の出現の1から始まるインデックスです。したがって、上記の例はを表し2013-02-27
ます。
そのような日付のASCII表現を定義しましょう。最初の行にはインデックス1〜4が含まれます。2行目には「大きい」数字が含まれます。3行目には、インデックス5〜8が含まれます。1つのスロットに複数のインデックスがある場合、最小から最大の順に並んで表示されます。m
単一のスロット(つまり、同じ数字と同じ行)に最大でインデックスがある場合、各列はm+1
文字幅で左揃えにする必要があります。
2 3 1 4
0 1 2 3 7
5 67 8
逆の変換については、コンパニオンチャレンジもご覧ください。
挑戦
xkcd表記で日付を指定すると、対応するISO 8601日付(YYYY-MM-DD
)が出力されます。
プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取り、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。
入力は、年0000
から年までの有効な日付であると想定できます9999
。
入力に先行スペースはありませんが、行のスペースが最大で1つのスペースの列を含む長方形になるまで、行にスペースが埋め込まれていると想定できます。
標準のコードゴルフ規則が適用されます。
テストケース
2 3 1 4
0 1 2 3 7
5 67 8
2013-02-27
2 3 1 4
0 1 2 4 5
5 67 8
2015-12-24
1234
1 2
5678
2222-11-11
1 3 24
0 1 2 7 8
57 6 8
1878-02-08
2 4 1 3
0 1 2 6
5 678
2061-02-22
1 4 2 3
0 1 2 3 4 5 6 8
6 5 7 8
3564-10-28
1234
1
5678
1111-11-11
1 2 3 4
0 1 2 3
8 5 6 7
0123-12-30
1
、上2
にあるので、最初の数字は2
です。2
は上0
にあるので、2桁目は0
。3
は上で1
、4
上3
であるため2013
、最初の4桁として取得します。現在5
は下0
にあるので、5桁目は0
で6
あり7
、両方が下2
にあるので、それらの数字の両方がそう2
です。そして最後に、8
は以下な7
ので、最後の数字は8
であり、最終的にはになります2013-02-27
。(ハイフンはxkcd表記で暗黙的に使用されます。これは、ハイフンが表示される位置がわかっているためです。)