Best shuffle: Difference between revisions

m (→‎{{header|Sidef}}: minor code simplifications)
Line 1,263:
#define system'routines.
#define extensions.
 
// --- shuffle ---
 
#symbol shuffle = (:aLiteral)
[
#var aLength := aLiteral length.
#var aShuffled := literalControlconvertor toArray:aLiteral.
 
control forrangeseek &int:0 &int::(aLength-1) &doevery: (&intindex:i)
[
#var aChar := aLiteral@i.
(aChar == (aShuffled@i)) ?
[
control forrangerun &int:0 &int::(aLength-1) &doforEvery: (&intindex:j)
[
#var anAltChar := aShuffled@j.
((anAltChar != aChar)and:[ anAltChar != (aLiteral@i) ]and:[aChar != (aLiteral@j)]) ?
[
arrayControlaShuffled~indexable exchange:i &with:j &in:aShuffled.
#break^ true.
].
].
].
^ false.
].
 
^ control run:aShuffled &forEach:(Summing new:(String new) foreach:aShuffled) literal.
].
 
// --- ShuffleScore ---
 
#symbol scoreShuffle = (:anOriginal:aShuffled)
Line 1,298 ⟶ 1,296:
#var aScore := Integer new.
control forrangerun &int:0 &int:(anOriginal length - 1) &doforEvery: (&intindex:i)
[ ((anOriginal @ i) == (aShuffled @ i)) ? [ aScore += 1. ]. ].
^ aScore value.
].
 
// --- Program ---
 
#symbol program =
[
control foreachrun:("abracadabra", "seesaw", "grrrrrr", "pop", "up", "a") &doforEach: aWord
[
#var aShuffled := shuffle:aWord.
Anonymous user