6 people like it.
Like the snippet!
String Manipulation
hackthissite.org programming level 12, string manipulation.
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:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
|
(* Hackthissite.org Programming level 12.
Problem text:
This level is about string manipulation.
In this challenge, you will be given a string.
Take all the numbers from the string and classify them as
composite numbers or prime numbers.
You should assume all numbers are one digit, and neither
number 1 nor number 0 counts.
Find the sum of every composite number,
then find the sum of every prime number.
Multiply these sums together.
Then, take the first 25 non-numeric characters of
the given string and increment their ASCII value by one
(for example, # becomes $).
Take these 25 characters and concatenate the product to them.
This is your answer.
Your answer should look like this: oc{lujxdpb%jvqrt{luruudtx140224
Summarised algorithm.
1. extract single numbers from string excluding 1 and 0
2. classify sequence as prime or composite.
3. sum primes and sum composites, multiply result
4. take first 25 non-numeric chars, increment ascii value by 1.
5. concat product from step 3 to the value of step 4.
*)
let strToInts : string -> int seq = Seq.map int
(* ignoring '0' and '1' *)
let isValidNumber d = d > 49 && d < 58
let extractNumbers str =
strToInts str
|> Seq.filter isValidNumber
|> Seq.map (char >> string >> int)
(* since we only need 2..9 lets just hardcode this *)
let isPrime d =
[2; 3; 5; 7] |> Seq.exists ((=) d)
type numberType = Prime of int | Compo of int
let extractNumberTypes xs =
xs |> Seq.map (fun x -> if isPrime x then Prime x else Compo x)
let getNumberType f xs = xs |> Seq.filter f
let prime = function Prime x -> true | _ -> false
let compo = function Compo x -> true | _ -> false
let extractCompos xs = xs |> getNumberType compo
let extractPrimes xs = xs |> getNumberType prime
let f (Prime x | Compo x) = x
let sum = Seq.fold (fun acc elem -> f elem + acc) 0
let numbers = extractNumbers >> extractNumberTypes
let calculateSumProduct input =
let numbers' = numbers input
let compos = extractCompos numbers'
let primes = extractPrimes numbers'
sum compos * sum primes
let takeFirst25NonNumeric (xs : string) =
xs |> Seq.choose (fun x -> if int x > 47 && int x < 58 then None else Some x)
|> Seq.take 25
let incrementAsciiByOne (xs : char seq) =
xs |> Seq.map (fun x -> char <| int x + 1)
let toString : char seq -> string = Seq.map string >> String.concat ""
(* we send this to clipboard as site has a 5 second timelimit to give answer. *)
let generateAnswer input =
input
|> takeFirst25NonNumeric
|> incrementAsciiByOne
|> toString
|> fun result -> result ^ (calculateSumProduct input |> string)
|> System.Windows.Forms.Clipboard.SetText
generateAnswer "@yfe1ihmjbm@4shk$@jn8i5udt@w3ytg9$adra293ll@#1$boxeust8fe56ra41fu$ckfo9cuic0nk9c2xp2qmt$8d#bksgtuvss4tmw8bs91axn7gbyuz1kwewon0matt?rnk0q1jl3ml7tcya0pmir13ekm@z@v#uonxfo?vxa6d@#eg09rqlkqc3vwb#jcshizhh5w83jc9czsljzji46dapl$h8g#rny1lwcddh8m07xt8s$xngvzg2rwnedz1xxa2rey4t@4fvj0m?#l1rkf1@ox#2rsbpt7hdftltp9om26kd@xb@tvet25$j1f5dx3pfur$e3asyzv0tm9rseu2iogusr0z#hjyui35i4oeu?1qu8nio@tmgv7qigar5j#1mx707mxobh23i7wp#fn77f#bry$@#20h4w31bdnhs5woyupo3h@8gd8ukoqjnn41q9ekjy07fp4v761wqkck7ex#$q$gm82o#tmh3c7#1ju@j9p2t3m#qp5o4hnmy5enye48om?z5#hfhbc05yugmx57j3n3$gi?0rebwxdehtc$e431ldvy?v1xtej3mxxploweuyprfwnn0@#6l?tyss2m@8ge9rgq@#o0g5@s@ox7cdz181tcq4?f#i"
|
val strToInts : (string -> seq<int>)
Full name: Script.strToInts
Multiple items
val string : value:'T -> string
Full name: Microsoft.FSharp.Core.Operators.string
--------------------
type string = System.String
Full name: Microsoft.FSharp.Core.string
Multiple items
val int : value:'T -> int (requires member op_Explicit)
Full name: Microsoft.FSharp.Core.Operators.int
--------------------
type int = int32
Full name: Microsoft.FSharp.Core.int
--------------------
type int<'Measure> = int
Full name: Microsoft.FSharp.Core.int<_>
Multiple items
val seq : sequence:seq<'T> -> seq<'T>
Full name: Microsoft.FSharp.Core.Operators.seq
--------------------
type seq<'T> = System.Collections.Generic.IEnumerable<'T>
Full name: Microsoft.FSharp.Collections.seq<_>
module Seq
from Microsoft.FSharp.Collections
val map : mapping:('T -> 'U) -> source:seq<'T> -> seq<'U>
Full name: Microsoft.FSharp.Collections.Seq.map
val isValidNumber : d:int -> bool
Full name: Script.isValidNumber
val d : int
val extractNumbers : str:string -> seq<int>
Full name: Script.extractNumbers
val str : string
val filter : predicate:('T -> bool) -> source:seq<'T> -> seq<'T>
Full name: Microsoft.FSharp.Collections.Seq.filter
Multiple items
val char : value:'T -> char (requires member op_Explicit)
Full name: Microsoft.FSharp.Core.Operators.char
--------------------
type char = System.Char
Full name: Microsoft.FSharp.Core.char
val isPrime : d:int -> bool
Full name: Script.isPrime
val exists : predicate:('T -> bool) -> source:seq<'T> -> bool
Full name: Microsoft.FSharp.Collections.Seq.exists
type numberType =
| Prime of int
| Compo of int
Full name: Script.numberType
union case numberType.Prime: int -> numberType
union case numberType.Compo: int -> numberType
val extractNumberTypes : xs:seq<int> -> seq<numberType>
Full name: Script.extractNumberTypes
val xs : seq<int>
val x : int
val getNumberType : f:('a -> bool) -> xs:seq<'a> -> seq<'a>
Full name: Script.getNumberType
val f : ('a -> bool)
val xs : seq<'a>
val prime : _arg1:numberType -> bool
Full name: Script.prime
val compo : _arg1:numberType -> bool
Full name: Script.compo
val extractCompos : xs:seq<numberType> -> seq<numberType>
Full name: Script.extractCompos
val xs : seq<numberType>
val extractPrimes : xs:seq<numberType> -> seq<numberType>
Full name: Script.extractPrimes
val f : numberType -> int
Full name: Script.f
val sum : (seq<numberType> -> int)
Full name: Script.sum
val fold : folder:('State -> 'T -> 'State) -> state:'State -> source:seq<'T> -> 'State
Full name: Microsoft.FSharp.Collections.Seq.fold
val acc : int
val elem : numberType
val numbers : (string -> seq<numberType>)
Full name: Script.numbers
val calculateSumProduct : input:string -> int
Full name: Script.calculateSumProduct
val input : string
val numbers' : seq<numberType>
val compos : seq<numberType>
val primes : seq<numberType>
val takeFirst25NonNumeric : xs:string -> seq<char>
Full name: Script.takeFirst25NonNumeric
val xs : string
val choose : chooser:('T -> 'U option) -> source:seq<'T> -> seq<'U>
Full name: Microsoft.FSharp.Collections.Seq.choose
val x : char
union case Option.None: Option<'T>
union case Option.Some: Value: 'T -> Option<'T>
val take : count:int -> source:seq<'T> -> seq<'T>
Full name: Microsoft.FSharp.Collections.Seq.take
val incrementAsciiByOne : xs:seq<char> -> seq<char>
Full name: Script.incrementAsciiByOne
val xs : seq<char>
val toString : (seq<char> -> string)
Full name: Script.toString
module String
from Microsoft.FSharp.Core
val concat : sep:string -> strings:seq<string> -> string
Full name: Microsoft.FSharp.Core.String.concat
val generateAnswer : input:string -> unit
Full name: Script.generateAnswer
val result : string
namespace System
namespace System.Windows
namespace System.Windows.Forms
type Clipboard =
static member Clear : unit -> unit
static member ContainsAudio : unit -> bool
static member ContainsData : format:string -> bool
static member ContainsFileDropList : unit -> bool
static member ContainsImage : unit -> bool
static member ContainsText : unit -> bool + 1 overload
static member GetAudioStream : unit -> Stream
static member GetData : format:string -> obj
static member GetDataObject : unit -> IDataObject
static member GetFileDropList : unit -> StringCollection
...
Full name: System.Windows.Forms.Clipboard
System.Windows.Forms.Clipboard.SetText(text: string) : unit
System.Windows.Forms.Clipboard.SetText(text: string, format: System.Windows.Forms.TextDataFormat) : unit
More information