WPBDC 2013.1.5 → 2013.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YTA1NzdjZjA3NGQzYmZlNzUzYjQ4Y2JjODAwNjUwNjUxZDRmZTUxZg==
4
+ NzQ1ZDYzZTUzNzI0ZTkzMzU5ZWVlM2E3MDIxNDY3ZTVkYzBjMDcxYg==
5
5
  data.tar.gz: !binary |-
6
- NTcyZDdiODExMDdkZTRjMWQ0NTBkNTE0MmFhYjg1NjEzMjdjZjAyOQ==
6
+ YTgyNTliYWJjYzQyZmQ5NWVlMTBiMTU1Yjk5N2UxYjU4MzA0ZTI1Mg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NTBmMDEwODE2OTM1YzE4ZTUxMDJkMzc3ODJmNzQ3OTNmZGUwMzU4MjM3YTdk
10
- NmFjMWY3YTRlMGY0ZmUwN2ZmNDkxNTg0NDBjNjY5OTM3ZjFlYWVlOTBmM2My
11
- MzVhYjYwNTliOWE2ZWQ1MDExOGUwYmUyNTA0ZDdlOGNhOGU1MDk=
9
+ MzljYWFjNDljZGU0YzAxNjJlNGVhN2NjOTc2MDg4MDhjYWY5NWQxYjc2ZGNi
10
+ MTA0OGNkZjE2NDFkMWY5YjBjZjE4ODdiZmZjYTMzOWJkOGRkNWQzMGMyMmMz
11
+ NDNkZDM2OTRiNDk1MmVmNGU1ZDQ0Y2UxZWVkNGQ2YTNlYmY0ODk=
12
12
  data.tar.gz: !binary |-
13
- M2VhOGQ0NDhjMjkyMjk2YzJkYzAyOWE4NTRiZTM4NjZjOTA2NTYwOGE0YjVl
14
- MGQ2OTAwNWI5Y2M3NDZkZGM0ZmYxYzYzZTY2MDQ2NjQ2ZTI2MmM3MGJiMGJm
15
- NjNhMWYyNmUzMDFhOGQyZDU1NzQ3NzNlY2IyYmQyOWZmMWY2ZmE=
13
+ Mzc1MjQ5NGFmODQ1Zjk1YzJhMzlkNmViNDMyNTIwMzUwMmRjZDRiNzM3MmQz
14
+ OTI5YmNmZWYxZjE3YTg0MjUzYmI5N2IxMjExMzU3OGE4MmEwOGM3MWI2NTU2
15
+ ZDU4NGYyNzRmYjAyYzc2NjQ4YjVlZDFkMDhhNjMwM2I5ZmYxNzY=
data/ext/WPBDC/WPBDC.c CHANGED
@@ -220,6 +220,15 @@ static struct ict_entry {
220
220
  INT_CONST_TABLE_ENTRY(SCENARIO_NUMBER_SIZE),
221
221
  };
222
222
 
223
+ #define STRING_CONST_TABLE_ENTRY(Name) { #Name, Name }
224
+
225
+ static struct sct_entry {
226
+ char *name;
227
+ char *val;
228
+ } string_const_table[] = {
229
+ STRING_CONST_TABLE_ENTRY(SEMIFINAL_SCENARIO_ID)
230
+ };
231
+
223
232
  void Init_WPBDC(void)
224
233
  {
225
234
  int i;
@@ -235,4 +244,8 @@ void Init_WPBDC(void)
235
244
  struct ict_entry *e = int_const_table + i;
236
245
  rb_define_const(module, e->name, INT2FIX(e->val));
237
246
  }
247
+ for (i = 0; i < STATIC_ARRAY_SIZE(string_const_table); i++) {
248
+ struct sct_entry *e = string_const_table + i;
249
+ rb_define_const(module, e->name, rb_str_new2(e->val));
250
+ }
238
251
  }
data/ext/WPBDC/judge.c CHANGED
@@ -556,7 +556,6 @@ int main(int argc, char* argv[])
556
556
  printf("%d examples read, %d written\n", n_examples_read, n_examples_written);
557
557
  #endif
558
558
 
559
-
560
559
  return 0;
561
560
  }
562
561
 
data/ext/WPBDC/judge.h CHANGED
@@ -15,6 +15,10 @@
15
15
  #define YEAR_TO_VERSION(Y) (((((Y) % 100) / 10) << 8) | (((Y) % 10) << 4) | 0x400c)
16
16
  #define BD_VERSION YEAR_TO_VERSION(CONTEST_YEAR)
17
17
 
18
+ // The id for the semifinal scenario including a null value
19
+ #define NULL_SEMIFINAL_SCENARIO_ID "0000000000"
20
+ #define SEMIFINAL_SCENARIO_ID NULL_SEMIFINAL_SCENARIO_ID
21
+
18
22
  // Status returns from analyze().
19
23
  #define BRIDGE_OK 0
20
24
  #define BRIDGE_MALFORMED 1
data/ext/WPBDC/scenario.c CHANGED
@@ -8,7 +8,9 @@
8
8
  // The indices do _not_ have to be in order.
9
9
 
10
10
  // Lookup table is sorted on 10-char ID field for binary search.
11
+ // The search routine will bubble the semifinal row to the right location.
11
12
  static TScenarioDescriptor scenario_descriptor_tbl[] = {
13
+ { 999, SEMIFINAL_SCENARIO_ID, "99Z", 100000.00 },
12
14
  { 0, "1050824100", "27A", 99874.40 },
13
15
  { 1, "1051220100", "32A", 105140.00 },
14
16
  { 2, "1051616100", "36A", 111994.40 },
@@ -427,23 +429,42 @@ char *local_contest_number_to_id(char *number)
427
429
  int lookup_scenario_descriptor(TScenarioDescriptor *desc, char *id)
428
430
  {
429
431
  static TScenarioDescriptor null_desc = NULL_SCENARIO_DESCRIPTOR;
432
+ static int initialized_p = 0;
430
433
  int lo = 0;
431
434
  int hi = STATIC_ARRAY_SIZE(scenario_descriptor_tbl) - 1;
432
- int cmp, mid;
433
-
434
- while (lo <= hi) {
435
- mid = (unsigned)(lo + hi) >> 1;
436
- cmp = strncmp(id, scenario_descriptor_tbl[mid].id, SCENARIO_ID_SIZE);
437
- if (cmp < 0)
438
- hi = mid - 1;
439
- else if (cmp > 0)
440
- lo = mid + 1;
441
- else {
442
- if (desc)
443
- *desc = scenario_descriptor_tbl[mid];
444
- return mid;
445
- }
446
- }
435
+ int i, cmp, mid;
436
+
437
+ // Bubble the semifinal scenario to the right position one time.
438
+ if (!initialized_p) {
439
+ initialized_p = 1;
440
+ TScenarioDescriptor semifinal_descriptor = scenario_descriptor_tbl[0];
441
+ for (i = 0; i < STATIC_ARRAY_SIZE(scenario_descriptor_tbl) - 1; i++) {
442
+ if (strncmp(scenario_descriptor_tbl[i + 1].id, semifinal_descriptor.id, SCENARIO_ID_SIZE) < 0)
443
+ scenario_descriptor_tbl[i] = scenario_descriptor_tbl[i + 1];
444
+ else
445
+ break;
446
+ }
447
+ scenario_descriptor_tbl[i] = semifinal_descriptor;
448
+ }
449
+
450
+ // Don't bother searching for the null semifinal scenario.
451
+ if (strncmp(id, NULL_SEMIFINAL_SCENARIO_ID, SCENARIO_ID_SIZE) != 0) {
452
+
453
+ while (lo <= hi) {
454
+ mid = (unsigned)(lo + hi) >> 1;
455
+ cmp = strncmp(id, scenario_descriptor_tbl[mid].id, SCENARIO_ID_SIZE);
456
+ if (cmp < 0)
457
+ hi = mid - 1;
458
+ else if (cmp > 0)
459
+ lo = mid + 1;
460
+ else {
461
+ if (desc)
462
+ *desc = scenario_descriptor_tbl[mid];
463
+ return mid;
464
+ }
465
+ }
466
+
467
+ }
447
468
  if (desc)
448
469
  *desc = null_desc;
449
470
  return -1;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: WPBDC
3
3
  version: !ruby/object:Gem::Version
4
- version: 2013.1.5
4
+ version: 2013.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gene Ressler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-15 00:00:00.000000000 Z
11
+ date: 2013-06-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Container for C code extension that implements the West Point Bridge
14
14
  Contest Judge.