sentakuitaの日記: Excel列名変換問題(4).bat
@REM dec2alpha.bat 119Bytes
@REM 引数に数字が必須、%S%の初期化も必要
@REM cmd からなら \>SET S=&dec2alpha.bat 1000
@SET/AD=%1-1,N=D%%26,D/=26&SET L=ABCDEFGHIJKLMNOPQRSTUVWXYZ
@CALL SET S=%%L:~%N%,1%%%%S%%
@ECHO%D:0=% %S% 2>NUL||%0 %D%
sentakuitaさんのトモダチの日記、みんなの日記も見てね。 Idle.slashdot.jpは、あなたの人生において完全な時間の浪費です。見るなよ、見るなよ。
@REM dec2alpha.bat 119Bytes
@REM 引数に数字が必須、%S%の初期化も必要
@REM cmd からなら \>SET S=&dec2alpha.bat 1000
@SET/AD=%1-1,N=D%%26,D/=26&SET L=ABCDEFGHIJKLMNOPQRSTUVWXYZ
@CALL SET S=%%L:~%N%,1%%%%S%%
@ECHO%D:0=% %S% 2>NUL||%0 %D%
bashで書いてみた。無意識に/bin/shにしているのはご愛嬌。
変数名を1バイトにして整形するとどちらも140バイトを切るので
まずまず満足(ぉ
* dec2alpha
bash 的には数字->英字の変換テーブルをどう持つかから始まる。
外部プログラム(printf)を封印していると65をAに変換するのも一苦労。
組み込みの echo には8進数よこせと言われ、10進8進変換は書くのは面倒で。
今回は変数とsubstring。次点は配列か。
内容的には下から順にちぎっては投げちぎっては投げするだけ。
* alpha2dec
良い子は真似しちゃいけない英字数字変換。
一文字ちぎる、36進数(0-9A-Z)とみなす、補正する。
こちらも内容的には下から順にちぎっては投げ。
ゴルフ的にはロジックの見直しが必要な気がする。
特に変数に26字持つd2aの側。
#!/bin/sh
#alpha2dec.sh
alpha=$1;dec=0;base=1
while ((${#alpha}));do
n=$((36#${alpha:${#alpha}-1:1}-9))
dec=$((dec+base*n))
base=$((base*26))
alpha=${alpha:0:${#alpha}-1}
done
echo $dec
#!/bin/sh
# http://d.hatena.ne.jp/JunichiIto/20111102/1320253815
# Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編)
# 問題文確認しないで書いたので引数2つとる形にはなっていない。
# 昔書いた記憶があるな。。。
# dec2alpha.sh
dec=$1;alpha="";list="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
while (($dec));do
n=$(((dec+25)%26))
alpha=${list:$n:1}$alpha
dec=$(((dec-n)/26))
done
echo $alpha
'fizzbuzz.sb とりあえず書いてみたレベル
For n = 1 To 100
f=Math.Remainder(n,3)
b=Math.Remainder(n,5)
s=""
If f = 0 Then
s="Fizz"
EndIf
If b = 0 Then
s=s+"Buzz"
EndIf
If f*b > 0 Then
s=n
EndIf
TextWindow.WriteLine(s)
EndFor
せっかくメモリ増設したが、64bitOS上で3.2GBの壁にぶち当たる。
メモリリマッピングができていない、ということで
BIOS上げれば治る、いや無理、とのネット界隈の噂を確かめることに。
FOXUPDATE上では既存のBIOSが最新判定されるので、
Win上からFOXUPDATEのLOCALUPDATEを用いて手動更新。
* FOXCONNのサイトからダウンロード。773F1P14.zip
* BIOSのプロテクトを解除しておく
* アンチウイルスの類も止めたほうが無難
* 祈る
更新完了して、再起動して、BIOS設定し直して、Win立ち上げて、
タスクマネージャの物理メモリ量を確認。OK。
linux なら free -m 一撃。OK。
更新完了。4GBフルに見えるようになりましたとさ。
@REM fizzbuzz.bat 87B
@REM IF文使わず不要な変数は捨てれば良かった
@REM 配列の発想を思い出した -5Bytes
@SET/AN+=1,F=N*N%%3,B=N%%5,S0=N*F
@SET S%B%=%F:1=%Buzz
@ECHO %S0:0=Fizz%&%0%N:~2% 2>NUL
@REM fizzbuzz.bat 92B
@REM 特定条件でバッチを転かしてエラー出力を抑制すればif文いらない!
@NULでなくて一文字のゴミファイルにすれば更に-2B
@SET/AN+=1,F=N*N%%3,B=N%%5,S=N*F
@IF %B%==0 SET S=%F:1=%Buzz
@ECHO %S:0=Fizz%&%N:~2%%0 2>NUL
出ない残業代込みで、先月の時給は850円。
悲しくなる今日この頃。
いろいろ戦うには微妙な額だけに、
愚痴るだけしかできないのが悲しさ倍増。
先月と今月だけがこの調子であることを祈ろう。
日本発のオープンソースソフトウェアは42件 -- ある官僚