Page 1 of 1

Oberon Competition - Win a $US50 Amazon Gift Voucher

Posted: Wed Dec 03, 2014 12:54 pm
by cfbsoftware
A $US50 Amazon Gift Voucher will be awarded to the person who can rewrite the following module so that it produces the same results but executes in the least amount of time:

Code: Select all

MODULE Quiz;

VAR
  a1*, a2*: ARRAY 1000 OF INTEGER;
  i: INTEGER;

PROCEDURE Init*;
BEGIN
  FOR i := 0 TO LEN(a1) - 1 DO 
    a1[i] := i;
    a2[i] := i
  END
END Init;

END Quiz.
The Terms and Conditions are (amended 6 Dec 2014):

1. You cannot use any IMPORT statements.
2. Your submitted code must compile without modification on any version v5.1 or later of any edition of Astrobe. (amended 12 Dec 2014)
3. When linked with the QuizTimer program below your code must run on any supported development board with at least 16K of RAM.
4. The interface as it appears to a client module must remain unchanged.
5. Your solution must be posted as a reply to this topic.
6. A maximum of two attempts per person are allowed.
7. If the execution time of two solutions are identical the prize will be awarded to the solution with the smallest generated code size.
8. If two solutions are identical in size and execution time the prize will be awarded to the one that was submitted earliest.
9. These conditions are subject to change if the need arises.
10. Any attempts considered to be cheating will be disqualified.
11. The judge's decision is final.


The closing time for entries is midnight GMT on 31st Dec 2014.

The following additional conditions apply to all entries received after 12 Noon GMT on 6 Dec 2014:
12. The generated code size of the compiled module must be no larger than the original.
13. No person can win more than one prize.
14. The program used to time the results is:

Code: Select all

MODULE QuizTimer;

IMPORT Out, Timer, Main, Quiz;

BEGIN
  Timer.Init(Timer.uSecs);
  Timer.Start();
  Quiz.Init();
  Out.Int(Timer.Elapsed(), 0); 
  Out.Ln
END QuizTimer.
Good luck!

Re: Oberon Competition - Win a $US50 Amazon Gift Voucher

Posted: Sat Dec 06, 2014 10:01 am
by AlexIljin
Here's my first submission:

Code: Select all

MODULE Quiz;

VAR
  a1*, a2*: ARRAY 1000 OF INTEGER;

PROCEDURE Init*;
BEGIN
  a1[0] := 0; 
  a1[1] := 1; 
  a1[2] := 2; 
  a1[3] := 3; 
  a1[4] := 4; 
  a1[5] := 5; 
  a1[6] := 6; 
  a1[7] := 7; 
  a1[8] := 8; 
  a1[9] := 9; 
  a1[10] := 10; 
  a1[11] := 11; 
  a1[12] := 12; 
  a1[13] := 13; 
  a1[14] := 14; 
  a1[15] := 15; 
  a1[16] := 16; 
  a1[17] := 17; 
  a1[18] := 18; 
  a1[19] := 19; 
  a1[20] := 20; 
  a1[21] := 21; 
  a1[22] := 22; 
  a1[23] := 23; 
  a1[24] := 24; 
  a1[25] := 25; 
  a1[26] := 26; 
  a1[27] := 27; 
  a1[28] := 28; 
  a1[29] := 29; 
  a1[30] := 30; 
  a1[31] := 31; 
  a1[32] := 32; 
  a1[33] := 33; 
  a1[34] := 34; 
  a1[35] := 35; 
  a1[36] := 36; 
  a1[37] := 37; 
  a1[38] := 38; 
  a1[39] := 39; 
  a1[40] := 40; 
  a1[41] := 41; 
  a1[42] := 42; 
  a1[43] := 43; 
  a1[44] := 44; 
  a1[45] := 45; 
  a1[46] := 46; 
  a1[47] := 47; 
  a1[48] := 48; 
  a1[49] := 49; 
  a1[50] := 50; 
  a1[51] := 51; 
  a1[52] := 52; 
  a1[53] := 53; 
  a1[54] := 54; 
  a1[55] := 55; 
  a1[56] := 56; 
  a1[57] := 57; 
  a1[58] := 58; 
  a1[59] := 59; 
  a1[60] := 60; 
  a1[61] := 61; 
  a1[62] := 62; 
  a1[63] := 63; 
  a1[64] := 64; 
  a1[65] := 65; 
  a1[66] := 66; 
  a1[67] := 67; 
  a1[68] := 68; 
  a1[69] := 69; 
  a1[70] := 70; 
  a1[71] := 71; 
  a1[72] := 72; 
  a1[73] := 73; 
  a1[74] := 74; 
  a1[75] := 75; 
  a1[76] := 76; 
  a1[77] := 77; 
  a1[78] := 78; 
  a1[79] := 79; 
  a1[80] := 80; 
  a1[81] := 81; 
  a1[82] := 82; 
  a1[83] := 83; 
  a1[84] := 84; 
  a1[85] := 85; 
  a1[86] := 86; 
  a1[87] := 87; 
  a1[88] := 88; 
  a1[89] := 89; 
  a1[90] := 90; 
  a1[91] := 91; 
  a1[92] := 92; 
  a1[93] := 93; 
  a1[94] := 94; 
  a1[95] := 95; 
  a1[96] := 96; 
  a1[97] := 97; 
  a1[98] := 98; 
  a1[99] := 99; 
  a1[100] := 100; 
  a1[101] := 101; 
  a1[102] := 102; 
  a1[103] := 103; 
  a1[104] := 104; 
  a1[105] := 105; 
  a1[106] := 106; 
  a1[107] := 107; 
  a1[108] := 108; 
  a1[109] := 109; 
  a1[110] := 110; 
  a1[111] := 111; 
  a1[112] := 112; 
  a1[113] := 113; 
  a1[114] := 114; 
  a1[115] := 115; 
  a1[116] := 116; 
  a1[117] := 117; 
  a1[118] := 118; 
  a1[119] := 119; 
  a1[120] := 120; 
  a1[121] := 121; 
  a1[122] := 122; 
  a1[123] := 123; 
  a1[124] := 124; 
  a1[125] := 125; 
  a1[126] := 126; 
  a1[127] := 127; 
  a1[128] := 128; 
  a1[129] := 129; 
  a1[130] := 130; 
  a1[131] := 131; 
  a1[132] := 132; 
  a1[133] := 133; 
  a1[134] := 134; 
  a1[135] := 135; 
  a1[136] := 136; 
  a1[137] := 137; 
  a1[138] := 138; 
  a1[139] := 139; 
  a1[140] := 140; 
  a1[141] := 141; 
  a1[142] := 142; 
  a1[143] := 143; 
  a1[144] := 144; 
  a1[145] := 145; 
  a1[146] := 146; 
  a1[147] := 147; 
  a1[148] := 148; 
  a1[149] := 149; 
  a1[150] := 150; 
  a1[151] := 151; 
  a1[152] := 152; 
  a1[153] := 153; 
  a1[154] := 154; 
  a1[155] := 155; 
  a1[156] := 156; 
  a1[157] := 157; 
  a1[158] := 158; 
  a1[159] := 159; 
  a1[160] := 160; 
  a1[161] := 161; 
  a1[162] := 162; 
  a1[163] := 163; 
  a1[164] := 164; 
  a1[165] := 165; 
  a1[166] := 166; 
  a1[167] := 167; 
  a1[168] := 168; 
  a1[169] := 169; 
  a1[170] := 170; 
  a1[171] := 171; 
  a1[172] := 172; 
  a1[173] := 173; 
  a1[174] := 174; 
  a1[175] := 175; 
  a1[176] := 176; 
  a1[177] := 177; 
  a1[178] := 178; 
  a1[179] := 179; 
  a1[180] := 180; 
  a1[181] := 181; 
  a1[182] := 182; 
  a1[183] := 183; 
  a1[184] := 184; 
  a1[185] := 185; 
  a1[186] := 186; 
  a1[187] := 187; 
  a1[188] := 188; 
  a1[189] := 189; 
  a1[190] := 190; 
  a1[191] := 191; 
  a1[192] := 192; 
  a1[193] := 193; 
  a1[194] := 194; 
  a1[195] := 195; 
  a1[196] := 196; 
  a1[197] := 197; 
  a1[198] := 198; 
  a1[199] := 199; 
  a1[200] := 200; 
  a1[201] := 201; 
  a1[202] := 202; 
  a1[203] := 203; 
  a1[204] := 204; 
  a1[205] := 205; 
  a1[206] := 206; 
  a1[207] := 207; 
  a1[208] := 208; 
  a1[209] := 209; 
  a1[210] := 210; 
  a1[211] := 211; 
  a1[212] := 212; 
  a1[213] := 213; 
  a1[214] := 214; 
  a1[215] := 215; 
  a1[216] := 216; 
  a1[217] := 217; 
  a1[218] := 218; 
  a1[219] := 219; 
  a1[220] := 220; 
  a1[221] := 221; 
  a1[222] := 222; 
  a1[223] := 223; 
  a1[224] := 224; 
  a1[225] := 225; 
  a1[226] := 226; 
  a1[227] := 227; 
  a1[228] := 228; 
  a1[229] := 229; 
  a1[230] := 230; 
  a1[231] := 231; 
  a1[232] := 232; 
  a1[233] := 233; 
  a1[234] := 234; 
  a1[235] := 235; 
  a1[236] := 236; 
  a1[237] := 237; 
  a1[238] := 238; 
  a1[239] := 239; 
  a1[240] := 240; 
  a1[241] := 241; 
  a1[242] := 242; 
  a1[243] := 243; 
  a1[244] := 244; 
  a1[245] := 245; 
  a1[246] := 246; 
  a1[247] := 247; 
  a1[248] := 248; 
  a1[249] := 249; 
  a1[250] := 250; 
  a1[251] := 251; 
  a1[252] := 252; 
  a1[253] := 253; 
  a1[254] := 254; 
  a1[255] := 255; 
  a1[256] := 256; 
  a1[257] := 257; 
  a1[258] := 258; 
  a1[259] := 259; 
  a1[260] := 260; 
  a1[261] := 261; 
  a1[262] := 262; 
  a1[263] := 263; 
  a1[264] := 264; 
  a1[265] := 265; 
  a1[266] := 266; 
  a1[267] := 267; 
  a1[268] := 268; 
  a1[269] := 269; 
  a1[270] := 270; 
  a1[271] := 271; 
  a1[272] := 272; 
  a1[273] := 273; 
  a1[274] := 274; 
  a1[275] := 275; 
  a1[276] := 276; 
  a1[277] := 277; 
  a1[278] := 278; 
  a1[279] := 279; 
  a1[280] := 280; 
  a1[281] := 281; 
  a1[282] := 282; 
  a1[283] := 283; 
  a1[284] := 284; 
  a1[285] := 285; 
  a1[286] := 286; 
  a1[287] := 287; 
  a1[288] := 288; 
  a1[289] := 289; 
  a1[290] := 290; 
  a1[291] := 291; 
  a1[292] := 292; 
  a1[293] := 293; 
  a1[294] := 294; 
  a1[295] := 295; 
  a1[296] := 296; 
  a1[297] := 297; 
  a1[298] := 298; 
  a1[299] := 299; 
  a1[300] := 300; 
  a1[301] := 301; 
  a1[302] := 302; 
  a1[303] := 303; 
  a1[304] := 304; 
  a1[305] := 305; 
  a1[306] := 306; 
  a1[307] := 307; 
  a1[308] := 308; 
  a1[309] := 309; 
  a1[310] := 310; 
  a1[311] := 311; 
  a1[312] := 312; 
  a1[313] := 313; 
  a1[314] := 314; 
  a1[315] := 315; 
  a1[316] := 316; 
  a1[317] := 317; 
  a1[318] := 318; 
  a1[319] := 319; 
  a1[320] := 320; 
  a1[321] := 321; 
  a1[322] := 322; 
  a1[323] := 323; 
  a1[324] := 324; 
  a1[325] := 325; 
  a1[326] := 326; 
  a1[327] := 327; 
  a1[328] := 328; 
  a1[329] := 329; 
  a1[330] := 330; 
  a1[331] := 331; 
  a1[332] := 332; 
  a1[333] := 333; 
  a1[334] := 334; 
  a1[335] := 335; 
  a1[336] := 336; 
  a1[337] := 337; 
  a1[338] := 338; 
  a1[339] := 339; 
  a1[340] := 340; 
  a1[341] := 341; 
  a1[342] := 342; 
  a1[343] := 343; 
  a1[344] := 344; 
  a1[345] := 345; 
  a1[346] := 346; 
  a1[347] := 347; 
  a1[348] := 348; 
  a1[349] := 349; 
  a1[350] := 350; 
  a1[351] := 351; 
  a1[352] := 352; 
  a1[353] := 353; 
  a1[354] := 354; 
  a1[355] := 355; 
  a1[356] := 356; 
  a1[357] := 357; 
  a1[358] := 358; 
  a1[359] := 359; 
  a1[360] := 360; 
  a1[361] := 361; 
  a1[362] := 362; 
  a1[363] := 363; 
  a1[364] := 364; 
  a1[365] := 365; 
  a1[366] := 366; 
  a1[367] := 367; 
  a1[368] := 368; 
  a1[369] := 369; 
  a1[370] := 370; 
  a1[371] := 371; 
  a1[372] := 372; 
  a1[373] := 373; 
  a1[374] := 374; 
  a1[375] := 375; 
  a1[376] := 376; 
  a1[377] := 377; 
  a1[378] := 378; 
  a1[379] := 379; 
  a1[380] := 380; 
  a1[381] := 381; 
  a1[382] := 382; 
  a1[383] := 383; 
  a1[384] := 384; 
  a1[385] := 385; 
  a1[386] := 386; 
  a1[387] := 387; 
  a1[388] := 388; 
  a1[389] := 389; 
  a1[390] := 390; 
  a1[391] := 391; 
  a1[392] := 392; 
  a1[393] := 393; 
  a1[394] := 394; 
  a1[395] := 395; 
  a1[396] := 396; 
  a1[397] := 397; 
  a1[398] := 398; 
  a1[399] := 399; 
  a1[400] := 400; 
  a1[401] := 401; 
  a1[402] := 402; 
  a1[403] := 403; 
  a1[404] := 404; 
  a1[405] := 405; 
  a1[406] := 406; 
  a1[407] := 407; 
  a1[408] := 408; 
  a1[409] := 409; 
  a1[410] := 410; 
  a1[411] := 411; 
  a1[412] := 412; 
  a1[413] := 413; 
  a1[414] := 414; 
  a1[415] := 415; 
  a1[416] := 416; 
  a1[417] := 417; 
  a1[418] := 418; 
  a1[419] := 419; 
  a1[420] := 420; 
  a1[421] := 421; 
  a1[422] := 422; 
  a1[423] := 423; 
  a1[424] := 424; 
  a1[425] := 425; 
  a1[426] := 426; 
  a1[427] := 427; 
  a1[428] := 428; 
  a1[429] := 429; 
  a1[430] := 430; 
  a1[431] := 431; 
  a1[432] := 432; 
  a1[433] := 433; 
  a1[434] := 434; 
  a1[435] := 435; 
  a1[436] := 436; 
  a1[437] := 437; 
  a1[438] := 438; 
  a1[439] := 439; 
  a1[440] := 440; 
  a1[441] := 441; 
  a1[442] := 442; 
  a1[443] := 443; 
  a1[444] := 444; 
  a1[445] := 445; 
  a1[446] := 446; 
  a1[447] := 447; 
  a1[448] := 448; 
  a1[449] := 449; 
  a1[450] := 450; 
  a1[451] := 451; 
  a1[452] := 452; 
  a1[453] := 453; 
  a1[454] := 454; 
  a1[455] := 455; 
  a1[456] := 456; 
  a1[457] := 457; 
  a1[458] := 458; 
  a1[459] := 459; 
  a1[460] := 460; 
  a1[461] := 461; 
  a1[462] := 462; 
  a1[463] := 463; 
  a1[464] := 464; 
  a1[465] := 465; 
  a1[466] := 466; 
  a1[467] := 467; 
  a1[468] := 468; 
  a1[469] := 469; 
  a1[470] := 470; 
  a1[471] := 471; 
  a1[472] := 472; 
  a1[473] := 473; 
  a1[474] := 474; 
  a1[475] := 475; 
  a1[476] := 476; 
  a1[477] := 477; 
  a1[478] := 478; 
  a1[479] := 479; 
  a1[480] := 480; 
  a1[481] := 481; 
  a1[482] := 482; 
  a1[483] := 483; 
  a1[484] := 484; 
  a1[485] := 485; 
  a1[486] := 486; 
  a1[487] := 487; 
  a1[488] := 488; 
  a1[489] := 489; 
  a1[490] := 490; 
  a1[491] := 491; 
  a1[492] := 492; 
  a1[493] := 493; 
  a1[494] := 494; 
  a1[495] := 495; 
  a1[496] := 496; 
  a1[497] := 497; 
  a1[498] := 498; 
  a1[499] := 499; 
  a1[500] := 500; 
  a1[501] := 501; 
  a1[502] := 502; 
  a1[503] := 503; 
  a1[504] := 504; 
  a1[505] := 505; 
  a1[506] := 506; 
  a1[507] := 507; 
  a1[508] := 508; 
  a1[509] := 509; 
  a1[510] := 510; 
  a1[511] := 511; 
  a1[512] := 512; 
  a1[513] := 513; 
  a1[514] := 514; 
  a1[515] := 515; 
  a1[516] := 516; 
  a1[517] := 517; 
  a1[518] := 518; 
  a1[519] := 519; 
  a1[520] := 520; 
  a1[521] := 521; 
  a1[522] := 522; 
  a1[523] := 523; 
  a1[524] := 524; 
  a1[525] := 525; 
  a1[526] := 526; 
  a1[527] := 527; 
  a1[528] := 528; 
  a1[529] := 529; 
  a1[530] := 530; 
  a1[531] := 531; 
  a1[532] := 532; 
  a1[533] := 533; 
  a1[534] := 534; 
  a1[535] := 535; 
  a1[536] := 536; 
  a1[537] := 537; 
  a1[538] := 538; 
  a1[539] := 539; 
  a1[540] := 540; 
  a1[541] := 541; 
  a1[542] := 542; 
  a1[543] := 543; 
  a1[544] := 544; 
  a1[545] := 545; 
  a1[546] := 546; 
  a1[547] := 547; 
  a1[548] := 548; 
  a1[549] := 549; 
  a1[550] := 550; 
  a1[551] := 551; 
  a1[552] := 552; 
  a1[553] := 553; 
  a1[554] := 554; 
  a1[555] := 555; 
  a1[556] := 556; 
  a1[557] := 557; 
  a1[558] := 558; 
  a1[559] := 559; 
  a1[560] := 560; 
  a1[561] := 561; 
  a1[562] := 562; 
  a1[563] := 563; 
  a1[564] := 564; 
  a1[565] := 565; 
  a1[566] := 566; 
  a1[567] := 567; 
  a1[568] := 568; 
  a1[569] := 569; 
  a1[570] := 570; 
  a1[571] := 571; 
  a1[572] := 572; 
  a1[573] := 573; 
  a1[574] := 574; 
  a1[575] := 575; 
  a1[576] := 576; 
  a1[577] := 577; 
  a1[578] := 578; 
  a1[579] := 579; 
  a1[580] := 580; 
  a1[581] := 581; 
  a1[582] := 582; 
  a1[583] := 583; 
  a1[584] := 584; 
  a1[585] := 585; 
  a1[586] := 586; 
  a1[587] := 587; 
  a1[588] := 588; 
  a1[589] := 589; 
  a1[590] := 590; 
  a1[591] := 591; 
  a1[592] := 592; 
  a1[593] := 593; 
  a1[594] := 594; 
  a1[595] := 595; 
  a1[596] := 596; 
  a1[597] := 597; 
  a1[598] := 598; 
  a1[599] := 599; 
  a1[600] := 600; 
  a1[601] := 601; 
  a1[602] := 602; 
  a1[603] := 603; 
  a1[604] := 604; 
  a1[605] := 605; 
  a1[606] := 606; 
  a1[607] := 607; 
  a1[608] := 608; 
  a1[609] := 609; 
  a1[610] := 610; 
  a1[611] := 611; 
  a1[612] := 612; 
  a1[613] := 613; 
  a1[614] := 614; 
  a1[615] := 615; 
  a1[616] := 616; 
  a1[617] := 617; 
  a1[618] := 618; 
  a1[619] := 619; 
  a1[620] := 620; 
  a1[621] := 621; 
  a1[622] := 622; 
  a1[623] := 623; 
  a1[624] := 624; 
  a1[625] := 625; 
  a1[626] := 626; 
  a1[627] := 627; 
  a1[628] := 628; 
  a1[629] := 629; 
  a1[630] := 630; 
  a1[631] := 631; 
  a1[632] := 632; 
  a1[633] := 633; 
  a1[634] := 634; 
  a1[635] := 635; 
  a1[636] := 636; 
  a1[637] := 637; 
  a1[638] := 638; 
  a1[639] := 639; 
  a1[640] := 640; 
  a1[641] := 641; 
  a1[642] := 642; 
  a1[643] := 643; 
  a1[644] := 644; 
  a1[645] := 645; 
  a1[646] := 646; 
  a1[647] := 647; 
  a1[648] := 648; 
  a1[649] := 649; 
  a1[650] := 650; 
  a1[651] := 651; 
  a1[652] := 652; 
  a1[653] := 653; 
  a1[654] := 654; 
  a1[655] := 655; 
  a1[656] := 656; 
  a1[657] := 657; 
  a1[658] := 658; 
  a1[659] := 659; 
  a1[660] := 660; 
  a1[661] := 661; 
  a1[662] := 662; 
  a1[663] := 663; 
  a1[664] := 664; 
  a1[665] := 665; 
  a1[666] := 666; 
  a1[667] := 667; 
  a1[668] := 668; 
  a1[669] := 669; 
  a1[670] := 670; 
  a1[671] := 671; 
  a1[672] := 672; 
  a1[673] := 673; 
  a1[674] := 674; 
  a1[675] := 675; 
  a1[676] := 676; 
  a1[677] := 677; 
  a1[678] := 678; 
  a1[679] := 679; 
  a1[680] := 680; 
  a1[681] := 681; 
  a1[682] := 682; 
  a1[683] := 683; 
  a1[684] := 684; 
  a1[685] := 685; 
  a1[686] := 686; 
  a1[687] := 687; 
  a1[688] := 688; 
  a1[689] := 689; 
  a1[690] := 690; 
  a1[691] := 691; 
  a1[692] := 692; 
  a1[693] := 693; 
  a1[694] := 694; 
  a1[695] := 695; 
  a1[696] := 696; 
  a1[697] := 697; 
  a1[698] := 698; 
  a1[699] := 699; 
  a1[700] := 700; 
  a1[701] := 701; 
  a1[702] := 702; 
  a1[703] := 703; 
  a1[704] := 704; 
  a1[705] := 705; 
  a1[706] := 706; 
  a1[707] := 707; 
  a1[708] := 708; 
  a1[709] := 709; 
  a1[710] := 710; 
  a1[711] := 711; 
  a1[712] := 712; 
  a1[713] := 713; 
  a1[714] := 714; 
  a1[715] := 715; 
  a1[716] := 716; 
  a1[717] := 717; 
  a1[718] := 718; 
  a1[719] := 719; 
  a1[720] := 720; 
  a1[721] := 721; 
  a1[722] := 722; 
  a1[723] := 723; 
  a1[724] := 724; 
  a1[725] := 725; 
  a1[726] := 726; 
  a1[727] := 727; 
  a1[728] := 728; 
  a1[729] := 729; 
  a1[730] := 730; 
  a1[731] := 731; 
  a1[732] := 732; 
  a1[733] := 733; 
  a1[734] := 734; 
  a1[735] := 735; 
  a1[736] := 736; 
  a1[737] := 737; 
  a1[738] := 738; 
  a1[739] := 739; 
  a1[740] := 740; 
  a1[741] := 741; 
  a1[742] := 742; 
  a1[743] := 743; 
  a1[744] := 744; 
  a1[745] := 745; 
  a1[746] := 746; 
  a1[747] := 747; 
  a1[748] := 748; 
  a1[749] := 749; 
  a1[750] := 750; 
  a1[751] := 751; 
  a1[752] := 752; 
  a1[753] := 753; 
  a1[754] := 754; 
  a1[755] := 755; 
  a1[756] := 756; 
  a1[757] := 757; 
  a1[758] := 758; 
  a1[759] := 759; 
  a1[760] := 760; 
  a1[761] := 761; 
  a1[762] := 762; 
  a1[763] := 763; 
  a1[764] := 764; 
  a1[765] := 765; 
  a1[766] := 766; 
  a1[767] := 767; 
  a1[768] := 768; 
  a1[769] := 769; 
  a1[770] := 770; 
  a1[771] := 771; 
  a1[772] := 772; 
  a1[773] := 773; 
  a1[774] := 774; 
  a1[775] := 775; 
  a1[776] := 776; 
  a1[777] := 777; 
  a1[778] := 778; 
  a1[779] := 779; 
  a1[780] := 780; 
  a1[781] := 781; 
  a1[782] := 782; 
  a1[783] := 783; 
  a1[784] := 784; 
  a1[785] := 785; 
  a1[786] := 786; 
  a1[787] := 787; 
  a1[788] := 788; 
  a1[789] := 789; 
  a1[790] := 790; 
  a1[791] := 791; 
  a1[792] := 792; 
  a1[793] := 793; 
  a1[794] := 794; 
  a1[795] := 795; 
  a1[796] := 796; 
  a1[797] := 797; 
  a1[798] := 798; 
  a1[799] := 799; 
  a1[800] := 800; 
  a1[801] := 801; 
  a1[802] := 802; 
  a1[803] := 803; 
  a1[804] := 804; 
  a1[805] := 805; 
  a1[806] := 806; 
  a1[807] := 807; 
  a1[808] := 808; 
  a1[809] := 809; 
  a1[810] := 810; 
  a1[811] := 811; 
  a1[812] := 812; 
  a1[813] := 813; 
  a1[814] := 814; 
  a1[815] := 815; 
  a1[816] := 816; 
  a1[817] := 817; 
  a1[818] := 818; 
  a1[819] := 819; 
  a1[820] := 820; 
  a1[821] := 821; 
  a1[822] := 822; 
  a1[823] := 823; 
  a1[824] := 824; 
  a1[825] := 825; 
  a1[826] := 826; 
  a1[827] := 827; 
  a1[828] := 828; 
  a1[829] := 829; 
  a1[830] := 830; 
  a1[831] := 831; 
  a1[832] := 832; 
  a1[833] := 833; 
  a1[834] := 834; 
  a1[835] := 835; 
  a1[836] := 836; 
  a1[837] := 837; 
  a1[838] := 838; 
  a1[839] := 839; 
  a1[840] := 840; 
  a1[841] := 841; 
  a1[842] := 842; 
  a1[843] := 843; 
  a1[844] := 844; 
  a1[845] := 845; 
  a1[846] := 846; 
  a1[847] := 847; 
  a1[848] := 848; 
  a1[849] := 849; 
  a1[850] := 850; 
  a1[851] := 851; 
  a1[852] := 852; 
  a1[853] := 853; 
  a1[854] := 854; 
  a1[855] := 855; 
  a1[856] := 856; 
  a1[857] := 857; 
  a1[858] := 858; 
  a1[859] := 859; 
  a1[860] := 860; 
  a1[861] := 861; 
  a1[862] := 862; 
  a1[863] := 863; 
  a1[864] := 864; 
  a1[865] := 865; 
  a1[866] := 866; 
  a1[867] := 867; 
  a1[868] := 868; 
  a1[869] := 869; 
  a1[870] := 870; 
  a1[871] := 871; 
  a1[872] := 872; 
  a1[873] := 873; 
  a1[874] := 874; 
  a1[875] := 875; 
  a1[876] := 876; 
  a1[877] := 877; 
  a1[878] := 878; 
  a1[879] := 879; 
  a1[880] := 880; 
  a1[881] := 881; 
  a1[882] := 882; 
  a1[883] := 883; 
  a1[884] := 884; 
  a1[885] := 885; 
  a1[886] := 886; 
  a1[887] := 887; 
  a1[888] := 888; 
  a1[889] := 889; 
  a1[890] := 890; 
  a1[891] := 891; 
  a1[892] := 892; 
  a1[893] := 893; 
  a1[894] := 894; 
  a1[895] := 895; 
  a1[896] := 896; 
  a1[897] := 897; 
  a1[898] := 898; 
  a1[899] := 899; 
  a1[900] := 900; 
  a1[901] := 901; 
  a1[902] := 902; 
  a1[903] := 903; 
  a1[904] := 904; 
  a1[905] := 905; 
  a1[906] := 906; 
  a1[907] := 907; 
  a1[908] := 908; 
  a1[909] := 909; 
  a1[910] := 910; 
  a1[911] := 911; 
  a1[912] := 912; 
  a1[913] := 913; 
  a1[914] := 914; 
  a1[915] := 915; 
  a1[916] := 916; 
  a1[917] := 917; 
  a1[918] := 918; 
  a1[919] := 919; 
  a1[920] := 920; 
  a1[921] := 921; 
  a1[922] := 922; 
  a1[923] := 923; 
  a1[924] := 924; 
  a1[925] := 925; 
  a1[926] := 926; 
  a1[927] := 927; 
  a1[928] := 928; 
  a1[929] := 929; 
  a1[930] := 930; 
  a1[931] := 931; 
  a1[932] := 932; 
  a1[933] := 933; 
  a1[934] := 934; 
  a1[935] := 935; 
  a1[936] := 936; 
  a1[937] := 937; 
  a1[938] := 938; 
  a1[939] := 939; 
  a1[940] := 940; 
  a1[941] := 941; 
  a1[942] := 942; 
  a1[943] := 943; 
  a1[944] := 944; 
  a1[945] := 945; 
  a1[946] := 946; 
  a1[947] := 947; 
  a1[948] := 948; 
  a1[949] := 949; 
  a1[950] := 950; 
  a1[951] := 951; 
  a1[952] := 952; 
  a1[953] := 953; 
  a1[954] := 954; 
  a1[955] := 955; 
  a1[956] := 956; 
  a1[957] := 957; 
  a1[958] := 958; 
  a1[959] := 959; 
  a1[960] := 960; 
  a1[961] := 961; 
  a1[962] := 962; 
  a1[963] := 963; 
  a1[964] := 964; 
  a1[965] := 965; 
  a1[966] := 966; 
  a1[967] := 967; 
  a1[968] := 968; 
  a1[969] := 969; 
  a1[970] := 970; 
  a1[971] := 971; 
  a1[972] := 972; 
  a1[973] := 973; 
  a1[974] := 974; 
  a1[975] := 975; 
  a1[976] := 976; 
  a1[977] := 977; 
  a1[978] := 978; 
  a1[979] := 979; 
  a1[980] := 980; 
  a1[981] := 981; 
  a1[982] := 982; 
  a1[983] := 983; 
  a1[984] := 984; 
  a1[985] := 985; 
  a1[986] := 986; 
  a1[987] := 987; 
  a1[988] := 988; 
  a1[989] := 989; 
  a1[990] := 990; 
  a1[991] := 991; 
  a1[992] := 992; 
  a1[993] := 993; 
  a1[994] := 994; 
  a1[995] := 995; 
  a1[996] := 996; 
  a1[997] := 997; 
  a1[998] := 998; 
  a1[999] := 999; 
  a2[0] := 0; 
  a2[1] := 1; 
  a2[2] := 2; 
  a2[3] := 3; 
  a2[4] := 4; 
  a2[5] := 5; 
  a2[6] := 6; 
  a2[7] := 7; 
  a2[8] := 8; 
  a2[9] := 9; 
  a2[10] := 10; 
  a2[11] := 11; 
  a2[12] := 12; 
  a2[13] := 13; 
  a2[14] := 14; 
  a2[15] := 15; 
  a2[16] := 16; 
  a2[17] := 17; 
  a2[18] := 18; 
  a2[19] := 19; 
  a2[20] := 20; 
  a2[21] := 21; 
  a2[22] := 22; 
  a2[23] := 23; 
  a2[24] := 24; 
  a2[25] := 25; 
  a2[26] := 26; 
  a2[27] := 27; 
  a2[28] := 28; 
  a2[29] := 29; 
  a2[30] := 30; 
  a2[31] := 31; 
  a2[32] := 32; 
  a2[33] := 33; 
  a2[34] := 34; 
  a2[35] := 35; 
  a2[36] := 36; 
  a2[37] := 37; 
  a2[38] := 38; 
  a2[39] := 39; 
  a2[40] := 40; 
  a2[41] := 41; 
  a2[42] := 42; 
  a2[43] := 43; 
  a2[44] := 44; 
  a2[45] := 45; 
  a2[46] := 46; 
  a2[47] := 47; 
  a2[48] := 48; 
  a2[49] := 49; 
  a2[50] := 50; 
  a2[51] := 51; 
  a2[52] := 52; 
  a2[53] := 53; 
  a2[54] := 54; 
  a2[55] := 55; 
  a2[56] := 56; 
  a2[57] := 57; 
  a2[58] := 58; 
  a2[59] := 59; 
  a2[60] := 60; 
  a2[61] := 61; 
  a2[62] := 62; 
  a2[63] := 63; 
  a2[64] := 64; 
  a2[65] := 65; 
  a2[66] := 66; 
  a2[67] := 67; 
  a2[68] := 68; 
  a2[69] := 69; 
  a2[70] := 70; 
  a2[71] := 71; 
  a2[72] := 72; 
  a2[73] := 73; 
  a2[74] := 74; 
  a2[75] := 75; 
  a2[76] := 76; 
  a2[77] := 77; 
  a2[78] := 78; 
  a2[79] := 79; 
  a2[80] := 80; 
  a2[81] := 81; 
  a2[82] := 82; 
  a2[83] := 83; 
  a2[84] := 84; 
  a2[85] := 85; 
  a2[86] := 86; 
  a2[87] := 87; 
  a2[88] := 88; 
  a2[89] := 89; 
  a2[90] := 90; 
  a2[91] := 91; 
  a2[92] := 92; 
  a2[93] := 93; 
  a2[94] := 94; 
  a2[95] := 95; 
  a2[96] := 96; 
  a2[97] := 97; 
  a2[98] := 98; 
  a2[99] := 99; 
  a2[100] := 100; 
  a2[101] := 101; 
  a2[102] := 102; 
  a2[103] := 103; 
  a2[104] := 104; 
  a2[105] := 105; 
  a2[106] := 106; 
  a2[107] := 107; 
  a2[108] := 108; 
  a2[109] := 109; 
  a2[110] := 110; 
  a2[111] := 111; 
  a2[112] := 112; 
  a2[113] := 113; 
  a2[114] := 114; 
  a2[115] := 115; 
  a2[116] := 116; 
  a2[117] := 117; 
  a2[118] := 118; 
  a2[119] := 119; 
  a2[120] := 120; 
  a2[121] := 121; 
  a2[122] := 122; 
  a2[123] := 123; 
  a2[124] := 124; 
  a2[125] := 125; 
  a2[126] := 126; 
  a2[127] := 127; 
  a2[128] := 128; 
  a2[129] := 129; 
  a2[130] := 130; 
  a2[131] := 131; 
  a2[132] := 132; 
  a2[133] := 133; 
  a2[134] := 134; 
  a2[135] := 135; 
  a2[136] := 136; 
  a2[137] := 137; 
  a2[138] := 138; 
  a2[139] := 139; 
  a2[140] := 140; 
  a2[141] := 141; 
  a2[142] := 142; 
  a2[143] := 143; 
  a2[144] := 144; 
  a2[145] := 145; 
  a2[146] := 146; 
  a2[147] := 147; 
  a2[148] := 148; 
  a2[149] := 149; 
  a2[150] := 150; 
  a2[151] := 151; 
  a2[152] := 152; 
  a2[153] := 153; 
  a2[154] := 154; 
  a2[155] := 155; 
  a2[156] := 156; 
  a2[157] := 157; 
  a2[158] := 158; 
  a2[159] := 159; 
  a2[160] := 160; 
  a2[161] := 161; 
  a2[162] := 162; 
  a2[163] := 163; 
  a2[164] := 164; 
  a2[165] := 165; 
  a2[166] := 166; 
  a2[167] := 167; 
  a2[168] := 168; 
  a2[169] := 169; 
  a2[170] := 170; 
  a2[171] := 171; 
  a2[172] := 172; 
  a2[173] := 173; 
  a2[174] := 174; 
  a2[175] := 175; 
  a2[176] := 176; 
  a2[177] := 177; 
  a2[178] := 178; 
  a2[179] := 179; 
  a2[180] := 180; 
  a2[181] := 181; 
  a2[182] := 182; 
  a2[183] := 183; 
  a2[184] := 184; 
  a2[185] := 185; 
  a2[186] := 186; 
  a2[187] := 187; 
  a2[188] := 188; 
  a2[189] := 189; 
  a2[190] := 190; 
  a2[191] := 191; 
  a2[192] := 192; 
  a2[193] := 193; 
  a2[194] := 194; 
  a2[195] := 195; 
  a2[196] := 196; 
  a2[197] := 197; 
  a2[198] := 198; 
  a2[199] := 199; 
  a2[200] := 200; 
  a2[201] := 201; 
  a2[202] := 202; 
  a2[203] := 203; 
  a2[204] := 204; 
  a2[205] := 205; 
  a2[206] := 206; 
  a2[207] := 207; 
  a2[208] := 208; 
  a2[209] := 209; 
  a2[210] := 210; 
  a2[211] := 211; 
  a2[212] := 212; 
  a2[213] := 213; 
  a2[214] := 214; 
  a2[215] := 215; 
  a2[216] := 216; 
  a2[217] := 217; 
  a2[218] := 218; 
  a2[219] := 219; 
  a2[220] := 220; 
  a2[221] := 221; 
  a2[222] := 222; 
  a2[223] := 223; 
  a2[224] := 224; 
  a2[225] := 225; 
  a2[226] := 226; 
  a2[227] := 227; 
  a2[228] := 228; 
  a2[229] := 229; 
  a2[230] := 230; 
  a2[231] := 231; 
  a2[232] := 232; 
  a2[233] := 233; 
  a2[234] := 234; 
  a2[235] := 235; 
  a2[236] := 236; 
  a2[237] := 237; 
  a2[238] := 238; 
  a2[239] := 239; 
  a2[240] := 240; 
  a2[241] := 241; 
  a2[242] := 242; 
  a2[243] := 243; 
  a2[244] := 244; 
  a2[245] := 245; 
  a2[246] := 246; 
  a2[247] := 247; 
  a2[248] := 248; 
  a2[249] := 249; 
  a2[250] := 250; 
  a2[251] := 251; 
  a2[252] := 252; 
  a2[253] := 253; 
  a2[254] := 254; 
  a2[255] := 255; 
  a2[256] := 256; 
  a2[257] := 257; 
  a2[258] := 258; 
  a2[259] := 259; 
  a2[260] := 260; 
  a2[261] := 261; 
  a2[262] := 262; 
  a2[263] := 263; 
  a2[264] := 264; 
  a2[265] := 265; 
  a2[266] := 266; 
  a2[267] := 267; 
  a2[268] := 268; 
  a2[269] := 269; 
  a2[270] := 270; 
  a2[271] := 271; 
  a2[272] := 272; 
  a2[273] := 273; 
  a2[274] := 274; 
  a2[275] := 275; 
  a2[276] := 276; 
  a2[277] := 277; 
  a2[278] := 278; 
  a2[279] := 279; 
  a2[280] := 280; 
  a2[281] := 281; 
  a2[282] := 282; 
  a2[283] := 283; 
  a2[284] := 284; 
  a2[285] := 285; 
  a2[286] := 286; 
  a2[287] := 287; 
  a2[288] := 288; 
  a2[289] := 289; 
  a2[290] := 290; 
  a2[291] := 291; 
  a2[292] := 292; 
  a2[293] := 293; 
  a2[294] := 294; 
  a2[295] := 295; 
  a2[296] := 296; 
  a2[297] := 297; 
  a2[298] := 298; 
  a2[299] := 299; 
  a2[300] := 300; 
  a2[301] := 301; 
  a2[302] := 302; 
  a2[303] := 303; 
  a2[304] := 304; 
  a2[305] := 305; 
  a2[306] := 306; 
  a2[307] := 307; 
  a2[308] := 308; 
  a2[309] := 309; 
  a2[310] := 310; 
  a2[311] := 311; 
  a2[312] := 312; 
  a2[313] := 313; 
  a2[314] := 314; 
  a2[315] := 315; 
  a2[316] := 316; 
  a2[317] := 317; 
  a2[318] := 318; 
  a2[319] := 319; 
  a2[320] := 320; 
  a2[321] := 321; 
  a2[322] := 322; 
  a2[323] := 323; 
  a2[324] := 324; 
  a2[325] := 325; 
  a2[326] := 326; 
  a2[327] := 327; 
  a2[328] := 328; 
  a2[329] := 329; 
  a2[330] := 330; 
  a2[331] := 331; 
  a2[332] := 332; 
  a2[333] := 333; 
  a2[334] := 334; 
  a2[335] := 335; 
  a2[336] := 336; 
  a2[337] := 337; 
  a2[338] := 338; 
  a2[339] := 339; 
  a2[340] := 340; 
  a2[341] := 341; 
  a2[342] := 342; 
  a2[343] := 343; 
  a2[344] := 344; 
  a2[345] := 345; 
  a2[346] := 346; 
  a2[347] := 347; 
  a2[348] := 348; 
  a2[349] := 349; 
  a2[350] := 350; 
  a2[351] := 351; 
  a2[352] := 352; 
  a2[353] := 353; 
  a2[354] := 354; 
  a2[355] := 355; 
  a2[356] := 356; 
  a2[357] := 357; 
  a2[358] := 358; 
  a2[359] := 359; 
  a2[360] := 360; 
  a2[361] := 361; 
  a2[362] := 362; 
  a2[363] := 363; 
  a2[364] := 364; 
  a2[365] := 365; 
  a2[366] := 366; 
  a2[367] := 367; 
  a2[368] := 368; 
  a2[369] := 369; 
  a2[370] := 370; 
  a2[371] := 371; 
  a2[372] := 372; 
  a2[373] := 373; 
  a2[374] := 374; 
  a2[375] := 375; 
  a2[376] := 376; 
  a2[377] := 377; 
  a2[378] := 378; 
  a2[379] := 379; 
  a2[380] := 380; 
  a2[381] := 381; 
  a2[382] := 382; 
  a2[383] := 383; 
  a2[384] := 384; 
  a2[385] := 385; 
  a2[386] := 386; 
  a2[387] := 387; 
  a2[388] := 388; 
  a2[389] := 389; 
  a2[390] := 390; 
  a2[391] := 391; 
  a2[392] := 392; 
  a2[393] := 393; 
  a2[394] := 394; 
  a2[395] := 395; 
  a2[396] := 396; 
  a2[397] := 397; 
  a2[398] := 398; 
  a2[399] := 399; 
  a2[400] := 400; 
  a2[401] := 401; 
  a2[402] := 402; 
  a2[403] := 403; 
  a2[404] := 404; 
  a2[405] := 405; 
  a2[406] := 406; 
  a2[407] := 407; 
  a2[408] := 408; 
  a2[409] := 409; 
  a2[410] := 410; 
  a2[411] := 411; 
  a2[412] := 412; 
  a2[413] := 413; 
  a2[414] := 414; 
  a2[415] := 415; 
  a2[416] := 416; 
  a2[417] := 417; 
  a2[418] := 418; 
  a2[419] := 419; 
  a2[420] := 420; 
  a2[421] := 421; 
  a2[422] := 422; 
  a2[423] := 423; 
  a2[424] := 424; 
  a2[425] := 425; 
  a2[426] := 426; 
  a2[427] := 427; 
  a2[428] := 428; 
  a2[429] := 429; 
  a2[430] := 430; 
  a2[431] := 431; 
  a2[432] := 432; 
  a2[433] := 433; 
  a2[434] := 434; 
  a2[435] := 435; 
  a2[436] := 436; 
  a2[437] := 437; 
  a2[438] := 438; 
  a2[439] := 439; 
  a2[440] := 440; 
  a2[441] := 441; 
  a2[442] := 442; 
  a2[443] := 443; 
  a2[444] := 444; 
  a2[445] := 445; 
  a2[446] := 446; 
  a2[447] := 447; 
  a2[448] := 448; 
  a2[449] := 449; 
  a2[450] := 450; 
  a2[451] := 451; 
  a2[452] := 452; 
  a2[453] := 453; 
  a2[454] := 454; 
  a2[455] := 455; 
  a2[456] := 456; 
  a2[457] := 457; 
  a2[458] := 458; 
  a2[459] := 459; 
  a2[460] := 460; 
  a2[461] := 461; 
  a2[462] := 462; 
  a2[463] := 463; 
  a2[464] := 464; 
  a2[465] := 465; 
  a2[466] := 466; 
  a2[467] := 467; 
  a2[468] := 468; 
  a2[469] := 469; 
  a2[470] := 470; 
  a2[471] := 471; 
  a2[472] := 472; 
  a2[473] := 473; 
  a2[474] := 474; 
  a2[475] := 475; 
  a2[476] := 476; 
  a2[477] := 477; 
  a2[478] := 478; 
  a2[479] := 479; 
  a2[480] := 480; 
  a2[481] := 481; 
  a2[482] := 482; 
  a2[483] := 483; 
  a2[484] := 484; 
  a2[485] := 485; 
  a2[486] := 486; 
  a2[487] := 487; 
  a2[488] := 488; 
  a2[489] := 489; 
  a2[490] := 490; 
  a2[491] := 491; 
  a2[492] := 492; 
  a2[493] := 493; 
  a2[494] := 494; 
  a2[495] := 495; 
  a2[496] := 496; 
  a2[497] := 497; 
  a2[498] := 498; 
  a2[499] := 499; 
  a2[500] := 500; 
  a2[501] := 501; 
  a2[502] := 502; 
  a2[503] := 503; 
  a2[504] := 504; 
  a2[505] := 505; 
  a2[506] := 506; 
  a2[507] := 507; 
  a2[508] := 508; 
  a2[509] := 509; 
  a2[510] := 510; 
  a2[511] := 511; 
  a2[512] := 512; 
  a2[513] := 513; 
  a2[514] := 514; 
  a2[515] := 515; 
  a2[516] := 516; 
  a2[517] := 517; 
  a2[518] := 518; 
  a2[519] := 519; 
  a2[520] := 520; 
  a2[521] := 521; 
  a2[522] := 522; 
  a2[523] := 523; 
  a2[524] := 524; 
  a2[525] := 525; 
  a2[526] := 526; 
  a2[527] := 527; 
  a2[528] := 528; 
  a2[529] := 529; 
  a2[530] := 530; 
  a2[531] := 531; 
  a2[532] := 532; 
  a2[533] := 533; 
  a2[534] := 534; 
  a2[535] := 535; 
  a2[536] := 536; 
  a2[537] := 537; 
  a2[538] := 538; 
  a2[539] := 539; 
  a2[540] := 540; 
  a2[541] := 541; 
  a2[542] := 542; 
  a2[543] := 543; 
  a2[544] := 544; 
  a2[545] := 545; 
  a2[546] := 546; 
  a2[547] := 547; 
  a2[548] := 548; 
  a2[549] := 549; 
  a2[550] := 550; 
  a2[551] := 551; 
  a2[552] := 552; 
  a2[553] := 553; 
  a2[554] := 554; 
  a2[555] := 555; 
  a2[556] := 556; 
  a2[557] := 557; 
  a2[558] := 558; 
  a2[559] := 559; 
  a2[560] := 560; 
  a2[561] := 561; 
  a2[562] := 562; 
  a2[563] := 563; 
  a2[564] := 564; 
  a2[565] := 565; 
  a2[566] := 566; 
  a2[567] := 567; 
  a2[568] := 568; 
  a2[569] := 569; 
  a2[570] := 570; 
  a2[571] := 571; 
  a2[572] := 572; 
  a2[573] := 573; 
  a2[574] := 574; 
  a2[575] := 575; 
  a2[576] := 576; 
  a2[577] := 577; 
  a2[578] := 578; 
  a2[579] := 579; 
  a2[580] := 580; 
  a2[581] := 581; 
  a2[582] := 582; 
  a2[583] := 583; 
  a2[584] := 584; 
  a2[585] := 585; 
  a2[586] := 586; 
  a2[587] := 587; 
  a2[588] := 588; 
  a2[589] := 589; 
  a2[590] := 590; 
  a2[591] := 591; 
  a2[592] := 592; 
  a2[593] := 593; 
  a2[594] := 594; 
  a2[595] := 595; 
  a2[596] := 596; 
  a2[597] := 597; 
  a2[598] := 598; 
  a2[599] := 599; 
  a2[600] := 600; 
  a2[601] := 601; 
  a2[602] := 602; 
  a2[603] := 603; 
  a2[604] := 604; 
  a2[605] := 605; 
  a2[606] := 606; 
  a2[607] := 607; 
  a2[608] := 608; 
  a2[609] := 609; 
  a2[610] := 610; 
  a2[611] := 611; 
  a2[612] := 612; 
  a2[613] := 613; 
  a2[614] := 614; 
  a2[615] := 615; 
  a2[616] := 616; 
  a2[617] := 617; 
  a2[618] := 618; 
  a2[619] := 619; 
  a2[620] := 620; 
  a2[621] := 621; 
  a2[622] := 622; 
  a2[623] := 623; 
  a2[624] := 624; 
  a2[625] := 625; 
  a2[626] := 626; 
  a2[627] := 627; 
  a2[628] := 628; 
  a2[629] := 629; 
  a2[630] := 630; 
  a2[631] := 631; 
  a2[632] := 632; 
  a2[633] := 633; 
  a2[634] := 634; 
  a2[635] := 635; 
  a2[636] := 636; 
  a2[637] := 637; 
  a2[638] := 638; 
  a2[639] := 639; 
  a2[640] := 640; 
  a2[641] := 641; 
  a2[642] := 642; 
  a2[643] := 643; 
  a2[644] := 644; 
  a2[645] := 645; 
  a2[646] := 646; 
  a2[647] := 647; 
  a2[648] := 648; 
  a2[649] := 649; 
  a2[650] := 650; 
  a2[651] := 651; 
  a2[652] := 652; 
  a2[653] := 653; 
  a2[654] := 654; 
  a2[655] := 655; 
  a2[656] := 656; 
  a2[657] := 657; 
  a2[658] := 658; 
  a2[659] := 659; 
  a2[660] := 660; 
  a2[661] := 661; 
  a2[662] := 662; 
  a2[663] := 663; 
  a2[664] := 664; 
  a2[665] := 665; 
  a2[666] := 666; 
  a2[667] := 667; 
  a2[668] := 668; 
  a2[669] := 669; 
  a2[670] := 670; 
  a2[671] := 671; 
  a2[672] := 672; 
  a2[673] := 673; 
  a2[674] := 674; 
  a2[675] := 675; 
  a2[676] := 676; 
  a2[677] := 677; 
  a2[678] := 678; 
  a2[679] := 679; 
  a2[680] := 680; 
  a2[681] := 681; 
  a2[682] := 682; 
  a2[683] := 683; 
  a2[684] := 684; 
  a2[685] := 685; 
  a2[686] := 686; 
  a2[687] := 687; 
  a2[688] := 688; 
  a2[689] := 689; 
  a2[690] := 690; 
  a2[691] := 691; 
  a2[692] := 692; 
  a2[693] := 693; 
  a2[694] := 694; 
  a2[695] := 695; 
  a2[696] := 696; 
  a2[697] := 697; 
  a2[698] := 698; 
  a2[699] := 699; 
  a2[700] := 700; 
  a2[701] := 701; 
  a2[702] := 702; 
  a2[703] := 703; 
  a2[704] := 704; 
  a2[705] := 705; 
  a2[706] := 706; 
  a2[707] := 707; 
  a2[708] := 708; 
  a2[709] := 709; 
  a2[710] := 710; 
  a2[711] := 711; 
  a2[712] := 712; 
  a2[713] := 713; 
  a2[714] := 714; 
  a2[715] := 715; 
  a2[716] := 716; 
  a2[717] := 717; 
  a2[718] := 718; 
  a2[719] := 719; 
  a2[720] := 720; 
  a2[721] := 721; 
  a2[722] := 722; 
  a2[723] := 723; 
  a2[724] := 724; 
  a2[725] := 725; 
  a2[726] := 726; 
  a2[727] := 727; 
  a2[728] := 728; 
  a2[729] := 729; 
  a2[730] := 730; 
  a2[731] := 731; 
  a2[732] := 732; 
  a2[733] := 733; 
  a2[734] := 734; 
  a2[735] := 735; 
  a2[736] := 736; 
  a2[737] := 737; 
  a2[738] := 738; 
  a2[739] := 739; 
  a2[740] := 740; 
  a2[741] := 741; 
  a2[742] := 742; 
  a2[743] := 743; 
  a2[744] := 744; 
  a2[745] := 745; 
  a2[746] := 746; 
  a2[747] := 747; 
  a2[748] := 748; 
  a2[749] := 749; 
  a2[750] := 750; 
  a2[751] := 751; 
  a2[752] := 752; 
  a2[753] := 753; 
  a2[754] := 754; 
  a2[755] := 755; 
  a2[756] := 756; 
  a2[757] := 757; 
  a2[758] := 758; 
  a2[759] := 759; 
  a2[760] := 760; 
  a2[761] := 761; 
  a2[762] := 762; 
  a2[763] := 763; 
  a2[764] := 764; 
  a2[765] := 765; 
  a2[766] := 766; 
  a2[767] := 767; 
  a2[768] := 768; 
  a2[769] := 769; 
  a2[770] := 770; 
  a2[771] := 771; 
  a2[772] := 772; 
  a2[773] := 773; 
  a2[774] := 774; 
  a2[775] := 775; 
  a2[776] := 776; 
  a2[777] := 777; 
  a2[778] := 778; 
  a2[779] := 779; 
  a2[780] := 780; 
  a2[781] := 781; 
  a2[782] := 782; 
  a2[783] := 783; 
  a2[784] := 784; 
  a2[785] := 785; 
  a2[786] := 786; 
  a2[787] := 787; 
  a2[788] := 788; 
  a2[789] := 789; 
  a2[790] := 790; 
  a2[791] := 791; 
  a2[792] := 792; 
  a2[793] := 793; 
  a2[794] := 794; 
  a2[795] := 795; 
  a2[796] := 796; 
  a2[797] := 797; 
  a2[798] := 798; 
  a2[799] := 799; 
  a2[800] := 800; 
  a2[801] := 801; 
  a2[802] := 802; 
  a2[803] := 803; 
  a2[804] := 804; 
  a2[805] := 805; 
  a2[806] := 806; 
  a2[807] := 807; 
  a2[808] := 808; 
  a2[809] := 809; 
  a2[810] := 810; 
  a2[811] := 811; 
  a2[812] := 812; 
  a2[813] := 813; 
  a2[814] := 814; 
  a2[815] := 815; 
  a2[816] := 816; 
  a2[817] := 817; 
  a2[818] := 818; 
  a2[819] := 819; 
  a2[820] := 820; 
  a2[821] := 821; 
  a2[822] := 822; 
  a2[823] := 823; 
  a2[824] := 824; 
  a2[825] := 825; 
  a2[826] := 826; 
  a2[827] := 827; 
  a2[828] := 828; 
  a2[829] := 829; 
  a2[830] := 830; 
  a2[831] := 831; 
  a2[832] := 832; 
  a2[833] := 833; 
  a2[834] := 834; 
  a2[835] := 835; 
  a2[836] := 836; 
  a2[837] := 837; 
  a2[838] := 838; 
  a2[839] := 839; 
  a2[840] := 840; 
  a2[841] := 841; 
  a2[842] := 842; 
  a2[843] := 843; 
  a2[844] := 844; 
  a2[845] := 845; 
  a2[846] := 846; 
  a2[847] := 847; 
  a2[848] := 848; 
  a2[849] := 849; 
  a2[850] := 850; 
  a2[851] := 851; 
  a2[852] := 852; 
  a2[853] := 853; 
  a2[854] := 854; 
  a2[855] := 855; 
  a2[856] := 856; 
  a2[857] := 857; 
  a2[858] := 858; 
  a2[859] := 859; 
  a2[860] := 860; 
  a2[861] := 861; 
  a2[862] := 862; 
  a2[863] := 863; 
  a2[864] := 864; 
  a2[865] := 865; 
  a2[866] := 866; 
  a2[867] := 867; 
  a2[868] := 868; 
  a2[869] := 869; 
  a2[870] := 870; 
  a2[871] := 871; 
  a2[872] := 872; 
  a2[873] := 873; 
  a2[874] := 874; 
  a2[875] := 875; 
  a2[876] := 876; 
  a2[877] := 877; 
  a2[878] := 878; 
  a2[879] := 879; 
  a2[880] := 880; 
  a2[881] := 881; 
  a2[882] := 882; 
  a2[883] := 883; 
  a2[884] := 884; 
  a2[885] := 885; 
  a2[886] := 886; 
  a2[887] := 887; 
  a2[888] := 888; 
  a2[889] := 889; 
  a2[890] := 890; 
  a2[891] := 891; 
  a2[892] := 892; 
  a2[893] := 893; 
  a2[894] := 894; 
  a2[895] := 895; 
  a2[896] := 896; 
  a2[897] := 897; 
  a2[898] := 898; 
  a2[899] := 899; 
  a2[900] := 900; 
  a2[901] := 901; 
  a2[902] := 902; 
  a2[903] := 903; 
  a2[904] := 904; 
  a2[905] := 905; 
  a2[906] := 906; 
  a2[907] := 907; 
  a2[908] := 908; 
  a2[909] := 909; 
  a2[910] := 910; 
  a2[911] := 911; 
  a2[912] := 912; 
  a2[913] := 913; 
  a2[914] := 914; 
  a2[915] := 915; 
  a2[916] := 916; 
  a2[917] := 917; 
  a2[918] := 918; 
  a2[919] := 919; 
  a2[920] := 920; 
  a2[921] := 921; 
  a2[922] := 922; 
  a2[923] := 923; 
  a2[924] := 924; 
  a2[925] := 925; 
  a2[926] := 926; 
  a2[927] := 927; 
  a2[928] := 928; 
  a2[929] := 929; 
  a2[930] := 930; 
  a2[931] := 931; 
  a2[932] := 932; 
  a2[933] := 933; 
  a2[934] := 934; 
  a2[935] := 935; 
  a2[936] := 936; 
  a2[937] := 937; 
  a2[938] := 938; 
  a2[939] := 939; 
  a2[940] := 940; 
  a2[941] := 941; 
  a2[942] := 942; 
  a2[943] := 943; 
  a2[944] := 944; 
  a2[945] := 945; 
  a2[946] := 946; 
  a2[947] := 947; 
  a2[948] := 948; 
  a2[949] := 949; 
  a2[950] := 950; 
  a2[951] := 951; 
  a2[952] := 952; 
  a2[953] := 953; 
  a2[954] := 954; 
  a2[955] := 955; 
  a2[956] := 956; 
  a2[957] := 957; 
  a2[958] := 958; 
  a2[959] := 959; 
  a2[960] := 960; 
  a2[961] := 961; 
  a2[962] := 962; 
  a2[963] := 963; 
  a2[964] := 964; 
  a2[965] := 965; 
  a2[966] := 966; 
  a2[967] := 967; 
  a2[968] := 968; 
  a2[969] := 969; 
  a2[970] := 970; 
  a2[971] := 971; 
  a2[972] := 972; 
  a2[973] := 973; 
  a2[974] := 974; 
  a2[975] := 975; 
  a2[976] := 976; 
  a2[977] := 977; 
  a2[978] := 978; 
  a2[979] := 979; 
  a2[980] := 980; 
  a2[981] := 981; 
  a2[982] := 982; 
  a2[983] := 983; 
  a2[984] := 984; 
  a2[985] := 985; 
  a2[986] := 986; 
  a2[987] := 987; 
  a2[988] := 988; 
  a2[989] := 989; 
  a2[990] := 990; 
  a2[991] := 991; 
  a2[992] := 992; 
  a2[993] := 993; 
  a2[994] := 994; 
  a2[995] := 995; 
  a2[996] := 996; 
  a2[997] := 997; 
  a2[998] := 998; 
  a2[999] := 999; 
END Init;

END Quiz.

Re: Oberon Competition - Win a $US50 Amazon Gift Voucher

Posted: Sat Dec 06, 2014 12:06 pm
by cfbsoftware
Not exactly what I had in mind ;)

If nobody can beat Alex's time there will be a second prize of a $US50 Amazon Gift Voucher awarded to the person who submits the fastest module which as well as being faster than the original is also no bigger (code size) than the original.

I have also had to amend the rules - see below for details.

Re: Oberon Competition - Win a $US50 Amazon Gift Voucher

Posted: Sat Dec 06, 2014 5:04 pm
by Alexander Shiryaev

Code: Select all

MODULE Quiz;

  VAR a1*, a2*: ARRAY 1000 OF INTEGER;
      
  PROCEDURE* Init*;
    VAR i: INTEGER;
  BEGIN i := 1000;
    REPEAT DEC(i);
      a1[i] := i;
      a2[i] := i
    UNTIL i = 0
  END Init;

END Quiz.

Re: Oberon Competition - Win a $US50 Amazon Gift Voucher

Posted: Mon Dec 08, 2014 8:43 am
by pahihu
MODULE Quiz;

VAR
a1*, a2*: ARRAY 1000 OF INTEGER;

PROCEDURE* Init*;
CONST N = LEN(a1) - 1;
VAR i: INTEGER;
BEGIN
FOR i := 0 TO N DO
a1 := i;
a2 := i
END
END Init;

Re: Oberon Competition - Win a $US50 Amazon Gift Voucher

Posted: Fri Dec 12, 2014 9:48 am
by dsar
I'm not sure if I'm qualified to partecipate because I don't have Astrobe and neither a platform to test the code.

Code: Select all

MODULE Quiz;

VAR
  a1*, a2*, init: ARRAY 1000 OF INTEGER;
  i: INTEGER;

PROCEDURE Init*;
BEGIN
  a1 := init;
  a2 := init
END Init;

BEGIN
  FOR i := 0 TO LEN(init) - 1 DO
    init[i] := i
  END
END Quiz.
The idea is to have an already initialized array (initialized during the initialization of the program), after that the other ones are initialized with a simple array assignment (that in ARM is efficient and fast)

Re: Oberon Competition - Win a $US50 Amazon Gift Voucher

Posted: Thu Jan 01, 2015 11:37 am
by cfbsoftware
The competition has now ended. For comparison purposes all of the entries were compiled using Astrobe for Cortex-M3 v5.2 and executed on an LPC1769 running @120MHz. The resulting times (in uSecs) and the code size (in bytes) for each of the entries in order of submission are:

Code: Select all

                            
Submitted by                Time              Size
Original                     695               160
Iljin                        115             24536
Shiryaev                     167                64
Pahihu                       194                72
Dsar                         167               188
Consequently, congratulations go to the two winners: AlexIljin (fastest) and Alexander Shiryaev (fastest/smallest). They will be contacted shortly to arrange delivery of their prizes.

However, there is at least one better solution in the fastest/smallest category: 126 uSecs/92 bytes. It takes advantage of the fact that it is more efficient to access array variables in leaf procedures via parameters rather than globals:

Code: Select all

MODULE Quiz;

  VAR a1*, a2*: ARRAY 1000 OF INTEGER;
      
  PROCEDURE* Run(VAR a1, a2: ARRAY OF INTEGER);
    VAR i: INTEGER;
  BEGIN i := LEN(a1);
    REPEAT DEC(i);
      a1[i] := i;
      a2[i] := i
    UNTIL i = 0
  END Run;

  PROCEDURE Init*;
  BEGIN
    Run(a1, a2);
  END Init;
  
END Quiz.