Guest User

Score

a guest
May 29th, 2017
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.40 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int nutty_votes[10*10] =
  5. {
  6.     5,4,5,5,4,3,4,5,3,4,
  7.     3,4,5,5,4,5,4,4,3,3,
  8.     4,3,3,3,5,4,5,5,4,4,
  9.     5,3,3,4,4,5,3,4,5,5,
  10.     4,4,4,4,4,4,4,4,4,4,
  11.     5,4,3,3,4,5,5,3,5,4,
  12.     4,3,4,4,5,5,5,3,4,4,
  13.     4,5,5,4,3,3,4,3,5,5,
  14.     4,4,5,4,4,5,3,5,3,3,
  15.     3,4,4,4,4,4,4,4,4,4,
  16. };
  17.  
  18. int better_votes[10*10] =
  19. {
  20.     1,2,3,4,5,6,7,8,9,10,
  21.     8,10,4,2,3,5,7,6,9,1,
  22.     4,1,2,3,7,6,9,8,5,10,
  23.     10,9,8,7,6,5,4,3,2,1,
  24.     9,2,8,3,7,4,6,5,10,1,
  25.     1,9,8,7,6,5,2,3,10,4,
  26.     5,4,3,2,1,6,7,8,9,10,
  27.     5,3,4,2,6,1,9,8,10,7,
  28.     1,4,7,10,2,5,8,9,3,6,
  29.     8,6,7,5,3,10,9,2,1,4,
  30. };
  31.  
  32. void generate_irrationals(double *destination, int count)
  33. {
  34.     int i;
  35.     int skips = 0;
  36.     double x;
  37.     for (i = 0; i - skips < count; i++) {
  38.         x = sqrt(i);
  39.  
  40.         if (floor(x) == x) {
  41.             skips++;
  42.             continue;
  43.         }
  44.  
  45.         destination[i - skips] = x;
  46.     }
  47. }
  48.  
  49. void print_table_of_doubles_and_squares(const char *header, double *ptr, int length)
  50. {
  51.     int i;
  52.     printf("%s:\n", header);
  53.     for (i = 0; i < length; i++) {
  54.         printf("\t%g, ^2 = %g\n", ptr[i], ptr[i] * ptr[i]);
  55.     }
  56.     printf("\n");
  57. }
  58.  
  59. void test_vote(int *vote, double *irrationals)
  60. {
  61.     int i, j;
  62.     int sum[10];
  63.     double irr_sum[10];
  64.  
  65.     for (i = 0; i < 10; i++) {
  66.         printf("item %i: ", i + 1);
  67.         for (int j = 0; j < 10; j++) {
  68.             const int linear_score = vote[i*10 + j];
  69.             printf("%i,", linear_score);
  70.         }
  71.         printf("\n");
  72.     }
  73.     printf("\n");
  74.  
  75.     printf("linear sums: ");
  76.     for (i = 0; i < 10; i++) {
  77.         sum[i] = 0;
  78.         for (j = 0; j < 10; j++) {
  79.             // sum up "points"
  80.             sum[i] += vote[i*10 + j];
  81.         }
  82.         printf("%i,", sum[i]);
  83.     }
  84.     printf("\n\n");
  85.  
  86.     printf("irrational sums:\n");
  87.     for (i = 0; i < 10; i++) {
  88.         irr_sum[i] = 0.0;
  89.         for (j = 0; j < 10; j++) {
  90.             // sum up "points"
  91.             irr_sum[i] += irrationals[vote[i*10 + j] - 1];
  92.         }
  93.         printf("\tlin %g, squared %g\n", irr_sum[i], irr_sum[i] * irr_sum[i]);
  94.     }
  95.     printf("\n");
  96. }
  97.  
  98. void test_vote_better(int *vote, double *irrationals)
  99. {
  100.     int i, j;
  101.     int sum[10];
  102.     double irr_sum[10];
  103.  
  104.     // clear tables
  105.     for (int i = 0; i < 10; i++) {
  106.         sum[i] = 0;
  107.     }
  108.  
  109.     for (i = 0; i < 10; i++) {
  110.         irr_sum[i] = 0.0;
  111.     }
  112.  
  113.     for (i = 0; i < 10; i++) {
  114.         printf("item %i: ", i + 1);
  115.         for (j = 0; j < 10; j++) {
  116.             printf("%i,", vote[i*10 + j]);
  117.         }
  118.         printf("\n");
  119.     }
  120.     printf("\n");
  121.  
  122.     printf("linear sums: ");
  123.     for (i = 0; i < 10; i++) {
  124.         for (j = 0; j < 10; j++) {
  125.             // the value in the table is the target of the vote, not the score
  126.             // the score is determined by the position in the list
  127.             // best score = N (10)
  128.             // worst score = 1
  129.             sum[vote[i*10 + j] - 1] += 10 - i;
  130.         }
  131.         printf("%i,", sum[i]);
  132.     }
  133.     printf("\n\n");
  134.  
  135.  
  136.     printf("irrational sums:\n");
  137.     for (int i = 0; i < 10; i++) {
  138.         for (int j = 0; j < 10; j++) {
  139.             // the value in the table is the target of the vote, not the score
  140.             // the score is determined by the position in the list
  141.             // best score = N (10)
  142.             // worst score = 1
  143.             irr_sum[vote[i*10 + j] - 1] += irrationals[10 - i - 1];
  144.         }
  145.         printf("\tlin %g, squared %g\n", irr_sum[i], irr_sum[i] * irr_sum[i]);
  146.     }
  147.     printf("\n");
  148. }
  149.  
  150. int main(int argc, char **argv)
  151. {
  152.     double irrationals[10];
  153.     generate_irrationals(irrationals, 10);
  154.     print_table_of_doubles_and_squares("irrational score values", irrationals, 10);
  155.  
  156.     printf("nutty votes:\n");
  157.     test_vote(nutty_votes, irrationals);
  158.     printf("\n");
  159.  
  160.     printf("better votes:\n");
  161.     test_vote_better(better_votes, irrationals);
  162.     printf("\n");
  163.  
  164.     return 0;
  165. }
Add Comment
Please, Sign In to add comment