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
_______________________________________________
vox-tech mailing list
[email protected]
http://lists.lugod.org/mailman/listinfo/vox-tech