[vox-tech] [OT] Binary Representation Challenge

Bruce Wolk bawolk at ucdavis.edu
Tue Sep 20 14:18:50 PDT 2005


Tim Riley wrote:

> On Tue, 2005-09-20 at 12:02, Alex Mandel wrote:
> 
>>I realize this might be not be a challenge for some of you.
>>--
>>I need to make a list of all possible permutations given 9 options and 
>>that you can choose any number of options at once.
>>I've figured out using nCr statistics that this is 511 choices, but now 
>>I need to represent them in 2^9 binary code: 000000001, 000000010 etc
> 
> 
> The following code should work:
> 
> /* binary_count.c					*/
> /* ---------------------------------------------------- */
> /* By Tim Riley						*/
> /* ---------------------------------------------------- */
> /* Compile: cc -Wall binary_count.c -o binary_count	*/
> /* ---------------------------------------------------- */
> 
> #include <stdio.h>
> #include <stdlib.h>
> 
> #define NUMBER_BINARY_DIGITS	16
> 
> /* From "The C Programming Language" by Kernighan and Ritchie */
> /* ---------------------------------------------------------- */
> unsigned getbits( unsigned integer, unsigned position, unsigned n )
> {
> 	return ( integer >> ( position + 1 - n ) ) & ~( ~0 << n );
> }
> 
> char *integer2binary( unsigned integer )
> {
> 	static char binary[ NUMBER_BINARY_DIGITS + 1 ] = {0};
> 	char *pointer;
> 	int i;
> 
> 	pointer = binary;
> 	for ( i = 0; i < NUMBER_BINARY_DIGITS; i++, pointer++ )
> 		*pointer = '0';
> 
> 	pointer = binary + NUMBER_BINARY_DIGITS - 1;
> 
> 	for( i = 0; i < NUMBER_BINARY_DIGITS; i++, pointer-- )
> 	{
> 		if ( getbits( integer, i, 1 ) ) *pointer = '1';
> 		
> 	}
> 
> 	return binary;
> }
> 
> int main( int argc, char **argv )
> {
> 	unsigned count_up_to;
> 	unsigned count;
> 
> 	if ( argc != 2 )
> 	{
> 		fprintf( stderr, "Usage: %s count_up_to\n", argv[ 0 ] );
> 		return 1;
> 	}
> 
> 	count_up_to = atoi( argv[ 1 ] );
> 
> 	for ( count = 0; count < count_up_to; count++ )
> 		printf( "%s\n", integer2binary( count ) );
> 
> 	return 0;
> }
> 
> 
Python is a little more compact.

def int2bin(n,digits=9):
	return "".join(map(lambda y:str((n>>y)&1), range(digits-1, -1, 				-1)))
for i in range(512):
	print int2bin(i)


Bruce




More information about the vox-tech mailing list