diff --git a/day24/input b/day24/input new file mode 100644 index 0000000..4d58b06 --- /dev/null +++ b/day24/input @@ -0,0 +1,300 @@ +197869613734967, 292946034245705, 309220804687650 @ 150, 5, -8 +344503265587754, 394181872935272, 376338710786779 @ -69, 11, -46 +293577250654200, 176398758803665, 272206447651388 @ -17, 101, 26 +227838629808858, 367321356713508, 425398385268402 @ 65, 16, -116 +297081053375721, 388848043410867, 296378505058047 @ -18, -39, 33 +249754396059978, 259753263131310, 219900405025431 @ 91, -50, 168 +286919351742593, 228761881251504, 290165658974486 @ 12, -276, -96 +286311847445390, 152489168079800, 315302094634181 @ 29, -35, -385 +288820028461659, 150144138610263, 536519846895513 @ -8, 281, -209 +351363783085246, 431469241705574, 539320870624397 @ -78, -38, -232 +520741901046000, 486075674341440, 369706315508673 @ -232, -39, -23 +296908684971710, 177204123362510, 281142112744853 @ -31, 49, -22 +464778874251030, 349646113957650, 294333434112573 @ -189, 77, 47 +223080581415839, 347888203813250, 182953206412142 @ 62, 70, 164 +248758455691314, 346762126256074, 336814976102123 @ 67, -112, -64 +305759617719566, 278636683190318, 293811872846781 @ -37, 7, 13 +261069455438014, 224906346121182, 312469904696747 @ 213, -558, -355 +175747324785094, 297435412745142, 423525775964281 @ 111, 126, -90 +288744178785162, 132122659522473, 258206348685239 @ 25, -21, 9 +295813662568370, 254283641864230, 293357741330673 @ -22, -70, -20 +154949963866962, 287525861043030, 236828184910989 @ 212, 30, 115 +249405710994408, 288399639351476, 278889781077279 @ 40, 107, 58 +261619805679875, 455908136153330, 353090693287483 @ 18, -10, -7 +330456261567276, 292626086331062, 325102953175383 @ -98, -94, -74 +299424195935038, 510703474048950, 292252992375285 @ -19, -90, 49 +289238752547322, 290180922496209, 356685344768994 @ -7, 23, -82 +280872765743550, 201108566398725, 258965390526423 @ 21, 41, 69 +275979615869275, 148504223460275, 255005089561549 @ 134, -85, 59 +387325456061188, 345202312209860, 329940617813946 @ -205, -160, -68 +234283292154810, 377522770250222, 301277403416473 @ 64, -28, 26 +392077346074701, 495085824379504, 530452270485388 @ -110, -56, -184 +303921565996632, 184162452416208, 288112084900062 @ -77, -104, -106 +279914507067786, 272090396870874, 137037141013257 @ 16, -57, 354 +265091370503554, 259490553837145, 294987941742668 @ 41, 25, 6 +277324636544734, 487331020226038, 542928614247113 @ 5, -98, -234 +261897775442772, 280478694349944, 288319637735007 @ 23, 128, 49 +282398761112085, 136973576351520, 265394454424968 @ 74, 24, -36 +347154810802281, 412858527953970, 218797176940017 @ -72, -10, 127 +342824292561169, 362027652434593, 377103448331376 @ -88, -59, -98 +303342712558226, 143531465945890, 263215337554529 @ -87, 70, 15 +275380876849407, 104449535339038, 273473922524719 @ 142, 322, -115 +285636284070876, 35217949523578, 152994957457591 @ -5, 398, 189 +294685250599224, 122742414916884, 261780925324521 @ -54, 57, -55 +314169716569136, 156663661505480, 455739759596215 @ -64, 205, -390 +300983303095740, 133957419148920, 261097837194423 @ -88, 79, 12 +158215971846888, 339904610013018, 239642086049769 @ 146, 52, 105 +274536031464654, 65723174697222, 354345054787149 @ 46, 456, -251 +327841767697610, 339044435628830, 283110688052013 @ -66, -28, 43 +330929514175462, 504607737339754, 162507010450204 @ -67, -242, 218 +276948325793030, 149100573461750, 201857443244268 @ 77, 58, 388 +260677243049794, 257886873526064, 401788966601771 @ 35, 101, -132 +238764538535158, 239639934534678, 427263483474075 @ 45, 186, -95 +294271217851860, 279973777207680, 317358232153488 @ -21, -348, -162 +240944232332486, 140602546133218, 173583047033163 @ 233, 152, 466 +299283097756530, 171124444230390, 232178177063823 @ -57, -78, 208 +309506824723454, 193340344086617, 325677550626124 @ -43, 169, -42 +313257508666173, 193901329414071, 312656919318366 @ -82, 33, -110 +562238344970567, 521281584140464, 554003079517479 @ -274, -76, -203 +298867675092622, 413106341656246, 319408082070669 @ -18, 29, 25 +370336364999228, 303102716871354, 236944508864721 @ -108, 84, 109 +280537764410923, 102390738316029, 173484039005415 @ 72, 339, 673 +292740513454551, 187470172834775, 251899331250560 @ -14, 95, 90 +311208406217498, 244876960258574, 384930971208158 @ -63, -46, -264 +282757042955406, 134469559669654, 254384177119565 @ 58, 91, 69 +287704452860064, 121558528808556, 254224870158150 @ 23, 176, 68 +275586065064718, 113832932538934, 250412578315621 @ 231, 176, 108 +280638278276355, 123874819227913, 281800323086541 @ 94, 137, -197 +493700702104308, 528380743592954, 350707777563697 @ -284, -244, -43 +254273430941810, 246127394458430, 305873005421113 @ 42, 128, 14 +189195001805430, 327268786344945, 319530516675018 @ 93, 103, 22 +325888830117990, 244873525901106, 384752213134803 @ -151, -248, -454 +401086712195530, 418733514897265, 338101695130098 @ -303, -511, -140 +230647849488649, 435350980629356, 268731710232233 @ 60, -56, 71 +295369648182904, 93151204130694, 263077240181359 @ -45, 426, -15 +418829662328400, 326986769471280, 418797738573353 @ -233, -60, -201 +251815856690310, 194585137396830, 271694989005693 @ 254, -275, -43 +320084250980490, 430363982553600, 272379689756425 @ -41, -15, 69 +272457208243458, 108653772697770, 297045940728273 @ 103, 300, -179 +255460977490872, 377835158364426, 281221792538313 @ 50, -132, 41 +186732804203969, 179181818690891, 296305762653620 @ 132, 227, 30 +363360218049360, 457270542750130, 287865571450673 @ -86, -40, 53 +298636823643895, 142941004154310, 378997929287068 @ -28, 234, -220 +382702722487998, 513245966052726, 543441464074293 @ -103, -84, -204 +228608403903005, 303829275389505, 355570720480703 @ 126, -105, -135 +260219312780930, 137397315917050, 266549922818113 @ 230, 71, -24 +304643969715550, 224581934648158, 272949803301789 @ -51, -43, 25 +268015204288250, 441520660598230, 343626399860368 @ 17, -70, -18 +238174446949074, 332863636964670, 357987268083903 @ 87, -90, -104 +228308485346835, 276785427440115, 170815415970033 @ 124, -39, 263 +314650396447557, 123914003921973, 213241437994668 @ -80, 269, 206 +297854289680094, 281401828797270, 371366863778853 @ -19, 100, -64 +286065635483838, 197701133867714, 271157012746365 @ 13, -73, 7 +250655739928110, 196904819501880, 302810006057913 @ 29, 239, 41 +266668785798760, 448611859404060, 414549057547295 @ 14, -15, -72 +322922202039681, 288346524052986, 321238043979297 @ -124, -338, -161 +293057502181848, 156792975363520, 342205463462629 @ -17, 100, -301 +308717176917930, 432612150091956, 137325020082819 @ -31, -56, 225 +281337106418164, 131556887203378, 394376757970843 @ 6, 284, -144 +330503962382908, 330818974149580, 537427943951777 @ -58, 55, -255 +283277882485918, 140980016640358, 250970251275309 @ 77, -62, 97 +263087598676614, 91780184771073, 292766760310263 @ 93, 373, -59 +278997311530576, 271220323025157, 298776258201767 @ 11, 39, 9 +290282187857252, 90415486230079, 469397950757119 @ -9, 349, -223 +256747945850094, 323730245582688, 328245791702091 @ 45, -23, -32 +401181849440357, 451034523457105, 234309567496232 @ -208, -295, 122 +308723752435696, 115715106908199, 370471287969368 @ -49, 303, -174 +350829907284000, 410154732609660, 529415646366563 @ -77, -12, -219 +419009202317788, 512491677981588, 547814498224699 @ -210, -309, -372 +311615054184480, 231690664406384, 357030646855481 @ -56, 41, -147 +304792391244741, 337785561648414, 131083793921031 @ -50, -366, 449 +206420199739566, 127278272054270, 146756457401286 @ 133, 290, 268 +270910705904663, 228152407296912, 221757636662076 @ 12, 192, 124 +300969936669270, 134288269050258, 499856005855185 @ -41, 231, -710 +346853099200626, 400507954958115, 312124090163436 @ -103, -165, -10 +295655922433878, 136151138335002, 251210251002099 @ -47, 36, 94 +392730607704625, 423781125044385, 516945102596158 @ -118, -9, -190 +69403706384776, 184624597681024, 184639589308473 @ 288, 221, 181 +66252602357374, 281405359792914, 30983356670417 @ 221, 147, 318 +287993442160185, 228594083593680, 261604045844313 @ 8, -316, 39 +314015168824601, 218762406294299, 297215373888999 @ -102, -139, -95 +326752500563416, 353810276040186, 488516122962329 @ -64, -48, -267 +258926906195649, 297757458431104, 224543898991682 @ 46, -8, 138 +335842594299150, 354523823783860, 369336538703853 @ -83, -79, -101 +288526789357971, 121038469208217, 258752869918026 @ 40, 47, -26 +108328693782431, 343573100192480, 173790439071324 @ 180, 80, 172 +190081526928030, 380079554486550, 364097619506013 @ 165, -149, -104 +250948371088939, 296401339516958, 136026529945132 @ 38, 98, 230 +351639656315755, 418597373928239, 322874990426896 @ -106, -169, -22 +256527707312850, 265251465370026, 92231595436701 @ 49, 54, 363 +243482352003871, 262121028939334, 375839029327665 @ 96, -22, -185 +298593292934625, 339458062356441, 214617146154333 @ -26, -181, 171 +275150906378238, 311632676774493, 263415384348696 @ 21, -73, 68 +320596173865085, 381290990425590, 219310185443898 @ -46, -6, 130 +177898665297750, 226849892269620, 160180756743033 @ 253, 44, 303 +279116256628275, 146651840207353, 282879798100090 @ 124, -133, -246 +392635760919870, 333295381854834, 442746711116196 @ -171, -34, -212 +292548629428628, 122772229153350, 255776774836727 @ -22, 90, 38 +544799759489502, 337391467488474, 361407860304663 @ -299, 64, -34 +292322626234629, 138777764194865, 265324258794703 @ -20, -155, -99 +282965997263942, 200583086862102, 288222750366121 @ 17, 18, -27 +184123754458512, 298801270442925, 312681619432842 @ 135, 65, 8 +294040563055029, 390459835311429, 430929964653284 @ -14, -33, -136 +277956000745130, 354560401734564, 304340564999986 @ 9, -36, 14 +167135982400842, 222756086467026, 67877440945953 @ 128, 197, 296 +242759244348998, 449964433573166, 378310609379989 @ 38, -17, -36 +239198436794010, 251471676042330, 376042668463923 @ 99, 20, -170 +208612278954525, 286324378939317, 337304149796031 @ 204, -143, -131 +277799030839086, 399218651107929, 368577064839678 @ 5, -11, -44 +322118735266236, 290641269989004, 383487802302959 @ -53, 72, -91 +256593963025854, 334513771019582, 294656480526811 @ 37, 14, 32 +329599248877570, 197922370698045, 404258355865923 @ -87, 141, -215 +292246235199542, 336476575154758, 294198436012381 @ -12, -74, 17 +223046830666095, 222297021590310, 331293449149998 @ 174, 10, -124 +257128556061390, 316985972417478, 316019421290157 @ 34, 52, 7 +296823104251365, 73266965970672, 208843642987443 @ -46, 536, 381 +186762232661930, 414021046203320, 181890680360523 @ 111, -31, 172 +281676511806954, 68066126010342, 261288970575417 @ 151, 906, -67 +303757637395870, 217457431464550, 319780204418413 @ -42, 38, -84 +293998547622634, 157696363761326, 266947971288341 @ -24, 28, 5 +303236697587634, 75782198507708, 164239911128339 @ -53, 431, 408 +451884353787348, 347734285669926, 260867084065575 @ -200, 42, 80 +212107079473842, 222514154994394, 227588059381085 @ 175, 52, 147 +297742727268150, 210177653776632, 266421092954811 @ -31, -21, 42 +297742449578916, 460871887542983, 360850072296921 @ -17, -23, -17 +246490205901585, 447966753158365, 404149065570053 @ 34, -13, -61 +428537057381550, 259393531649550, 451019171242533 @ -199, 116, -183 +230092531193395, 450084861735895, 444545815810863 @ 56, -47, -119 +293207906123064, 160980917757360, 246454854637719 @ -24, -155, 134 +330685508240028, 153706232993909, 389627424871162 @ -113, 199, -270 +248047109715670, 337914006012422, 417308660816485 @ 59, -46, -175 +216999103947558, 245599796562690, 223461139247949 @ 223, -115, 179 +366297428313467, 413353588098657, 493826636982846 @ -84, 27, -146 +231542611031360, 292569000471730, 274734344419188 @ 59, 110, 64 +340347932799756, 315437837619245, 423718776869272 @ -65, 95, -100 +293050173321162, 191021302380190, 246711130315731 @ -17, -50, 112 +326025761363193, 172309744218396, 394171710776000 @ -44, 264, -46 +271911632195370, 173127769509796, 287671653632109 @ 199, -409, -293 +353537780577862, 239571404654630, 342304790868225 @ -193, -70, -176 +324487646920386, 339596736303303, 353856883304097 @ -79, -159, -121 +278896401492370, 63361613140749, 81017522141184 @ 9, 393, 358 +225736349588673, 244172924845407, 261079971175602 @ 148, -9, 68 +335019211033523, 549163897737994, 323974350512217 @ -90, -482, -41 +273084828613785, 368247857134458, 327369121734939 @ 14, -26, -11 +282919220491465, 238779234002470, 288053477363518 @ 18, -118, -30 +354058605830958, 477930645861318, 260207539202753 @ -83, -102, 81 +291051493163588, 302693482748314, 336250827851927 @ -10, 8, -46 +302136599948718, 298978042966246, 296462432706439 @ -35, -118, -12 +246182100012654, 246207921568038, 309324103978749 @ 137, -134, -97 +317720999662541, 172802533356978, 227678735734293 @ -142, -18, 211 +323699470218957, 169723592095398, 326967128690214 @ -42, 266, 18 +279718134579816, 151098046069860, 260123112421701 @ 67, 20, 35 +286560024839556, 183250245674160, 276490166392059 @ 6, 65, 8 +284516964059384, 214466825018483, 236586492406895 @ 11, -11, 137 +265538863149330, 285643372016864, 203200189566570 @ 49, -88, 202 +315439634532616, 345983154688094, 337582523323315 @ -82, -394, -166 +382298777074318, 477442346283588, 450602496466227 @ -123, -132, -155 +297488738575314, 203351014020870, 348386146910451 @ -25, 90, -142 +340290418301214, 449513248539522, 198870094032717 @ -107, -353, 195 +306926403020702, 264085526810342, 92228312283885 @ -63, -217, 634 +285753943112325, 127042159058415, 257239181283243 @ 70, 9, 13 +285194367136032, 196772148977019, 211250828871261 @ 7, 71, 203 +280186615268560, 149530576342430, 534995842588463 @ 8, 254, -378 +304353922021305, 394393007848145, 384490789906568 @ -38, -289, -192 +276932969721078, 169211821049682, 305109645772069 @ 115, -231, -367 +289174220120902, 280784186657998, 207869733319273 @ -7, 46, 161 +273892733265056, 471164879168023, 169977050453577 @ 23, -373, 247 +420774824279725, 513808363492455, 512932397542668 @ -214, -315, -320 +222723614649462, 95829242236326, 431190945690693 @ 60, 338, -94 +290050919046082, 421708455777732, 355150978564205 @ -9, -63, -37 +256163702364955, 338170915595795, 323136695446578 @ 50, -73, -32 +283530824407774, 180918120140422, 282063596074173 @ 21, 26, -29 +305330693609626, 194608897625492, 280156456003183 @ -85, -163, -64 +350867211940286, 254762639798858, 208201467280177 @ -123, 44, 173 +292658057001566, 186611191986534, 294531491764749 @ -15, -6, -83 +205133188202526, 283882440241030, 254246696852025 @ 85, 130, 88 +207527722033694, 313490709226982, 155380049798509 @ 80, 103, 195 +286095459839592, 182518785595248, 276773663547705 @ 8, 61, 5 +221173207039028, 270280455415551, 302323873644328 @ 107, 51, 6 +202220873384748, 331733628056034, 356583372113517 @ 98, 52, -37 +478872952765358, 427762105117869, 367856149594534 @ -283, -141, -78 +264485082557022, 134558202466358, 221148400319641 @ 133, 166, 252 +303574831239612, 413128570023282, 224985056190447 @ -24, -8, 120 +303656492350806, 448215155580240, 404372721283287 @ -23, -15, -62 +289183181233890, 225442276391010, 278066389466093 @ -5, 36, 27 +179891064098649, 251976683289780, 209996347833339 @ 102, 180, 133 +292285855083730, 117890243167414, 322881299000409 @ -16, 214, -488 +263115786187030, 164000553942130, 168076841054333 @ 41, 220, 243 +255478895619510, 456459170387580, 311860606041413 @ 49, -255, -9 +366278946085848, 360761257352178, 193601284347042 @ -105, 6, 164 +268588220434735, 210511715640375, 273516093923258 @ 114, -249, -28 +296367330036812, 45519306432278, 352752790350447 @ -22, 466, -146 +312839808368697, 484657929662796, 311370704669898 @ -34, -84, 26 +404183206681040, 437508574234990, 324857613500219 @ -166, -130, -10 +301278417732710, 383208525587490, 324567902247773 @ -21, 39, 15 +221521858324342, 147871529369018, 271954329484075 @ 233, 176, 20 +238331541797146, 307094887243647, 285748486243466 @ 81, -21, 32 +387058453145490, 291264628310445, 413288400222753 @ -103, 149, -65 +281806695050800, 102535645981412, 224229206595093 @ 54, 337, 271 +382768489961101, 289799539317816, 120400361307382 @ -102, 144, 222 +358629218649038, 370723156567230, 510119746864869 @ -105, -45, -272 +241723396587097, 32171878227714, 97562574749518 @ 182, 606, 686 +339133911341583, 247399977873168, 317804203144806 @ -112, 24, -50 +294812929007430, 121827959649486, 263346613288437 @ -56, 69, -78 +333406576073130, 195418728322074, 119839720417061 @ -56, 231, 233 +332913436495620, 413104400758692, 214961117634465 @ -126, -533, 193 +306657286122368, 62579450992366, 408516596607431 @ -49, 434, -307 +258918519707530, 402800225244410, 479136088804613 @ 48, -209, -319 +306574106004125, 173338717947470, 274039489310813 @ -64, 82, 11 +251003584491650, 344822439082095, 106437967388908 @ 33, 69, 248 +443995844449518, 291076032086886, 458793724900896 @ -219, 74, -192 +252149015845950, 260857624307700, 393158580379653 @ 37, 139, -81 +282206724330750, 134213668434630, 246532562655693 @ 74, 55, 136 +201878646851890, 294522179137582, 287458889971301 @ 84, 128, 53 +282686826780880, 79828713648940, 301068037995743 @ 102, 629, -532 +308838180675575, 253775954545887, 269072245209172 @ -106, -501, -6 +400535675511166, 345143982201823, 426505437599253 @ -235, -167, -269 +241394577836181, 224211159579393, 261691886181732 @ 202, -181, 48 +306077706063674, 284725755377606, 154803647614769 @ -25, 154, 185 +365653589396198, 463153272873646, 312571854846221 @ -268, -919, -121 +318686554371549, 151900504113227, 114002600725269 @ -44, 271, 259 +191058082403166, 232741228913382, 102877348473645 @ 123, 158, 289 +251854512913260, 416926846065180, 322517509362363 @ 35, -32, 9 +73732096579230, 248889630850150, 160735050119213 @ 229, 170, 191 +308010120634782, 162247896695142, 206898344596077 @ -123, -72, 397 +367094950925958, 346430011480326, 208310940226305 @ -175, -198, 185 +348415508704715, 438913362553805, 431065206792327 @ -66, 5, -83 +243913767214746, 318499986277368, 301330634810601 @ 83, -93, -7 +290577302424987, 274027862543418, 310173273280014 @ -8, -138, -70 +206367355193595, 443890386024435, 368947946735853 @ 82, -41, -37 +314653135165260, 180719675893200, 336836128302903 @ -101, 28, -243 +288758467027095, 142092153424095, 259845125549678 @ 16, -27, 14 +251264327216991, 458958803080533, 351002059495629 @ 28, -13, -5 +418453792994686, 377148066828538, 435517022329401 @ -195, -67, -176 +300663139345815, 210318755541796, 391838480041011 @ -26, 152, -143 +407819019583242, 264973287489378, 316298185761345 @ -124, 173, 28 +300135433810158, 223703968826661, 330554985106861 @ -59, -351, -357 +256373700487946, 201202354218908, 190134413167444 @ 185, -212, 432 +264501569368215, 231915482473611, 251960400470196 @ 54, 23, 90 +336088957922234, 274440731677630, 233603922638286 @ -63, 130, 112 +292857361973673, 283315137160764, 319233308865504 @ -14, -124, -80 +321460440055107, 406017933749745, 531393869902203 @ -44, -5, -219 +261930383598387, 187271446516332, 396711117278349 @ 48, 164, -197 +309135970551222, 289175860707045, 375988873917336 @ -35, 75, -80 +330678833381150, 483935876388870, 103308110887661 @ -51, -60, 243 +261484400605515, 64021410780961, 2680557427552 @ 34, 389, 462 +338283557846180, 156144241744018, 296461137199135 @ -121, 206, -15 +309973256445432, 380764412783106, 385767755453441 @ -32, 12, -63 +180763727091872, 337325506704120, 285455855714899 @ 110, 75, 54 +295274855868646, 262670799891631, 301562541002100 @ -19, -23, -20 +415066581259959, 422582696665690, 396764486826004 @ -158, -50, -82 +380928659873894, 147316450744614, 271580130291589 @ -109, 282, 69 +284992931832300, 147112605604440, 242678306042148 @ 47, -48, 168 +207537338020749, 233431877160355, 221420927966864 @ 70, 205, 120 +287890570470198, 167049146098542, 265267007686725 @ 8, 11, 22 +205106249502228, 144601615135332, 281915604194933 @ 103, 276, 51 +219264098307253, 204774009695507, 228526044811677 @ 140, 119, 139 +271096476245745, 250811406877864, 297718115811410 @ 34, 8, -10 +327093059895630, 334242590617238, 236585941259549 @ -56, 37, 110 +302677117068011, 427043527270244, 342141092441752 @ -24, -52, -16 +292578448121010, 177016380525750, 95618865530373 @ -16, -74, 949 diff --git a/day24/sample1.in b/day24/sample1.in new file mode 100644 index 0000000..35963dc --- /dev/null +++ b/day24/sample1.in @@ -0,0 +1,5 @@ +19, 13, 30 @ -2, 1, -2 +18, 19, 22 @ -1, -1, -2 +20, 25, 34 @ -2, -2, -4 +12, 31, 28 @ -1, -2, -1 +20, 19, 15 @ 1, -5, -3 diff --git a/day24/sol.py b/day24/sol.py new file mode 100644 index 0000000..13447f8 --- /dev/null +++ b/day24/sol.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +def read_input(input): + data = [] + for line in input: + x, y, z, dx, dy, dz = [int(v) for v in line.replace("@", "").replace(",", " ").split()] + data.append((x,y,z,dx,dy,dz)) + return data + +def intersect_2d(l1, l2): + x0, y0, _, dx0, dy0, _ = l1 + x1, y1, _, dx1, dy1, _ = l2 + + # convert to ax+by = c form + #(x - x0)dx0 + x0 = (y-y0)dy0 + y0 + #x*dx0 - dx0*x0 + x0 = y*dy0 - dy0*y0 + y0 + #x*dx0 - y*dy0 = dx0*x0 - dy0*y0 + y0 - x0 + + # x0 + t dx0 = x(t) + # y0 + t dy0 = y(t) + # t = (y - y0)/dy0 + # t = (x - x0)/dx0 + # (y-y0)/dy0 = (x-x0{ + # x0 + (y-y0)/dy0 * dx0 = x + # x0 + y*dx0/dy0 - y0*dx0/dy0 = x + # x0 - y0*dx0/dy0 = x - y*dx0/dy0 + + a0 = dx0 + b0 = -dy0 + c0 = dx0*x0 - dy0*y0 + + a0 = dy0 + b0 = -dx0 + c0 = x0*(y0+dy0) - y0*(x0+dx0) + + assert a0*x0 + b0*y0 == c0 + + a1 = dx1 + b1 = -dy1 + c1 = dx1*x1 - dy1*y1 + + a1 = dy1 + b1 = -dx1 + c1 = x1*(y1+dy1) - y1*(x1+dx1) + assert a1*x1 + b1*y1 == c1 + + # cramer's rule + d = a0*b1 - a1*b0 + if d == 0 : + # non-intersecting + return None + + return (c0*b1 - c1*b0)/d, (a0*c1 - a1*c0)/d + +def intersect_2d(l1, l2): + x0, y0, _, dx0, dy0, _ = l1 + x1, y1, _, dx1, dy1, _ = l2 + + # convert to ax+by = c form + # (x-x0)/dx0 = (y-y0)/dy0 + # dy0(x-x0) = (dx0)(y-y0) + # x*dy0 - dy0*x0 = y*dx0 - dx0*y0 + # x*dy0 - y*dx0 = dy0*x0 - dx0*y0 + + a0 = dy0 + b0 = -dx0 + c0 = x0*dy0 - y0*dx0 + + assert a0*x0 + b0*y0 == c0 + + a1 = dy1 + b1 = -dx1 + c1 = x1*dy1 - y1*dx1 + assert a1*x1 + b1*y1 == c1 + + + # cramer's rule + d = a0*b1 - a1*b0 + if d == 0 : + # non-intersecting + return None + + return (c0*b1 - c1*b0)/d, (a0*c1 - a1*c0)/d + +def future(l1, point): + x,y,z, dx,dy,dz = l1 + x0, y0 = point + return (dx < 0 and x0 <= x) or (dx > 0 and x0 >= x) + +def inbounds(point): + x,y = point + if 7 <= x <= 21 and 7 <= y <= 21: return True + return 200000000000000 <= x <= 400000000000000 and 200000000000000 <= y <= 400000000000000 + +def solve(input): + data = read_input(input) + t = 0 + for i,h1 in enumerate(data): + for h2 in data[i+1:]: + p = intersect_2d(h1, h2) + print(h1,h2, p) + if p is not None: + if future(h1, p) and future(h2, p): + if inbounds(p): + print(h1, h2, p) + t += 1 + print(t) + +import sys +solve(sys.stdin)