プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

140文字プログラム集(8)

Twitterアカウント(@eida_s)上でつぶやいた、140文字以内でできているプログラムのまとめ(8)です。

なお、まとめ(1)から(7)のリンクは以下の通り。
140文字プログラム集(1)
140文字プログラム集(2)
140文字プログラム集(3)
140文字プログラム集(4)
140文字プログラム集(5)
140文字プログラム集(6)
140文字プログラム集(7)


■140文字プログラムNo.23 140曜日計算 (2013.04.10)

DTREAD(DATE$),Y,M,D:Y=Y-(M<3)M=M+(M<3)*12↓
H=(Y+(0OR Y/4)-(0OR Y/100)+(0OR Y/400)+FLOOR((13*M+8)/5)+D)%7?MID$("SUNMONTUEWEDTHUFRISAT",H*3,3)

(139文字)

【遊び方】
ツェラーの公式を使って今日の曜日を表示します。
1行目をY=yyyy:M=mm:D=ddとすれば任意の日付の曜日を表示できます。

【プログラムの解説】
何度も修正ツイートしたのですが、最後にツイートしたものもM=M+(M<3)のところが(N<3)とかなってて間違ってます。すみません。
最終版は上記のとおりです。
これはPTCファイルから直接コピペしたので間違ってないはずです。

プチコン内蔵の命令だけでは、曜日の入ったカレンダーを作ることができません。
そこでツェラーの公式を使った曜日計算を140文字で作ってみました。

FLOORはキーワード稼ぎのためにわざと入れてます(ORで代用可)w

このプログラムを作るにあたって、せっかく勉強したツェラーの公式についての解説は以下をご覧ください。

140曜日計算とツェラーの公式

【今回新しく使ったキーワード】
・DTREAD
・DATE$
・FLOOR


■140文字プログラムNo.24 140アナログ時計 (2013.04.14)

M=60FOR I=3TO 6B=1IF I>5THEN WAIT 1B=5I=3GCLS↓
TMREAD(TIME$),A(3),A(4),A(5)T=2*PI()*(15-A(I)*B)/M↓
GLINE M,M,M+COS(T)*9*I,M-SIN(T)*9*I,I:NEXT

(139文字)

【遊び方】
普通のアナログ時計です。
時、分、秒の針が長さ・色違いで表示されます。
これはそこそこの出来に見えるかな

【プログラムの解説】
140文字でアナログ時計ってのは結構画期的だと思うんですが!(自画自賛)

処理を使いまわすために、結構むりやりなことをやっています。
しばらく時間が経ってからまとめたので、自分でも何やってるのかよくわからないです。

【今回新しく使ったキーワード】
・TMREAD
・TIME$
・PI


■140文字プログラムNo.25 140コムソート (2013.04.17)

H=0OR N/1.3↓
FOR I=0TO 1FOR J=0TO N-H-1↓
IF A(J)>A(J+H)THEN SWAP A(J),A(J+H)I=0↓
NEXT:I=I*(H<2)H=0OR H/1.3+(H<2)NEXT

(113文字)

【遊び方】
A()にソートする配列を、Nに配列の要素数を入れて、このプログラムを呼び出すと、A()がソートされます。
詳しくは、以下のエントリをご覧ください。

140コムソート

【プログラムの解説】
SORT、RSORTがあるので別に必要ないのですがアルゴリズムの勉強のため作りました。
コムソート(comb sort)はバブルソートの改良版アルゴリズムです。
一応、平均計算量はO(n・Log(n))ですので、一様乱数のソートなどではクイックソート並みの速度が期待できます。
ただし、不安定ソート(※1)ですので、どんな用途でも使えるというわけではありません。

(※1)同じソート順位の要素がある時、ソート前の順位がそのままソート後にも保存されるのが安定ソート、保存されないのが不安定ソート。
例えば、EXCELの「並べ替え」は安定ソートになっています。
そうした性質が必要な場合には、安定ソートのアルゴリズムを使う必要があります。

【今回新しく使ったキーワード】
・SWAP