From 66d0641376d0f157c4c7c33acf0b918add783e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommy=20=C3=96man?= Date: Mon, 31 Dec 2018 11:58:36 +0100 Subject: [PATCH] =?UTF-8?q?=C3=84ndringar=20med=20ny=20variant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 2018_08/Program.cs | 216 +++++++++++++++++++-------- Data/AdventOfCode_181208/egetex.xlsx | Bin 0 -> 21780 bytes 2 files changed, 153 insertions(+), 63 deletions(-) create mode 100644 Data/AdventOfCode_181208/egetex.xlsx diff --git a/2018_08/Program.cs b/2018_08/Program.cs index 3c4c577..4be4a0c 100644 --- a/2018_08/Program.cs +++ b/2018_08/Program.cs @@ -7,99 +7,183 @@ namespace _2018_08 { static void Main(string[] args) { + bool own = false; + int y = 0; //string[] resTab = File.ReadAllText(@"..\..\..\Data\Adventofcode_181208\2018_08_data.txt").Split(' '); //string[] resTab = @"2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2 2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2".Split(' '); - string[] resTab = @"2 3 2 1 2 3 1 1 0 2 1 2 3 0 3 4 5 6 7 8 9 0 4 10 11 12 13 14 2 2 0 3 15 16 17 0 2 18 19 20 21 22 23 24".Split(' '); + string[] resTab = @"2 3 2 1 2 3 1 1 0 2 1 2 3 0 3 4 5 6 7 8 9 0 4 10 11 12 13 14 2 2 0 3 15 16 17 0 2 18 19 20 21 22 23 24".Split(' '); own = true; int[] numbers = new int[resTab.Length]; for (int i = 0; i < resTab.Length; i++) { numbers[i] = int.Parse(resTab[i]); } - int y = 0; - for(int z = 1; z < 25; z++) + if (own) { - y += z; + for (int z = 1; z < 25; z++) + { + y += z; + } } - WriteLine($"Antal värden = {resTab.Length} svar = {y}"); + Write($"Antal värden = {resTab.Length}"); + if (own) + { + WriteLine($" svar = {y}"); + } + else WriteLine(); + ReadKey(); var pgm = new Program(); - int x = pgm.CalculateMetaData(numbers); + //int x = pgm.CalculateMetaData(numbers); + int x = pgm.CalcMetaData(numbers); WriteLine(); WriteLine($"summa = {x}"); ReadKey(); } + #region oldCode + //private int CalculateMetaData(int[] numbers) + //{ + // int tempSum = 0; + // int omgStart = 0; + // LinkedList llT = new LinkedList(); + // while (omgStart < numbers.Length) + // { + // TreeNode strtNode = new TreeNode(omgStart, numbers); + // llT.AddLast(strtNode); + // int headEnd = 0; + // int firstAnt = strtNode.AntChilds; - private int CalculateMetaData(int[] numbers) + // TreeNode nxt = new TreeNode(strtNode.HeaderStart + 2, numbers); + + // for (int i = 0; i < firstAnt; i++) + // { + // headEnd = this.SubProc(nxt, numbers, llT); + // if (i < firstAnt - 1) + // { + // nxt = new TreeNode(headEnd, numbers); + // //llT.AddLast(nxt); + // } + // } + // Write($"start: {strtNode.HeaderStart}, init. end: {strtNode.NodeEnd}, ant. Metas: {strtNode.AntMetaEntries}, "); + // strtNode.PrepMetatab(headEnd - strtNode.NodeEnd + strtNode.AntMetaEntries); + // WriteLine($" fakt. slut {strtNode.NodeEnd}"); + + // omgStart = strtNode.NodeEnd; + // if (omgStart < numbers.Length) + // { + // for (int i = omgStart; i < omgStart + 5; i++) + // { + // Write($"numbers[{i}]:{numbers[i]}, "); + // } + // WriteLine(); + // Write(" "); + // } + // } + + // WriteLine(); + // foreach (var ll in llT) + // { + // Write($"Obj Nr: {ll.ObjNr} ({ll.HeaderStart},{ll.NodeEnd});"); + // foreach (int x in ll.MetaTab) + // { + // Write($"{x}, "); + // tempSum += x; + // } + // WriteLine(); + // } + + // return tempSum; + //} + + //private int SubProc(TreeNode tn, int[] numbers, LinkedList ll) + //{ + // ll.AddLast(tn); + // int nEnd = 0; + // int scndAnt = tn.AntChilds; + + // if (scndAnt > 0) + // { + // var tnx = new TreeNode(tn.HeaderStart + 2, numbers); + + // for (int k = 0; k < scndAnt; k++) + // { + + // var xs = SubProc(tnx, numbers, ll); + // WriteLine($"-- tillbaka tnx obj: {tnx.ObjNr} nEnd: {nEnd} svnAnt: {scndAnt} tn obj: {tn.ObjNr}"); + // nEnd = xs - tnx.HeaderStart; + // if (k < scndAnt - 1) + // { + // //tnx = new TreeNode(nEnd, numbers); + // tnx = new TreeNode(tnx.NodeEnd, numbers); + // } + // else + // { + // if (scndAnt > 1) { + // nEnd = xs; + // } + // //else + // //{ + // // nEnd = xs - tn.NodeEnd; + // //} + // } + // } + // } + + // tn.PrepMetatab(nEnd); + // return tn.NodeEnd; + //} + #endregion + + private int CalcMetaData(int[] nums) { - int tempSum = 0; - int omgStart = 0; - LinkedList llT = new LinkedList(); - while (omgStart < numbers.Length) - { - TreeNode strtNode = new TreeNode(omgStart, numbers); - llT.AddLast(strtNode); - int headEnd = 0; - int firstAnt = strtNode.AntChilds; + int metaSum = 0; + int last_pos = 0; + LinkedList ll = new LinkedList(); + TreeNode tnStart = new TreeNode(0, nums, ll); - TreeNode nxt = new TreeNode(strtNode.HeaderStart + 2, numbers); + last_pos = diverge(tnStart, ll); - for (int i = 0; i < firstAnt; i++) - { - headEnd = this.SubProc(nxt, numbers, llT); - if (i < firstAnt - 1) - { - nxt = new TreeNode(headEnd, numbers); - //llT.AddLast(nxt); - } - } - Write($"start: {strtNode.HeaderStart}, init. end: {strtNode.NodeEnd}, ant. Metas: {strtNode.AntMetaEntries}, "); - strtNode.PrepMetatab(headEnd - strtNode.NodeEnd + strtNode.AntMetaEntries); - WriteLine($" fakt. slut {strtNode.NodeEnd}"); + WriteLine($" last_pos= {last_pos}"); + ReadKey(); - omgStart = strtNode.NodeEnd; - - for (int i = omgStart; i < omgStart + 5; i++) - { - Write($"numbers[{i}]:{numbers[i]}, "); - } - WriteLine(); - Write(" "); - } - - WriteLine(); - foreach (var ll in llT) - { - Write($"Obj Nr: {ll.ObjNr} ({ll.HeaderStart},{ll.NodeEnd});"); - foreach (int x in ll.MetaTab) - { - Write($"{x}, "); - tempSum += x; - } - WriteLine(); - } - - return tempSum; + return metaSum; } - private int SubProc(TreeNode tn, int[] numbers, LinkedList ll) + private int diverge(TreeNode tn, LinkedList lnk) { - ll.AddLast(tn); - int nEnd = 0; + int last_pos = 0; + int[] workTable = tn.NumberTab; + int level_amount = tn.AntChilds; + int level_akt_ch = 0; - if (tn.AntChilds > 0) + if (level_amount > 0) { - var tnx = new TreeNode(tn.HeaderStart + 2, numbers); - nEnd = SubProc(tnx, numbers, ll) - tnx.HeaderStart; + var tnx = new TreeNode(tn.HeaderStart + 2, workTable, lnk); + last_pos = tnx.NodeEnd; + last_pos += diverge(tnx, lnk); + tnx.PrepMetatab( last_pos); } - tn.PrepMetatab(nEnd); - return tn.NodeEnd; + if (level_akt_ch < level_amount) + { + level_akt_ch++; + var tny = new TreeNode(last_pos, workTable, lnk); + last_pos = tny.NodeEnd; + last_pos += diverge(tny, lnk); + tny.PrepMetatab(tny.NodeEnd + last_pos); + } + + tn.PrepMetatab(tn.AntMetaEntries + last_pos); + last_pos = tn.NodeEnd; + + return last_pos; } + + } public class TreeNode @@ -111,9 +195,8 @@ namespace _2018_08 public int[] MetaTab { get; set; } public int NodeEnd { get; set; } public int[] NumberTab { get; set; } - static int nr; - public TreeNode(int treeNodeStart, int[] NumTab) + public TreeNode(int treeNodeStart, int[] NumTab, LinkedList links) { TreeNode.nr++; ObjNr = TreeNode.nr; @@ -122,11 +205,13 @@ namespace _2018_08 AntChilds = NumberTab[HeaderStart]; AntMetaEntries = NumberTab[HeaderStart + 1]; NodeEnd = HeaderStart + 2 + AntMetaEntries; + links.AddLast(this); + WriteLine(this.ToString()); } public void PrepMetatab(int subLen) { - NodeEnd += subLen; + NodeEnd = subLen; MetaTab = new int[AntMetaEntries]; for (int i = 0, j = NodeEnd - AntMetaEntries; j < NodeEnd; j++, i++) { @@ -134,5 +219,10 @@ namespace _2018_08 } } + public override string ToString() + { + string retStr = $"Nr: {ObjNr}, Start: {HeaderStart}, Subobj: {AntChilds}, Metafält: {AntMetaEntries}, Nodend: {NodeEnd}"; + return retStr; + } } } diff --git a/Data/AdventOfCode_181208/egetex.xlsx b/Data/AdventOfCode_181208/egetex.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cf090c8011ea7d7fce656fe05fed52d7d8bc093e GIT binary patch literal 21780 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�bp6`yv%yWy|z;ntzW z4qX|7)^v=ZPhw0eKs8=vAj|=kBN7s-|rvPm^qU1bXYlbZPsX6Cm5cK*V?irwmoti ztTt);k_CwYCHFWyo2UWhK}WL$+$h_W+c5O{$9>LfNlCvruSVZ8L#HU5A7vK`=~RFOcX= z1ZO(tHnzuUh}@@Q`si+0L!KA5e3VGB%OFgB0L03La4RpF*nmN5cSw$5dmvZAPhZj5 z4SKnoUfDZ06_LyEkveQMC<(wN#!iIMq?C-rL0VA9SM4;PAzNEq9R$8Cb<1DkgxnNx zir&Lq*t8=D<(Y(Y#zb4+@M`%?dR6XeXcJb_z<(619}v^`Soj$Rvpz~IR@Qw(-ZFRx zC@h$vCCq^34K{3Rk!f4w0Y3jB9;mQ8EJs8d2~lKaLOdivIQ;lzj+gnMGb;ma#j#O}6LpqnrQ-@J=n4mB z%axWdP}3d3inqxKxDN8-&L;ZR*7a^}EMn%{Tx_l>hbKcO*L43h&wZ8MyS2X26k7); zDRHZXVvFW{nUxI%O?y&zb}=hAS)f9kaC5*jQ7D^ld4*G_%%3EqE2qZQ1&xo1;FHC% z_rv@{{oFBSV%bp7T~tihKFGt##jqs>H_x^+(?Fgte8yQgIxq3{4&t@}Ulp)p;Lj}O z#Z>#OkJqJ)Iq9{yA<)fUQzdy~h83!~yOppP%jlR3jwNWBW8 z%Y)7!<6)GthpID`;^epiM~BzeC6jmJ`2sfyE16$)zEg5(vwlTG?%UxYaOJfvVDhw# zxaWswm)KZwJd?qV)b0$~PMg#&Ju9$Hj8>51z#~X0anKv^6|fHY{dHDno39OF^jZXE zlbOKAp!KK}V(x&GgG%AXGz6dEi(xS3Kjl=A@IO5c$v^MnQ%TS`I0lq!4dzF0G||a} zwcEMBUvjGsfNYc*@h_D*_ibxHnKzA1zL0D5cZYK+d}lF9zs7zY15mH0`fhR>&l2!p znq$}s)k;_~Z?y9=W;=?tfa5ZoLW;uHQ5#Krjy6t89a#70;D3M^u?Cf4BIM?b2a}WH z_(ba>oiaf_kH_#{$$CYz1VfuQQ#mcSL`=6wQCKlYwsp3?Nue&s?A@b`#Y1*2D$5l| zUFi!$Oc>&HZyo1)Q55r?>pd^_O*J zBdP40^UztA2UC99ncN8v)Wst2J-zzDwy%jv zsQ>N{+gaN=I{n>CU)QQ81F5hlg%>`F}VZT{`0_J6f!u5zF6k$rwQ>JkLzM-{9 zOJCixu@C^w6ZE9Nfgj}B)rT0D?!TerxD4I>Lwr!umR}mGDo`dvh6Yhj5mIzFT&;VZR!H!K1x$Dg*=S+0xy63_Chi#W?WnW z#r;XHvDrX1kF|Fdc=72Ha+iWXSZ^fJ4072KtC2z9O@NKt^@;f^$O1Nl^;{TAVAwQdVz3^T`ki z6k0)Mb6KltM_V@|5IOftVDkW1q>A@um(2=Kljn8DWmCC!@?aU%Fvx9R&DcHf7Ky-) zO|VQZi26eXoDsJ@aJG}|;8I`Ne`rAfu|SF{Y9`d+bhpZ>2UTxddM4}sJ`_2I#6Zbu zc`g94JWN>a>k{?JqH*q*ci9D!q}^p20|HVH8u#E+Cnw`|+c_I&~mT zY;bWpn`4-*fX5)#DEl!>Y1{-g|G2z7(NM$gw$WI4PFAusXt`8ZU5y}8FbhEzTCJj% z4g21}4o@U$uOfxQk0kX3*h1?A6bh-O$P6`N07|h`lBY)0QUvT^hXn?~;M*0*8LF?m zE`pSnnep7naosM5NAzd5%CW}7>2e(wcp7C*huyqhN0v_5X9__N z`_3!PP3vTCw9|-Tgc4iSG^^OO2L=R$RVWR3Ma6|wjNH7V7t;jhkRP}Y9wf3X5CydJ zUfaTmR^3D{;J$8}0r@rS229c1so1~d6!VkhXX5;dm_T+}!FZK>q-Rv=6*!?Tj2^V0 zA54z?Dg$x`_S6cjFthzw5=da7MhM-o=1m#KSUX{zFf>Z{OZ*n(pJLs89Ti)^t!Bs< zmOgf7rqq30dbwiQiupX)^W>6WJ6+j#lItSY99gJcyljjL@<_{*xkc!=S z*t5ktnCx7+?_zjU`LzY1Dc)s?vB>FqZrenG-Qg=La91L31e)LV4{&L$bACH2MSu#J zZapbH#-kZT=UV<4t&V+jKx%Ab^9{c$zVF#Y+-&H^8%!Dy3wF#1(ty&N<*T@9o$nIm z%X%YIq#=n@-Q~QQ)TDn@kqnSti_VZ4pXvu2n?g)Q7tR<3gF4;uh6GmlLE`cz&q6t- zZ`nEoZIK~M;~)SA5(18#`t2NiXhdTo*KK99#NP9D^MWwSLc-R%Dc`iv5NHb9W9#K& z3VG1F)4nMHIKxcy&}kzN!bHu56!JJ94xgw03T8(gxD6xVya-#bZA?U-I}b8|z}S2w z3nfXF0jOs=P6byh3GNpGt<9|-skyT-v}OT%0}$V==YVV#ySQadVikYZ2Z8}w7YK5n zo^L@vR;@ad=_;G6x-yn}_t_mwtZc`k zAzpUsT4UhaAf5%cQ{H;^ z`Kf5+W9k6-wwiEi(bqyV#c|UJ?PbCZ&<2=Y863cj>pCWq1qvye5E36bT0O7}MXk$^{SK|gS=jA;Dm9?(5 zMmBAS0PjxTOWs=YI`t*}kR!CC(ADKPaP^`U&{_f*)zh1?hbVU}jOkWchbX-2TtegD z+-pcXV(2IsL*cJrp!tI19zCAjSIL0_pk$jVbT!zmyzYfFyX@1iJa3k;QuO`eTf4I7 z!+2>6A65C6#))15v$DRndQ$Ma1N1OCQl;1zf~o$t6kKJXcSc4KHhP+bEjr6QMibE# z)n!=aa{eU*be08scOL~Dk4Wh!rlZLH&`%KiV*OvZ4Q^#Sk@~D8oTigF@NQONzQ4S{ zfG3=AK?L2G&iH$=r^@PM+^YgG>CVU-jZx|$Z7?pkyQ99q75iL#*aY|T4mk-jy5`)M zqN(E<(RH;Dyrd<}tTMIz_7IMH_5R=jmC5F%%CHZ==~2-9e^T$&7yHlX<^RGx|1=-}<(~iLp8w^Z z|K*Q`n;@>j0@XDP^^1x3FKLVlJL1xAlTy;AqU zlYkS1YuhPLgxCUI;Zv$Bz(nJR4>m~EXN7ilbO8YyHfBjrrUgrUg$gT_=NlQpif9A_ zn0Dav7L6?ZvuGgX&S+vM;@#3P51vg$V=RV4ax3uuA_eSo6NM=k@D;sYhu<2yp|TH5Gk6WYOk(_f zeK{>Wi@<$((WE`4IJKWU3|j=Rb-FSU6vDA@dGZQt?8u-Fv=cI;caUr9lq9%7m#zd^ zCixs0-bg=|GKv+3GAKjQ8Z0$7AAajR|H7d!!Q@bd->EZGSpx+dl@C+im$7%!GE}S? zY?4>V^?CeShYf4V%PC_pA0KT*^E#x%z*pLin4-@BG-sfFg1O{4C_|6+agQBc#Me)TpuxYOO362(?_M{?q$` z6TVz;c^x_FuNnB)%l|*e|JM|N->m;n@ox>C_%Z{oK6M0NFEJomWoMU#4%#_g$#uxa zC32NYewNpfTZ848;!j|u&9$W4UDk9MMZlh8qo@w5kEpQg5b;?Fv@w@in!rRnxblXz3m~k-!8u&_KN@1>yzl$!Q=nA{D0Pg z{iBfZ=grS(-OquS#&rHsJ{SCl-tX8>9|{P+Tm3+As4@=@u~!S5X51x>@Niv#UKK7D z&D{Os&F94JonOQoODbQl{}m6#RL*FiCMbINpc|Q@m@b-5Q52dQDn0n2`8&3#nwEH? zyfCXI8njf|wuaRiG#NQA>c|ljBDvb~Kn>lP-fG1C#7%UnFSGsvcTjO21ukf(;_$B+k6YOQem zFKew1x3A%n|C9x?qy3QP{});KyS-rQnt({g6ERzD@?Wwr*}%3TB5=xb2=_25yULxY z@wydm{kauttjpL=*mK~saUrBnxUhSPVP*DABwv;APDW7TpRt3YrF>KGPF7r??sd%r z)wt)U<7$nDF5vDH0IgNS5mynZQaOtU+zF>#k`=OUM(Vl4bUgR1KY19O>RetHq|RPH&BQ}o`lo?n<)GmcWF$OWzTE9{Egsxr@39a zF-3m5lTfz3m6tcbCPf&>GE*W4ot>T;<>+KpF3I!B!{nwrw5|?i_;>RxD@}P6+Gx5l zu(q)iIr^+TeVj=r5@2dboRI#IZg3A8R+4b394gX}{`m=)C3OoyK$6{IhON@+z=@nY z8sxR;=@K_K52Y7&U@%+-oRMJX7KZ{E^U9-cha1+Wo5d`NA9gGpU2|PmGfR#Fnp&!M zA2n3vJ_UOe7?KK9Z#82el;FfFn?Mk;Xr$p0tG?%K}jtz zFcG;fnPJUEy&@UDZjmo@<(k1#9};OTzY{&|j9r0JF4V=@2Q%M{jChQvaJT{PvWvhy zED-Mq;V_aQ@`DHjLNJ!+HDzuc1ImgQ|0r;PSPVQyC2jf2-2encx6;@>M#Bisl-g$} zik$b6$Xfno^c2aX&C+}>HDcfZRd&{V^_?fxYeuR+VGi8&JrZJZ2B87I3e+IsJPK+o zWEOW$J(TT+we%(_7sjwEHebn+O=f-sdBFTSlv{TPFf28Ksk46OJwB!B3c~i)a5+0x zwUuRLE=wsZuEJV9+qaja8J&bfGs(TW?lZaWf+n zKnF<6KAn`+?JzH*&nK!P6>ooKfUokJ11R2zE7@Xeid{gPb*I4$1rh30=Uy%GEcf8F zkY3v-EJJF(b`3^zDAk*4XF8CM^2O{wL|4tgJ-u-Nc~=#sa*g|ZmR~7yE6RLP_E2*E zTMMB=LZvDFDhXz<5qiYeGHYWyBY8(VdnbA$J4cg0l3riW5czL)^{a|R#7)Y6V894E zk$De3H9-58MkS z@$lQjkc!LC=_4UL9@J&!-(3h+NT*j<+8lA>ev@4cfdBSmEzOYSoeVOI1Ag~5`K`;- z>5SSH^z6|`;31?=%J~lK{F;`y>Z`VP5+%sYk!IY)k%c;~*T|y7a;E0EiP(`8j5$JP zxJU?+*fwcf^SByCxM20E#FiKvM^nyOz}SG+&HdmL-3~)c2+RvXpMk6?OIyL_dqHlX zYLL&~k%zy1q4u3^m^J@Z1dCo@s3H7S1P$!%|0{v7qW6zadc1E zH3rq(wzP3WZC>@^c0h7mwCehXR@hI#u;G*byK`=eP zTIN$<5E=z;cT{u1B$S#gPrZ5A=cH}ae&Fn~D&C7+g5i(hQO|0%u9h3&Zp&-r`jot$ zcC|o~N<$}_py)b6y}KU-iEnEukXFHFjV5M>6;JmRtWhwu$qW|#!YFQ~1Xl=P3d#gR zC`81<;ZU38g`b!gT?apUg|crbmww3VRP4f9I^V>=#-|*p(8u$1vdco_X5HFiOuv>j z@}}JF4@P;cW3(z`IRvVG$?|!wzxPY(mu}}_)&DZ6|2SDnIDze>E&arJ&9A1|uWI<_0Gzjt|NZohUrhl3 zMqgcqzdwuPEzaAs7=9svzm`}0?a2&pVcwny@C#-D?)NZ1ow>I#Z_Cnu!F)vc*OdH6 zk@{Pdw`H2YP&!`o0ba-SwrKM$z}q5|UjRb5KLLJ~oV;!NHkHUSG`Whwq*Q)#_!S^k~+pzjCgk-9}BK%75dW-Njjp7%A=_{N6OCNqERlJ3G zn_2J+B9Y;@lkr=jc>99+7s@Qtzjfq~Gemxi@b{B}!tqyxpOf)hgukDRZ#;iRF#0(e zzlC@k>iRVdB)-2u{11Vzx6}JJdh`nsk^g@}{Mo(VZb@$gGQSWJ1b!m^Z{eA@U3?qg z_yve0_!ID7>hL$wj<? a$537h^fl4}0D%4a&-&G-#mW3}_x}O@{RNo- literal 0 HcmV?d00001