diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | 1.txt | 2250 | ||||
-rw-r--r-- | 1a.c | 34 | ||||
-rw-r--r-- | 1b.c | 56 | ||||
-rw-r--r-- | 2.txt | 2500 | ||||
-rw-r--r-- | 2a.c | 78 | ||||
-rw-r--r-- | 2b.c | 90 | ||||
-rw-r--r-- | 3.txt | 300 | ||||
-rw-r--r-- | 3a.c | 65 | ||||
-rw-r--r-- | 3b.c | 87 | ||||
-rw-r--r-- | 4.txt | 1000 | ||||
-rw-r--r-- | 4a.c | 53 | ||||
-rw-r--r-- | 4b.c | 51 | ||||
-rw-r--r-- | makefile | 10 |
14 files changed, 6575 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba077a4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +bin @@ -0,0 +1,2250 @@ +9609 +7601 +7142 +5278 +9374 +6815 +1050 +6329 +8016 + +12477 +28601 + +1056 +5037 +1660 +3786 +2611 +6689 +3159 +2973 +5286 +2401 +6231 +7460 + +3689 +3909 +9254 +5704 +10307 +10173 +9336 +4586 + +5476 +16022 +9109 +11504 +6746 + +1006 +1685 +2688 +4776 +6234 +5807 +4943 +4944 +4982 +1731 +3196 +5573 +5269 +1266 + +12097 +15573 +1113 +8920 +14145 + +4723 +2428 +3864 +4657 +5046 +5135 +5104 +1867 +5130 +1751 +6029 +4551 +1924 +4998 +4255 + +2706 +5595 +10508 +3676 +11580 +6061 +7902 + +2523 +11236 +1915 +15774 +7639 + +2996 +3656 +4491 +4493 +6136 +3112 +7342 +3600 +6111 +4229 +7548 + +4200 +8635 +1003 +1223 +3096 +10734 +8319 +3772 + +7063 +3538 +4856 +1250 +1917 +4852 +4792 +7407 +3413 +7326 +7378 +1778 + +1659 +3390 +2802 +3226 +3993 +9583 +6504 +3296 +5998 + +1800 +1144 +2569 +4426 +5871 +4988 +1309 +2330 +3236 +3217 +3778 +2636 +3116 +2300 +1428 + +69249 + +6905 +2506 +2429 +3904 +2960 +1420 +2687 +7150 +1368 +4253 +3584 +1302 + +9585 +34214 + +5442 +8217 +2320 +6864 +1354 +5791 +5492 +4979 +1760 +7753 + +18036 +11876 +1936 +4605 + +10819 +13733 +13726 +10233 + +5450 +4315 +3008 +3419 +5434 +1601 +6834 +2144 +3943 +3573 +6366 +6680 +1197 + +3681 +4233 +3461 +1646 +5161 +3542 +5489 +4635 +1776 +4811 +3026 +4858 +4207 +5716 +4751 + +3271 +5205 +7916 +7618 +8354 +4445 +4604 + +2489 +7439 +6911 +5378 +7363 +2207 +7303 +4757 +5989 +4902 +6889 +5074 + +4451 +34499 + +6519 +7439 +2225 +1237 +2167 +2041 +3403 +8289 +3545 +2936 + +25613 +23988 +15999 + +10278 +9240 +8736 +10445 +5005 +9339 +9059 +9198 + +14821 +8000 +15113 +10430 +11981 + +2745 +6427 +3564 +3822 +1674 +6615 +4817 +5026 +6243 +5295 +4027 +4861 +6554 + +24901 +7628 + +10299 +8153 +3359 +5982 +5207 +4491 +5267 +5364 + +7962 +12190 +1998 +10722 +2890 + +27425 +19199 + +5347 +3738 +2833 +12747 +6505 +3476 + +2360 +6688 +11640 +13899 + +5152 +4272 +7284 +3491 +4225 +3271 +7751 +6376 +2695 + +8227 +7171 +3366 +1663 +4466 +2444 +7239 +3673 +5321 +6363 + +6362 +4237 +7358 +1723 +7514 +5741 +2621 +4413 +5502 +5875 + +13451 +12610 +8672 +2841 + +1956 +3310 +3011 +2938 +5046 +4571 +3326 +2013 +5980 +5145 +3226 +5073 +3676 +2763 +4542 + +4200 +9203 +6238 +9501 +3972 +6776 +2730 +6126 + +13151 +2622 +2592 +10013 +10227 +4677 + +3151 +2107 +7564 +3219 +1353 +7924 +7287 +3273 +2117 +4211 + +6914 +1354 +3517 +1835 +1694 +4044 +2569 +4755 +6720 +1104 + +10704 +2576 +2773 +9002 +3321 +9443 +8346 +9054 + +4584 +2075 +3303 +2156 +1250 +4717 +1391 +2977 +3845 +1433 +3112 +5675 +6058 +1451 +5500 + +8712 +8235 +2732 +5337 +11076 +9434 +1593 + +27831 +3385 + +1497 +7378 +3442 +1957 +2620 +2208 +3808 +1793 +1306 +6721 +4098 +5050 + +3197 +1377 +2289 +7534 +8484 +5831 +3671 +2524 +6756 + +24827 +5119 + +1701 +5156 +3625 +2469 +5728 +5698 +4538 +1505 +1475 +3934 +3758 +5405 +1549 +5019 +1433 + +12606 +14593 +14761 +12375 + +9284 +16208 +6022 +5550 + +8956 +1473 +10077 +2220 +7314 +3561 +6013 + +1064 +1538 +3292 +3854 +3882 +6008 +5364 +4326 +1958 +4712 +3389 +4496 +5501 +2181 +1666 + +2424 +5342 +11963 +1108 +6698 +7440 +4334 + +7167 +3677 +4923 +9204 +4469 +5934 +6071 +8355 + +4457 +2779 +5014 +6156 +7431 +1879 +2349 +4038 +7353 +1453 +6980 +1890 + +1348 +8892 +13667 +2877 +9049 +8967 + +7904 +6871 +7301 +7952 +5953 +7562 +3289 +6654 + +13903 +9705 +11858 +7619 +12963 +5629 + +31307 +5533 + +1431 +5521 +3430 +4972 +4077 +1771 +2134 +2614 +1464 +1882 +1471 +2024 +4789 +4419 + +8927 +9768 +1070 +12640 +3597 +5034 + +4369 +5821 +4181 +2802 +6503 +2530 +1530 +1047 +3537 +2732 +5169 +4156 +4348 +1831 + +9491 +6837 +3855 +2320 +1689 +3393 +6974 +5192 +9255 + +2791 +3416 +2183 +2919 +3732 +3010 +5213 +7927 +4855 +4468 + +7089 +36535 + +9669 +2139 +10069 +7918 +9942 +1446 + +4381 +3053 +3216 +4395 +2710 +3329 +2837 +1395 +3310 +1598 +1620 +6310 +3405 +4005 + +3639 +1485 +5221 +5767 +2415 +5401 +4011 +3377 +2977 +6529 +1921 +5012 +4426 + +4202 +17425 + +1350 +1077 +4747 +1735 +4362 +6110 +5006 +8519 +7785 + +10393 +3532 +4113 +8856 +11626 +7552 +11220 + +8925 +8081 +2340 +2296 +9558 +6452 +3604 +8601 +1958 + +4519 +2675 +1343 +4853 +5372 +2362 +4274 +4636 +3144 +5231 +4867 +5533 +1505 +5978 +1649 + +4955 +6133 +6469 +5120 +4257 +3936 +3661 +4995 +6040 +2616 +5863 +6886 +1653 + +4106 +1467 +2641 +1772 +4588 +1750 +1333 +4312 +4852 +1508 +5620 +4535 +3888 +4007 +2194 + +27508 + +10203 +6474 +2054 +11285 +12800 + +10249 +7004 +6396 +1990 +5883 +9275 +4687 + +22359 +8260 +9536 + +2657 +6895 +4538 +4635 +1259 +1819 +2679 +3703 +6127 +4197 +4009 +4652 +2708 + +49278 + +16243 +33427 + +5219 +3052 +4510 +9946 +5429 +5163 +2653 + +4676 +5247 +6267 +2648 +1257 +2335 +3737 +1443 +2726 +2361 +2134 +1952 +1021 +1753 + +4671 +7281 +8217 +6170 +1182 +8778 +5289 +5035 + +6067 +3461 +7448 +2117 +8702 +2849 +9659 +1410 +9402 + +10607 +5652 +3127 +5594 +2423 +2591 + +2138 +4007 +6383 +5597 +3074 +5811 +2178 +6220 +2212 +4271 +5410 +6677 + +5313 +5507 +7753 +5492 +5041 +4967 +7644 +10538 + +2062 +7568 +1439 +1621 +8216 +4952 +4358 +3391 +4776 + +4015 +4854 +2935 +5177 +2131 +5192 +3300 +3337 +5223 +6469 +6101 +3917 +3492 +3986 + +8942 +9447 +6152 +2764 +6196 +3116 +6478 +9334 +9346 + +10560 +5894 +12105 +4239 +4573 + +1752 +6751 +3684 +2236 +6195 +11108 +5450 + +32451 +29152 + +13915 +7001 +11778 +2626 +3026 +12725 + +6410 +4265 +10923 +9587 +7411 + +4943 +5272 +2453 +7324 +3815 +6049 +2936 +5905 +3187 +3675 +3860 +7143 + +58413 + +6544 +11733 +11746 +3288 +5411 +5555 +3796 + +4852 +6567 +1494 +4644 +6183 +2444 +5145 +1015 +5088 +7905 +6491 + +3550 +5679 +4312 +2128 +2262 +3597 +2249 +2472 +4758 +3927 +5369 +2278 + +1399 +3791 +4817 +13948 +10037 +6154 + +7877 +16900 +10571 +18965 + +4836 +5457 +6380 +4241 +4969 +3635 +4160 +5451 +6164 +5334 + +4961 +2514 +1620 +2494 +6373 +4040 +7544 +2595 +2330 +6927 +7906 + +8023 +6672 +3565 +9038 +7154 +5236 + +4297 +3122 +4779 +3937 +3165 +5012 +1298 +5405 +6175 +3862 +3469 +3533 +5411 +6349 + +36291 +32851 + +7992 +4095 +4841 +6728 +2275 +1549 +8143 +8494 +7144 +5800 + +3064 +1314 +4224 +5969 +2913 +2622 +4833 +3113 +3663 +5351 +5102 +2930 +6048 +5658 +4773 + +1771 +9851 +9844 +4001 +1343 +6124 +3826 +7647 + +8488 +7700 +19028 +2822 + +4541 +6311 +6499 +1043 +5888 +2631 +3824 +3137 +6957 +1372 +1755 +5852 +4944 + +7010 +7705 +7380 +5693 +6466 +2388 +4584 +1309 +5295 +4232 + +8997 +11222 +12715 +13341 + +3389 +5375 +6730 +1723 +4179 +6599 +8482 +9599 +8903 + +1774 +6964 +3739 +6345 +4881 +5381 +2415 +7900 +8778 + +10638 +20181 +4651 + +11271 +3243 +11634 +2919 +8121 +9706 +7354 + +2675 +2809 +5554 +4439 +1626 +4173 +4273 +2551 +2302 +4167 +1929 + +2641 +1264 +2074 +8265 +1089 +5010 +2591 +5610 +4610 + +8082 +11994 +3820 +2770 +9252 +3948 +7731 + +9429 +7117 +13052 +8925 +1844 +11783 + +1288 +5874 +3708 +4770 +6241 +1823 +2081 +4040 +1675 +3309 + +6185 +5449 +1262 +4549 +5293 +4790 +1854 +4853 +1727 +5514 +5256 +4148 +5514 + +6609 +15270 +13973 +10316 + +8083 +8381 +4788 +1606 +5118 +1520 +8152 +2433 +2999 +1784 + +1178 +5284 +8781 +5156 +6160 +1957 +3163 +5129 + +6123 +8854 +2776 +8899 +1728 +1459 +6248 +1676 +6804 + +11240 +11672 +1993 +12007 + +11441 +8463 +3348 +3292 +6021 + +3765 +7412 +2551 +3571 +2806 +3018 +7255 +4727 +1812 +5666 + +1111 +7513 +4547 +8423 +6838 +8520 +5818 +7891 +7659 +1029 + +21630 +17117 + +4790 +2925 +1959 +7089 +5283 +6020 +2522 +2052 +1519 +1591 + +6012 +10136 +10443 +7841 +6019 +1279 +3540 +9068 + +3937 +12491 +9763 +7498 +1701 + +11876 +9043 +4713 +2987 +8774 +11370 + +4885 +5614 +2665 +7454 +1350 +1832 +8687 +9477 + +10654 +8624 +6594 +13129 +10246 + +25357 +10959 +23864 + +2554 +4768 +6464 +2757 +1927 +1861 +2175 +2322 +4198 +4037 +4752 +2082 +6003 +5328 + +1820 +4090 +7653 +2160 +3455 +2144 +12128 + +29265 +30377 + +2359 +3949 +6123 +2235 +4210 +5808 +2377 +6678 +2039 +1324 +2104 +5407 + +1955 +4478 +3696 +6486 +2206 +3083 +2843 +5454 +4294 +3972 +2556 +5795 +3319 +2315 + +6188 +1383 +3880 +3153 +5842 +3400 +5504 +1353 +1257 +3639 + +5550 +5255 +4095 +3951 +3104 +2344 +4580 +3980 +1482 +2521 +2764 +1607 +5699 +2350 +1175 + +3326 +5681 +5905 +7268 +6083 +1407 +1434 +3186 +5744 +6268 +5533 +2245 + +2994 +1141 +10449 +6013 +5210 +8014 +3136 +8434 + +28983 +19936 + +4560 +8754 +6220 +12071 +5989 +2858 +6333 + +1928 +22562 + +3804 +7720 +6499 +7651 +1860 +1193 +8243 +2693 +2515 +4517 + +2762 +1303 +5390 +4371 +2424 +5039 +5875 +1354 +4039 +1883 +1398 +5544 +3698 + +1312 +5037 +2534 +3404 +3494 +5859 +7520 +3173 +4187 +5593 +4094 + +1938 +4558 +3961 +8752 +6733 +8402 +2351 +7059 + +4650 +5453 +5251 +2503 +7601 +6322 +7193 +3568 +6734 +1254 +7263 + +15442 +18712 + +2671 +34633 + +8092 +6200 +3593 +12427 +11897 +5342 + +12145 +20778 +25515 + +4318 +7326 +6324 +3726 +6176 +2530 +4017 +5504 +2930 +4978 +1941 +3893 + +7431 +2579 +2463 +5818 +2616 +7477 +8840 +2943 + +28974 +26077 + +4317 +2950 +2298 +4360 +2323 +5028 +6040 +1223 +2836 +5338 +6002 +4551 +4505 +1046 +5007 + +5979 +1142 +5901 +4646 +5486 +5184 +6255 +1473 +6420 +5358 +2502 +4997 +6331 +5529 + +3641 +1705 +3924 +3952 +3856 +4687 +4962 +3754 +2049 +5361 +5286 +4157 +5753 +2937 +1996 + +9825 +2077 +12304 +8296 + +5576 +4979 +5746 +3423 +1339 +5466 +2956 +3201 +4612 +5538 +4957 +3095 +3211 + +6162 +6797 +12282 +3848 +14760 + +8520 +6433 +5529 +5617 +4572 +2395 +3228 +6012 + +36432 +12115 + +3396 +3826 +2514 +5297 +5768 +4673 +6134 +2153 +4533 +5530 +2289 +3910 +3429 +6315 + +9288 +7564 +2801 +7672 +3580 +6425 +5047 +9141 + +6455 +4624 +7937 +6151 +9671 +2857 + +5789 +7291 +3051 +4587 +4527 +5970 +5863 + +7496 +2170 +3522 +1108 +4284 +1214 +5981 +4240 +4880 +2816 +3638 + +1458 +4890 +4046 +5337 +6192 +3705 +1362 +3330 +3593 +1036 +3842 +6485 +2170 +1176 + +4669 +7457 +3290 +1471 +1471 +4983 +8120 +3964 +2012 + +12196 +12907 +1360 +2359 +4034 +12061 + +2023 +2376 +4602 +2529 +2091 +7266 +3696 +4104 +7007 +4183 +2551 +4913 + +12264 +2297 +16633 +19219 + +5963 +5584 +1534 +6499 +5988 +1160 +5186 +4313 +4579 +2978 +6075 +5821 +3288 + +2456 +1103 +2492 +1484 +3089 +2519 +2596 +3462 +4707 +2403 +5042 +2345 +1841 +3924 +3674 + +15955 +14482 +19975 +7828 + +7686 +33030 + +9367 +6387 +4450 +1301 +6652 + +2436 +8020 +9634 +1189 + +13768 +4937 +6445 +2333 +8688 +2282 + +2632 +2386 +1540 +1313 +5560 +3191 +3768 +6455 +1771 +5707 +6503 +3702 +2690 +6410 + +4254 +9381 +10720 +6622 +4502 +3229 + +10702 +25975 +21218 + +1824 +3787 +1017 +3211 +1954 +3263 +1654 +5116 +5383 +6081 +5917 +3708 +3770 +3332 +1564 + +8659 + +1918 +13752 +13443 +2032 +8928 + +8167 +4650 +4066 +8487 +5484 +2973 +1974 +8716 +3918 +6829 + +8569 +4604 +3930 +4567 +15587 + +8510 +8686 +2757 +10057 +2681 +7895 +6610 +10350 + +27009 + +3554 +8125 +6661 +1517 +1293 +6747 +3910 +4998 +3100 + +58602 + +2960 +5646 +4133 +3192 +5660 +3224 +4699 +6106 +4147 +4855 +1950 +1195 +5861 +3613 +5095 + +2481 +11509 + +9922 +2887 +1722 +10604 +6329 +6330 +3934 +5424 + +7492 +6265 +3838 +8041 +6266 +4794 +2524 +6684 +2734 +7338 + +6263 +8780 +6447 +20087 + +6388 +9789 +4219 +6199 +1753 +7765 +2130 +5475 + +6043 +4380 +7928 +3807 +5877 +1736 +6191 +4348 +5699 +2381 + +2683 +4364 +6323 +2128 +3828 +1657 +3885 +3426 +6137 +4427 +2592 +6245 +6142 +5680 + +4812 +8631 +7556 +6549 +4494 +7671 +2664 +3702 +3551 +1289 + +8546 + +5793 +8055 +4733 +3781 +4359 +1127 +5052 +7333 +1533 +3232 +6713 + +9850 + +6386 +8256 +12527 +10704 +11625 +6314 + +36312 +9909 + +2500 +5131 +12716 +2449 +10252 +2989 + +10080 +7372 +4650 +4148 +1543 +7025 +4075 +5975 + +6493 +1969 +3498 +5752 +5231 +5688 +3805 +2245 +3355 +7015 +2001 +1980 + +5498 +10487 +6072 +5136 +4464 +1645 + +5765 +1637 +4963 +3317 +2151 +4765 +4234 +4268 +3791 +1371 +5906 +5800 +4684 +5872 +1032 + +7693 +5165 +3321 +7593 +6652 +4856 +7244 +3238 +5442 +6728 + +8940 +2746 +4620 +4575 +1794 +8580 +6018 +1198 +2470 + +10302 +5070 +4341 +2533 +4345 +11497 + +11333 +1604 +6233 +6784 +5614 +10283 +5386 + +2715 +3782 +4739 +5782 +3541 +3544 +3591 +4748 +7392 +3361 +5764 +6413 + +9117 +1201 +6914 +1214 +3645 +3711 +1825 +10249 + +4719 +8388 +1460 +4555 +1038 +8967 +2147 +2943 + +3372 +3381 +3607 +5180 +2115 +1071 +2218 +5102 +3133 +5809 +3920 +2758 +1729 +2132 + +1332 +6802 +5791 +3281 +6624 +1692 +5105 +5160 +3082 +6840 +1613 +4749 + +5211 +2825 +6050 +2913 +2542 +2466 +2411 +2101 +5822 +1972 +3409 +2738 +5032 +5715 + +8421 +5749 +1746 +1424 +4398 +5048 +1450 +2122 +7937 +4488 + +17962 + +1415 +5018 +11466 +17007 + +8818 +9115 +4789 +1919 +8398 +3807 + +13697 +10141 +5675 +2146 +1954 +6312 + +8363 +2872 +1505 +7354 +1868 +3313 +6657 +3468 +7434 + +2157 +2904 +3745 +6707 +4194 +2956 +5377 +3130 +7664 +7595 +7477 + +22149 + +5662 +4865 +5971 +6008 +6761 +5764 +4321 +1546 +1705 +6056 +3990 +3953 + +7794 +1246 +5418 +2460 +7858 +6992 +5897 +3459 +2915 +2227 +1517 + +7873 +3664 +6050 +9000 +8922 +8817 +4514 + +20975 + +4983 +11133 +4400 +6751 +2763 +2781 +11806 @@ -0,0 +1,34 @@ +#include <stdio.h> +#include <stdlib.h> + +int +main() +{ + char buf[BUFSIZ]; + long cal = 0, maxcal = 0, elf = 0, maxelf = 0; + + while (fgets(buf, sizeof(buf), stdin)) { + char * pbuf = buf; + long n; + if ((n = strtol(buf, &pbuf, 10)) == 0 && pbuf == buf) { + if (cal > maxcal) { + maxcal = cal; + maxelf = elf; + } + cal = 0; + ++elf; + } + else { + cal += n; + } + } + if (cal > maxcal) { + maxcal = cal; + maxelf = elf; + } + + printf("maxcal: %ld (elf: %ld)\n", maxcal, maxelf); + + return 0; +} + @@ -0,0 +1,56 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +#define arrlen(x) (sizeof(x) / sizeof(x[0])) + + +long +checkmax(long * maxcals, long * maxelfs, int n, int cal, int elf) +{ + long i, j; + + for (i = 0; i < n; ++i) { + if (cal > maxcals[i]) { + if ((j = i + 1) < n) { + memmove(maxcals + j, maxcals + i, (n - j) * sizeof(long)); + memmove(maxelfs + j, maxelfs + i, (n - j) * sizeof(long)); + } + maxcals[i] = cal; + maxelfs[i] = elf; + break; + } + } + + return i; +} + + +int +main() +{ + char buf[BUFSIZ]; + long cal = 0, maxcal[3] = {0}, elf = 0, maxelf[3] = {0}; + + while (fgets(buf, sizeof(buf), stdin)) { + char * pbuf = buf; + long n; + if ((n = strtol(buf, &pbuf, 10)) == 0 && pbuf == buf) { + checkmax(maxcal, maxelf, arrlen(maxcal), cal, elf); + cal = 0; + ++elf; + } + else { + cal += n; + } + } + checkmax(maxcal, maxelf, arrlen(maxcal), cal, elf); + + printf("maxcal: %ld (elf: %ld/%ld/%ld)\n", + maxcal[0] + maxcal[1] + maxcal[2], + maxelf[0], maxelf[1], maxelf[2]); + + return 0; +} + @@ -0,0 +1,2500 @@ +B Z +B Z +C Z +C Z +B X +C Y +A Y +B Z +A Z +A Y +C Z +C X +C Z +C X +B X +B Z +B Z +A Z +C Z +C Z +C Y +C Z +B Z +B Z +A X +A Y +B Z +B Z +C Z +B Z +B Z +C X +C Z +A Y +A X +A X +C Z +C Z +B X +C X +B Z +A Z +B X +B Z +B Z +A Z +B Z +A Y +C Z +C Z +B X +C Z +A Z +C Z +C Z +C Z +C Z +A Z +B Z +C Z +A Z +C Z +C Z +C Y +A Y +C X +C Z +C Z +C Z +C Z +A Y +C X +A Y +A Y +C X +B Z +A Y +C Y +C Z +B Z +C Z +B Z +B Z +B Z +C Y +B Z +A Y +C Z +C Z +A X +C X +C Z +A X +C Z +C Z +C X +A Z +C Z +C Z +B Z +C Y +A Y +C Y +C Y +A Z +B Z +C Z +C Z +C Z +A Z +C Z +B X +C Z +A Y +C Z +C X +C Y +C Y +B Z +C Z +C Z +A X +C X +C Z +C Z +A Z +B Z +B Z +C X +C Z +B Z +C X +B Z +C Z +B Z +B Z +B Z +B Z +C Y +C Z +B Z +C Z +C Z +C Z +C Z +B Z +C Z +B Z +C Z +B Z +C Z +C Y +C Z +C Z +C X +C Z +C Z +C Y +C Z +C Y +C X +B Z +B Z +C Z +A Z +C Z +C Z +C Z +B Z +C Z +B Z +C Z +B Z +C Z +C Z +B X +B Z +C Z +C Z +A Z +A Z +B Z +C Z +C Z +A Z +B X +C X +A Z +C Z +C Z +B Y +B Z +B Z +A Y +B Z +C Z +C Z +A Y +B Z +C Y +A Z +C X +A Z +A Y +C X +C Y +C Z +B Z +C Z +A Y +B Z +B Z +C Z +C Z +C Z +C Z +C Z +B Z +C Z +A X +C Z +C Z +A Y +C Z +A Y +C Z +B Z +C Z +A Y +C Z +C Y +C Z +B Z +C X +A Y +C X +A Y +B X +C Y +B X +C Z +C Y +C Z +C Y +C Y +B Z +C Z +A Y +C X +C Z +C Z +B Z +A Z +C Z +C Z +C Y +C Z +C Y +B X +C Z +C Z +C Z +C X +A Y +B Z +C Z +C Z +C Z +B Z +A Y +A Z +A Y +B Z +A Z +A Y +B Z +C Z +A Y +A Z +B Z +B Z +B Z +C Z +C Z +C Z +C Z +C Z +C Z +B Z +C Z +C Z +C Z +A Z +A Y +C X +C Z +A Z +C Z +A Y +C Z +A Y +C Z +C Z +A X +C Y +C Z +A X +C X +A X +B Z +C Z +A X +C Z +B Z +A X +C Z +A Y +A Z +C Y +A Y +C Y +A Z +B Z +A Z +B Z +C X +C X +C Z +C Z +B Z +A Y +C Z +A Y +C Z +B Z +B X +B X +B X +A Z +B Z +C X +C Z +A Y +C Z +B X +A Y +C X +B Z +C Z +C Z +C Z +C Z +A Z +B Z +B Z +B X +A Y +C Z +C X +A Y +C Z +C Z +C Z +A Y +A X +B Z +C Z +A Z +C Y +A Z +B Z +A Y +C Z +C Z +B Z +A Y +B Z +A Z +A Y +C Z +A X +C Z +C Z +B Z +C Z +C X +A Y +A Y +B Z +C Z +B X +A Y +C Z +C Z +A X +A Z +C Z +C Z +A Y +C Z +C Y +A Y +A Y +B Z +C Z +C Z +C X +C Z +A Y +B Z +C Z +C Z +A Y +B Z +C Z +C Z +B Z +A Y +B Z +C Z +C Z +C Z +C X +C Z +C Z +C Z +C Y +C X +C Y +C Z +B Z +A Y +C X +B Z +C X +C X +C Z +A Z +C Z +B X +A Y +C Z +B Z +A X +B X +C X +C Z +C Z +B Z +B Z +C Z +C Z +A Y +B Z +A Z +B Z +A Z +A X +C Z +A Z +A Z +B X +A Z +B Z +B Z +A Y +C Y +B Z +B Z +B Z +B Z +C Z +B Z +C Z +B Z +C Y +C Z +C Z +C X +C Z +C Y +C Y +C X +A Y +C Y +B Z +C Z +A Y +A Z +B X +C Z +C Z +A Y +A Y +A Y +C Z +A Z +C Z +B Y +A X +A Y +C Z +A X +B Z +C Z +C Z +B Z +C Z +A Z +C X +C Z +B Z +B Z +C Z +B Z +A Z +C Z +C Z +A Y +B Z +A Y +B Z +C Z +B Z +C Z +B Z +B Z +A Y +C Y +B Z +C Z +A Z +B Z +C Z +C Z +A Z +B Z +C Z +A Y +A Z +C X +B Z +A Y +A Y +C Z +A Z +B Z +B Z +C Z +C Z +C Z +C Z +A Y +A X +C Z +B Z +C Z +C Z +C Y +C Z +A X +A Z +C Z +B X +A Z +B X +B X +A Y +A Y +A Y +C Z +C Z +C Z +A Z +C X +A Y +C Z +B Z +C Z +A X +B Z +A X +A Z +C Z +C Z +C Z +B X +B Z +C X +B Z +C Z +C Z +C Z +A Y +B Z +B Z +C Z +A X +B Z +A Y +C Z +A Y +A Y +C Z +C Z +A Y +C X +C Z +A Y +C Z +B Z +B Z +C Z +C Y +B Z +B Z +C Z +A Y +C Z +B Z +B X +A Y +A Z +C Z +B Z +C Z +C X +A Y +A Z +A Y +B Z +A Z +B Z +A Y +A Y +B Z +C Z +C Z +C Z +A Y +A X +B Z +A Y +C Z +B X +C Z +C Z +A Y +C Z +C Z +C Y +C Z +C Y +B Z +B Z +C Z +C Z +B Z +B Z +B Z +C Z +B Z +B Z +C Z +C Z +C X +C Z +C Z +B Z +B Z +C X +A Y +C Y +C X +B Z +C X +B Z +C Z +A Z +C Y +C Z +C X +B X +A Y +C Y +A X +C Z +C Z +C Z +C Z +A Y +C Y +C Z +A Y +C Z +C Z +B Z +B Z +B Z +C Z +C Z +C Z +C Z +C Z +C Z +B Z +C Z +B Z +C Z +B Z +C Z +C Z +B Z +C Z +C Z +C Z +A Y +C Z +C Z +A X +C Z +C Z +A X +B Z +C Z +A Y +C X +C Z +A Z +C Y +A Y +C Z +B Z +C Z +B Z +C X +C Y +B Z +C Z +C Z +A Y +C X +C Z +C Z +B X +C Z +C Z +C Z +C Z +A Z +A Y +C Z +B Z +C Z +B Z +A Y +B Z +C Z +B Z +B Y +C Z +B Z +A Y +C Z +C Y +C Z +A X +B Z +C Z +A Z +A Z +B Z +A X +B Z +B Z +C Y +C Z +C Z +B Y +B Z +C Z +A Y +B X +B Z +C Z +C Z +C Z +B X +A Y +A Y +B Z +B Z +C Z +B Z +C Z +C Y +B Z +B Z +B X +A Y +A Y +A Y +B X +C Z +C Z +B Z +C Z +C X +B Z +C Z +C Z +B Z +C Z +C Z +A Y +B Z +A Y +C Y +B Z +B Z +B Z +C X +C Z +C Z +C Z +C X +C Z +A X +B Z +C Z +C Z +A Y +B Z +C Z +A Y +C Z +B Z +C Z +C Z +B Z +B Z +C Z +C Z +C Y +C Z +C Y +C X +C Z +C Y +C Z +A Y +B Z +B Z +A Y +B Z +B X +B X +A Z +C Y +C Z +C Z +B Z +C Z +C Z +C Z +C Z +C Y +C Z +B Z +C Z +C Z +C Z +B Z +B Z +C Z +B X +C Y +A X +C Z +A Z +C Y +C Z +C Z +B Z +C Z +C Z +C Z +B Z +A Y +A Z +B X +C X +A Y +A Y +C Z +C Z +C Z +C Z +C Z +C Z +C Y +C Z +C Z +C Z +A Y +A Z +C Z +A Y +C Z +C Z +B Z +B Z +B X +A Y +B Z +C Y +C Z +B Z +A Z +A Y +A X +C Z +B Z +C Z +B Z +B Z +C Z +C Z +C Z +C Z +A Y +A Z +C Z +C Z +A Y +C Y +C Z +A X +B X +B X +C Z +C Z +B Z +A Y +A Y +A Y +A X +C Z +B Z +B Z +B Z +A Y +C Y +B Z +A Z +C Z +B X +C Z +C Z +C X +C X +C Z +A Y +B Z +C Z +A Y +C Z +A X +C Z +B Z +B Z +B Z +C Z +B Z +C Z +A Z +C Z +B Z +C Z +A Y +C Z +A Z +C Z +C Y +B Z +A Z +C Z +B Y +A Z +C Z +A X +C Z +B Z +A X +C Z +B Z +C Z +C X +A Y +C Z +B Z +A X +C Z +B Z +C Z +A Y +C Z +C Z +C Z +B Z +C Y +C Z +C X +A Z +C Z +C Z +B Z +C Z +C Z +C Z +A Z +C Z +A Y +A X +C Z +A Y +C X +C Z +B Z +C Z +B Z +B Z +A Y +B Z +A Y +A Y +C X +B Z +C Z +C Z +C Z +C Z +C Z +A Y +B Z +C Z +A Y +B Z +C Z +C Z +A Y +B Z +C Z +C Y +B Z +C Z +B Z +A Z +C X +B Z +C Y +C Z +C Z +C X +C X +A X +C Z +B Z +A Z +C Z +B Z +B X +C Z +C Z +C Z +C Z +B Z +B X +C Z +C Z +C Z +B Z +C Y +B Z +B X +C Y +C Z +C Z +B Z +A Z +C Y +C X +C Z +B Z +C Z +C Z +C Z +B Z +B X +C Z +C Z +A Y +C Z +C Y +A Y +A Z +B Y +C Z +A Y +C X +C X +C X +C Z +B Z +C Z +C Z +B Z +C Z +A Y +C Z +C Z +B Z +C X +C Z +B Z +C Z +A Y +C Z +C Z +C X +C Z +B Z +C Y +C Z +A Z +C Z +B Z +A Z +B Z +C Z +A Y +B Z +C Z +C Z +B Z +A Z +C Z +C X +C Z +C Z +A Y +A Y +A Z +C Z +A Y +A X +C Z +C Z +C Z +C X +A Z +C Z +A Y +C Z +C Z +C Y +C Z +C Z +B Z +C Z +C Z +B Z +B Z +C Z +C Z +C Z +B Z +C Z +C Z +C Y +B Z +C Y +B Z +B X +C Z +C Z +A Y +B Z +C Y +B Z +B Z +B Z +B Z +C Z +C Y +A X +C Z +C Z +C Z +C Z +C Z +B Z +C Z +A Y +C Z +C Z +A Y +A Y +C Z +C Z +B Z +B Z +C X +C Z +C Z +A X +C Z +C Y +C Z +B Z +C Z +A Y +C Z +C Z +C Z +C X +A Y +C Z +C X +B Z +C Z +C Z +C Y +C Z +A Y +B Z +B Z +A X +C Y +C Z +B X +A X +C Z +C Z +C Z +C Z +C Y +A X +B Z +C Z +C Z +A Y +B X +A Z +A Y +B Z +C Z +C X +A X +C X +C Y +C Z +B X +A X +C Z +C Z +B X +A Y +A Y +A Y +C Z +C Z +A Y +C Z +A Z +A Y +C Z +B X +C Z +C Z +C X +C Z +C Z +A Z +B Z +A Z +C Y +C Y +C Y +C Z +C X +C Z +A Y +B Z +C Z +B Z +C Z +A Y +C X +C Z +C Z +B Z +C Z +C Y +A Y +B Z +B Z +B X +B Z +C Z +A Y +C Z +B Z +A Y +C Z +C Z +B Z +A Y +C Z +C Z +C Z +C Z +A Z +A Y +C Z +C X +A Z +A Z +C Z +C Z +C Z +A Y +B Z +B Z +B Z +B Z +C Z +C X +C Z +C Z +B Z +B Z +C Z +C X +A Z +A Y +C Z +B Z +C X +C X +A Y +A Y +C Z +B X +C Z +C Y +C X +A Y +C Y +C Z +C Z +B Z +A Z +C Z +C Z +C Z +C X +C Z +B Z +A Y +C Z +B Z +C Z +A Y +A Y +B X +B X +B Z +C Z +C Z +C Z +C Z +C X +C Z +B Z +C X +C X +A Z +B Y +C Z +C Z +C X +B Z +C Z +C Z +A Z +C Z +C X +A Y +A Z +C Z +B Z +C Z +B X +A Y +C Z +C Z +B Z +C X +B Z +B Z +C Z +C Z +C Z +B Z +A Z +C Z +A X +C Z +C Z +C Z +C X +C X +B Z +C Y +C Z +C Y +A Z +A Y +A X +B Z +A Y +C Z +C Y +B Z +B Z +B Z +B Y +B Z +A X +C Z +A Y +B Z +A Y +C Z +C Z +C Z +A Y +C Z +B Z +C Z +A Z +C Y +C X +A Y +A Y +A Y +B Z +C Y +C Z +C Z +C X +B Z +A Y +C Z +C Z +B Z +A Z +C Z +B Z +C X +C Z +B Z +C Z +C Z +B Y +B Z +C Y +B Z +A X +C Y +B Z +C Z +A Y +C Z +A Z +C Z +B Z +A X +C Y +C Y +A Y +A Z +B Z +A Z +C Z +C Y +C X +C Z +A Y +C Z +A Y +C Z +C Z +C Z +C Y +C X +C X +B Z +A Y +C Z +A X +C Z +A Z +C X +A X +A Z +A Y +C Z +C Z +C Z +B Z +B Z +C Z +C Z +C Z +A Y +C Z +A Z +C Z +C Z +C X +C X +C Z +C Z +C Z +C Z +C Z +A Y +B Z +B Z +C Z +B X +C Y +C Z +C Z +C Z +A Y +B X +C Z +C X +B Z +A Z +B X +C Z +C Z +B Z +C X +B Z +C Z +A Y +C X +A Y +A Z +C Y +C Z +C Y +C Z +C X +C Z +C Z +C Z +C Z +C Z +C Z +B Z +C Z +B Z +C X +C Z +C X +B Z +A Z +A X +C Z +A Y +C Y +C Z +C Z +C Z +B Z +B Z +A X +C Z +B Z +C Z +C Z +A X +C Z +B Z +C X +C Z +C Z +C Z +C Z +B X +C X +B Z +C Z +B Z +A Y +C Z +A Y +B X +C Z +C Z +C Z +C Z +A Y +C Z +C Z +B Z +C Z +C Z +B Z +A Y +C X +C Z +C Z +A Y +C X +B Z +B Z +A Y +C Z +B Z +C Z +A Y +B Z +A Z +C Z +B Z +C Z +B Z +C X +B Z +C Z +C Z +C Z +A Y +A Y +C Z +B Z +A Y +B X +C Z +B Z +C X +C Z +B Z +B Z +C Y +C Y +A Z +C X +C Z +B Z +A Y +C Z +C Z +B Z +A Y +B Z +A Z +C Z +B Z +B Z +B Z +C Z +C X +B Z +C Z +B Z +C Z +C Z +A Y +A Y +C Z +C X +A Y +B Z +C Z +A Z +C Z +B Z +A Y +C Z +C X +C Z +C Z +C Z +C Z +A Y +C Z +C X +B Z +B X +C Z +A Y +C Y +C Z +C Z +C X +C Z +C X +C X +C Z +B Z +B X +A Z +A Z +C Z +C Y +A Y +C Z +A Y +C Z +C Z +C Z +B Z +B Z +C Z +B Z +C Z +C Z +C Y +B Z +B Z +C Z +C Z +B Z +C X +A Z +C Z +C Z +A Y +A Y +A Y +C Z +C Z +B Z +A Z +A X +A Y +C X +C Z +B Z +C X +C X +B Z +B Z +B X +C Z +C Y +B Y +C Z +C Z +C Z +B Y +A Y +A Y +C Z +C Z +C Z +C Z +C Z +C Z +C Z +C Z +B X +A Z +A X +C Z +A Y +A Z +C X +C Z +C Y +C Z +C Z +C Z +B Z +B Z +A Y +A Z +C X +B X +B X +C Z +C Y +C Z +C Z +C Y +C Z +C Z +A Z +B Z +C Z +A Y +C Z +C Z +C Z +A Y +C Z +B Y +B X +C Z +A Y +B X +C Y +A Y +C Z +C Z +C Y +A Z +B Z +C Z +C Z +B Z +C Y +C X +C Y +C Y +B Z +C Z +B Z +C Z +A Y +A Y +A Y +B Z +C Z +A Z +C Z +C Y +B Z +B Z +C Y +C Z +C Z +A Y +C Z +C Z +B Z +C Z +C X +A X +A Y +A Y +B Z +C Z +B X +A Y +B Z +C Z +C Z +B Z +A Y +C Z +C Z +B X +A Y +C Z +B X +A Y +C Z +C X +A Z +B Z +B Z +C Z +C X +A Y +C Z +C Z +A Y +B Z +C Z +A Y +C Z +A Y +C Z +B Z +C Z +A X +B Z +C Z +C Z +C X +B Y +A Y +A X +C X +B Z +C Z +C X +B Z +C Z +C Z +C Z +C Z +A Z +C Z +A Y +B X +C Z +C Z +B Z +B Z +C X +B Z +B X +C Z +C Z +C Z +A Y +C Z +C Z +C Z +C Z +A Y +A Z +B Z +C Y +A Z +C Z +C Z +C Z +B X +B Z +C Z +B Z +C Z +C X +C Z +A X +C Z +C Z +C Z +C Z +C Z +A Y +A Y +B Z +B Z +B Z +B Z +C Z +C Z +C Z +C Z +A Z +A Y +C Z +A Z +A Y +C Z +C Z +C Y +A Y +B Z +C X +B Z +A Y +C Z +A Y +C Z +B Z +B Z +B Z +C Z +C Z +A Z +A Y +C X +A Y +C Z +A Y +C Z +C Z +A Y +B Z +C Z +C Y +C Z +B Z +B Z +B Z +C Y +C Z +B Z +C X +B Z +A Y +B Z +C Z +A Y +C Z +C Y +C Z +C Z +C Z +C Z +B X +B Z +C Z +C Z +A Y +C Y +C Z +C Z +C Z +C Z +C Z +C X +B Z +C X +A Y +B X +A Y +C Z +B Z +A Y +B Z +C Z +A Y +C Z +C Z +C X +C X +C Z +B Z +C X +C Z +A X +A Z +C Z +C Y +A Y +A X +B Z +C Z +C Z +B Z +A Y +C Z +A X +B Z +B Z +A X +C Y +C Z +A Y +B Z +C Z +C Z +C Z +B Z +C Z +B Z +C Z +B X +B Z +C Z +A X +C Z +A X +C Z +A Y +C Z +A Z +C Z +C Z +C Z +B X +A Y +A Y +A X +B Z +B Z +C Y +C Z +B Z +A X +C Z +A Y +C Z +C Z +B Z +C Z +C X +B X +B Z +B X +C Z +C Z +B Z +A Z +C Z +C Y +C Y +C Z +C Z +C Z +C Z +C Z +C Z +A X +A Z +C Z +B Z +B Z +B Z +C X +A Z +C Z +C Z +B Z +B Z +C Z +B X +C Z +B Z +C Z +C Z +C Z +C Z +A X +A Z +A Y +C Z +A Z +A Y +C Z +A Z +C Z +A Y +C Z +B Z +C Z +A Y +C Y +A Y +B Z +A Y +B Z +C Z +B X +C X +C Z +B Z +A Z +C Z +B X +C Y +C Z +C Y +A X +C X +C X +B Z +A Y +C Z +A Z +B Z +C Z +C X +C Z +C Z +C Z +C Z +C Z +B Z +B Z +C Z +C Z +C Z +C Z +C X +A Z +C Z +A Y +A Y +C Z +C Z +C Y +C Z +A Y +C Z +B Z +B X +A Z +A Y +A Y +C Z +A Y +C Z +A X +A Y +B X +C Z +C Z +A Z +C Z +A Y +B Z +A Y +C Z +C Z +B Z +C X +C Z +C Z +C Z +C Y +C Z +B X +C Z +C Z +B X +A Z +C Z +C X +C X +B Z +C Z +C Z +B Z +C Z +C Z +B Z +B Z +B Z +B Z +B Z +A Z +C X +C Y +C Z +A Y +C Z +B Z +A Y +C Z +C Z +B Z +B Z +C Z +A Z +A X +A Y +C Z +A Z +C Z +C X +B Z +C Z +A X +B Z +B X +C Z +C Z +C Z +B X +C Z +B Z +B Z +A Y +A Y +A Z +C Z +C Z +C Z +B Z +C Z +B Z +C Z +A Z +C Z +C X +C Z +C Z +C Z +B Z +A Y +C Y +C Z +C Z +C Z +C Z +B Z +C Y +C Z +A Z +C Y +C Z +B X +A Y +A Y +A X +B Z +B Z +C Z +A Y +B X +A Y +C X +C Z +A Y +C X +C Z +C Z +A Z +C X +C Z +C X +C Z +A Y +C Z +C Z +B Z +C Z +C Y +A Z +C X +C Y +C Z +C Z +C Y +B Z +B Z +C X +C Z +C Z +C Z +C Z +B Z +C Z +C Z +C Z +B Y +C Y +C Z +B Z +C Z +C Z +C Y +B Z +A Y +A Z +C Y +C Y +C Z +C X +C Z +A Z +C Z +C Z +A Y +A Z +C Z +A Z +C Z +B Z +B X +B Z +B Z +A Z +C Z +A Y +C Z +C Y +C Z +A Z +B Z +B Z +B Z +C Z +B Z +A Z +A Y +C Z +C Z +C Z +C Z +C Z +A Z +C Z +A Z +A X +B Z +A Y +C X +A Z +B X +B Y +A Y +B Z +A Z +B Z +B Z +C Z +A Z +B Z +B Z +A Y +C Y +C Y +A X +C Z +C Z +C Z +C X +C Z +C Z +C Z +C Z +B Z +A Y +C Z +C Z +C Z +A Z +C X +C Z +B Z +C Y +B X +B Y +C Z +C Z +A X +C Y +C X +B Z +B Z +C Z +B Z +C Y +C Y +C Y +C X +C Z +C Z +C Z +C X +A Y +C Z +C Z +B Z +A Z +C Z +A Y +B X +C Z +C X +C Z +A Z +B Z +A Y +C Z +C Z +C Z +A Z +C Z +C Z +C X +C Z +C Z +B Z +C Z +B Z +C X +C Z +A Y +A Y +C Z +C Z +B Z +C Z +C Z +C X +C Z +A Y +C Z +C Z +C Z +B Z +C Z +A Y @@ -0,0 +1,78 @@ + +#include <stdio.h> +#include <string.h> + + +enum RPS { + ROCK, + PAPR, + SCRS, +}; + + +enum RPS +rps_beats(enum RPS rps) +{ + switch (rps) { + case ROCK: return SCRS; + case PAPR: return ROCK; + case SCRS: return PAPR; + } + return -1; +} + + +int +rps_pickscore(enum RPS rps) +{ + switch (rps) { + case ROCK: return 1; + case PAPR: return 2; + case SCRS: return 3; + } + return 0; +} + + +int +rps_gamescore_b(enum RPS a, enum RPS b) +{ + if (b == a) + return 3; + if (rps_beats(b) == a) + return 6; + return 0; +} + + +int +main() +{ + char buf[BUFSIZ]; + int score = 0; + + while (fgets(buf, sizeof(buf), stdin)) { + enum RPS a, b; + + if (strlen(buf) != 4) + break; + switch (buf[0]) { + case 'A': a = ROCK; break; + case 'B': a = PAPR; break; + case 'C': a = SCRS; break; + default: return 1; + } + switch (buf[2]) { + case 'X': b = ROCK; break; + case 'Y': b = PAPR; break; + case 'Z': b = SCRS; break; + default: return 1; + } + score += rps_pickscore(b) + rps_gamescore_b(a, b); + } + + printf("Score: %d\n", score); + + return 0; +} + @@ -0,0 +1,90 @@ + +#include <stdio.h> +#include <string.h> + + +enum RPS { + ROCK, + PAPR, + SCRS, +}; + + +enum RPS +rps_beats(enum RPS rps) +{ + switch (rps) { + case ROCK: return SCRS; + case PAPR: return ROCK; + case SCRS: return PAPR; + } + return -1; +} + + +enum RPS +rps_loses(enum RPS rps) +{ + switch (rps) { + case ROCK: return PAPR; + case PAPR: return SCRS; + case SCRS: return ROCK; + } + return -1; +} + + +int +rps_pickscore(enum RPS rps) +{ + switch (rps) { + case ROCK: return 1; + case PAPR: return 2; + case SCRS: return 3; + } + return 0; +} + + +int +rps_gamescore_b(enum RPS a, enum RPS b) +{ + if (b == a) + return 3; + if (rps_beats(b) == a) + return 6; + return 0; +} + + +int +main() +{ + char buf[BUFSIZ]; + int score = 0; + + while (fgets(buf, sizeof(buf), stdin)) { + enum RPS a, b; + + if (strlen(buf) != 4) + break; + switch (buf[0]) { + case 'A': a = ROCK; break; + case 'B': a = PAPR; break; + case 'C': a = SCRS; break; + default: return 1; + } + switch (buf[2]) { + case 'X': b = rps_beats(a); break; + case 'Y': b = a; break; + case 'Z': b = rps_loses(a); break; + default: return 1; + } + score += rps_pickscore(b) + rps_gamescore_b(a, b); + } + + printf("Score: %d\n", score); + + return 0; +} + @@ -0,0 +1,300 @@ +sfDRhjhHsHhgWPJvPmmQnmPqnW +pTddGVwcpMTTCdnQJqqQqqqVtVms +MdZCZGdcrCNRFZRhFssL +CttWnSnNfSnCHsWrTlTPPpPCTRrLpl +DgqqghjqJBVgDMTPGVlRGwbfLLGP +cgqBBhjqcBdMcWQcQNnNzsfv +lnDWMgTLlTFlHHgDDgngWFnlBWNcBQrdjcrrdQrPBrdjhWhj +JqSVRRVmmRqJJbZGGJqJvbmBNcjPNQNssQPhSSdwPwwwQr +bCRJqGJJmzmJZRCmFNTLTttTzfFfLglf +SPWvWMvCSPcjzjDbcwfjTl +lLNRNLqhhQVQJlRjrjrDwTzzqzzfrb +GRnRVhRJLFnnhtJQNVdLdLgWCmmZlMlgSCSWSgpZtPBM +pTGFrLFTFWFprLDBmLbSbtmBDb +MqjwqJwZlqJjHlqjHHPmSbsffDmsStDnHnQmsm +ZPJjVPZbVMRRPZwMJZVMNJMcGWpWFcWFFNFGrWTzWzFrzG +MffZZtMTnTtSZLdfgSMtCHSbmWsGwbHGSqvmCqWb +lzpQhrhphhlzDDhRPmBvqHGRbBbwbbssCB +JJljpvhFrrjhptnddMJfdtgnMT +drCtpNLCLpTpJSdswQhvDbHZHDLDHQ +WmWgBWRcRzVVWVBgBBnnlfgWHjmvjQhwbbbshQvZDQQjsHZC +fqBzggWPPzBWBzffcfnMJdtFtrpqrGMpdCCTdM +JwJWqNBNNdzzBSzGsqbdNJbVMpptPmZMrVZrrZMtPmPwDp +THgfgffffHRhQRLVMGVQmGtLDGmM +TjGchhlHhGfhRHgRgWJSqzJWWlqNSzsWSJ +dNmPlzdvdspsFWwQmG +bhZSbVJBJnLNTnwWVHMGwQsGMFFw +RnnbbTnSnSSTTnLfRCCPqDPDNDlfCfDDcr +lhhTcnPchPPHCCStwWTHbS +GDRFNqlQJsGJqGJDqVNsqssDQBSZWHQBCZHHwbZbtHtwCbZW +RNJrFJFJDrmqsVjNmDvrvfzfffcvdpMrvlfh +DtLdNGHNfwBJQwgCrncgpSpcnlfC +sGqWPMPTvPPhTjjsqRqPvSlzFFpjnnSrjczprgllFF +vVPGPGMbPGqTRWsMqZhqvbZNLLmLQddQdmBtBwBNBwNB +ChVzhwpdpqHhtNmHHNHt +QsjGTQcTWQjfjbssQDPmHgfrrVrPZnntZD +jTGJSGvWJwqlvlCBqV +pRVcSRffTPfBWfNVfWBWdJdwhvvwGjjFmGvhLTdh +qsrHqtbDZqsnsZqCQDtHnQQLwFvJFhGJwddvwLcCwJJJdv +sgcqHnzqqzgnHnqrstZzqsnSPllRlVVSNpWVNVRgMBlVPW +WRQTtHrTrrDRvQDHrbtJlpdhLdGsDllfspLpphhs +GzCSqCSmSmVSpsljphlpsL +gVwCVGzmNmCNRQTvJQJHnvwQ +psBDsswNjBcqtHtsTHsqtM +vQrPqZPmvgQZrfgmPrfJQlLvnLzVHLnSnnTLTnnHMt +PRCJRPgmqrmZmmqQQDDRwwNwjwDwpFjDDW +VtBgCqbVjPbSbHtPRdrssZMFZlrRsBRw +LzWmhcDqTDvnDWTFMrwRvwFrGZdGlZ +zJLczJDnWDpDNzmDczWLzWzWNCbbttHPCHbSVbqgHSCjffQf +TjTfvJjjvcjTQcDzMDfQTLLbLgVVVhMrWWblghbbLN +dZHFSpqpqpbWrhhlWh +dFwPBHqFSqwZSmZmSlqZjTvvJTmzcJsTTTjfvsfQ +qqqNTlfjzbMGJlHMSZtZzZgRZDgZDzdS +nLCCVVcmgCdZdSlg +cmQscBVpFsppsVlffQGJHjlWHJGq +whwVGGZhVLwhsFFDCTrDccCctrcctL +CzSSvPSzTBStSWND +HllCHvHJPPqjCPvbfdvvbsmhdRRRsmZhsRdMFQMRFQ +gFCfCVfCsLCftsBsDbSHrbJRJJtrmrddrd +hqQpqWhlNlpMlppfdTRhmbmTdbdHJH +NGvvjvpvpfGgGGDCZZBg +rmBtgdddtqmmrqBGbLGJlmctWWvbNzvfpsVVfzzSVSTsWNpz +RPDRjMhDFljvsvzlSs +wDChhnCQwDwmgJclqrgm +WHrrDbWHQPzNrrRVMQJMQGvvsvvjnDLvfsjsvwfGws +dhdhZhcphZZZmtFFTcZSmcZsnfqjLRnngnpwnGfqfvvnRs +FZcZhtmhFCttldFlSSmlSthQJzNVMbRPWWPJzrbbJCNMPH +wMFBpvTppLpwfNfjggmNmGTj +ddSDDbGHnRDQDZRHSZSdRZDQzjjrzNNNfnmNrllhgglhfgWg +bCQqsJqGDZCHbppwvtVMMvJcLL +pSpSVdLDFCvDDvCFvJgwjsJbNtmtJgSjmj +ZcWNNBQfwjsttsbc +WNQMBflQQNGQrFpFVVRDHpCMDR +PfPvqLphWpWLtZSWpWLPjwJbmDwJbbDbmJVjPQ +lQQnRGMllMjswrmwJM +ggRGFFGGdlGGzFFzzFFcNBvSfLQZShZTtdLWWZWSWZSp +lCfgHsVHJDdswNRmsMRQ +vccvvFVrPcvQNRdnmqdR +rctPBrPBTTpPFBLZZcCCgVHJHVjjbLHfCjfS +dfGdsGGrlFFlbWjfgblhJhLDLDDMLNvJNLLBnmLB +tSppwQQHSSVtwStSpZZVqRJmBDzLvwPmzJznBDDmLBBJ +cHvtpRSvptCRbbjrrcfjrWjf +BBdHdjgQdjMMsHJscFnrzLpLgznLFzcF +wvllmNmVvZfvmZWqcPptPztFSWLFGrrFnt +ZbCvqqmNvflfVTbZfNllsjHdjdhhHDTHRBJjjMsc +FNCPtPtgLFJwPwflFwSrLFcMczQZTbMVmzzVZMcNVVVb +DhRDdhpWQDZmzVSQ +vnhBSHppjRBHqpWvrPFtJLJlLvfLPF +nmcSnnWjmfCTcHPHJCvh +zdDdlrrzGFFLPtPhBBhH +NGNGrzrRrzphwwwMmqqfnsfZZNbSjQSN +lgznQGWQLQWlnSzHSQlwnlDhCbZhZhZChPChwDcDphcb +jTRvVVrMvmLCPNcNZhRNcD +jfftvsrVJLsVvJqsmfqjfjlQgzlQWFzHFGGBQgtFgnnH +sllpwssrsCwrTRgCHGCTcnZD +jjzJtSdhdzbJWhdQqLdzqSHmDZBGZmmcGGgBGTDRBQTD +SVjgVhgtbVzJPfFpvvNrNswV +StzdmmnnjSRRdhPPdZZd +VbTbCqFFMbZTFcNQLgRgQbvvRh +pGsqGGGfHGfZVffzwtrHnmJHllznrS +NLWJvtLjtLzBjNSvSMDCHfwHSlDMlSSHfZ +RTPTVmhpnprfcfgZwgRD +PnPGFhGsTphsFpdPnpVdmhwFvBJzbdWNtJJjtNJNjbvJtttN +RvmgjDqqjqRgZRMRDpQjQhWsbPLPFnPFFbVVLbdSbnPSvP +NwczHBrJTzcBJHrfWJBCJcrCdnPPPNSlLnsnbFnnLlbSFddS +rGJwCCCJHwBGGctGDtphQQMppQWZmRpD +RPhhSMqRccBDZPPPRhPcNZSzzTLJrWZLmVVQLWZdTQQJWL +nwggfwCvbjwvbwpzWLpWVLdrrrQVTm +vgnGGCsCtntbFsgqlRVMSqNVBDtPSc +mtstjJmvTNBcjRRCHCfH +gLpglwwlgHbZbgpgFrdBBBfdfSPBLSSrcS +GQGglGWWgMglQFHgbmTmNtDqnDDVJMDMNJ +ZMbBZfvVfFfBbMvfMhgbfDsrSTTszcldmTTPmcPFDz +QqQQnwrqWQpwRWWpWwJRwNzTTSPpzPPdTPpSPmdSscmS +GjjtJRWtwGQjRZVChZMjVCrMMf +fJNPTvDPTpHHTPwvjNNHDfTWthhgQQGdBddtlvMsMQMvQh +rFbZVZrLmLdGrrhMBQWg +FmnzVRFLqVqqVLVRRFZSFmTwfHHjHCNCCDGwjnCDDfNH +gQHHQJgCnNJnQFQPRbDQzLRR +mwrdpctWtrMvvrrWwGMmGWWPLzFFLSbLnDFsLPdDFbZRLz +vGcmGwBBMGtmmrvlMrGlqNghlVjCCnTHHCHgCCjh +LmLvVjVjsrmrtmmr +tfcnbScRnlMZtHQPCgSQssPdHC +RGGGGnRfcwnGbbJRBRcwJfnGtBDhhVptNhDvLLhVvvjBWNvT +dZWNQZgQbbNvdWGgZvbTfLrjtrPlGJfrLqLJlj +TMmDpwzmVMHpBLfrcccMfqLjct +SwnSBTDDTwwzwnnsFSZdRNbQZWRvgSCvbQ +WPgZgQLLbMgdBrdnGqqfdhVVvR +HzssNTzwlwHHcczwFjMFHjVGrqRqnVThVqrGrGTRqvrf +zFzcHFNlzJBLgMQLJCZL +nPLNcWtNtlLMccLlWdTjzzbBfBQSzqzBqPqS +RbbDZZrGRJhJjgJQSjCfqQCC +rrmRbDDwvZDpprbGrbDvtctlVVVHvdtlcMtWHMHV +DWrZJrQjWwFcrhzVzbpmpcVqhb +MFnFHMNSqbMpMMmG +FNngNRBRCgnHCCHRPvLNdgJWwJDlJJDssZDLWWlWQlsl +BQqNsGrbBCNbNCrMpGpbHhthRCDRDRJCmDVRhRJP +nfvWvcnSWncSTdzzFLJtRmhHmPPVPVTwwHHtTh +WfLfnfSJZJvdLFZWngfBMGMppGMrNBbGMpZjrj +rccMjBMVJcjjjNNqmmCf +LLspTTGsTGntsntTFwnNNfFqQmmNgNqfNQmZvQ +tpDTwlGDTGPPsbtsLsnnqGTJzJrJBzHzMVrMRzBMlShVBR +PsrNPRjjPbjzjLRWLbjmvtCnMntnpfmtNZNCNv +dDlfwwJllhJTcllScSCQvmtCnmtCmQmQmG +TTFcdhJwhBFfwJJHhdchVclrsbWsbzqLgbzrrjgVRgsqgW +vvcvvDJFcDZPTzwfcwSLczzScz +VNnnVVsqGNntsqtBRblqBndSfzCCRzwRfCHSjdfSjzSH +pppsMVlGGhhrZwMMDP +LltNHMZNHMfNnfgtLHWWbhWjcblSbVbcTWVP +vFmCZsqRRBqrVPWsWTWPWb +mQBqJRdqQBqQzzRQztgLgntGZttddLMggw +ZTCCrCWfGLGBWSwHvHHmHvmTTH +bllhnsbjDlqFfqjhnFRppwmvJppmpRRwMNSmmw +FlnFDjdtqhDdfZZBrtBrrPLt +CRCTHHJcCmJgTSTRcSMcRMVstssSrtprppVFtdrdspNb +jjllnvgBLqdsGprtqtFG +vQjzWnWZWjBLhjgwcccRJgZPCmJm +VRNmBBRNRFcCRcFVRSVSqZLLvvlLqvLfzfMhjJLC +TdHsHbDsbHMJLqlLzl +bgQGsgWWGGgbDgwGzBNSFrFtVSmwRRNFtn +pCCggQPPzWnvlDcWVHGJcNBl +LhsLMrwwGlnMBlNG +mmhwZmqSLwjLttnFbvgFTpPtPtgFCz +TtZSJzFZhZzTFcgFFcmRRmJJQllCHvPshVQsCrshsCssHVHW +GjGGDGqdGfbpDBjMdjpBjBNbVHtsWWPHlMlrrrrWWlVlVsCs +dBdDdfqLdBjjFRFScRStmLnL +GtVppGGPbVgTVFQrZzfrJfJJtMJr +DslmNmLsnmNHNNnnqQRZSJSQfqrJzSJn +BNljDHsHlvhmBshDljWsDWlHdgvpVTFggVgGcTTpvFPTzGCV +GRcnTRtcQTcBTsNtpvhFCmmFhZvFPC +bBJMgqWfdwBJfMPPPmvPqhmjvvPC +SMJMdJbdfwJgVglMWWVdcQnBzSQDzGGQzRQDTQSB +mvjVzLgTzVzvVjJrJgrlMhZRFTtRlRhMRRRtFZ +HGqnNNqfnHNGGfCHndBqnqfFlcppsJMZplMFpMtlscRlpC +qSnPGqqbnSdVrvQrrSJjSV +lWFSWZZvVqnqfnSrJzMcPDjJBJcBMPFJ +NGppNgHdHbRsHPbsgGspTwHTMcmMDdJMMmzBDcMBMDQmjMBd +TGGLRGwHsGtpHgHpNbpttwrvCnvCrqSSLvWqPqSSnWvn +jwcqBNNdZLjSfvPdddRlfb +CDVmsgMHCnnDnhVghmDnDCzRRrSrbrlTbsSTlzzlvzPb +gCCFmCWDnChGCFHnGCLBcwwjvZQZNtGqqNZc +LBDcNstdNJscccVDhLHNDHVtFvdldlFvCSnSvjSSbblgvZjF +rWznQqGMMrmmRZbbwvSFgjwbwm +RQnTQfWqqTzTLJJLVtBTsc +SvwCTHqCqqqHtwtnnHHDtWgrBQLzzVLLzSQVFhbrSFLL +cZmPNmPJdmPjPdcclRPPdhBCFVVVrQzQCCLbcgVbBV +fNlmfZfpfWMCtGGpnM +bSNssNssbPHVccPhclPGpP +ffQfZdZZBDDZgLvhmhzVmVppmlpGgh +jdQQQJRljSFFTWCT +lvlLtvnhnfvMgtrvWjmTmPPzjHcrmdcjdd +qCbssCJbppQZQbRJDQSZCJRpzhmcQjdcTBmmGzmdcmjGmdmT +SqwSbJZSpwwFJFDDbqtNVMwVMMlVNgNVlLhV +DqGFQGNMGMQwCcgtCJcr +sVfjWlzzVsmzVZsdVlHrhjppcgpjrhpphcSJ +LRdLsZBWWmlZldZRmzPDvDTTDMGTPFPvBTTc +jzzzpjgBzTDQQHPH +gLLtZVdCdsLfnbZCbdZtHDfHTJJPPmJJfmHQDJqD +bVtWndLtcZgnhsvMSBrMFrvBWNrB +sfqhLDcqfqRRqQhQRqMcvlJpJwFgzwpjplwbgpwzLz +CrGttnhTWtmSnGrtTtSCZGFzbgHHFFFjljHjZHHFwgwl +mBnrrTmWWCGStVCmMcDPcPBqcsRhcvPR +GLZLBNrGZdGGVgMVJVhnvn +dmWlcqcQMWCJVhMn +cdpPqtQbcHlmQjmZswFfTRFpBTfwwT +ZhtZpvbnbpPbtLHLvdsNdcRLNd +jDDjlCflGwsHfdrfTLrrdN +MzmljBMBWPtsbtSQtW +GHrzPSrNLFnMtSBZjZBB +WWbfDmVmwmmlbVDldWslNnBMJJNZZJCtJJJn +vwDfffVvmDwdTvDRQvpLNpLpcRFpphhHLPHg +scsTslgcnCTCScSTcqLLWlFWLLqbGvRbpL +NZMBdBPtNbbrLGqqqGvqZF +NttdbhMPfjQfNtbMbMmNjhNcCzczSSCSJTSzTCScnfnzwC +pjdjCGGGWPCMSDfS +JhFMFcrgBHPnSnWFWDDn +HVBBJctBccghsJhgrbwLGTTdtjLdbmTMMb +DtGHgDPfGfPhfLwNWSSJQcpHcr +dvlMCzdnMRFCCTjnZNpNQJcSbrWzrpSQWS +TVvFJJMjJdlMvRvMClllZZgPtPGsftfDqtGfVGsGtqqq +jSmmcjmJqcBgwmWMCLLzCsMz +TnTQVDGQTpZGNQHDZDHHQDwsCCdLrflsrCVzVrwWzwrr +zDFpppnNQtnTQQvZZZNvnhqqjtRccRbgqqbSSSjPRg +FwClNSwCFstWZLDLvhvjvtjhhD +TmsHmsmrggzmqnnGGvPGjTbbRGBhbB +cHVqgcrVzrQqzHmMcrMnczzcWFVCCFNJZWJZswwFCZWwffwS +mzbsmbmLRCZTRbSJFvPLPJPJpJffcP +QqWqNVNNNllnnWTglqTVlGNPJDvwcJpwfwccPgccPJDfJF +HMGnNMltqGMjHGqMzmTSmzTsRSszSm +qlGDfljllCTgqCTvCDfBHHQsbrSZZHSHWtvWZB +NzpnNpRnLLwRpdwpVhtqQbSbsWQWbSWnrrnH +cFqwFNpLdVcDJlDgccTD +BRqjnSBNBpRHHpjpBSnHnRBQfQzzCvzWrsWCTvfsvCsCCsfC +ZMVbhqbMdlbLTdsWvfPdPC +hlZVDMZcwJNSgjJgJFnq +CZwZssQQZrmsCmNNDpDGFblclD +HMjWMbBVfnnbMbnzMpFhlNSNFFSDcDGSzN +LnLLqjnBMjMngHbnWrTgZsCsgZvvvQrvQs +RCFCCJQbCQcprRlHHPpHhd +tWWLwvswfvZshgqDpdpBgfdf +mZtvZtMpjZzwWFjJTcQQbjjnSQ +fBfVwtttLDFctDtwFPWfTppWfmHCHdJhdChT +bGMRsbsvMQSSzMzZSNzsZvRNWTZJlmgZTJJdhhmppHTJCgTg +jssjNSSGMsQHbsRvHNPjtDcDcLPPPPDwLDDV +pClhQjJccrpbpqHhMhVhSMqHPt +dBZGZdgBzRsBsvMwGGVPVqMGwtVH +ZvDddZvDBdDdDmgCmVmbbCNpCCbljW +DTMCpdCnwRDwdfMCDDCssfZmGrBrjpttjrNrgctmGpGr +VVqJQgSSWzhPGGrPtNNQtm +bFvhgWzHJlDdffswTvRd +jwCCPPTtCswCCNTsqRNbMqQMVvVzMMMQSGvQqn +hprHlmFcHcdhWWLchZzHrLMvvnBvJJSBJMVMnnmMnMMJ +WppLcZdHWHplZWlDHhHTfzRzCCsTTtNNgtjgDw +vhmDFcDZmczMrwcqrMrmDFrvggtVSWgtSNwsjBtNVSnBsjsS +dbbRJHbpCWBBpZVgSS +LZLdHlClPmqLGDvMDv +mFbWsvsJVtbbRwfTSP +BGpQllhLGqhplBGZBfLMTSTLwwfwMJwMPT +GlDnDpQZlZZpZBlpWDNcmrgrWmNdNJvc +zbtqTtHQbZZpqbPpvGJdvQdhrhQjdQGs +qDFLLSNqcWwsGhGDJh +LgBcfnFCSFnLccggSVCVtHZlpqPPtTRMftHMbMzb +hzrrWnzRZRnbWVRzjcRHMDdqqQdNMHqHQQjlHM +sGCpCtppBfCTgwBBCwPBCssQqMQvNlSMMQDQNqHGHvDSbQ +tpLFPgfbCsfbzzcnJhRhZLhc +qzzGqfpFvWFmRSPjPjRP +cwwVssBMtNMNLngstgVBnrsPmHSJJmjllhQdQldmhdrjQJ +nDVSsLwcVcMnBGzTDDCvpvfzGT +bcTbbcZGZLPgTMWZpLLDQnrvPVnVmmjmRPFVrF +HJCJqlzBdsSjzCJRmlrlrnVQQDFnVF +BfwffNdNswLtbWbNcpjt +smJwSNNFMzFNDrvbrbfJHvbl +BRQjqZQcBhrbTsbTnfcn +ZLQRZRBjjPWSsmCdSWMgSN +NhwlDpbWggdSBvBggLFg +fRrZsVfjqljmsQQVmmsnFMFSBLLRvFTFMBSvFF +QfqVVzcsQmcQqrcsNwzzzPphHlwNppPH +nnFdsjVdmpBsBVFHzjpvlTfQdPcQQPGPcvlGPv +DWMDCCWbNJhLtMgJMNLgtMgQflZQlfQGjZZhQZGhTfQcQP +rCrtJJgLLMbgDgMDWNRrWRnzsjpFzBzSHmmqHmqnHH +rmjjJmmdwSmGhdsjJtsgGNzFWQFnBFVWHdFQcLLcNz +RCCbfRlvvPfvCTnHLLnNbNLczHnQ +lqZTllRRpDMlpfZRvgQpSmwwtggQjJgtpS +LDsGvTSSsswCwTrLZDqQWHMWbphlHMpGGpQz +RRPfPRccBdVjPcFlpMpMQWzMWfpF +RjPRjRtczcNBJRSCtLDTvTSDCCST +pqQNgNnSntwgqzzQCzNwCNBRcWtBjZcZGrBMcHMGvWcr +mmJdJPFVbJbPPGZbMRbvvrjcMj +lTMVVlLPfLNQhpgqLSLn +HlBHFrgBvlfzFzqvnvFqpCJbJfQpQpLcmhbcmtmm +jDjPGsRRTMMPjdJmjmLpCLth +MRMZMWsNpFFFVFHW +RGgwWcppGSWcWSRWmGdWcttHQFJHfbQwBQJTJQBQfJ +njjZZCMlCZjqMBFbJQZHJHBQft +DsjCPDDvjFNsMNjNqpGspcsGSmcpccrGWS +cVwMZGVZwHNPgPwRZwHttThlHllvlzQpptzppl +DsCWdqLdDCnfJLSCqsqWRsBdlhjlhzlttzQhhtvlhnhhhbzT +JCWWRWCrLDDdBdLsSsLLSCrCNZMVcmMZMFwMZwNZPZVGFPmr +hhPzDzPhPNbfpzhBbdNbDhttzqWtwttHWwntjqmwmWFm +LgGZSdMMrgTLrZLdgLSgsGTFFjrWtFFmmmFtWjqHFnFtjn +vZgdLvZLZQLRQZQQdMZLdQvVpRhNNPfJDbcBbbhVNJNNhf @@ -0,0 +1,65 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +int +chrcmp(void const * a, void const * b) +{ + return (*(char const *) a) - *((char const *) b); +} + + +int +priority(int c) +{ + if (c >= 'A' && c <= 'Z') + return 27 + c - 'A'; + if (c >= 'a' && c <= 'z') + return 1 + c - 'a'; + fprintf(stderr, "Unexpected priority request: %c\n", c); + return -1; +} + + +int +main() +{ + char buf[BUFSIZ]; + int score = 0; + + while (fgets(buf, sizeof(buf), stdin)) { + int len, i, j; + + len = strlen(buf); + if (len && buf[len - 1] == '\n') + --len; + if (len % 2 == 1) + fprintf(stderr, "Unexpected length: %d\n", len); + + qsort(buf, len / 2, 1, chrcmp); + qsort(buf + len / 2, len / 2, 1, chrcmp); + + i = 0; + j = len / 2; + while (i < len / 2 && j < len) { + if (buf[i] < buf[j]) + ++i; + else if (buf[j] < buf[i]) + ++j; + else + break; + } + if (i >= len / 2 || j >= len) { + fprintf(stderr, "No match found in %s\n", buf); + return -1; + } + score += priority(buf[i]); + } + + printf("Score: %d\n", score); + + return 0; +} + @@ -0,0 +1,87 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +int +chrcmp(void const * a, void const * b) +{ + return (*(char const *) a) - *((char const *) b); +} + + +int +priority(int c) +{ + if (c >= 'A' && c <= 'Z') + return 27 + c - 'A'; + if (c >= 'a' && c <= 'z') + return 1 + c - 'a'; + fprintf(stderr, "Unexpected priority request: %c\n", c); + return -1; +} + + +int +min(int a, int b) +{ + return a < b ? a : b; +} + + +int +min3(int a, int b, int c) +{ + return min(min(a, b), c); +} + + +int +main() +{ + char buf[3][BUFSIZ]; + int score = 0; + + while (fgets(buf[0], sizeof(buf[0]), stdin) + && fgets(buf[1], sizeof(buf[1]), stdin) + && fgets(buf[2], sizeof(buf[2]), stdin)) + { + int n, i, j, k; + + for (n = 0; n < 3; ++n) { + int len = strlen(buf[n]); + if (len && buf[n][len - 1] == '\n') { + --len; + buf[n][len] = '\0'; + } + if (len % 2 == 1) + fprintf(stderr, "Unexpected length: %d\n", len); + + qsort(buf[n], len, 1, chrcmp); + } + + i = 0; j = 0; k = 0; + while (buf[0][i] != '\0' && buf[1][j] != '\0' && buf[2][k] != '\0') { + int n = min3(buf[0][i], buf[1][j], buf[2][k]); + if (buf[0][i] == n && buf[1][j] == n && buf[2][k] == n) + break; + if (buf[0][i] == n) + ++i; + if (buf[1][j] == n) + ++j; + if (buf[2][k] == n) + ++k; + } + if (buf[0][i] == '\0' || buf[1][j] == '\0' || buf[2][k] == '\0') { + fprintf(stderr, "No match found in %s/%s/%s\n", buf[0], buf[1], buf[2]); + return -1; + } + score += priority(buf[0][i]); + } + + printf("Score: %d\n", score); + + return 0; +} + @@ -0,0 +1,1000 @@ +35-73,35-82 +9-27,10-80 +25-93,2-42 +37-54,52-53 +3-8,2-97 +46-89,45-49 +52-76,75-75 +26-27,21-27 +22-96,21-80 +98-99,6-99 +4-9,8-91 +32-46,39-54 +14-14,15-51 +49-56,65-87 +16-16,16-33 +63-96,95-97 +3-81,3-96 +3-69,3-68 +9-93,11-93 +3-8,8-94 +94-97,5-92 +35-73,53-73 +17-17,17-84 +88-88,5-89 +11-99,12-62 +31-33,23-34 +98-98,10-99 +26-26,26-86 +21-63,22-50 +44-81,20-45 +40-41,16-42 +1-39,38-40 +33-97,97-97 +8-9,8-77 +3-76,2-75 +71-82,71-81 +65-85,84-86 +13-71,12-14 +57-95,28-96 +10-35,3-35 +4-99,98-99 +53-60,54-85 +39-43,16-43 +1-86,85-86 +6-7,6-35 +3-3,4-69 +15-72,3-16 +25-48,24-48 +12-33,12-34 +61-63,8-62 +76-76,59-77 +18-82,81-81 +83-91,24-87 +2-2,9-9 +29-94,29-29 +41-87,41-93 +43-44,44-81 +9-83,82-83 +78-97,9-97 +11-26,12-49 +2-20,1-72 +29-97,28-88 +54-73,30-55 +30-77,96-97 +4-62,62-62 +25-60,60-60 +12-89,4-99 +96-98,4-83 +20-68,12-14 +76-76,19-76 +2-93,5-93 +64-64,46-65 +14-61,14-15 +19-85,18-86 +4-85,16-85 +88-88,15-89 +66-66,66-73 +1-93,1-2 +16-81,10-81 +79-89,3-88 +57-94,79-95 +52-52,12-53 +13-27,27-27 +13-13,14-14 +82-84,22-82 +68-93,25-69 +43-85,44-85 +2-27,24-75 +34-44,31-43 +6-47,12-54 +43-75,42-74 +12-91,7-90 +48-54,53-66 +40-54,53-90 +11-61,12-95 +16-86,17-85 +10-94,11-11 +86-88,4-87 +17-94,16-93 +16-55,15-17 +29-50,28-49 +12-75,13-76 +27-37,33-36 +9-9,9-95 +47-99,98-98 +35-87,87-87 +38-99,39-99 +5-58,16-57 +84-86,84-88 +73-75,74-76 +10-92,11-92 +6-51,50-52 +3-21,20-21 +15-55,14-15 +50-50,50-98 +5-55,6-66 +44-97,86-96 +2-62,3-63 +3-98,1-99 +32-75,75-76 +71-71,70-79 +46-89,5-61 +79-95,80-94 +71-88,69-89 +49-72,48-80 +3-56,8-76 +10-79,12-89 +33-97,33-96 +41-91,90-90 +32-44,31-32 +25-52,45-47 +38-57,38-57 +88-88,13-89 +23-45,22-44 +12-93,13-69 +76-76,27-77 +16-17,16-24 +16-92,91-93 +8-95,8-85 +4-64,3-65 +18-94,17-34 +43-52,43-52 +16-97,15-95 +10-39,15-38 +33-33,10-34 +35-56,34-48 +97-99,41-95 +45-49,44-49 +5-94,7-94 +2-98,1-7 +17-73,16-74 +11-20,9-12 +27-27,26-64 +5-93,8-92 +16-77,16-76 +58-90,93-94 +36-59,40-59 +72-84,72-84 +2-81,4-95 +31-63,32-76 +4-88,4-5 +18-20,19-87 +84-84,84-95 +26-76,75-75 +7-79,42-79 +29-37,23-29 +28-51,28-50 +38-65,8-39 +55-89,56-90 +6-6,6-49 +14-18,23-43 +61-70,2-70 +5-92,92-92 +6-71,7-75 +41-59,42-59 +99-99,7-46 +15-50,51-57 +17-95,16-17 +54-88,55-87 +36-36,36-73 +79-87,27-79 +38-85,32-39 +91-93,41-92 +71-75,52-74 +37-52,37-53 +33-67,4-68 +27-94,27-99 +12-90,89-90 +7-70,6-69 +97-99,96-98 +91-95,7-92 +23-95,24-74 +8-35,34-53 +26-94,26-94 +90-90,71-91 +8-16,7-15 +3-97,3-98 +23-23,22-24 +25-65,24-40 +24-24,13-25 +1-83,3-82 +10-11,10-65 +40-41,41-41 +91-91,2-92 +70-95,94-95 +2-86,3-83 +10-12,11-93 +77-90,38-71 +25-25,12-26 +75-77,5-76 +9-85,7-10 +7-94,87-93 +95-95,41-96 +51-75,50-52 +40-87,41-41 +23-47,47-72 +21-98,20-98 +10-63,10-53 +68-82,68-68 +18-78,18-50 +29-60,33-96 +2-53,9-53 +5-97,1-5 +23-49,48-78 +23-70,23-24 +4-95,3-96 +14-35,13-34 +41-67,40-40 +4-96,3-81 +54-55,54-70 +7-79,18-81 +61-71,61-70 +9-9,9-76 +69-91,69-92 +10-90,11-95 +95-97,67-96 +85-94,86-91 +70-73,68-73 +23-76,92-99 +1-12,11-94 +46-77,46-78 +65-73,52-72 +27-62,28-98 +30-76,73-75 +5-45,5-71 +11-90,89-89 +14-92,14-15 +62-75,61-87 +25-88,84-94 +16-84,17-95 +18-93,17-93 +27-59,27-27 +36-43,36-42 +42-42,43-56 +7-41,40-41 +6-95,6-7 +23-98,12-98 +6-87,52-88 +54-62,53-68 +33-86,18-37 +2-98,12-98 +78-96,73-81 +93-97,93-96 +7-7,6-91 +34-49,34-48 +43-65,61-66 +57-72,67-98 +16-89,15-89 +3-66,2-65 +21-45,22-31 +7-47,47-54 +1-78,1-79 +31-77,32-77 +88-91,18-88 +15-82,11-16 +37-90,20-90 +18-52,21-81 +1-96,2-96 +6-54,5-25 +20-46,17-47 +2-7,7-94 +10-42,16-43 +25-43,26-56 +11-99,11-12 +4-95,3-94 +61-63,69-88 +1-93,37-99 +94-94,14-95 +4-43,3-46 +79-98,78-78 +2-78,2-78 +48-72,48-72 +10-98,3-99 +22-47,35-54 +8-62,9-16 +2-22,3-8 +4-93,5-91 +3-84,72-84 +18-32,18-19 +40-65,51-64 +34-36,34-34 +11-65,12-64 +23-98,24-97 +23-75,74-75 +4-6,5-72 +5-89,5-88 +25-86,85-87 +65-91,2-91 +93-94,2-81 +11-54,23-54 +57-94,93-99 +18-23,22-23 +88-88,4-87 +97-97,1-98 +6-99,5-5 +15-49,16-48 +41-68,68-68 +40-88,89-89 +89-91,7-90 +5-87,52-86 +31-39,32-38 +98-99,1-99 +36-49,48-49 +15-61,14-41 +41-53,42-63 +2-21,12-20 +37-47,47-47 +21-21,22-94 +48-65,49-69 +38-80,10-39 +7-7,7-85 +32-85,32-33 +42-79,78-78 +22-92,21-23 +1-35,3-47 +6-92,7-93 +40-94,6-87 +48-96,8-95 +45-95,79-94 +1-92,9-89 +21-64,20-65 +7-76,7-8 +1-59,3-45 +9-9,8-85 +16-32,31-70 +56-93,56-56 +8-15,13-89 +43-43,42-60 +31-73,6-74 +24-24,20-25 +36-72,36-37 +74-96,75-75 +6-94,5-93 +13-97,5-14 +10-22,22-22 +39-86,39-39 +75-75,75-83 +25-76,14-77 +9-67,66-66 +6-25,24-26 +8-8,15-62 +23-61,8-61 +32-34,6-33 +38-78,77-79 +52-77,53-77 +17-86,9-12 +88-90,2-89 +10-25,15-26 +25-86,24-24 +35-92,40-91 +19-79,83-86 +1-1,4-64 +66-72,71-79 +43-45,42-44 +7-93,6-89 +1-75,1-76 +7-8,7-99 +11-54,10-44 +5-6,1-6 +24-41,5-25 +7-93,7-85 +96-96,71-93 +41-84,41-83 +50-72,65-81 +23-24,23-77 +7-97,3-62 +26-26,25-32 +36-65,30-66 +83-83,77-82 +10-75,74-75 +10-90,11-89 +98-99,19-99 +98-99,1-94 +7-39,14-39 +8-8,9-91 +27-77,26-26 +22-78,36-78 +51-67,67-68 +12-35,11-49 +27-61,60-62 +23-51,26-94 +48-79,49-96 +13-95,6-39 +75-84,76-80 +18-67,19-68 +51-76,46-76 +40-93,33-41 +37-80,66-90 +16-50,15-95 +6-81,5-7 +10-94,9-65 +42-96,43-97 +16-71,17-72 +1-38,36-39 +62-63,62-86 +5-99,1-99 +71-72,8-72 +4-35,2-36 +1-52,51-53 +70-80,79-81 +46-47,47-82 +29-65,40-67 +42-60,35-54 +39-74,7-74 +74-97,4-97 +62-97,55-75 +8-36,7-35 +31-75,74-81 +12-34,11-85 +49-79,14-50 +52-53,53-63 +93-94,62-85 +85-93,13-87 +60-61,62-95 +2-5,4-80 +60-61,60-98 +24-58,24-59 +13-67,14-80 +13-80,14-81 +6-36,5-73 +9-76,80-81 +11-96,11-98 +20-97,88-98 +6-78,5-77 +7-7,19-47 +35-41,84-88 +57-59,44-59 +24-55,24-54 +13-80,13-14 +5-6,5-42 +51-90,52-52 +18-92,19-93 +20-20,23-94 +91-91,23-90 +22-77,98-98 +14-33,15-96 +28-34,28-29 +26-73,96-96 +45-86,44-87 +40-95,21-93 +15-20,14-14 +5-99,2-99 +89-89,23-88 +35-92,73-92 +92-92,36-93 +6-70,16-70 +18-85,19-85 +44-51,43-56 +17-88,16-48 +7-94,8-96 +90-90,34-83 +53-66,68-70 +19-82,18-81 +10-91,9-91 +22-76,31-77 +55-55,15-55 +2-61,2-3 +18-75,37-74 +36-95,35-37 +57-65,64-66 +89-91,10-90 +35-40,34-35 +6-90,6-6 +6-27,17-85 +9-10,10-30 +7-85,8-84 +60-60,34-60 +74-75,20-76 +58-94,7-93 +83-98,14-93 +10-86,9-62 +46-87,76-87 +34-73,34-74 +35-66,13-66 +99-99,4-93 +56-83,52-83 +3-90,2-98 +34-97,33-87 +71-71,10-71 +4-8,8-96 +81-89,17-81 +46-96,46-95 +20-34,19-32 +77-89,71-74 +18-71,19-20 +43-88,44-85 +40-94,40-40 +7-73,72-73 +98-99,50-97 +8-45,7-46 +33-73,33-73 +38-97,96-96 +24-86,24-87 +17-54,17-17 +46-84,43-84 +5-92,4-31 +58-93,99-99 +33-35,34-98 +43-74,36-49 +9-76,10-83 +4-93,3-92 +67-83,66-89 +17-54,15-17 +86-89,88-89 +16-50,4-51 +10-11,9-11 +41-94,94-94 +58-74,59-92 +19-35,34-36 +4-5,4-99 +38-75,56-76 +50-84,58-85 +1-35,34-35 +36-37,37-89 +1-47,15-95 +67-68,67-69 +50-94,93-98 +59-59,37-59 +62-63,63-79 +31-98,30-82 +32-91,31-92 +3-91,5-91 +1-1,2-92 +19-42,18-44 +62-70,22-64 +79-87,79-86 +3-86,2-2 +88-92,52-95 +3-49,1-7 +9-60,10-70 +70-94,40-71 +15-43,16-44 +62-94,93-94 +19-64,24-64 +7-75,74-99 +14-14,15-60 +9-71,9-71 +4-80,2-81 +39-78,49-78 +1-98,5-98 +1-14,2-44 +7-20,6-19 +41-41,40-84 +90-95,90-90 +11-16,15-45 +11-82,81-83 +20-73,15-73 +50-62,50-61 +11-88,12-95 +76-76,15-77 +4-6,5-64 +88-88,47-89 +68-81,8-69 +80-82,81-81 +54-93,20-56 +56-65,64-85 +50-90,15-90 +39-89,1-58 +50-77,76-78 +1-84,2-90 +46-87,45-87 +7-61,60-60 +35-99,36-80 +98-99,6-99 +53-62,33-54 +44-94,2-76 +2-93,4-93 +2-36,2-36 +74-76,6-75 +20-77,21-83 +8-9,8-97 +37-84,37-83 +11-54,54-54 +39-99,38-98 +17-37,33-76 +98-98,5-99 +33-66,34-59 +38-44,37-74 +54-59,59-59 +7-31,6-57 +14-19,15-44 +11-77,1-10 +26-70,27-70 +60-71,48-76 +45-50,49-92 +21-95,3-90 +63-79,64-99 +1-97,4-96 +28-69,30-68 +39-86,85-85 +28-28,3-29 +55-55,56-94 +31-87,30-31 +75-77,74-76 +19-19,19-99 +81-89,82-86 +37-68,16-68 +65-89,5-61 +71-97,72-96 +18-31,30-82 +74-96,75-75 +37-87,38-86 +13-46,13-14 +64-99,41-86 +50-95,49-97 +73-82,49-81 +13-39,22-40 +6-68,6-68 +51-88,51-90 +5-99,2-3 +99-99,73-96 +36-82,53-82 +12-79,13-79 +54-56,16-55 +7-52,15-63 +17-30,18-30 +21-59,22-59 +55-77,54-77 +5-81,4-4 +13-75,9-59 +42-53,52-52 +15-51,52-52 +8-31,7-7 +76-84,7-77 +22-99,22-23 +2-90,2-2 +32-73,72-72 +10-36,36-36 +30-52,53-79 +9-9,6-8 +91-94,1-95 +72-78,24-73 +40-86,85-87 +53-97,53-98 +15-49,25-49 +12-96,4-96 +17-97,99-99 +29-74,73-74 +64-98,63-99 +87-94,93-93 +2-90,5-89 +4-88,97-98 +10-77,11-78 +6-68,4-6 +16-64,11-21 +3-28,5-77 +29-87,29-88 +56-80,9-56 +2-41,40-46 +48-49,48-64 +46-46,5-46 +37-65,64-64 +6-53,7-54 +10-31,18-62 +47-56,53-56 +5-97,96-98 +18-97,19-57 +50-83,23-84 +47-57,2-58 +26-70,11-71 +26-28,27-80 +1-99,3-98 +80-91,79-81 +16-24,10-21 +5-98,6-97 +36-71,37-72 +67-69,2-68 +14-99,14-90 +33-72,23-34 +8-85,12-85 +4-77,3-67 +22-24,13-23 +27-90,22-28 +20-87,8-82 +73-74,29-74 +99-99,9-39 +14-64,65-65 +18-68,14-69 +24-43,42-96 +98-99,38-99 +4-7,6-83 +1-12,13-93 +16-38,2-39 +36-87,21-29 +24-26,76-92 +6-69,7-7 +8-22,4-11 +33-79,31-80 +73-73,72-73 +36-48,37-48 +6-9,8-80 +1-36,1-1 +5-33,33-33 +89-96,26-89 +42-54,43-56 +40-49,39-49 +60-60,61-81 +66-95,65-65 +5-96,6-6 +24-75,23-76 +82-89,32-45 +17-21,21-61 +39-66,39-40 +3-93,4-94 +10-35,9-79 +65-94,64-64 +77-77,76-76 +29-94,28-76 +10-83,11-84 +1-13,12-12 +92-92,39-93 +87-89,52-88 +55-70,55-71 +21-21,20-22 +2-99,98-99 +3-34,25-84 +58-68,58-69 +5-92,24-91 +1-55,2-66 +5-97,97-99 +49-56,48-50 +62-77,1-76 +27-73,28-73 +66-74,58-74 +4-38,1-38 +69-69,69-76 +8-95,9-97 +84-97,83-96 +24-26,12-25 +34-36,35-37 +28-50,28-49 +37-93,4-94 +42-94,20-95 +7-9,9-86 +2-5,10-85 +29-45,45-99 +59-74,56-74 +68-93,97-99 +10-10,9-9 +9-72,8-69 +52-52,21-53 +75-88,7-76 +3-90,4-99 +16-92,10-92 +1-96,95-98 +10-78,11-79 +28-58,29-59 +11-60,17-61 +33-97,32-95 +5-46,43-50 +27-96,26-66 +8-38,38-94 +19-61,61-61 +24-58,71-90 +13-96,10-14 +47-88,47-87 +77-99,44-98 +2-4,1-34 +25-88,26-64 +13-38,10-53 +31-45,44-75 +1-51,1-52 +69-90,68-88 +12-12,13-13 +14-95,13-89 +51-52,50-87 +32-32,33-77 +46-54,80-95 +28-79,65-78 +22-56,21-57 +51-75,52-75 +49-51,29-90 +14-70,11-70 +2-95,94-96 +36-64,6-36 +22-60,22-61 +68-68,59-68 +1-48,2-2 +5-92,6-69 +5-84,6-85 +15-84,47-93 +13-93,97-98 +30-69,29-70 +87-95,2-75 +53-53,18-54 +93-99,50-93 +40-42,6-41 +10-73,10-10 +1-2,1-98 +55-57,53-57 +26-27,27-27 +72-72,71-94 +13-99,4-77 +37-94,12-93 +41-54,53-55 +23-24,23-63 +28-61,7-29 +3-89,4-88 +58-59,26-58 +3-5,4-94 +13-15,14-63 +10-67,11-78 +57-72,56-70 +2-96,2-97 +9-11,10-80 +80-83,80-82 +97-99,1-98 +24-54,25-33 +19-24,20-29 +1-98,2-97 +13-92,12-92 +74-90,91-91 +26-40,27-38 +51-81,18-81 +37-71,37-38 +7-67,3-4 +88-88,13-88 +9-25,24-93 +90-90,41-90 +41-52,40-86 +2-8,9-92 +6-56,6-56 +18-22,19-78 +29-56,55-99 +20-83,21-84 +21-21,21-67 +17-87,13-19 +64-66,65-86 +32-79,1-73 +13-97,12-86 +91-91,4-92 +43-61,61-61 +10-95,11-99 +3-95,8-96 +6-85,5-7 +2-92,1-93 +59-59,20-59 +14-93,92-94 +19-20,19-52 +47-64,46-51 +3-4,3-95 +5-90,5-91 +66-96,12-74 +39-93,40-95 +3-5,4-96 +39-80,2-40 +8-87,9-87 +12-91,2-12 +79-88,43-88 +29-64,64-64 +17-76,16-75 +14-97,14-15 +88-88,43-89 +40-60,34-40 +16-24,15-16 +16-94,47-89 +32-40,32-80 +93-93,12-94 +23-66,31-66 +60-78,37-39 +38-65,9-65 +28-28,27-29 +24-77,1-10 +14-59,15-95 +15-15,16-81 +83-86,7-83 +6-63,3-63 +54-71,56-70 +43-90,42-44 +7-63,6-44 +44-78,44-77 +63-82,81-81 +31-96,31-97 +27-45,28-34 +47-78,47-48 +90-95,12-95 +23-46,23-46 +1-50,51-81 +23-24,24-24 +4-22,21-44 +10-72,9-22 +66-67,22-67 +1-63,2-33 +62-62,17-61 +34-75,35-42 +30-45,29-44 +2-92,3-94 +50-51,41-51 +31-44,44-45 +7-27,6-73 +34-93,35-94 +23-74,38-74 +24-97,38-99 +9-9,10-73 +35-36,35-99 +67-76,4-75 +95-97,20-96 +69-69,61-70 +21-98,20-20 +96-98,52-97 +49-49,16-49 +11-84,11-12 +34-42,42-43 +53-58,16-56 +24-86,24-24 +29-63,29-29 +21-84,5-80 +94-96,23-95 +11-31,12-30 +54-86,53-85 +16-87,17-88 +9-90,8-10 +12-78,11-77 +11-84,12-85 +26-33,27-40 +63-77,69-95 +40-87,41-88 +5-94,4-6 +40-82,37-51 +44-52,41-51 +52-97,53-99 +57-58,51-58 +13-80,76-79 +58-67,29-67 +59-91,58-59 +49-83,13-75 +6-21,9-85 +86-99,98-99 +11-79,96-97 +3-4,3-97 +21-95,95-97 +84-89,47-86 +29-87,63-89 +5-89,90-92 +27-45,28-44 +53-90,52-91 +7-7,2-7 +51-66,51-51 +45-47,18-46 +37-48,36-38 +9-28,25-28 +55-98,55-99 +35-39,40-99 +31-69,1-69 +43-60,36-60 +16-36,30-35 +65-66,65-80 +12-88,12-12 +53-53,53-63 +17-18,16-18 +30-56,10-30 +7-38,10-46 +1-77,78-78 +6-94,5-78 +5-57,58-60 +49-76,48-75 +26-96,95-96 +45-47,11-46 +55-56,22-56 +29-83,84-84 +51-72,46-52 +67-83,68-87 +76-91,51-91 +25-97,25-26 +3-92,17-92 +55-68,68-69 +39-95,38-96 +1-83,82-83 +7-47,48-67 +45-73,72-73 +9-99,3-55 +81-82,31-82 +5-5,4-32 +14-23,22-87 +48-51,24-50 +23-23,22-46 +50-51,18-50 +17-91,3-17 +31-89,30-88 +11-74,7-12 @@ -0,0 +1,53 @@ + +#include <stdio.h> +#include <stdlib.h> + + +char * +getsect(int * dest, char * pch, char expect) +{ + char * end; + + if (!pch) + return NULL; + *dest = strtol(pch, &end, 10); + if (*dest == 0 && end == pch) + return NULL; + if (*end != expect) + return NULL; + if (expect) + ++end; + return end; +} + + +int +main() +{ + char buf[BUFSIZ]; + int overlaps = 0; + + while (fgets(buf, sizeof(buf), stdin)) { + int n[4]; + char * pbuf; + + pbuf = getsect(&n[0], buf, '-'); + pbuf = getsect(&n[1], pbuf, ','); + pbuf = getsect(&n[2], pbuf, '-'); + pbuf = getsect(&n[3], pbuf, '\n'); + if (!pbuf) { + fprintf(stderr, "Unexpected line: %s\n", buf); + return -1; + } + if ((n[2] >= n[0] && n[3] <= n[1]) + || (n[0] >= n[2] && n[1] <= n[3])) + { + ++overlaps; + } + } + + printf("Overlaps: %d\n", overlaps); + + return 0; +} + @@ -0,0 +1,51 @@ + +#include <stdio.h> +#include <stdlib.h> + + +char * +getsect(int * dest, char * pch, char expect) +{ + char * end; + + if (!pch) + return NULL; + *dest = strtol(pch, &end, 10); + if (*dest == 0 && end == pch) + return NULL; + if (*end != expect) + return NULL; + if (expect) + ++end; + return end; +} + + +int +main() +{ + char buf[BUFSIZ]; + int overlaps = 0; + + while (fgets(buf, sizeof(buf), stdin)) { + int n[4]; + char * pbuf; + + pbuf = getsect(&n[0], buf, '-'); + pbuf = getsect(&n[1], pbuf, ','); + pbuf = getsect(&n[2], pbuf, '-'); + pbuf = getsect(&n[3], pbuf, '\n'); + if (!pbuf) { + fprintf(stderr, "Unexpected line: %s\n", buf); + return -1; + } + if (!(n[3] < n[0] || n[2] > n[1])) { + ++overlaps; + } + } + + printf("Overlaps: %d\n", overlaps); + + return 0; +} + diff --git a/makefile b/makefile new file mode 100644 index 0000000..6b7b00a --- /dev/null +++ b/makefile @@ -0,0 +1,10 @@ + +CFLAGS=-Wall + +all: bin/1a bin/1b \ + bin/2a bin/2b \ + bin/3a bin/3b \ + bin/4a bin/4b \ + +bin/%: %.c + $(CC) $(CFLAGS) -o $@ $< |