UWSCコードゴルフ デジタル時計 現時点の結果

あっさりレベル5が出たので、私の方法を今回は詳説してみる。



ステップ1

テキストブロックの連結、変数名短縮、余白・改行削除
これで736Byte。

OPTION DEFAULTFONT = "MS ゴシック"
TEXTBLOCK clock
■■■
■ ■
■ ■
■ ■
■■■
  ■
  ■
  ■
  ■
  ■
■■■
  ■
■■■
■  
■■■
■■■
  ■
■■■
  ■
■■■
■ ■
■ ■
■■■
  ■
  ■
■■■
■  
■■■
  ■
■■■
■■■
■  
■■■
■ ■
■■■
■■■
  ■
  ■
  ■
  ■
■■■
■ ■
■■■
■ ■
■■■
■■■
■ ■
■■■
  ■
■■■
   
 ■ 
   
 ■ 
   
ENDTEXTBLOCK
c=SPLIT(clock,"<#CR>");s=0;WHILE TRUE;m=INT(s/60);s=s MOD 60;t="";FOR i=0 TO 4;t=t+c[INT(m/10)*5+i]+" "+c[(m MOD 10)*5+i]+" "+c[50+i]+" "+c[INT(s/10)*5+i]+" "+c[(s MOD 10)*5+i]+" <#CR>";NEXT;FUKIDASI(t);s=s+1;SLEEP(1);WEND

ステップ2

テキストブロックはパターンに抽出できそうと思う。
428Byte

OPTION DEFAULTFONT="MS ゴシック";DIM o[]=7,5,5,5,7,1,1,1,1,1,7,1,7,4,7,7,1,7,1,7,5,5,7,1,1,7,4,7,1,7,7,4,7,5,7,7,1,1,1,1,7,5,7,5,7,7,5,7,1,7,0,2,0,2,0;DIM p[]="    ","  ■ "," ■  ",,"■   ","■ ■ ",,"■■■ ";c=0;WHILE TRUE;m=INT(c/60);s=c MOD 60;t="";FOR i = 0 TO 4;t=t+p[o[INT(m/10)*5+i]]+p[o[(m MOD 10)*5+i]]+p[o[50+i]]+p[o[INT(s/10)*5+i]]+p[o[(s MOD 10)*5+i]]+"<#CR>";NEXT;FUKIDASI(t);c=c+1;SLEEP(1);WEND

ここまでは余裕。
次が難しい。

ステップ3

UWSCでは文字も数値だと思い、o[]の圧縮を試みる。
それから、*5+iが目障りなのとINTが多いので、関数化のコストを賄えそうに思う。
350Byte

OPTION DEFAULTFONT="MS ゴシック";PUBLIC i;FOR c=0 TO 6000;s=c MOD 60;t="";FOR i=1 TO 5;t=t+d(c/600)+d(INT(c/60)MOD 10)+d(10)+d(s/10)+d(s MOD 10)+"<#CR>";NEXT;FUKIDASI(t);SLEEP(1);NEXT
FUNCTION d(n);p=SPLIT("      ■  ■   ■   ■ ■  ■■■");RESULT=p[COPY("755571111171747717175571174717747577111175757757170202",INT(n)*5+i,1)]+" ";FEND

ステップ4

MODを移動して、FUKIDASI→BALLOONに。
347Byte

OPTION DEFAULTFONT="MS ゴシック";PUBLIC i;FOR c=0 TO 6000;s=c MOD 60;t="";FOR i=1 TO 5;t=t+d(c/600)+d(c/60)+d(9,1)+d(s/10)+d(s)+"<#CR>";NEXT;BALLOON(t);SLEEP(1);NEXT
FUNCTION d(n,s=0);p=SPLIT("      ■  ■   ■   ■ ■  ■■■");RESULT=p[COPY("755571111171747717175571174717747577111175757757170202",(INT(n)MOD 10+s)*5+i,1)]+" ";FEND

所要時間は10分*4程度。
1日たって見直して、改良の余地はなさそうと思い、レベル設定に至る。

Linersさんと比較して

ステップ3で「c=0;WHILE TRUE;c=c+1;WEND」を「FOR c=0 TO 6000;NEXT」に圧縮できたと喜ぶのがかなりダメ。
BALLOONのフォント指定を忘れているのがダメ。
フォント指定が半角でも通ることを知らない。
UWSCはビット演算向きでないと評価しないのがダメ。
最後の桁は演算する必要がないのに気付いてないのがダメ。
、、、ダメダメですな。
強いて言うなら、mod演算が少し有利。

このままじゃくやしいので

Linersさんやstuncloudさんの回答がなければ思いつかないわけですが、それらを取り入れた上で少し改良。
316Byte

PUBLIC i,c;WHILE 1;t="";FOR i=1 TO 5;t=t+d(c/600)+d(c/60)+d(9,1)+d(c MOD 60/10)+d(c)+"<#CR>";NEXT;BALLOON(t,0,0,,,"ゴシック");SLEEP(1);c=c+1;WEND
FUNCTION d(n,s=0);RESULT=COPY("     ■ ■ ■  ■ ■■■■",COPY("5444511111515355151544511535155354551111545455451502020",(INT(n)MOD 10+s)*5+i,1)*3+1,3)+" ";FEND

私はやっぱり、創造力は足りなくて、改良が得意な模様、、、。
やはりUWSCとビット演算は不利か?(シフト演算子がないのが主要因かな)