Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- open System
- open Microsoft.FSharp.Collections
- let rec f1 n =
- if n = 1 then 1
- else if n = 2 then 2
- else f1 (n - 1) * f1 (n - 2)
- let rec fib n =
- if n = 0 then 0
- else if n = 1 then 1
- else fib(n-2) + fib(n-1)
- let f2 (s:string) : char =
- s.ToUpper() |> Seq.countBy id |> Seq.maxBy snd |> fst
- let makeSeq (b:float) : seq<float> =
- (b, 1.) |> Seq.unfold (fun (x, y) -> Some (x, (x-1./sqrt(y), y+1.)))
- let f3(k:int, lst: seq<float>) : List<float> =
- lst |> Seq.filter(fun (x) -> x < 0.) |> Seq.take(k) |> Seq.toList
- let f4 =
- seq { 1 .. 1000 } |> Seq.filter(fun (x) -> x % 3 = 0 && x % 5 = 0) |> Seq.toList
- let rec gcd a b =
- match b with
- | _ when b = 0 -> a
- | _ -> gcd b (a % b)
- let lcm a b =
- a * b / gcd a b
- let f5 =
- Seq.reduce (lcm) [1..20]
- let ispalindrom (s:string):bool =
- s = (s |> (fun x -> new string(x.ToCharArray() |> Array.rev)))
- let f6 =
- seq { 1 .. 1000 } |> Seq.filter(fun (x) -> ispalindrom(x.ToString()) && ispalindrom(Convert.ToString(x, 2))) |> Seq.fold (+) 0
- let generate n =
- let m = 1 <<< n
- { 0 .. m-1 } |> Seq.map(fun(x) ->
- let s_2 = Convert.ToString(x, 2)
- let s = String.replicate(n-s_2.Length) "0"
- s+s_2 |> Seq.map(fun(x) -> x='1') |> Seq.toList) |> Seq.toList
- let rec istrue (lst : List<bool>) : bool =
- match lst with
- | _ when lst.Tail.Tail <> [] -> istrue(lst.Tail) && (not(lst.Head && lst.Tail.Head) || (lst.Tail.Tail.Head))
- | _ when lst.Tail.Tail = [] -> true
- let f10 (lst : List<List<bool>>) : int =
- let rec loop lst acc =
- match lst with
- | head::tail -> loop tail acc + Convert.ToInt32(istrue(head));
- | [] -> acc
- loop lst 0
- //y_n = y_(n-1) + fib(n+1)
- let rec f10_fib (n : int) : int =
- match n with
- | 2 -> 4
- | n -> f10_fib(n-1) + fib(n+1)
- let rec extractDigits acc input =
- if input <= 9 then input::acc
- else extractDigits (input % 10::acc) (input/10)
- let sumOfSquares input =
- input
- |> List.fold(fun acc i -> acc + i*i) 0
- let sumOfSqr input =
- input
- |> List.fold(fun acc i -> acc + i) 0
- let rec sum85 input =
- if input = 85 then true
- else if input = 1 || input = 4 then false
- else
- let newInput =
- input
- |> extractDigits List.empty
- |> sumOfSquares
- sum85 newInput
- let makeArithmeticSeq a_1 d =
- a_1 |> Seq.unfold (fun x -> Some (x, x+d))
- let get_a_n (sq:seq<int>, n:int)
- a_n = Seq.take(1)
- let f7 (a_1:int, d:int, n:int) : int =
- a_1 |> Seq.unfold (fun x -> Some (x, x+d)) |> Seq.take(n) |> Seq.sum
- let rec f8 input =
- if input >= 0 && input < 10 then input
- else let newInput =
- input
- |> extractDigits List.empty
- |> sumOfSqr
- f8 newInput
- let f9 =
- seq {10..99} |> Seq.filter(fun (x) -> sum85 (x)) |> Seq.min
- [<EntryPoint>]
- let main argv =
- Console.WriteLine(f1(6))
- let list3 = f3(3, makeSeq(4.))
- printf "%A" list3
- Console.WriteLine()
- Console.WriteLine(f2("AAAAABbbbbbCC"))
- let list4 = f4
- printf "%A" list4
- Console.WriteLine()
- Console.WriteLine(f5)
- Console.WriteLine(f6)
- let list7 = generate 3
- printf "%A" list7
- Console.WriteLine()
- let n = 13
- Console.WriteLine(f10_fib(n))
- Console.WriteLine(f10(generate n))
- (*
- [10..99]
- |> List.filter(fun i -> sum85 i)
- |> List.iter(fun i -> printfn "%d" i)
- *)
- (*
- let ap = 2 |> Seq.unfold (fun x -> Some (x, x+3)) |> Seq.take(10) |> Seq.toList
- printf "%A" ap
- *)
- Console.WriteLine(f7 (2, 3, 5))
- Console.WriteLine(f8 65536)
- Console.WriteLine(f9)
- Console.ReadKey()
- 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement