Advertisement
baratiistok3

some of

Apr 6th, 2020
3,011
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 9.08 KB | None | 0 0
  1. // Learn more about F# at http://fsharp.org
  2.  
  3. open System
  4. open System.Collections.Generic
  5. // 1)
  6. let IsEven a =
  7.     a%2=0
  8.  
  9.  
  10.  
  11. // 2)
  12. let FindEvenNumbers a =
  13.     let evenOnlyList = List.filter(IsEven) a
  14.     evenOnlyList
  15.  
  16.  
  17. // 3)
  18. let first100EvenNumberSum =
  19.     let nums = FindEvenNumbers [1..200]
  20.     List.sum nums
  21.  
  22. // 4)
  23. let IsOdd a =
  24.     a%2=1
  25.  
  26. let FindOddNumbers a =
  27.     let oddOnlyList = List.filter(IsOdd) a
  28.     oddOnlyList
  29.  
  30. let differenceOfSquares a =
  31.     let odds = FindOddNumbers a
  32.     let evens = FindEvenNumbers a
  33.     let oddSqure = List.map(fun x -> x*x) odds
  34.     let evenSquare = List.map(fun x -> x*x) evens
  35.     let diff = List.sum(oddSqure) - List.sum(evenSquare)
  36.     printfn "%d" diff
  37.  
  38.  // 5)
  39. let everyOtherChar a:List<char>=
  40.     let list = Seq.toList a
  41.     let ret = new List<char>()
  42.     for i in [0..2..list.Length] do
  43.         ret.Add(list.[i])
  44.     ret    
  45.  
  46. // 6)
  47. let delItem (a : List<int>) (b:int) =
  48.     a.Remove(b)
  49.     ()
  50.  
  51. let FindAllPrimesUpTo n=
  52.     let nums = [2..n]
  53.     let numbers = new List<int>()
  54.     List.iter ( fun x -> numbers.Add(x)) nums
  55.     let primes = new List<int>()
  56.     while numbers.Count > 0 do
  57.         let prime = numbers.[0]
  58.         primes.Add prime
  59.         numbers.Remove(prime)
  60.         let nums = [prime..prime..n]
  61.         List.iter(fun x-> delItem numbers x) nums
  62.     List.ofSeq(primes);
  63.  
  64. // 7)
  65. let SumPrimeDifferencesUpTo n =
  66.     let primes = FindAllPrimesUpTo 1000
  67.     let h = primes.[..primes.Length-2]
  68.     let t = primes.Tail
  69.     let pairs = List.zip h t
  70.     let ret = List.sumBy(fun x -> snd x - fst x) pairs
  71.     ret
  72.  
  73. // 8)
  74. let FindNthPrime n=
  75.     let max = 10000
  76.     let nums = [2..max]
  77.     let numbers = new List<int>()
  78.     List.iter ( fun x -> numbers.Add(x)) nums
  79.     let mutable prime = 0;
  80.     for i in [1..n] do
  81.         let p = numbers.[0]
  82.         let _ = numbers.Remove(p)
  83.         let nums = [p..p..max]
  84.         List.iter(fun x-> delItem numbers x) nums
  85.         prime <- p        
  86.     prime
  87.  
  88. // 9)
  89. type Gender =
  90.     | Male
  91.     | Female
  92. type Person =
  93.     {
  94.         FirstName: string
  95.         LastName: string
  96.         Age: int
  97.         Gender: Gender
  98.     }
  99.  
  100. let p1 = {FirstName="Fname1";LastName = "Lastname1"; Age = 10; Gender=Male}
  101. let p2 = {FirstName="Fname2";LastName = "Lastname2"; Age = 20; Gender=Female}
  102. let p3 = {FirstName="Fname3";LastName = "Lastname3"; Age = 30; Gender=Male}
  103. let p4 = {FirstName="Fname4";LastName = "Lastname4"; Age = 50; Gender=Male}
  104. let p5 = {FirstName="Fname5";LastName = "Lastname5"; Age = 40; Gender=Male}
  105. let p6 = {FirstName="Fname6";LastName = "Lastname6"; Age = 30; Gender=Male}
  106.  
  107. let people = [p1;p2;p3;p4;p5;p6]
  108.  
  109.  
  110. let SumOfAllPeoplesAge p=
  111.     List.sumBy(fun x -> x.Age) p
  112.    
  113. // 10)
  114. let FindPeopleAbove p n=
  115.     List.filter(fun x -> x.Age > n) p
  116.  
  117. // 11)
  118. let FindAverageAge p =
  119.     List.averageBy(fun x->float x.Age) people
  120.  
  121. // 12)
  122. let NameInterchange p =
  123.     List.map  (fun x -> {x with
  124.         LastName = x.FirstName
  125.         FirstName = x.LastName}) p;;
  126.  
  127. // 13)
  128. let ChangeName(p,oldName, newName)=
  129.     match oldName with
  130.     | last when last=p.LastName -> {p with LastName = newName}
  131.     | _ -> p
  132.  
  133. let nl = [("Lastname1", "Lastname1mod"); ("Lastname3", "Lmod3")]
  134. let rec ApplyMarrige(namelist:(string * string) list ,people:Person list) =
  135.     if namelist.Length = 0 then
  136.         people
  137.     else
  138.         let n = List.head namelist
  139.         let f = fun p -> (ChangeName(p, fst(n), snd(n)))
  140.         let p = List.map(f) people
  141.         ApplyMarrige(List.tail(namelist), p)
  142.  
  143. // 14)
  144. let ChangeNameFemaleOnly(p,oldName, newName)=
  145.     match oldName with
  146.     | last when last=p.LastName && p.Gender = Female-> {p with LastName = newName}
  147.     | _ -> p
  148.  
  149. let rec ApplyMarrigeFemaleOnly(namelist:(string * string) list ,people:Person list) =
  150.     if namelist.Length = 0 then
  151.         people
  152.     else
  153.         let n = List.head namelist
  154.         let f = fun p -> (ChangeNameFemaleOnly(p, fst(n), snd(n)))
  155.         let p = List.map(f) people
  156.         ApplyMarrige(List.tail(namelist), p)
  157.  
  158. // 15)
  159.  
  160. type Employee =
  161.     | Developer of Person
  162.     | TeamLeader of Person * Person list
  163.     | Manager of Person * Person list list
  164.  
  165. let emp1 = Developer(p1);
  166. let emp2 = Developer(p2);
  167. let tl1 = TeamLeader(p3, [p1; p2])
  168. let tl2 = TeamLeader(p6, [p5;p4;p3])
  169. let man1 = Manager(p1, [[p1];[p2;p3;p4]])
  170.  
  171. let empList = [emp1; emp2; tl1;tl2; man1]
  172.  
  173. let FindPersonWithLargestTeam  (empList: Employee list)=
  174.     let f = function
  175.         |TeamLeader (t, l)  -> Some (t, l.Length)
  176.         |_ -> None
  177.     let teamLeaderswithCount = List.choose(f) empList
  178.     let tmax = List.maxBy(fun x-> snd(x)) teamLeaderswithCount
  179.     fst(tmax)
  180.    
  181. // 16)
  182. let FindLeadersWithOlderTeamMembers (empList: Employee list)=
  183.     let oldest (p: Person list)=
  184.         let max = List.maxBy(fun x-> x.Age) p
  185.         max.Age
  186.     let f = function
  187.         |TeamLeader (t, l)  -> Some (t, l)
  188.         |_ -> None
  189.     let teamLeaders = List.choose(f) empList
  190.     let ret = List.filter(fun x -> (fst(x).Age < oldest(snd(x)))) teamLeaders
  191.     ret
  192.        
  193. // 17)
  194. let FindLeadersWithOlderTeamMembersThan (age:int) (empList: Employee list)=
  195.     let oldest (p: Person list)=
  196.         let max = List.maxBy(fun x-> x.Age) p
  197.         max.Age
  198.     let f = function
  199.         |TeamLeader (t, l)  -> Some (t, l)
  200.         |_ -> None
  201.     let teamLeaders = List.choose(f) empList
  202.     let ret = List.filter(fun x -> (age < oldest(snd(x)))) teamLeaders
  203.     ret
  204.  
  205. // 18)
  206.  
  207.  
  208.  // 19)
  209.  //Non tail recursion can cause stack overflow.
  210.  //Tail recursion is easily optimized by the complier.
  211.  
  212.  
  213. //extra credit 1)
  214.  
  215. type Expr =
  216.     | Var of string
  217.     | Number of float
  218.     | Sum of Expr * Expr
  219.     | Diff of Expr * Expr
  220.     | Mult of Expr * Expr
  221.     | Div of Expr * Expr
  222.  
  223. let x = Var("x")
  224. let y = Var("y")
  225. let n = Number(2.1)
  226. let d1 = Diff(n, x)
  227. let d2 = Diff(d1, y)
  228. let m3 = Mult(d2, n)
  229.  
  230. // 1.1)
  231. let rec Eval2 (env:Map<string, float>, e:Expr) =
  232.     match e with
  233.     | Sum (Number x, Number y) -> Number(x+y)
  234.     | Div (Number x, Number y) -> Number(x/y)
  235.     | Diff (Number x, Number y) -> Number(x-y)
  236.     | Mult (Number x, Number y) -> Number(x*y)
  237.     | Sum (x, Number y) -> Sum(Eval2(env, x), Number y)
  238.     | Div (x, Number y) -> Div(Eval2(env, x), Number y)
  239.     | Diff (x, Number y) -> Diff(Eval2(env, x), Number y)
  240.     | Mult (x, Number y) -> Mult(Eval2(env, x), Number y)
  241.     | Sum (x, y) -> Sum(Eval2(env, x), Eval2(env, y))
  242.     | Div (x, y) -> Div(Eval2(env, x), Eval2(env, y))
  243.     | Diff (x, y) -> Diff(Eval2(env, x), Eval2(env, y))
  244.     | Mult (x, y) -> Mult(Eval2(env, x), Eval2(env, y))
  245.     | Var x -> Number(env.[x])
  246.     | _ -> e
  247.  
  248. let rec Eval (env:Map<string, float>, e:Expr) =
  249.     let d = Eval2(env, e)
  250.     match e with
  251.     | Number x -> x
  252.     | _ -> Eval(env, e)
  253.  
  254. // 1.2)
  255. let rec Subst (s:(string * float) list, e:Expr) =
  256.     let m = Map.ofList(s);
  257.     match e with
  258.     | Var x -> Number(m.[x])
  259.     | Sum(x, y) -> Sum(Subst(s, x), Subst(s, y))
  260.     | Diff(x, y) -> Diff(Subst(s, x), Subst(s, y))
  261.     | Mult(x, y) -> Mult(Subst(s, x), Subst(s, y))
  262.     | Div(x, y) -> Div(Subst(s, x), Subst(s, y))
  263.     | _ -> e
  264. // 1.3)
  265. let rec PrettyPrint e =
  266.     match e with
  267.     | Number x -> x.ToString()
  268.     | Var x -> x
  269.     | Sum(x, y) -> PrettyPrint(x)+"+"+PrettyPrint(y)
  270.     | Diff(x, y) -> PrettyPrint(x)+"-"+PrettyPrint(y)
  271.     | Mult(x, Number y) -> "("+PrettyPrint(x)+")"+"*"+ y.ToString()
  272.     | Mult(x, Var y) -> "("+PrettyPrint(x)+")"+"*"+ y
  273.     | Mult(Number x, y) -> x.ToString()+"*("+PrettyPrint(y)+")"
  274.     | Mult(Var x, y) -> x+"*("+PrettyPrint(y)+")"
  275.     | Mult(x, y) -> "("+PrettyPrint(x)+")"+"*"+"("+PrettyPrint(y)+")"
  276.     | Div(x, Number y) -> "("+PrettyPrint(x)+")"+"/"+y.ToString();
  277.     | Div(x, Var y) -> "("+PrettyPrint(x)+")"+"/"+y;
  278.     | Div(Number x, y) -> x.ToString()+"/("+PrettyPrint(y)+")"
  279.     | Div(Var x, y) -> x+"/("+PrettyPrint(y)+")"
  280.     | Div(x, y) -> "("+PrettyPrint(x)+")"+"/"+"("+PrettyPrint(y)+")"
  281.    
  282. let env =
  283.    [ "x", 1.2;
  284.       "y", 3.6; ]
  285.    |> Map.ofList;;
  286.  
  287. // extra credit 2)
  288.  
  289. type Stack2<'a>=
  290.    val mutable s: 'a list
  291.  
  292.     new () as self =
  293.         self.s <- List.empty
  294.         Stack2()
  295.  
  296.     member self.Clear =
  297.         self.s <- List.Empty
  298.         ()
  299.  
  300.     member self.Peek =
  301.         List.head self.s
  302.  
  303.     member self.Pop =
  304.         let ret = List.head self.s
  305.         self.s <- List.tail self.s
  306.         ret
  307.  
  308.     member self.Push  o=
  309.         self.s <- o :: self.s
  310.         ()
  311.  
  312.     member self.ToArray =
  313.         List.toArray self.s
  314.  
  315.  type Queue2<'a>=
  316.    val mutable q: 'a list
  317.  
  318.     new() as self=
  319.         self.q <- List.empty
  320.         Queue2()
  321.  
  322.     member self.Clear =
  323.         self.q <- List.Empty
  324.         ()
  325.  
  326.     member self.Enqueue o=
  327.         self.q <-  List.append  self.q o
  328.  
  329.     member self.Dequeue =
  330.         let ret = List.head self.q
  331.         self.q <- List.tail self.q
  332.         ret
  333.  
  334.     member self.Peek =
  335.         List.head self.q
  336.  
  337.     member self.ToArray =
  338.         List.toArray self.q
  339.  
  340.     member self.Count =
  341.         List.length
  342.  
  343.  
  344.  
  345. [<EntryPoint>]
  346. let main argv =
  347.    
  348.     0 // return an integer exit code
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement