How to resolve the algorithm Determine if a string is collapsible step by step in the F# programming language
How to resolve the algorithm Determine if a string is collapsible step by step in the F# programming language
Table of Contents
Problem Statement
Determine if a character string is collapsible. And if so, collapse the string (by removing immediately repeated characters).
If a character string has immediately repeated character(s), the repeated characters are to be deleted (removed), but not the primary (1st) character(s).
An immediately repeated character is any character that is immediately followed by an identical character (or characters). Another word choice could've been duplicated character, but that might have ruled out (to some readers) triplicated characters ··· or more.
{This Rosetta Code task was inspired by a newly introduced (as of around November 2019) PL/I BIF: collapse.}
In the following character string:
Only the 2nd t, e, and l are repeated characters, indicated by underscores (above), even though they (those characters) appear elsewhere in the character string.
So, after collapsing the string, the result would be:
Another example: In the following character string:
The "collapsed" string would be:
Write a subroutine/function/procedure/routine··· to locate repeated characters and collapse (delete) them from the character string. The character string can be processed from either direction.
Show all output here, on this page:
Use (at least) the following five strings, all strings are length seventy-two (characters, including blanks), except the 1st string:
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Determine if a string is collapsible step by step in the F# programming language
Source code in the fsharp programming language
// Collapse a String. Nigel Galloway: June 9th., 2020
//As per the task description a function which 'determines if a character string is collapsible' by testing if any consecutive characters are the same.
let isCollapsible n=n|>Seq.pairwise|>Seq.tryFind(fun(n,g)->n=g)
//As per the task description a function which 'if the string is collapsable, collapses the string (by removing immediately repeated characters).
let collapse n=match isCollapsible n with
Some _->let i=Seq.head n
let fN=let mutable g=i in (fun n->if n=g then false else g<-n; true)
let g=System.String([|yield i;yield! Seq.tail n|>Seq.filter fN|])
printfn "<<<%s>>> (length %d) colapses to <<<%s>>> (length %d)" n n.Length g g.Length
| _->printfn "<<<%s>>> (length %d) does not colapse" n n.Length
collapse ""
collapse "\"If I were two-faced, would I be wearing this one?\" --- Abraham Lincoln "
collapse "..1111111111111111111111111111111111111111111111111111111111111117777888"
collapse "I never give 'em hell, I just tell the truth, and they think it's hell. "
collapse " --- Harry S Truman "
collapse "withoutConsecutivelyRepeatedCharacters"
You may also check:How to resolve the algorithm Mandelbrot set step by step in the Phix programming language
You may also check:How to resolve the algorithm Pseudo-random numbers/Splitmix64 step by step in the C++ programming language
You may also check:How to resolve the algorithm Numerical integration step by step in the PicoLisp programming language
You may also check:How to resolve the algorithm Euler's sum of powers conjecture step by step in the EasyLang programming language
You may also check:How to resolve the algorithm FizzBuzz step by step in the Never programming language