question 1, success. question 2, brain freeze for question b.

This commit is contained in:
didier committed 2025-12-03 08:41:22 -05:00
1 parent a7b42c12bf
commit 690cd8b3bd
3 files changed
+118 -5

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
(ns inputs) (ns inputs)
(def question-1 "L23\nR14\nL50\nR27\nL33\nR36\nL11\nL32\nR46\nR36\nR2\nL32\nL42\nL11\nL10\nR31\nL36\nR33\nL11\nR38\nL22\nL1\nR33\nL4\nL12\nL29\nL14\nR4\nL13\nR50\nL30\nR20\nR11\nL37\nR49\nR10\nR7\nR20\nL36\nL15\nR24\nL48\nR36\nL49\nL21\nR18\nL13\nR27\nR26\nL43\nR30\nR29\nL94\nR30\nL55\nR90\nR54\nR60\nR86\nR81\nL53\nR23\nL2\nR78\nL27\nL61\nL74\nL96\nR98\nR33\nL88\nL12\nR45\nL45\nL19\nR46\nR38\nR96\nR39\nR41\nL41\nL48\nR60\nR88\nL8\nR90\nR79\nL61\nR21\nR17\nL37\nR99\nR67\nR23\nL73\nR83\nL59\nR42\nR84\nR33\nL84\nR206\nR61\nR133\nL13\nR36\nR61\nL92\nR84\nR961\nL53\nL91\nR28\nL78\nL59\nL97\nR97\nL42\nL47\nR7\nR12\nR24\nR93\nL2\nL48\nL34\nR72\nR38\nL56\nL19\nR283\nR525\nL28\nL597\nL18\nR151\nL4\nL37\nR727\nL89\nL96\nL15\nR83\nR10\nL15\nR122\nL80\nR36\nR71\nL12\nR85\nR41\nL20\nR805\nL26\nR22\nR45\nR25\nR94\nR47\nL333\nR72\nL72\nL78\nR2\nR76\nR76\nL762\nL15\nL99\nR436\nR17\nR24\nR669\nL246\nL70\nL45\nR58\nR57\nR55\nL34\nL62\nR41\nL13\nR58\nL68\nR23\nR31\nR69\nL69\nR797\nL9\nL71\nL21\nR4\nL86\nR385\nR70\nL94\nL47\nL398\nL6\nL61\nL694\nR434\nL34\nL882\nR82\nR64\nR2\nR43\nR91\nR32\nR68\nL291\nR91\nR786\nL327\nR75\nL858\nL41\nR27\nL44\nR89\nR388\nR68\nL63\nR65\nR923\nR47\nR63\nR27\nR27\nR48\nL41\nL59\nL82\nL32\nL8\nL90\nR21\nL9\nL47\nR5\nR42\nR55\nL55\nR827\nL89\nR20\nL80\nR922\nR11\nR42\nR660\nL49\nR36\nL21\nL67\nL28\nR316\nR88\nR14\nL809\nR715\nL375\nR367\nR77\nL77\nL71\nL6\nL823\nL22\nL17\nR87\nR62\nL60\nR50\nR80\nL74\nR94\nR55\nL43\nL12\nL97\nR61\nL25\nR861\nL306\nL94\nL96\nR796\nL5\nL67\nL10\nR36\nR46\nL559\nR52\nR42\nR723\nL58\nR60\nL45\nL14\nL1\nR57\nL54\nR97\nR147\nL18\nL29\nR67\nL667\nL88\nL23\nL89\nL29\nR4\nL75\nR4\nL96\nL8\nL78\nL22\nR406\nR3\nL184\nR75\nR81\nL37\nR52\nR4\nR84\nR306\nR66\nL56\nL53\nL47\nL387\nR87\nR34\nR466\nL606\nL70\nL24\nR72\nR67\nR91\nL49\nL81\nL2\nL29\nR131\nR25\nR134\nR91\nL750\nL90\nR490\nR37\nR63\nL89\nL11\nR353\nL53\nL7\nL723\nL98\nL65\nR70\nL77\nR1\nL58\nR57\nL416\nR15\nR39\nR62\nR68\nL21\nR53\nL80\nR18\nR632\nL70\nR36\nR32\nR532\nL68\nR68\nR151\nL96\nR345\nR18\nR78\nR759\nL84\nR529\nL65\nL735\nL69\nL73\nR80\nL55\nL85\nR2\nR30\nL89\nL180\nR338\nL40\nR15\nL74\nR51\nR649\nL129\nR29\nR21\nL44\nL436\nL86\nL155\nR929\nR32\nL47\nR71\nR95\nL80\nL52\nR86\nR97\nL21\nL10\nL12\nR54\nL93\nL625\nR32\nL86\nL38\nL32\nR455\nL94\nL61\nR404\nR96\nL68\nR846\nR46\nR76\nL121\nL37\nR40\nR18\nR193\nR23\nL95\nR4\nL48\nR402\nR89\nL68\nL823\nR9\nR7\nL7\nL9\nL1\nR72\nR55\nL3\nR748\nR127\nL75\nL70\nL30\nL56\nR73\nL17\nL49\nR59\nL610\nL437\nR37\nL361\nL297\nR98\nR71\nL13\nL98\nL59\nL29\nL97\nR64\nL73\nL5\nL89\nL12\nL80\nR80\nL630\nL48\nR14\nR99\nL119\nL316\nL18\nR18\nR94\nL94\nL77\nL23\nL661\nR911\nR50\nR12\nR12\nR776\nL175\nR1\nR74\nR27\nL52\nL90\nL55\nL30\nR10\nR4\nL7\nR625\nL32\nR37\nL82\nL59\nR84\nR55\nR29\nL13\nL51\nL150\nL58\nR38\nR81\nL11\nL78\nR1\nR14\nR63\nL51\nL6\nR57\nL12\nL65\nL57\nR9\nR621\nR98\nR6\nL27\nR52\nL56\nL18\nL94\nL16\nR559\nL67\nR67\nR1\nL12\nR30\nR424\nL315\nL39\nL89\nL35\nL33\nR49\nR44\nL25\nL76\nL24\nL30\nL70\nR82\nL421\nL22\nR89\nL28\nR88\nR62\nL68\nR18\nL69\nL76\nL76\nL279\nR76\nR24\nR77\nL77\nL933\nL67\nL59\nL398\nL55\nL488\nR52\nR30\nL17\nR35\nR42\nL442\nL29\nL71\nR68\nR841\nR11\nL815\nL5\nL18\nL49\nR58\nR74\nL506\nR31\nR10\nL36\nL89\nL53\nR56\nR325\nR76\nR90\nL90\nL25\nL71\nR17\nR89\nR879\nL14\nR46\nL7\nL611\nR18\nL53\nL78\nR40\nL63\nR954\nR905\nL542\nL95\nR32\nL41\nL90\nR96\nR35\nL10\nL9\nL81\nL15\nL785\nL35\nL66\nL99\nL81\nL970\nR82\nL64\nR278\nR55\nR131\nR75\nR71\nR1\nR22\nR1\nR99\nL11\nR23\nL754\nR97\nR83\nR31\nR868\nR63\nL62\nL37\nL24\nR81\nR15\nL73\nL59\nR59\nL52\nR4\nL87\nR39\nR50\nL11\nR57\nL318\nR887\nL54\nL62\nL85\nL60\nR34\nL20\nR596\nR82\nL673\nL51\nL76\nR476\nR48\nL63\nR39\nL349\nL151\nL762\nR76\nL80\nR866\nL67\nR67\nL784\nL10\nR89\nL91\nR846\nR450\nL94\nL984\nR766\nR92\nL96\nL84\nL88\nL12\nL91\nL44\nR70\nL6\nR27\nL56\nR55\nL40\nL15\nR92\nR36\nL828\nL89\nL611\nR26\nR42\nL68\nR41\nR50\nR9\nR813\nR16\nR8\nL137\nL26\nR26\nR85\nR24\nR16\nL88\nL637\nR87\nR581\nR17\nL70\nL15\nL92\nL808\nR80\nL60\nR86\nL35\nL98\nR64\nL1\nR64\nL4\nL96\nL51\nL82\nL67\nR92\nL45\nL5\nR58\nR547\nR61\nR58\nL458\nL708\nR1\nR78\nL84\nR87\nL82\nR32\nL81\nR82\nR67\nL51\nR21\nL47\nL23\nL76\nR14\nR58\nR83\nR167\nL27\nR81\nR61\nR39\nR59\nR69\nL20\nR69\nL819\nR89\nR53\nR886\nL24\nL50\nL279\nR85\nL36\nR50\nL632\nL1\nR1\nR57\nR46\nL75\nL867\nL17\nL7\nR63\nR908\nR92\nL274\nR90\nL77\nR61\nL68\nR75\nR580\nR370\nR28\nL85\nR55\nL55\nR68\nR47\nR85\nL61\nR61\nL64\nL44\nR28\nR71\nL44\nR937\nL74\nL57\nR2\nR879\nL80\nL54\nR50\nL41\nL78\nL31\nL39\nR70\nL70\nR39\nL270\nL13\nR16\nL33\nL27\nR27\nR32\nR68\nL32\nR1\nR15\nL17\nL333\nR66\nL573\nR169\nR4\nL62\nL95\nL16\nR17\nR95\nR18\nL57\nR47\nL819\nR72\nL13\nR76\nR37\nR90\nL90\nR2\nL33\nR31\nL24\nR43\nR45\nL22\nR22\nR26\nL74\nR64\nR55\nR757\nL948\nR37\nR563\nR49\nR79\nL24\nR73\nL54\nL94\nR27\nR50\nL59\nR54\nR67\nR31\nR57\nL5\nR67\nL62\nL13\nL87\nL854\nL46\nL40\nL24\nL31\nR22\nR80\nR38\nR58\nR85\nL922\nL18\nL74\nL74\nR64\nR72\nR64\nR349\nR563\nL4\nL8\nR24\nL783\nR50\nR9\nLine truncated (def question-1 "L23\nR14\nL50\nR27\nL33\nR36\nL11\nL32\nR46\nR36\nR2\nL32\nL42\nL11\nL10\nR31\nL36\nR33\nL11\nR38\nL22\nL1\nR33\nL4\nL12\nL29\nL14\nR4\nL13\nR50\nL30\nR20\nR11\nL37\nR49\nR10\nR7\nR20\nL36\nL15\nR24\nL48\nR36\nL49\nL21\nR18\nL13\nR27\nR26\nL43\nR30\nR29\nL94\nR30\nL55\nR90\nR54\nR60\nR86\nR81\nL53\nR23\nL2\nR78\nL27\nL61\nL74\nL96\nR98\nR33\nL88\nL12\nR45\nL45\nL19\nR46\nR38\nR96\nR39\nR41\nL41\nL48\nR60\nR88\nL8\nR90\nR79\nL61\nR21\nR17\nL37\nR99\nR67\nR23\nL73\nR83\nL59\nR42\nR84\nR33\nL84\nR206\nR61\nR133\nL13\nR36\nR61\nL92\nR84\nR961\nL53\nL91\nR28\nL78\nL59\nL97\nR97\nL42\nL47\nR7\nR12\nR24\nR93\nL2\nL48\nL34\nR72\nR38\nL56\nL19\nR283\nR525\nL28\nL597\nL18\nR151\nL4\nL37\nR727\nL89\nL96\nL15\nR83\nR10\nL15\nR122\nL80\nR36\nR71\nL12\nR85\nR41\nL20\nR805\nL26\nR22\nR45\nR25\nR94\nR47\nL333\nR72\nL72\nL78\nR2\nR76\nR76\nL762\nL15\nL99\nR436\nR17\nR24\nR669\nL246\nL70\nL45\nR58\nR57\nR55\nL34\nL62\nR41\nL13\nR58\nL68\nR23\nR31\nR69\nL69\nR797\nL9\nL71\nL21\nR4\nL86\nR385\nR70\nL94\nL47\nL398\nL6\nL61\nL694\nR434\nL34\nL882\nR82\nR64\nR2\nR43\nR91\nR32\nR68\nL291\nR91\nR786\nL327\nR75\nL858\nL41\nR27\nL44\nR89\nR388\nR68\nL63\nR65\nR923\nR47\nR63\nR27\nR27\nR48\nL41\nL59\nL82\nL32\nL8\nL90\nR21\nL9\nL47\nR5\nR42\nR55\nL55\nR827\nL89\nR20\nL80\nR922\nR11\nR42\nR660\nL49\nR36\nL21\nL67\nL28\nR316\nR88\nR14\nL809\nR715\nL375\nR367\nR77\nL77\nL71\nL6\nL823\nL22\nL17\nR87\nR62\nL60\nR50\nR80\nL74\nR94\nR55\nL43\nL12\nL97\nR61\nL25\nR861\nL306\nL94\nL96\nR796\nL5\nL67\nL10\nR36\nR46\nL559\nR52\nR42\nR723\nL58\nR60\nL45\nL14\nL1\nR57\nL54\nR97\nR147\nL18\nL29\nR67\nL667\nL88\nL23\nL89\nL29\nR4\nL75\nR4\nL96\nL8\nL78\nL22\nR406\nR3\nL184\nR75\nR81\nL37\nR52\nR4\nR84\nR306\nR66\nL56\nL53\nL47\nL387\nR87\nR34\nR466\nL606\nL70\nL24\nR72\nR67\nR91\nL49\nL81\nL2\nL29\nR131\nR25\nR134\nR91\nL750\nL90\nR490\nR37\nR63\nL89\nL11\nR353\nL53\nL7\nL723\nL98\nL65\nR70\nL77\nR1\nL58\nR57\nL416\nR15\nR39\nR62\nR68\nL21\nR53\nL80\nR18\nR632\nL70\nR36\nR32\nR532\nL68\nR68\nR151\nL96\nR345\nR18\nR78\nR759\nL84\nR529\nL65\nL735\nL69\nL73\nR80\nL55\nL85\nR2\nR30\nL89\nL180\nR338\nL40\nR15\nL74\nR51\nR649\nL129\nR29\nR21\nL44\nL436\nL86\nL155\nR929\nR32\nL47\nR71\nR95\nL80\nL52\nR86\nR97\nL21\nL10\nL12\nR54\nL93\nL625\nR32\nL86\nL38\nL32\nR455\nL94\nL61\nR404\nR96\nL68\nR846\nR46\nR76\nL121\nL37\nR40\nR18\nR193\nR23\nL95\nR4\nL48\nR402\nR89\nL68\nL823\nR9\nR7\nL7\nL9\nL1\nR72\nR55\nL3\nR748\nR127\nL75\nL70\nL30\nL56\nR73\nL17\nL49\nR59\nL610\nL437\nR37\nL361\nL297\nR98\nR71\nL13\nL98\nL59\nL29\nL97\nR64\nL73\nL5\nL89\nL12\nL80\nR80\nL630\nL48\nR14\nR99\nL119\nL316\nL18\nR18\nR94\nL94\nL77\nL23\nL661\nR911\nR50\nR12\nR12\nR776\nL175\nR1\nR74\nR27\nL52\nL90\nL55\nL30\nR10\nR4\nL7\nR625\nL32\nR37\nL82\nL59\nR84\nR55\nR29\nL13\nL51\nL150\nL58\nR38\nR81\nL11\nL78\nR1\nR14\nR63\nL51\nL6\nR57\nL12\nL65\nL57\nR9\nR621\nR98\nR6\nL27\nR52\nL56\nL18\nL94\nL16\nR559\nL67\nR67\nR1\nL12\nR30\nR424\nL315\nL39\nL89\nL35\nL33\nR49\nR44\nL25\nL76\nL24\nL30\nL70\nR82\nL421\nL22\nR89\nL28\nR88\nR62\nL68\nR18\nL69\nL76\nL76\nL279\nR76\nR24\nR77\nL77\nL933\nL67\nL59\nL398\nL55\nL488\nR52\nR30\nL17\nR35\nR42\nL442\nL29\nL71\nR68\nR841\nR11\nL815\nL5\nL18\nL49\nR58\nR74\nL506\nR31\nR10\nL36\nL89\nL53\nR56\nR325\nR76\nR90\nL90\nL25\nL71\nR17\nR89\nR879\nL14\nR46\nL7\nL611\nR18\nL53\nL78\nR40\nL63\nR954\nR905\nL542\nL95\nR32\nL41\nL90\nR96\nR35\nL10\nL9\nL81\nL15\nL785\nL35\nL66\nL99\nL81\nL970\nR82\nL64\nR278\nR55\nR131\nR75\nR71\nR1\nR22\nR1\nR99\nL11\nR23\nL754\nR97\nR83\nR31\nR868\nR63\nL62\nL37\nL24\nR81\nR15\nL73\nL59\nR59\nL52\nR4\nL87\nR39\nR50\nL11\nR57\nL318\nR887\nL54\nL62\nL85\nL60\nR34\nL20\nR596\nR82\nL673\nL51\nL76\nR476\nR48\nL63\nR39\nL349\nL151\nL762\nR76\nL80\nR866\nL67\nR67\nL784\nL10\nR89\nL91\nR846\nR450\nL94\nL984\nR766\nR92\nL96\nL84\nL88\nL12\nL91\nL44\nR70\nL6\nR27\nL56\nR55\nL40\nL15\nR92\nR36\nL828\nL89\nL611\nR26\nR42\nL68\nR41\nR50\nR9\nR813\nR16\nR8\nL137\nL26\nR26\nR85\nR24\nR16\nL88\nL637\nR87\nR581\nR17\nL70\nL15\nL92\nL808\nR80\nL60\nR86\nL35\nL98\nR64\nL1\nR64\nL4\nL96\nL51\nL82\nL67\nR92\nL45\nL5\nR58\nR547\nR61\nR58\nL458\nL708\nR1\nR78\nL84\nR87\nL82\nR32\nL81\nR82\nR67\nL51\nR21\nL47\nL23\nL76\nR14\nR58\nR83\nR167\nL27\nR81\nR61\nR39\nR59\nR69\nL20\nR69\nL819\nR89\nR53\nR886\nL24\nL50\nL279\nR85\nL36\nR50\nL632\nL1\nR1\nR57\nR46\nL75\nL867\nL17\nL7\nR63\nR908\nR92\nL274\nR90\nL77\nR61\nL68\nR75\nR580\nR370\nR28\nL85\nR55\nL55\nR68\nR47\nR85\nL61\nR61\nL64\nL44\nR28\nR71\nL44\nR937\nL74\nL57\nR2\nR879\nL80\nL54\nR50\nL41\nL78\nL31\nL39\nR70\nL70\nR39\nL270\nL13\nR16\nL33\nL27\nR27\nR32\nR68\nL32\nR1\nR15\nL17\nL333\nR66\nL573\nR169\nR4\nL62\nL95\nL16\nR17\nR95\nR18\nL57\nR47\nL819\nR72\nL13\nR76\nR37\nR90\nL90\nR2\nL33\nR31\nL24\nR43\nR45\nL22\nR22\nR26\nL74\nR64\nR55\nR757\nL948\nR37\nR563\nR49\nR79\nL24\nR73\nL54\nL94\nR27\nR50\nL59\nR54\nR67\nR31\nR57\nL5\nR67\nL62\nL13\nL87\nL854\nL46\nL40\nL24\nL31\nR22\nR80\nR38\nR58\nR85\nL922\nL18\nL74\nL74\nR64\nR72\nR64\nR349\nR563\nL4\nL8\nR24\nL783\nR50\nR9\nLine truncated
(def question-2 "385350926-385403705,48047-60838,6328350434-6328506208,638913-698668,850292-870981,656-1074,742552-796850,4457-6851,138-206,4644076-4851885,3298025-3353031,8594410816-8594543341,396-498,1558-2274,888446-916096,12101205-12154422,2323146444-2323289192,37-57,101-137,46550018-46679958,79-96,317592-341913,495310-629360,33246-46690,14711-22848,1-17,2850-4167,3723700171-3723785996,190169-242137,272559-298768,275-365,7697-11193,61-78,75373-110112,425397-451337,9796507-9899607,991845-1013464,77531934-77616074")
+2 -5
View File
@@ -22,8 +22,7 @@
end (+ start m)] end (+ start m)]
(+ q (if (<= 100 end) 1 0))))) (+ q (if (<= 100 end) 1 0)))))
(defn question-1-b [document]
(defn question-2-a [document]
(let [lines (strings/split-lines document) (let [lines (strings/split-lines document)
deltas (map decode-line lines) deltas (map decode-line lines)
code (reductions #(mod (+ %1 %2) 100) 50 deltas) code (reductions #(mod (+ %1 %2) 100) 50 deltas)
@@ -31,8 +30,6 @@
(reduce + (map nbr-of-zero-pass intervals)))) (reduce + (map nbr-of-zero-pass intervals))))
(defn -main [& args]) (defn -main [& args])
(println "Solution to question 1-a is: " (question-1-a inputs/question-1)) (println "Solution to question 1-a is: " (question-1-a inputs/question-1))
(println "Solution to question 2-a is: " (question-2-a inputs/question-1)) (println "Solution to question 2-a is: " (question-1-b inputs/question-1))
+115
View File
@@ -0,0 +1,115 @@
(ns question_2
(:require [clojure.string :as strings]
[inputs]))
(def mock-input "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124")
(defn pow [x n]
(reduce *' (repeat n x)))
(defn repeat-x [x n]
#_(println "repeat-x " x " " n " times")
(let [exp (long (Math/ceil (Math/log10 (inc x))))
to-num #(*' x (pow 10 (*' % exp)))]
(reduce +' (map to-num (range n)))))
(defn repeat-all [x]
(map #(repeat-x x %) (drop 2 (range))))
;; TODO: we need to handle the case when the elm goes in the very first place.
(defn insert-when-2 [pred lst elm]
(loop [f (first lst)
s (second lst)
r (rest (rest lst))
acc (transient [])]
(conj! acc f)
(cond
(pred f s) (lazy-cat (persistent! acc) [elm s] r)
(empty? r) (lazy-cat (persistent! acc) [elm])
:else (recur s (first r) (rest r) acc))))
(defn insert-when [pred lst elm]
(if (empty? lst)
(list elm)
(loop [prefix (-> lst first vector)
last-prefix (first lst)
suffix (rest lst)]
(cond
(empty? suffix) (seq (conj prefix elm))
(pred last-prefix (first suffix)) (lazy-cat prefix [elm] suffix)
:else (recur (conj prefix (first suffix)) (first suffix) (rest suffix))))))
(defn insert-list [list-of-lists [head & _ :as all]]
(if (empty? all)
list-of-lists
(insert-when #(<= (first %1) head (first %2)) list-of-lists all)))
(defn sort-list-of-sorted-list-step [lists])
(defn sort-list-of-sorted-list [[[head & new-first-list] & ret]]
(when head
(lazy-seq (cons head (sort-list-of-sorted-list (insert-list ret new-first-list))))))
(defn int->palindrome [x]
(repeat-x x 2))
(def all-int-palindromes (map int->palindrome (rest (range))))
(defn make-id-ranges [[start end]]
{:start start
:end end})
(def all-repeated-no-dedupe (sort-list-of-sorted-list (map repeat-all (drop 1 (range)))))
(def all-repeated (dedupe (sort-list-of-sorted-list (map repeat-all (drop 1 (range))))))
(defn find-all-palindrome-ids [{start :start end :end}]
(let [xf (comp (drop-while #(< % start))
(take-while #(<= % end)))]
(sequence xf all-int-palindromes)))
(defn find-all-repeated-ids [{start :start end :end}]
(let [xf (comp (drop-while #(< % start))
(take-while #(<= % end)))]
(sequence xf all-repeated)))
(defn sum-of-palindromes-ids [id-range]
(reduce + (find-all-palindrome-ids id-range)))
(defn sum-of-repeated-ids [id-range]
(reduce + (find-all-repeated-ids id-range)))
(defn question-2-a [document]
(let [lines (strings/split document #"\,")
make-filter-xf (comp (map #(strings/split % #"\-"))
(map #(mapv Long/parseLong %))
(map make-id-ranges)
(map sum-of-palindromes-ids))
filters (sequence make-filter-xf lines)]
(reduce + filters)))
(defn question-2-b [document]
(let [lines (strings/split document #"\,")
make-filter-xf (comp (map #(strings/split % #"\-"))
(map #(mapv Long/parseLong %))
(map make-id-ranges)
(map sum-of-repeated-ids))
filters (sequence make-filter-xf lines)]
(reduce + filters)))
(defn -main [& args]
(println "Solution to question 2-a is: " (question-2-a inputs/question-2))
#_(mapv #(println ">>> " %) (take 10000 all-repeated))
#_(println "Solution to question 2-b is: " (question-2-b mock-input)))