バイナリクロック
Posted feedbacks - SQL
SQL Server 2008 で確認しました。 6 桁固定で、肝心の 2 進数への変換部分は以前投稿した、 http://ja.doukaku.org/comment/9097/ をそのまま使用しました。
see: LL Golf Hole 6 - 10進数を2進数に基数変換する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | DECLARE @now AS datetime = GETDATE(); --'20:18';
WITH
Input(now_str) AS (
SELECT LEFT(CONVERT(varchar(max), @now, 8), 5)
)
, Split(id, n, max_bits) AS (
SELECT 1, LEFT(now_str, 2), 6 FROM Input
UNION ALL
SELECT 2, RIGHT(now_str, 2),6 FROM Input
)
, ToBin(id, bin, deci, crnt) AS (
SELECT
id
, CAST(CASE
WHEN n >= POWER(CAST(2 AS bigint), max_bits)
THEN POWER(CAST(10 AS bigint), max_bits)
ELSE CAST(0 AS bigint)
END AS bigint)
, CASE
WHEN n >= POWER(CAST(2 AS bigint), max_bits)
THEN n - POWER(CAST(2 AS bigint), max_bits)
ELSE n
END
, max_bits - 1
FROM
Split
UNION ALL
SELECT
id
, CASE
WHEN deci >= POWER(CAST(2 AS bigint), crnt)
THEN POWER(CAST(10 AS bigint), crnt)
ELSE 0
END + bin
, CASE
WHEN deci >= POWER(CAST(2 AS bigint), crnt)
THEN deci - POWER(CAST(2 AS bigint), crnt)
ELSE deci
END
, crnt - 1
FROM
ToBin
WHERE
crnt >= 0
)
SELECT
REPLACE(
REPLACE(
RIGHT(N'00000' + CAST(bin as nvarchar(6)), 6),
N'0', N'□'
),
N'1', N'■'
)
FROM
ToBin
WHERE
crnt = -1
ORDER BY
id
|


lunlumo #9282() [ Ruby ] Rating6/8=0.75
20:18の場合,例えば以下の様な出力をするイメージです。
出力例:
■□■□□
□■□□■□
see: Binary Clock Widget
Rating6/8=0.75-0+
[ reply ]