How to resolve the algorithm Best shuffle step by step in the FutureBasic programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Best shuffle step by step in the FutureBasic programming language

Table of Contents

Problem Statement

Shuffle the characters of a string in such a way that as many of the character values are in a different position as possible. A shuffle that produces a randomized result among the best choices is to be preferred. A deterministic approach that produces the same sequence every time is acceptable as an alternative. Display the result as follows: The score gives the number of positions whose character value did not change.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Best shuffle step by step in the FutureBasic programming language

Source code in the futurebasic programming language

include "Tlbx GameplayKit.incl"
include "NSLog.incl"

local fn ShuffleString( string as CFStringRef ) as CFStringRef
  NSInteger i
  
  CFMutableArrayRef mutArr = fn MutableArrayWithCapacity( 0 )
  for i = 0 to fn StringLength( string ) - 1
    MutableArrayAddObject( mutArr, fn StringSubstringWithRange( string, fn CFRangeMake( i, 1 ) ) )
  next
  CFArrayRef shuffledArr = fn GKRandomSourceArrayByShufflingObjectsInArray( fn GKRandomSourceInit, mutArr )
end fn = fn ArrayComponentsJoinedByString( shuffledArr, @"" )


local fn StringDifferences( string1 as CFStringRef, string2 as CFStringRef ) as NSInteger
  NSInteger i, unchangedPosition = 0
  
  if fn StringLength( string1 ) != fn StringLength( string2 ) then NSLog( @"Strings must be of equal length." ) : exit fn
  
  for i = 0 to fn StringLength( string1 ) -1
    CFStringRef tempStr1 = fn StringSubstringWithRange( string1, fn CFRangeMake( i, 1 ) )
    CFStringRef tempStr2 = fn StringSubstringWithRange( string2, fn CFRangeMake( i, 1 ) )
    if fn StringIsEqual( tempStr1, tempStr2 ) == YES then unchangedPosition++
  next
end fn = unchangedPosition

NSInteger   i, j, count
CFArrayRef  stringArr
CFStringRef originalStr, shuffledStr

stringArr = @[@"abracadabra", @"seesaw", @"elk", @"grrrrrr", @"up", @"a"]
count = fn ArrayCount( stringArr )

for i = 0 to 3
  for j = 0 to count - 1
    originalStr = stringArr[j]
    shuffledStr = fn ShuffleString( stringArr[j] )
    NSLog( @"%@, %@, (%ld)", originalStr, shuffledStr, fn StringDifferences( originalStr, shuffledStr ) )
  next
  NSLog( @"\n" )
next

HandleEvents

  

You may also check:How to resolve the algorithm Non-decimal radices/Output step by step in the Action! programming language
You may also check:How to resolve the algorithm Sorting Algorithms/Circle Sort step by step in the Ruby programming language
You may also check:How to resolve the algorithm Y combinator step by step in the Rust programming language
You may also check:How to resolve the algorithm Substring step by step in the SAS programming language
You may also check:How to resolve the algorithm Loops/Break step by step in the langur programming language