MATL、46 42 34バイト
12tEt:qy/t15XObZ"!b16XOhhkw14:X~Z)
以前は、42バイト、12tEt:q2M/736330+t15XObZ"!b16XOhhkw14:X~Z)
および46バイト、736330 24t:qw/+t15XO' '24TX"b16XOhhk14: 12X~Z)
。もちろん、736330は必要ありませんでした。
注:TryItOnlineでは動作しません。MatlabとOctavesの実装には互換性の問題があると思いますdatestr
。
datestr
日付の数値表現を取り、その日付の文字列表現に変換します。時刻は数値の小数部分であるため、0.0は0000年1月0日の00:00:00に対応し、1.0は0000年1月1日の00:00:00に対応します。1/24は午前1時、2/24は午前2時などです。
説明
12t % push a 12 onto the stack and duplicate
Et % double the 12 and duplicate the 24 (stack now has 12, 24, 24, bottom to top)
:q % make vector 1:24 and decrement by 1, stack has 12, 24, 0:23
y % duplicate second element on stack (24)
/ % divide, for (0:23)/24
t % duplicate elements
15XO % string representation of date, 15 specifies format
b % bubble up element in stack (gets a 24 on top of the stack)
Z"! % makes a column of 24 spaces, to put between columns of times
b % bubble up another (0:23)/24
16XO % string representation of date, 16 for a different format
hh % concatenate two time vectors and the column of spaces
k % convert string to lowercase, because CO gives AM/PM not am/pm
w % swap elements in stack, that first 12 is now on top
14: % vector of equally spaced values 1:14
X~ % set exclusive-or, returns [1 2 3 4 5 6 7 8 9 10 11 13 14]
Z) % get the right columns of the string array to remove extra column of blanks
% implicit display
Matlabで動作することを示すために、ここにスクリーンショットがあります