Determine if a string is collapsible: Difference between revisions

Content added Content deleted
m (→‎{{header|Vlang}}: Improve. Does not appear to have collapsed the emoji string)
(→‎{{header|Vlang}}: Fixed emoji problem.)
Line 3,684: Line 3,684:


=={{header|Vlang}}==
=={{header|Vlang}}==
{{improve|Vlang|Does not appear to have actually collapsed the emoji string}}
{{trans|Go}}
{{trans|Go}}
<lang vlang>// Returns collapsed string, original and new lengths in
<lang vlang>// Returns collapsed string, original and new lengths in
// unicode code points (not normalized).
// unicode code points (not normalized).
fn collapse(s string) (string, int, int) {
fn collapse(s string) (string, int, int) {
mut r := s
mut r := s.runes()
le, mut del := r.len, 0
le, mut del := r.len, 0
for i := le - 2; i >= 0; i-- {
for i := le - 2; i >= 0; i-- {
if r[i] == r[i+1] {
if r[i] == r[i+1] {
r.delete(i)
r = r[..i]+r[i+1..]
del++
del++
}
}
Line 3,701: Line 3,700:
}
}
r = r[..le-del]
r = r[..le-del]
return r, le, r.len
return r.string(), le, r.len
}
}
Line 3,749: Line 3,748:
collapsed: length = 7, string = «««ardvark»»»
collapsed: length = 7, string = «««ardvark»»»


original : length = 32, string = «««😍😀🙌💃😍😍😍🙌»»»
original : length = 8, string = «««😍😀🙌💃😍😍😍🙌»»»
collapsed: length = 32, string = «««😍😀🙌💃😍😍😍🙌»»»
collapsed: length = 6, string = «««😍😀🙌💃😍🙌»»»
</pre>
</pre>