Language detail: なでしこ
Coverage: 46.10%
|
number of '+' ratings |
contribution for coverage |
Unsolved challenges
- LL Golf Hole 9 - トラックバックを打つ (Nested Flatten)
- 起動オプションの解析 (Nested Flatten)
- LL Golf Hole 8 - 横向きのピラミッドを作る (Nested Flatten)
- LL Golf Hole 6 - 10進数を2進数に基数変換する (Nested Flatten)
- echoクライアント (Nested Flatten)
codes
タブ区切りデータの処理
(Nested
Flatten)
なでしこで、手順に忠実に書いてみました。
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 | input="ID Surname Forename Age
1 Sato Hanako 17
0 Suzuki Taro 18"
data=inputをTSV取得
# ヘッダを切り取る
head=dataの0を配列切り取る
# 第1カラムでソート
dataの0を表数値ソート
# 第2カラムと第3カラムを入れ替え
data=dataの1と2を表列入替
# ヘッダも入れ替え
head=headの1と2を配列入替
# 第4カラムに1を加算
Iで0から(dataの配列要素数-1)まで繰り返す
data[I][3]=data[I][3]+1
# ヘッダとデータを結合
output=(headの表行列交換)にdataを表追加
# 結果を表示
outputを表TSV変換して表示
●配列入替(AのXとYを)
AのXにA[Y]を配列挿入
AのY+1を配列削除
Aで戻る
●表列入替(AのXとYを)
AのYを表列取得
AのXにそれを表列挿入
それのY+1を表列削除
それで戻る
●表追加(AにBを)
Aの(Aの配列要素数)にBを配列一括挿入
Aで戻る
|
2^i * 3^j * 5^k なる整数
(Nested
Flatten)
#7639を参考に移植。for文がないのがきつい・・・
1 2 3 4 5 6 7 8 9 10 11 12 | limit=100
n=0
i=1
(n<limit)の間
tmp=i
(tmp%2=0)の間,tmp=tmp/2
(tmp%3=0)の間,tmp=tmp/3
(tmp%5=0)の間,tmp=tmp/5
もし(tmp=1)ならば
iを表示
n=n+1
i=i+1
|
文字列型日時ののN秒後時間取得
(Nested
Flatten)
なでしこで。下の二つの関数はほかから流用です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DateEx("2008/08/27 23:59:25",40)を表示
DateEx("2008/08/27",40)を表示
●DateEx(str,n)
dateとは配列=区切(str," ")
もし(date[1]="")ならば、date[1]=今
配列結合(UNIX2date(date2UNIX(date,0)+n)," ")
●date2UNIX(date,tzd)
戻(日数差("1970/1/1",date[0])*(60*60*24)+秒差("0:0:0",date[1])+tzd)
●UNIX2date(unix)
tmpとは配列
dayとは整数=unix/86400%86400
unix=unix-day*86400
tmp[0]=日付加算("1970/1/1","//{day}")
tmp[1]="{ゼロ埋め(unix/3600%24,2)}:{ゼロ埋め(unix/60%60,2)}:{ゼロ埋め(unix%60,2)}"
tmpで戻る
|
LL Golf Hole 7 - バイト数を読みやすくする
(Nested
Flatten)
日本語言語なのに、ぜんぜん日本語っぽい投稿をしてないなと思ったので、少々長くなりますがあえて。
1 2 3 4 5 6 7 8 | 「バイト数を入力してください」と尋ねて入力に代入
単位は「{改行}k{改行}M{改行}G{改行}T」
カウンタは0
入力が1024以上の間
入力を1024で直接割る
カウンタに1を直接足す
入力を1で小数点四捨五入
それ&単位[カウンタ]を表示
|
LL Golf Hole 3 - 13日の金曜日を数え上げる
(Nested
Flatten)
なでしこで。
1 2 3 4 5 6 7 8 | C=0;D="{今年}/{今月}/13"
もし(MID(今日,9,2)>13)ならば
D=Dに"/1/"を日付加算
(D<>"2014/01/13")の間
もし(Dの曜日="金")ならば
C=C+1
D=Dに"/1/"を日付加算
Cを表示
|
LL Golf Hole 1 - tinyurl.comを使ってURLを短縮する
(Nested
Flatten)
こういうことですか?
1 2 | "http://tinyurl.com/api-create.php?url=http://ll.jus.or.jp/2008/info/xgihyo"からHTTPデータ取得
それを"http:\/\/tinyurl.com\/[a-z0-9-]+"で正規表現マッチして表示
|
環境変数の取得
(Nested
Flatten)
なでしこには「環境変数取得」「環境変数展開」の二つが標準命令にあります。
1 2 | "PATH"の環境変数取得して表示
"%TMP%"の環境変数展開して表示
|
クリップボードへの転送
(Nested
Flatten)
なでしこでは「コピー」でクリップボードにコピー、「クリップボード取得」でクリップボードを取得できます。
1 2 3 4 | # クリップボードにコピー
「Hello World」をコピー
# クリップボードから取得
クリップボード取得して表示
|
なでしこでは、変数「クリップボード」でクリップボードの読み書きが出来ます。
また、命令としても、クリップボードからの取り出しには「クリップボード取得」、転送には「コピー」が使用できます。
1 2 3 4 5 | クリップボードは「変数経由」
クリップボード取得して表示
「命令経由」をコピー
クリップボードを表示
|
比較しないソートの作成
(Nested
Flatten)
こんな感じでしょうか。配列と最小値だけ必要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 | ●sort(data,min)
tmpとは配列
bufとは配列
iとは整数
dataを反復
tmp[対象-min]=tmp[対象-min]+1
iで0から(tmpの配列要素数)-1まで繰り返す
(tmp[i])回
bufにi+minを配列追加
bufで戻る
a="-1 9 4 8 9 6 3 9 5 2"を" "で区切る
sort(a,-1)を表示
|
コメントの削除
(Nested
Flatten)
一行コメントに「##'’」と「//」、複数行コメントに「/**/」、文字列リテラルに「」、『』、""、``と結構種類がありますが、思ったほど面倒ではありませんでした。
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 | ●コメント削除(TEXTの|TEXTを)
ONELINEとは整数=0
MULTILINEとは整数=0
LITERALとは整数=0
SKIP_FLAGとは整数=0
BUFとは配列
TMPとは配列=TEXTを文字列分解
TMPを反復
#一文字飛ばす
もし(SKIP_FLAG=1)ならば
SKIP_FLAG=0
続ける
#文字列リテラル内
もし(LITERAL=1)ならば
もし(対象=「"」||対象=「`」||対象="」"||対象="』"||対象="」")ならば
LITERAL=0
違えば
もし(対象=「"」||対象=「`」||対象="「"||対象="『"||対象="「")ならば
LITERAL=1
#文字列リテラル外
もし(LITERAL=0)ならば
#一行コメント
もし(ONELINE=1)ならば
もし(対象=改行)ならば
ONELINE=0
違えば
続ける
違えば
#「##'’」形式
もし(対象="#"||対象="#"||対象="'"||対象="’")ならば
ONELINE=1
続ける
#「//」形式
もし(対象="/"&&TMP[回数]="/")ならば
ONELINE=1
SKIP_FLAG=1
続ける
#複数行コメント
もし(MULTILINE=1)ならば
#コメント閉じ
もし(対象="*"&&TMP[回数]="/")ならば
MULTILINE=0
SKIP_FLAG=1
続ける
違えば
#コメント開始
もし(対象="/"&&TMP[回数]="*")ならば
MULTILINE=1
SKIP_FLAG=1
続ける
BUFに対象を配列追加
BUFを""で配列結合で戻る
TEXT=「a=a*b/c//test
"hello,world /*test*/#test"を表示 # comment
/* comment */」
TEXTをコメント削除して表示
|
設定ファイルから値を取得
(Nested
Flatten)
上、言語を選び損ねましたorz
標準のINI関数ではセクションがないと値を取得できないので、セクションがないファイルの場合は「ハッシュ変換」を使うと便利です。
ShowPrice.ini name=りんご cost=200
1 2 3 4 5 6 7 8 9 10 | ●ShowPrice
tmpとは文字列
nameとは文字列
costとは文字列
tmp="{母艦パス}ShowPrice.ini"を開いてハッシュ変換
name=tmp@"name"
cost=tmp@"cost"
"「{name}」は{cost * 1.05}円(税込み)"を表示
ShowPrice
|
ミリ秒まで含んだ時刻文字列
(Nested
Flatten)
WinAPIのGetLocalTimeを使っています。
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 | ●GetLocalTime({参照渡}LPSYSTEMTIME) =DLL("kernel32.dll","VOID GetLocalTime(LPSYSTEMTIME)")
●詳細時刻取得
SYSTEMTIMEとは文字列
Iとは整数
BUFとは配列
SYSTEMTIMEに16を確保 //16bit*8[byte]
GetLocalTime(SYSTEMTIME)
Iで0から7まで繰り返す
BUF[I]=SYSTEMTIMEの(I*2+1)を"WORD"でバイナリ取得
BUFで戻る
●時刻整形(T)
BUFとは文字列
Iとは整数
T[0]=T[0]を4でゼロ埋め //年
T[7]=T[7]を3でゼロ埋め //ミリ秒
Iで1から6まで繰り返す
T[I]=T[I]を2でゼロ埋め
T[0]&T[1]&T[3]&T[4]&T[5]&T[6]&"."&T[7]で戻る
#"{T[0]}年{T[1]}月{T[3]}日{T[4]}時{T[5]}分{T[6]}.{T[7]}秒"で戻る
テストエディタとはエディタ
その幅は200
1の間
テストエディタ=時刻整形(詳細時刻取得)
0秒待つ
|
自分自身のファイル名を知る方法
(Nested
Flatten)
99yenさんのものだとパスも表示されてしまうので。
1 | コマンドライン[0]からファイル名抽出を表示
|
1 2 3 4 | // ファイルのパス
コマンドライン[0]を表示
// なでしこインタプリタのパス
ナデシコランタイムパスを表示
|
文字変換表に基く文字列の変換
(Nested
Flatten)
next >>
手を抜いて、正規表現で拡張版。
1 2 3 4 5 | ●trex(s,a,b)
sの"[{a}]"を"[{b}]"へ正規表現入換
trex("typewriter","a-z","A-Z")
表示
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ●tr(s,a,b)
oldとは配列 = aを文字列分解
newとは配列 = bを文字列分解
Iとは整数。ENDとは整数
もし(要素数(old)>要素数(new))ならば
END = 要素数(new) - 1
違えば
END = 要素数(old) - 1
Iで0からENDまで繰り返す
s = sのold[I]をnew[I]に置換
sで戻る
tr("typewriter","qwertyuiop","QWERTYUIOP")
表示
|





99yen
#7779()
[
なでしこ
]
Rating0/0=0.00
1万回ループの無限級数(1-1/3+1/5-1/7…)で三桁の精度です。
# 組み込みPI PIを表示 # 無限級数 a=1 nで1から10000まで繰り返す a=a+(-1^n)*(1/(2*n+1)) a*4を表示 # モンテカルロ法 t=10000 m=10000 a=0 nで0からtまで繰り返す もし(HYPOT(mの乱数/m,mの乱数/m))<1ならば a=a+1 a*4/tを表示Rating0/0=0.00-0+
[ reply ]