Comment detail

アルファベットの繰り上がり (Nested Flatten)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
open System;;
open Char;;
open String;;
open List


let transAlph n =
    let zero = (code 'A')-1 in
    let rec base26 = function
        | 0 -> []
        | m when m%26 = 0 -> (base26 (m/26))
        | m -> (m%26)::(base26 ((m-m%26)/26)) in
    String.concat "" (map (fun x -> of_char (chr (zero+x))) (base26 n));;

printf "%s\n" (String.concat "," (map transAlph (init 100 (fun x->x+1))));;
ヤバイ。完璧間違えてます。
修正版
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
open System;;
open Char;;
open String;;
open List


let transAlph n =
    let base = 26 in
    let zero = (code 'A')-1 in
    let rec transBase results = function
        | m when m <= base -> m::results
        | m when m%base = 0 -> transBase results (m/base)
        | m -> transBase ((m%base)::results) ((m-m%base)/base) in
    String.concat "" (map (fun x -> of_char (chr (zero+x))) (transBase [] n));;

printf "%s\n" (String.concat "," (map transAlph (init 100 (fun x->x+1))));;

Index

Feed

Other

Link

Pathtraq

loading...