Determine if a string is collapsible: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) 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 = |
original : length = 8, string = «««😍😀🙌💃😍😍😍🙌»»» |
||
collapsed: length = |
collapsed: length = 6, string = «««😍😀🙌💃😍🙌»»» |
||
</pre> |
</pre> |
||