[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