スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#雑記 チャンパーナウン数

 BLUEPIXYさんのところの記事をみてやってみました。 
問題は12345678910111213...という列で10000の数は何かというものです。 
 
Seq.unfoldを利用してやってみてます。 
 
> let f (num:int,numCharArr:char[],arrSize:int,arrIndex:int) = 
    if arrIndex < arrSize - 1 then 
        Some (numCharArr.[arrIndex],(num,numCharArr,arrSize,arrIndex+1)) 
    else 
        let newNumCharArr = (num+1).ToString().ToCharArray() 
        Some (numCharArr.[arrIndex],(num + 1 , newNumCharArr ,Array.length newNumCharArr,0)) 
 
 
let numCharSeq = Seq.unfold f (1,[|'1'|],1,0);; 
 
val f : 
  int * char [] * int * int -> (char * (int * char [] * int * int)) option 
val numCharSeq : seq<char> 
 
最初の120項を表示してみます。 
 
> Seq.iter (fun x -> printf "%c:" x) (Seq.take 120 numCharSeq );; 
1:2:3:4:5:6:7:8:9:1:0:1:1:1:2:1:3:1:4:1:5:1:6:1:7:1:8:1:9:2:0:2:1:2:2:2:3:2:4:2:5:2:6:2:7:2:8:2:9:3:0:3:1:3:2:3:3:3:4:3:5:3:6:3:7:3:8:3:9:4:0:4:1:4:2:4:3:4:4:4:5:4:6:4:7:4:8:4:9:5:0:5:1:5:2:5:3:5:4:5:5:5:6:5:7:5:8:5:9:6:0:6:1:6:2:6:3:6:4:6:val it : unit = () 
 
引数番目の数字を求める関数を定義します。(最初が1番目、次が2番目という数え方をします。) 
 
> let getNth n = 
    Seq.nth (n-1) numCharSeq;; 
 
val getNth : int -> char 
 
使ってみます。 
 
> getNth 1;; 
val it : char = '1' 
> getNth 2;; 
val it : char = '2' 
> getNth 11;; 
val it : char = '0' 
 
では目標の10000番目を求めてみます。 
 
> getNth 10000;; 
val it : char = '7' 
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

trackback


この記事にトラックバックする(FC2ブログユーザー)

チャンパーナウン数再び

【F#】チャンパーナウン数再び

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。