Split a character string based on change of character: Difference between revisions

Add Jsish
(Add Jsish)
Line 820:
Using the -r ("raw output") command-line option of jq:
<pre>g, HHH, 5, YY, ++, ///, \</pre>
 
=={{header|Jsish}}==
Showing off a little unit testing...
 
Starting with
<lang javascript>#!/usr/bin/env jsish
;'Split a string based on change of character, in Jsish';
 
function splitOnChange(str:string):string {
if (str.length < 2) return str;
var last = str[0];
var result = last;
for (var pos = 1; pos < str.length; pos++) {
(last == str[pos]) ? result += last : result += ', ' + str[pos];
last = str[pos];
}
return result;
}
provide('splitOnChange', 1.0);
 
/* literal backslash needs escaping during initial processing */
;splitOnChange('gHHH5YY++///\\');
;splitOnChange('a');
;splitOnChange('ab');
;splitOnChange('aaa');
;splitOnChange('aaaba');
;splitOnChange('gH HH5YY++//,/\\');</lang>
 
Then
<pre>
prompt$ jsish -u -update true splitOnChange.jsi
Created splitOnChange.jsi</pre>
 
Giving
 
<lang javascript>#!/usr/bin/env jsish
;'Split a string based on change of character, in Jsish';
 
function splitOnChange(str:string):string {
if (str.length < 2) return str;
var last = str[0];
var result = last;
for (var pos = 1; pos < str.length; pos++) {
(last == str[pos]) ? result += last : result += ', ' + str[pos];
last = str[pos];
}
return result;
}
provide('splitOnChange', 1.0);
 
/* literal backslash needs escaping during initial processing */
;splitOnChange('gHHH5YY++///\\');
;splitOnChange('a');
;splitOnChange('ab');
;splitOnChange('aaa');
;splitOnChange('aaaba');
;splitOnChange('gH HH5YY++//,/\\');
 
/*
=!EXPECTSTART!=
'Split a string based on change of character, in Jsish'
splitOnChange('gHHH5YY++///\') ==> g, HHH, 5, YY, ++, ///, \
splitOnChange('a') ==> a
splitOnChange('ab') ==> a, b
splitOnChange('aaa') ==> aaa
splitOnChange('aaaba') ==> aaa, b, a
splitOnChange('gH HH5YY++//,/\') ==> g, H, , HH, 5, YY, ++, //, ,, /, \
=!EXPECTEND!=
*/</lang>
 
Which tests as:
 
<pre>prompt$ jsish -u splitOnChange.jsi
[PASS] splitOnChange.jsi</pre>
 
And then satisfying the task of showing the one result, using the script as a module:
 
{{out}}
<pre>prompt$ jsish
Jsish interactive: see 'help [cmd]'. \ cancels > input. ctrl-c aborts running script.
# require('splitOnChange');
1
# puts(splitOnChange('gHHH5YY++///\\'));
g, HHH, 5, YY, ++, ///, \</pre>
 
=={{header|Julia}}==
Anonymous user