Category Archives: software

Code of the Day: Sentence Scrambler

Task:
There was a study going out a few years ago that said people can read words that are scrambled if the first and last character are left in place. So to help me practice Test Driven Development, I decided program it.
Example:
Correct: “Create attractive offers to reach the right customers”
Scrambled: “Cterae aacrtvitte offres to recah the rghit couemtrss”

For more information about the study visit: Cambridge Word Scramble Study: It’s Fake Already!

Code:

/**
* @author: Larry Battle
* @date: January 2, 2012
* @purpose: Scrambler - to scramble the alphabetical letters in word in such a way to make it still readable and understandable.
* @note: This can be accomplished by have perversing the word order but mixing up every letter in the word except for the first.
*/
var scrambler = {
	scrambleStr : function( str ){
		if( typeof str !== 'string' ){
			return -1;
		}
		return str.replace( /[^\s]*/g, function( word ){			
			return word ? scrambler.scrambleWord( word ) : word;
		});
	},
	scrambleWord :  function( str ){
		if( typeof str !== 'string' ){
			return str;
		}
		str = str.replace( /[a-z]*/ig, function( str2 ){
			if( str2 && str2.length > 2 ){
				str2 = str2.charAt(0) + scrambler.randomizeStr( str2.substring( 1, str2.length - 1 ) ) + str2.charAt( str2.length - 1 );
			}
			return str2;
		});
		return str;
	},
	randomizeStr : function( str ){
		if( typeof str !== 'string' ){
			return str;
		}
		return scrambler.makeArrayRandom( str.split( '' ) ).join( '' );
	},
	makeArrayRandom : function( arr ){
		var j, x, i = arr.length;
		while( i ){
				j = parseInt(Math.random() * i, 10);
				x = arr[--i]; 
				arr[i] = arr[j];
				arr[j] = x;
		}
		return arr;
	}
};

Input:

var str = "I can't believe what I'm reading."
scrambler.scrambleStr( str );

Output: (Possible outcome)

"I can't beilvee waht I'm rndiaeg."

Try it out for yourself.
Demo: Scrambler

Interview Programming Challenge: Print me a tree

Last Thursday I had a interview with a software company. During the interview that asked me write out a program which I was unable to complete within 10 minutes time. But I think am OK because their goal seemed to be to determine how I approached the problem rather than if I could produce a working program.

Anyhow, I decided to finished the program during my spare time in case if it every comes up again. And here it is.

Question: (Not exact wording)
Design a program in any language that will print a tree using only UNICODE or/and ANSI characters. The program should accept user input an integer value to set the base of the tree.
Example:

// base length is 7
   *
  ***
 *****
*******
   *

My Program
I decided to use Groovy and Test Driven Development to solve this problem. After a little bit of thinking I managed to come up with the following two files that create a working program.
Tree.groovy – Program that prints the tree
TreeTest.groovy – Test cases for Tree.groovy

TreeTest.groovy (Test Cases)

/**
* @author Larry Battle
* @date 1/3/2011
* @purpose Provide test cases for the Tree class.
*/
import Tree;
 
class TreeTest extends GroovyTestCase{
    private Tree tree = new Tree();
    private testValues = [
        [baseLength:-1, level:-1, length:0],
        [baseLength:1, level:0, length:1],
	[baseLength:1, level:0, length:1],
	[baseLength:1, level:5, length:0],
        [baseLength:1, level:9, length:0],
        [baseLength:2, level:0, length:1],
        [baseLength:2, level:2, length:1],
	[baseLength:2, level:5, length:0],
	[baseLength:6, level:0, length:1],
	[baseLength:6, level:2, length:5],
        [baseLength:6, level:3, length:6],
        [baseLength:6, level:4, length:1],
        [baseLength:6, level:5, length:0],
        [baseLength:7, level:0, length:1],
        [baseLength:7, level:2, length:5],
        [baseLength:7, level:3, length:7],
        [baseLength:7, level:4, length:1],
        [baseLength:7, level:5, length:0]
    ];
    void testHeight(){
        def vals = [ 0:0, 1:1, 2:3, 3:3, 4:4, 7:5, 40:22 ];
        def msg;
        vals.each{
            msg = "baseLength of {$it.key} should have height of {$it.value}";
            assert tree.getHeight( it.key as short ) == it.value : msg;
        }
    }
    void testTreeBranchLength(){
        def msg; 
        def length;
        testValues.each{ obj ->
            length = tree.getBranchLength( obj.level, obj.baseLength );
            msg = "BaseLength $obj.baseLength at Level $obj.level should be $obj.length, not $length";
            assert length == obj.length : msg;
        }
    }
// Other test cases not included.
}

Tree.groovy

/**
* @author Larry Battle
* @date 1/3/2011
* @purpose Tree Interview Question: Display a tree in ansi format with a specified integer base length.
*/
// function documentation excluded.
class Tree{
    short getHeight( baseLength ){
        short height = 0;
        if( baseLength > 0 ){
            height = 1;
            if( baseLength > 1 ){
                height += Math.floor( baseLength / 2 ) + 1;
            }
        }
        return height;
    }
    short getBranchLength( levelNum, baseLength ){
        short length = 0;
        short height = getHeight( baseLength );
        if( levelNum > -1 && height > levelNum ){
            if( height - levelNum == 2 ){
                length = baseLength;
            }else{
                if( height - levelNum == 1 ){
                    length = 1;
                }else{
                    length = 2 * levelNum + 1;
                }
            }
        }
        return length;
    }
    short getWhiteSpaceOnLeftNum( levelNum, baseLength ){
        short i = 0;
        short height = getHeight( baseLength );
        if( levelNum > -1 && height > levelNum ){
            if( height - levelNum == 2 ){
                i = 0;
            }else{
                if( height - levelNum == 1){
                    levelNum = 0;
                }
                i = Math.floor( baseLength / 2 ) - levelNum;
            }
        }
        return i;
    }
    String getTreeBranch( levelNum, baseLength ){
        char x = '*';
        short xNum = getBranchLength( levelNum, baseLength );
        short spaceNum = getWhiteSpaceOnLeftNum( levelNum, baseLength );
        String str = "";
        spaceNum.times{
            str += ' ';
        }
        xNum.times{
            str += x;
        }
        return str;
    }
    String[] getTreeAsStrArr( short baseLength ){
        short height = getHeight( baseLength );
        return (0..height-1).collect{
            return getTreeBranch( it, baseLength );
        }
    }
    void printTree( short baseLength ){    
        if( 1 > baseLength || baseLength > 49 ){
            throw new Error( "BaseLength must be bigger than 1 and less than 50." );
        }
        String[] strArr = getTreeAsStrArr( baseLength );
        println strArr.join( '\n' );
        println "------Base length = $baseLength -------";
    }
    static void main( String[] args ){
        Tree a = new Tree();
	def vals = [1,2,6,7,49];
	if( args.length ){
		vals = [];
		args.each{
			vals.push( Integer.parseInt( it ) );
		}
	}
	vals.each{
		a.printTree( it as short );
	}
    }
}

Output ( Run Tree.groovy 2 7 12 > output.txt )

 *
**
 *
------Base length = 2 -------
   *
  ***
 *****
*******
   *
------Base length = 7 -------
      *
     ***
    *****
   *******
  *********
 ***********
************
      *
------Base length = 12 -------

Book Review: Beginning SQL Queries




Here’s my Amazon.com review for Beginning SQL Queries by Clare Churcher

This is an excellent book to turn you into a SQL professional but not an expert. This isn’t a book for complete beginners but for a person with some experience with databases. In other words, someone around the beginning to intermediate level because this book is all about SQL Queries and not how to setup, maintain and configure your database system.

Anyhow, this book focuses on SQL and not a specific Relational Database Management System (RDBMS). So check out another book if you’re primarily focused on Oracle, MySQL or any other RDBMS. However, she does go over a few differences between vendors when it comes to SQL queries.

I bought this book to review SQL and clarify a few concepts. Now after finishing this book, I feel that my goals has been reached. I really enjoyed this reading this book, because Clare is an effective writer who provides clear and concise examples with helpful explanations. For example, she provides annotations on screen captures of tables from Access and MS Server instead of only writing a description of a query. Even though the chapters were short and fast-paced, I was never stretching my head too long to understand what was going on.

The only negative thing about this book is the queries don’t have any semi-colons at the end.

I recommend this book for anyone taking a database course or anyone who wants a simple overview of SQL.

Tip:
All the table example data is listed after chapter 11. I suggested that you store that in your database before reading this book and so you can follow along easily.

OpenCL Demo

OpenCL is a standards-based programming language that allows the CPU and GPU to work together for faster and more efficient processing. OpenCL gives any application access to the graphics processing unit for non-graphical computing. Thus, OpenCL extends the power of the Graphics Processing Unit beyond graphics.

Check out this demo comparing OpenCL to C and a multi-threaded program.

Bad Behavior has blocked 984 access attempts in the last 7 days.

FireStats icon Powered by FireStats