int main(int argc, char *argv[]) { int n = atoi(argv[1]); int c = atoi(argv[2]); long long l = 1ULL<< n; int i; long long cnt = 0; for (i = 0; i < l; i++) { //printf("%s", byte_to_binary(i)); if (find_ones(byte_to_binary(i)) == c) { // printf("%s:%d\n", byte_to_binary(i), i); cnt++; } // printf("\n"); } printf("%d:%d: %lld\n", n, c, cnt); }
/* * === FUNCTION ============================================================= * Name: start_next_ad * Description: Styr muxar, ad och anropar omvandlingar samt anropar bussen * för att skicka data. Det här kan ses som * sensorenhetens huvudprogram då alla * andra funktioner anropas härifrån. * ============================================================================ */ void start_next_ad() { unsigned char state=control_mux(); if (state==1){ //left_front klar if(maze_mode==1 && auto_mode==1){ header = 0xC1; //Skicka till // styr&pc med E-flagga } else if(maze_mode == 0 && auto_mode==1){ //linjeläge header = 0x91; //Skicka till pc } else { header = 0x80; } data=dist_left_front; req_sending(); } else if (state==2){ //left_back klar if(maze_mode==1 && auto_mode==1){ header = 0xC5; //Skicka till styr&pc med E-flagga } else if(maze_mode == 0 && auto_mode==1){ //linjeläge header = 0x95; //Skicka till pc } else { header = 0x84; } data= dist_left_back; req_sending(); } else if (state==3){ //right_front klar if(maze_mode==1 && auto_mode==1){ header = 0xC9; //Skicka till styr&pc med E-flagga } else if(maze_mode == 0 && auto_mode==1){ //linjeläge header = 0x99; //Skicka till pc } else if(auto_mode == 0) { header = 0x88; } data= dist_right_front; req_sending(); } else if (state==4){ //right_back klar if(maze_mode==1 && auto_mode==1){ header = 0xCD; //Skicka till styr&pc med E-flagga } else if(maze_mode == 0 && auto_mode==1){ //linjeläge header = 0x9D; //Skicka till pc } else { header = 0x8C; } data= dist_right_back; req_sending(); } else if(state==5){ //front klar if(display_ctr == 10){ data_to_display(dist_right_front,0x00); data_to_display(dist_left_front,0x01); data_to_display(dist_right_back,0x02); data_to_display(dist_left_back,0x03); data_to_display(dist_front,0x04); if(maze_mode == 1){ data_to_display(// (get_next_special_command()/16+100),// 0x05); } else{ data_to_display(// get_next_special_command()/16,0x05); } display_ctr = 0; } display_ctr++; } else if(state==6){ header=0x4D; data=dist_right_short | 0x80; req_sending(); } else if(state==7){ header=0x4D; data=dist_left_short | 0xC0; req_sending(); } else if(state==8){ //linjesensor 0-7 pågår create_line_array(truncate(ADCH), 1); } else if(state==9){ //linjesensor 8-10 pågår create_line_array(truncate(ADCH), 2); } if (count==17){ //alla linjesensorer omvandlade if (maze_mode==0 && auto_mode==1){ //kod som kollar om banan är s**t data=calculate_diff(line_array_1, line_array_2); if(data==0x60){ //bana s**t? header=0xC3; //skicka till styr och dator //med stopp-kod, D-flagga satt } else { header=0x51; //Skicka till styr med A- och //E-flagga } req_sending(); //inga linjer? byt till maze_mode=1 om väggar finns if(line_array_1==0 && line_array_2==0) { decide_maze_mode(1); } } else if(maze_mode==1 && auto_mode==1){ int temp = markning(find_ones(line_array_1)); generate_special_command(temp); int temp2 = search_for_crossroad(); if(temp2==1){ send_special_command(get_next_special_command() | 0x01); //Resetar next_special_command generate_special_command(4); } else if(temp2==2){ send_special_command(get_next_special_command() | 0x02); //Resetar next_special_command generate_special_command(4); } else if(temp2==3 && (get_next_special_command()==0x10)) { generate_special_command(4); } else if(temp2==4){ //vanlig 90 högersväng header=0xC3; if(duplicate==1){ data=0x00; duplicate=0; } else { duplicate=1; data=0x40; } req_sending(); } else if(temp2==5){ //vanlig 90 vänstersväng header=0xC3; if(duplicate==1){ data=0x00; duplicate=0; } else { duplicate=1; data=0x50; } req_sending(); } //linjer? byt till maze_mode=0 om inga väggar finns if(line_array_1!=0 || line_array_2!=0) { decide_maze_mode(0); } } create_line_array(0,0); //Nollställ } else if (count<17){ count++; ADCSRA |= (1<<ADSC); //starta nästa omvandling } }