summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2022-12-17 01:16:18 +0100
committerOrangerot <purple@orangerot.dev>2022-12-17 01:16:18 +0100
commit6596b48113ced669b206d2e1f1e8ba6edcba88a2 (patch)
tree02c7d01783390862d989df6c91aff968e03dd415
adv2022 first 8 days
-rw-r--r--2022/LICENSE674
-rw-r--r--2022/day01/input1.txt14
-rw-r--r--2022/day01/input2.txt2253
-rwxr-xr-x2022/day01/mainbin0 -> 20760 bytes
-rw-r--r--2022/day01/main.c34
-rw-r--r--2022/day01/main.py21
-rwxr-xr-x2022/day01/main.sh3
-rw-r--r--2022/day01/test.c13
-rw-r--r--2022/day02/input1.txt3
-rw-r--r--2022/day02/input2.txt2500
-rw-r--r--2022/day02/input2b.txt2500
-rw-r--r--2022/day02/input3.txt9
-rw-r--r--2022/day02/input4.txt9
-rwxr-xr-x2022/day02/main.sh15
-rwxr-xr-x2022/day02/main2.sh9
-rw-r--r--2022/day03/input1.txt6
-rw-r--r--2022/day03/input2.txt300
-rwxr-xr-x2022/day03/mainbin0 -> 20800 bytes
-rw-r--r--2022/day03/main.c36
-rw-r--r--2022/day03/main2.c45
-rw-r--r--2022/day04/input1.txt6
-rw-r--r--2022/day04/input2.txt1000
-rwxr-xr-x2022/day04/mainbin0 -> 20672 bytes
-rw-r--r--2022/day04/main.c15
-rw-r--r--2022/day04/main2.c18
-rw-r--r--2022/day05/input1.txt9
-rw-r--r--2022/day05/input2.txt512
-rwxr-xr-x2022/day05/mainbin0 -> 21080 bytes
-rw-r--r--2022/day05/main.c122
-rw-r--r--2022/day05/main2.c129
-rw-r--r--2022/day06/input2.txt1
-rwxr-xr-x2022/day06/mainbin0 -> 20704 bytes
-rw-r--r--2022/day06/main.c26
-rw-r--r--2022/day06/main2.c26
-rw-r--r--2022/day07/input1.txt23
-rw-r--r--2022/day07/input2.txt1030
-rwxr-xr-x2022/day07/mainbin0 -> 21104 bytes
-rw-r--r--2022/day07/main.c111
-rw-r--r--2022/day07/main2.c118
-rw-r--r--2022/day08/input1.txt5
-rw-r--r--2022/day08/input2.txt99
-rwxr-xr-x2022/day08/mainbin0 -> 20864 bytes
-rw-r--r--2022/day08/main.c36
-rw-r--r--2022/day08/main.py39
-rw-r--r--2022/day08/main2.py49
45 files changed, 11818 insertions, 0 deletions
diff --git a/2022/LICENSE b/2022/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/2022/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/2022/day01/input1.txt b/2022/day01/input1.txt
new file mode 100644
index 0000000..2094f91
--- /dev/null
+++ b/2022/day01/input1.txt
@@ -0,0 +1,14 @@
+1000
+2000
+3000
+
+4000
+
+5000
+6000
+
+7000
+8000
+9000
+
+10000
diff --git a/2022/day01/input2.txt b/2022/day01/input2.txt
new file mode 100644
index 0000000..e1e0531
--- /dev/null
+++ b/2022/day01/input2.txt
@@ -0,0 +1,2253 @@
+4601
+1583
+2995
+5319
+3352
+1722
+4331
+5840
+3339
+5341
+3415
+1297
+1610
+2703
+
+5928
+1266
+6405
+4354
+2815
+1621
+3545
+1733
+2162
+1155
+3674
+4055
+4262
+2115
+
+25873
+16103
+17042
+
+6479
+1521
+6902
+6331
+6146
+1591
+2063
+2149
+1463
+1865
+2598
+6893
+3617
+
+1431
+8935
+8134
+8885
+8698
+8884
+7982
+3617
+7079
+
+34031
+8383
+
+3697
+1199
+3703
+1322
+5679
+1627
+5910
+1092
+6445
+2371
+3672
+2281
+2710
+5111
+
+17480
+
+58355
+
+3711
+2406
+2101
+1406
+5376
+2149
+4608
+6768
+6322
+3792
+4249
+2342
+2014
+
+6197
+6908
+8484
+3901
+3001
+7880
+5165
+2536
+
+3964
+4229
+4898
+4544
+3535
+6329
+1573
+4988
+1424
+
+57606
+
+16325
+
+6038
+11538
+13026
+12734
+6077
+
+4696
+3914
+2375
+1188
+1247
+1594
+1843
+5297
+6053
+1114
+3179
+5968
+1430
+4268
+2514
+
+6684
+2321
+3946
+1746
+7583
+10379
+3696
+10110
+
+5834
+5944
+9336
+9638
+3373
+4279
+9942
+
+7208
+7801
+3771
+8183
+1824
+8217
+1545
+3041
+7369
+5980
+
+8368
+6180
+3100
+4801
+4430
+6758
+3023
+3394
+
+2545
+4992
+3347
+5830
+3764
+3237
+2431
+3406
+1408
+5601
+6548
+4625
+
+32334
+
+1112
+5471
+10983
+8298
+4342
+4221
+7807
+
+5733
+2012
+5928
+3503
+2785
+4867
+1515
+4819
+3569
+3353
+5997
+4921
+5498
+3234
+5588
+
+11040
+5547
+12070
+2168
+7603
+7245
+4966
+
+13027
+12518
+15381
+3251
+14935
+
+15858
+29295
+
+2476
+4289
+10350
+3953
+10089
+6953
+5555
+3007
+
+61732
+
+5567
+4895
+6095
+4880
+2945
+6022
+2129
+5010
+4100
+3554
+3410
+1820
+
+9902
+33605
+
+15331
+15615
+5062
+15073
+
+5940
+2252
+1233
+2582
+3624
+2754
+2304
+3189
+4060
+3862
+5164
+1487
+2776
+1807
+3385
+
+6798
+2385
+3755
+10299
+11500
+6478
+1911
+
+1469
+9309
+1785
+17145
+
+3363
+3210
+3285
+4491
+5992
+2927
+4098
+2133
+3191
+2810
+4694
+
+31006
+1582
+
+4356
+6146
+2051
+6503
+9487
+9244
+4808
+7761
+7108
+
+1771
+6062
+7135
+5575
+3278
+1221
+2547
+7266
+5444
+7395
+
+10634
+1196
+
+1361
+
+2810
+3106
+8654
+9455
+3778
+4219
+8882
+9387
+5128
+
+7114
+1441
+6146
+4752
+2388
+6420
+7350
+1624
+6050
+5469
+6751
+
+5570
+4674
+
+2074
+3476
+4064
+9446
+2889
+4871
+6298
+2970
+8588
+
+3482
+8492
+2226
+4951
+6733
+5463
+3183
+4807
+4806
+
+6974
+10251
+4637
+9558
+5153
+4665
+
+6860
+6949
+1524
+4201
+4397
+2278
+4909
+1353
+2074
+1920
+7439
+1040
+
+4135
+1411
+5536
+8004
+3090
+1036
+6613
+6353
+6810
+
+3932
+4743
+1615
+3201
+3791
+6357
+2511
+3440
+2290
+4741
+2844
+3121
+3641
+3497
+
+4549
+5142
+4438
+2945
+4576
+4871
+4795
+6007
+4884
+1031
+2111
+4388
+4705
+5725
+3425
+
+45444
+
+6688
+9460
+2727
+6989
+6789
+12460
+
+7310
+5910
+7822
+7627
+7600
+4793
+3152
+5747
+5197
+8006
+
+23983
+33879
+
+1020
+4783
+5117
+3628
+3065
+6131
+5543
+1576
+1159
+3721
+3182
+1409
+2738
+5084
+
+42750
+
+8509
+4370
+1042
+5664
+
+59445
+
+1589
+5133
+6413
+6578
+3301
+8256
+7749
+4321
+8190
+5025
+
+27739
+18609
+
+5447
+4022
+4069
+1437
+2811
+6929
+2754
+1108
+7390
+3995
+3480
+3225
+
+4240
+6959
+3289
+8063
+4751
+4896
+4611
+6256
+1105
+1334
+7598
+
+27831
+
+1821
+5333
+7853
+6574
+7985
+3972
+2306
+1875
+1857
+6386
+
+12780
+2513
+22939
+
+9625
+3785
+8050
+7432
+11772
+10914
+
+1387
+3439
+4644
+3880
+1878
+3911
+5329
+1480
+5779
+2083
+3886
+5525
+3930
+4813
+2570
+
+15763
+2839
+14258
+1460
+
+6193
+3397
+3222
+3262
+3735
+2406
+5588
+2068
+2862
+3271
+1401
+3957
+5690
+4632
+
+15070
+5164
+8902
+9580
+4271
+
+4494
+5665
+7242
+7687
+7031
+6135
+2670
+3315
+6146
+8085
+
+2625
+24285
+
+4414
+5985
+2681
+7036
+6486
+2501
+4408
+8582
+5150
+4295
+
+1082
+1497
+5638
+4643
+1413
+5969
+1515
+4016
+4856
+3287
+3122
+2948
+3711
+5031
+4692
+
+6445
+2261
+2132
+3517
+2461
+2767
+2071
+2176
+6357
+1304
+6034
+1346
+
+1318
+4719
+2054
+1433
+6514
+3729
+4329
+1026
+1502
+2611
+1363
+6379
+3617
+
+1885
+7519
+2849
+5167
+3136
+4819
+8018
+4110
+2666
+6098
+4943
+
+6575
+1624
+6004
+4178
+7453
+5979
+6736
+3883
+7109
+1271
+1175
+
+9494
+12633
+11576
+3547
+
+4653
+6777
+4497
+2246
+4666
+4675
+4440
+7227
+3808
+2425
+6014
+7305
+
+2538
+6155
+4321
+6239
+6279
+1445
+5592
+
+4920
+5435
+1392
+4122
+10513
+6359
+1574
+7222
+
+9013
+2150
+8377
+8884
+4108
+5427
+1605
+6907
+
+7861
+10554
+1210
+1346
+5296
+4419
+9147
+
+1858
+2956
+2070
+10271
+5810
+2632
+9429
+3941
+
+4306
+4972
+6216
+6345
+3971
+3920
+6295
+3552
+1399
+5425
+5218
+4512
+3376
+4460
+
+4107
+4484
+5148
+5456
+7902
+2185
+3439
+7199
+9514
+
+11030
+12096
+
+2886
+1561
+14057
+7480
+12186
+
+8600
+4085
+11755
+4564
+1697
+6345
+10176
+
+2538
+10138
+8328
+10621
+13322
+13907
+
+5450
+3403
+5776
+5967
+3873
+2761
+5992
+2251
+2278
+4673
+3442
+2720
+2556
+4848
+5967
+
+2806
+8228
+9047
+10630
+4367
+4917
+4084
+7893
+
+2842
+18343
+1497
+19962
+
+3985
+10986
+1431
+1569
+8053
+8987
+6474
+
+5733
+2237
+6183
+1642
+1005
+4389
+1889
+2385
+2470
+6338
+2200
+3399
+3659
+4092
+
+6579
+5872
+4229
+1081
+2254
+1229
+5218
+4267
+6906
+2818
+1084
+3655
+2294
+
+1882
+5005
+3805
+2088
+6809
+4982
+1935
+6789
+1961
+1842
+5988
+2859
+3965
+
+2313
+1021
+5090
+1309
+5110
+3142
+4102
+2919
+6010
+3079
+5786
+3701
+2659
+5728
+
+4251
+1899
+4119
+8941
+6677
+2161
+2119
+2772
+3122
+
+7821
+6113
+5150
+3486
+2072
+4089
+2820
+3161
+7589
+1787
+5988
+
+10582
+8240
+1934
+1504
+9070
+1186
+7766
+1066
+
+6700
+6181
+3238
+1940
+1229
+3688
+1375
+5873
+2328
+6384
+7446
+7246
+
+5542
+6771
+1964
+4532
+3011
+2300
+1451
+6726
+4595
+2926
+5237
+5020
+6129
+
+15008
+4409
+6769
+2211
+
+11825
+8947
+17411
+2893
+
+8460
+11664
+2304
+6865
+2132
+9174
+
+15540
+16925
+12015
+7621
+
+1439
+11886
+3028
+
+4604
+1057
+5342
+4723
+7773
+3373
+7488
+8028
+3246
+6355
+1939
+
+2921
+4447
+3472
+5175
+5909
+5936
+5263
+3993
+1589
+3906
+4865
+3156
+2010
+
+10089
+
+5964
+7650
+4692
+1537
+3281
+3162
+1064
+4567
+3910
+2229
+3566
+
+15533
+17311
+11818
+6179
+
+4583
+4577
+3573
+1379
+3761
+1048
+4799
+4275
+3515
+5637
+5435
+3801
+5933
+1926
+
+11841
+16030
+3213
+
+4307
+7300
+1237
+5513
+6799
+2402
+2554
+
+67023
+
+1573
+6798
+3002
+7536
+2373
+5994
+10122
+
+1149
+1836
+7129
+6621
+7432
+2468
+4028
+6560
+5127
+3781
+7035
+5845
+
+13729
+10212
+10942
+10087
+10080
+6493
+
+6850
+5969
+3370
+5400
+6433
+4762
+5702
+6193
+1836
+1507
+2637
+3051
+1394
+
+5465
+10565
+4923
+1671
+9789
+9150
+6466
+8013
+
+31283
+
+2001
+6032
+6765
+3896
+7593
+3175
+3447
+1718
+
+6062
+7630
+6302
+4448
+1014
+4756
+4696
+4069
+5663
+2181
+6153
+
+9228
+1871
+11739
+10894
+
+7435
+6290
+3249
+9358
+9196
+8951
+5023
+4910
+9686
+
+3823
+4247
+7159
+
+4630
+3352
+7700
+7752
+3343
+4577
+2448
+10326
+
+10002
+28943
+
+2592
+4430
+4077
+2126
+4628
+6466
+5919
+7019
+2667
+2573
+7038
+3153
+
+2837
+12151
+9774
+1574
+3046
+13079
+
+6949
+
+5306
+7432
+4274
+6835
+7057
+5695
+4727
+5581
+6516
+3903
+3138
+
+4083
+4247
+1806
+2753
+3612
+3509
+5498
+2160
+5814
+1502
+5760
+4663
+1354
+1592
+
+59040
+
+3738
+7624
+4539
+8649
+9418
+5495
+1178
+8389
+
+4458
+5283
+2572
+3530
+6228
+4711
+2621
+2131
+6363
+5611
+3236
+2314
+2547
+1905
+
+3744
+1413
+2997
+
+2214
+4673
+4481
+5827
+3752
+5489
+5301
+7568
+6869
+2928
+2900
+
+11668
+7579
+2324
+7245
+14362
+
+1191
+5622
+2764
+3241
+3690
+3627
+2637
+4043
+3012
+2773
+4276
+1127
+3649
+
+5327
+6535
+4821
+5531
+3037
+4700
+6287
+6476
+2266
+7550
+
+3054
+5023
+1296
+4394
+5649
+1822
+6609
+7038
+5836
+6571
+6918
+
+9473
+5377
+8449
+4839
+3118
+7861
+
+8784
+3880
+5133
+6131
+2114
+5196
+10405
+1040
+
+5003
+5888
+6058
+6910
+3155
+3278
+1159
+3863
+4565
+1181
+2716
+6431
+3014
+
+7633
+4984
+1297
+4524
+5183
+3717
+12038
+
+5908
+7784
+11211
+7635
+2060
+5502
+9179
+
+6537
+6895
+3455
+4799
+5557
+3497
+4467
+1694
+5227
+1663
+2377
+3538
+4529
+
+9371
+2421
+9789
+7373
+6459
+6405
+7775
+8218
+
+2077
+8589
+3417
+7811
+10255
+4325
+7168
+
+5963
+2806
+3512
+2369
+5721
+3852
+3022
+3764
+6152
+1158
+6460
+4694
+1909
+2655
+
+7789
+3030
+3621
+6269
+3149
+6405
+2288
+3512
+5674
+1301
+
+6120
+2629
+6348
+7105
+3459
+6678
+5903
+4519
+3074
+2086
+3927
+
+2924
+12290
+1873
+5613
+3098
+8641
+
+24464
+37206
+
+7180
+13271
+4832
+10691
+9084
+
+4915
+1440
+1841
+1476
+7124
+1692
+7480
+4583
+1896
+3475
+5424
+
+6864
+3187
+4680
+5159
+4314
+3148
+1060
+7290
+2080
+8308
+
+2412
+16405
+15203
+5606
+9411
+
+13201
+6242
+11906
+15782
+12558
+
+5319
+7968
+6732
+9702
+
+7203
+3571
+7241
+8764
+3466
+6032
+6608
+6898
+7189
+2749
+
+6184
+7590
+4976
+4289
+8553
+8238
+5844
+8314
+
+3264
+2924
+2586
+1234
+3126
+5269
+6147
+6029
+2384
+6440
+6161
+1708
+2928
+2336
+
+24565
+31964
+
+11118
+10621
+1430
+3312
+1135
+6740
+9456
+
+16874
+4385
+8675
+4237
+
+1537
+4313
+5552
+2195
+3530
+2433
+3056
+3693
+1151
+4297
+2017
+4917
+3823
+3388
+1580
+
+5795
+2642
+3822
+1824
+2366
+3800
+2020
+4065
+2758
+2677
+3951
+5175
+4433
+1199
+3212
+
+4183
+2822
+6355
+4427
+6384
+2931
+4892
+3148
+5802
+3885
+4892
+5233
+4269
+4286
+
+3711
+5430
+6115
+5561
+5066
+2796
+3886
+1960
+6083
+4657
+
+11662
+12901
+6891
+3897
+
+1086
+4333
+1477
+1046
+5670
+3996
+1909
+3544
+5143
+1387
+6319
+3084
+3136
+6084
+
+36111
+14790
+
+6552
+8491
+
+6636
+9718
+15736
+1619
+
+9531
+7507
+7311
+5991
+6901
+12139
+10580
+
+10956
+7878
+9100
+11884
+2906
+10388
+
+7767
+4040
+5872
+1060
+2299
+1008
+3597
+2749
+5025
+
+1550
+
+5364
+7108
+8661
+8894
+9240
+10008
+4243
+
+46695
+
+4195
+2850
+2978
+4995
+2944
+5773
+3669
+3662
+4471
+6343
+4258
+1252
+6408
+5995
+
+9482
+11898
+9022
+8167
+9232
+
+2647
+1990
+2948
+5314
+2341
+3828
+2513
+2091
+4173
+
+9640
+2690
+8774
+11619
+11201
+2429
+7216
+
+3433
+5914
+5223
+4879
+1349
+4692
+2906
+3761
+4416
+4813
+2751
+4474
+2057
+1675
+
+9803
+8986
+3617
+2175
+1412
+8370
+
+7671
+6448
+6759
+1857
+
+25790
+14495
+
+1872
+6441
+4585
+4053
+4142
+5844
+2089
+3387
+2660
+5890
+6499
+3769
+2710
+
+23432
+16915
+
+1351
+2656
+6557
+1149
+5054
+1681
+6871
+2643
+3158
+1617
+4087
+6498
+4993
+
+5494
+10055
+2730
+5800
+2923
+8037
+3448
+1527
+
+5803
+18165
+21951
+
+4766
+3809
+4678
+3184
+9687
+7825
+7222
+6638
+2016
+
+1801
+1717
+4955
+6088
+1848
+4033
+7023
+3551
+5970
+1415
+7027
+7411
+
+25450
+11523
+22548
+
+1566
+4742
+3947
+2708
+2019
+3479
+4735
+6002
+7042
+1828
+7071
+1535
+
+14218
+5232
+10228
+3340
+7975
+
+8837
+3510
+10363
+11854
+2821
+7627
+10186
+
+1102
+3749
+1436
+1561
+3098
+3849
+3726
+2041
+1100
+1532
+5473
+4643
+5922
+4739
+1216
+
+4408
+7369
+1369
+4742
+7109
+4368
+3468
+2777
+3296
+6999
+5777
+5019
+
+3750
+12190
+
+15694
+12690
+14834
+15532
+1955
+
+8702
+1209
+3012
+3074
+8390
+6779
+6117
+2544
+3900
+6374
+
+4126
+5772
+7149
+3949
+2371
+2374
+2469
+7839
+7898
+2871
+5808
+
+1108
+
+9610
+4374
+10275
+2595
+9413
+8906
+6402
+1551
+
+6560
+8632
+5064
+2152
+3443
+4229
+
+13104
+24831
+17968
+
+4648
+5332
+4866
+1048
+4089
+4710
+1406
+2544
+5319
+4685
+4622
+6080
+5899
+3266
+
+5694
+12879
+4015
+16066
+1600
+
+11186
+31873
+
+3871
+6382
+5076
+3606
+4283
+7913
+11124
+
+9959
+14807
+17825
+5880
+
+3914
+14183
+
+8104
+8322
+10254
+3957
+1410
+9402
+2012
+
+1130
+4640
+5738
+3860
+1510
+3067
+5021
+5321
+2820
+1269
+3433
+5216
+5585
+1344
+
+5975
+9879
+4969
+9796
+1404
+6772
+3240
+1954
+
+12512
+13741
+6425
+13234
+10597
+12414
+
+2031
+2255
+3306
+1831
+1601
+1959
+4452
+5054
+4967
+5392
+4040
+4989
+4385
+5838
+5043
+
+3165
+10185
+10580
+1626
+5436
+9644
+10842
+
+5139
+8090
+1045
+5867
+5987
+8488
+2409
+
+1045
+2843
+3543
+3224
+2855
+3318
+4192
+4600
+5773
+4074
+4705
+4716
+1798
+5274
+2443
+
+6325
+7878
+4932
+7543
+8073
+2113
+5481
+8138
+2151
+1296
+
+6007
+2506
+2346
+3631
+1526
+4875
+3099
+5253
+6281
+2057
+3209
+2622
+2930
+4926
+
+2901
+4561
+2361
+4474
+8508
+6515
+5024
+2201
+4402
+6922
+
+4219
+24714
+17196
+
+38164
+
+1900
+5727
+3935
+5498
+6165
+4621
+3347
+4387
+5982
+4213
+1742
+1302
+2452
+3923
+
+9558
+7131
+15662
+9101
+13730
+
+6474
+2222
+6539
+3747
+5995
+5573
+6288
+4684
+5121
+2226
+1722
+1117
+1020
+
+3565
+3489
+
+18395
+20407
+
+57158
+
+19992
+
+3636
+4392
+4584
+5421
+3159
+5817
+2303
+1013
+1758
+1802
+4630
+4261
+1524
+1639
+
+4652
+1967
+4765
+4946
+3023
+2732
+2749
+5258
+5935
+6428
+3053
+6328
+2389
+5681
+
+5450
+1993
+2824
+3596
+2658
+8545
+6577
+3024
+4001
+1780
+
+7902
+6187
+
+1349
+6028
+3307
+1964
+5116
+2308
+6108
+4286
+1689
+3324
+3728
+4946
+4267
+3801
+3806
+
+14183
+29320
+
+32460
+25012
+
+3317
+5545
+7302
+4936
+7934
+6094
+7971
+2497
+8130
+3752
+
+4195
+2147
+7770
+4214
+4737
+7962
+5942
+4478
+3816
+7508
+6693
+
+26013
+8614
+19828
+
+1144
+2361
+4371
+4246
+3442
+1693
+5137
+5806
+2434
+1413
+3135
+4028
+4757
+6005
+
+2351
+4927
+3004
+3384
+1545
+2172
+3407
+4120
+3954
+1806
+2342
+5847
+5228
+1005
+
+11490
+7855
+9775
+10577
+3232
+5211
+
+8316
+2984
+13490
+15716
+7433
+
+11288
+14551
+10056
+14839
+7241
+
+4573
+2731
+3358
+4850
+6352
+5419
+1021
+6611
+6489
+3794
+6089
diff --git a/2022/day01/main b/2022/day01/main
new file mode 100755
index 0000000..68fb10f
--- /dev/null
+++ b/2022/day01/main
Binary files differ
diff --git a/2022/day01/main.c b/2022/day01/main.c
new file mode 100644
index 0000000..a5e21e6
--- /dev/null
+++ b/2022/day01/main.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main()
+{
+
+ int calsum;
+ int maxcalsum = 0;
+ int elfnum = 1;
+ int maxelfnum;
+
+ char *line = NULL;
+ size_t len = 0;
+
+ // beginning new elf
+ while (getline(&line, &len, stdin) >= 0)
+ {
+ if ( line[0] == '\n')
+ {
+ elfnum++;
+ calsum = 0;
+ continue;
+ }
+ calsum += atoi(line);
+ printf("Elf %d hat %d Kalorien\n", elfnum, calsum);
+ if ( maxcalsum < calsum)
+ {
+ maxcalsum = calsum;
+ maxelfnum = elfnum;
+ }
+ }
+
+ printf("Elf %d hat die Maximalen %d Kalorien\n", maxelfnum, maxcalsum);
+}
diff --git a/2022/day01/main.py b/2022/day01/main.py
new file mode 100644
index 0000000..7ac4153
--- /dev/null
+++ b/2022/day01/main.py
@@ -0,0 +1,21 @@
+
+cal=0
+elf=1
+maxelf=0
+calmax1=0
+calmax2=0
+calmax3=0
+for line in open("input2.txt", "r"):
+ # print(line)
+ if( line == "\n" ):
+ cal=0
+ elf += 1
+ continue
+ cal += int(line)
+ if (cal > calmax1 && elf > max):
+ calmax3 = calmax2
+ calmax2 = calmax1
+ calmax1 = cal
+ # calmax = max(calmax, cal)
+print(calmax1, calmax2, calmax3)
+
diff --git a/2022/day01/main.sh b/2022/day01/main.sh
new file mode 100755
index 0000000..c5b60a5
--- /dev/null
+++ b/2022/day01/main.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+paste -sd+ /dev/stdin | sed 's/++/\n/g' | bc | sort -n
+# ./main.sh < input2.txt | tail -3 | paste -sd+ - | bc
diff --git a/2022/day01/test.c b/2022/day01/test.c
new file mode 100644
index 0000000..bb48b4c
--- /dev/null
+++ b/2022/day01/test.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main()
+{
+ int i;
+ char *line = NULL;
+ size_t len = 0;
+ while (getline(&line, &len, stdin) >= 0) {
+ if ( line[0] == '\n' ) printf("newline\n");
+ printf("%d\n", atoi(line));
+ }
+}
diff --git a/2022/day02/input1.txt b/2022/day02/input1.txt
new file mode 100644
index 0000000..db60e36
--- /dev/null
+++ b/2022/day02/input1.txt
@@ -0,0 +1,3 @@
+A Y
+B X
+C Z
diff --git a/2022/day02/input2.txt b/2022/day02/input2.txt
new file mode 100644
index 0000000..20e0cef
--- /dev/null
+++ b/2022/day02/input2.txt
@@ -0,0 +1,2500 @@
+C Y
+C X
+A Z
+B X
+B Z
+C X
+C X
+B Z
+C X
+B Z
+C X
+C X
+A X
+C Y
+A X
+C Y
+B Y
+C X
+C Y
+B Z
+A X
+C X
+B X
+B X
+B Z
+A Z
+C Z
+B Z
+B Z
+C X
+B Z
+C X
+B Z
+B Z
+C X
+C Y
+B Z
+C Y
+A Z
+B Y
+C X
+C Y
+A Z
+B Z
+B Z
+C X
+C Y
+B X
+B Z
+A X
+B X
+A X
+B Z
+C Y
+C Y
+A X
+C X
+C X
+B X
+A Z
+C Y
+C X
+B Z
+A Z
+C Y
+B X
+C Y
+B Z
+C X
+B X
+B Z
+B Z
+C Z
+B Y
+C Y
+B Y
+A Z
+A X
+A Y
+A Y
+C Y
+C X
+C X
+B Z
+B X
+C X
+B Z
+A Z
+C Y
+C Z
+C Z
+B X
+B Z
+C Y
+A Y
+A X
+C X
+B Z
+B Y
+B X
+B Z
+B Z
+A X
+C Y
+C Y
+C X
+A X
+B Z
+A Z
+A X
+B Z
+C X
+C Z
+C Z
+C Y
+C Z
+B Z
+C Z
+C Y
+B Z
+A X
+C Y
+B X
+C Y
+B Z
+C Y
+A Z
+A X
+B Z
+A X
+A Y
+B Z
+C X
+C Y
+C Y
+B Z
+B Z
+A Z
+C X
+A Z
+A X
+A Z
+B Z
+B X
+A Z
+B Z
+B Y
+C X
+C Y
+C X
+C X
+A Z
+A Z
+C Y
+B Z
+C Y
+B X
+C Y
+C Y
+B Z
+C X
+B Z
+A Z
+C Y
+C Y
+B Z
+A X
+C X
+B Z
+C X
+B Y
+A Y
+C X
+B X
+C Y
+B Z
+C Z
+C X
+C Z
+B Z
+B Y
+A X
+A Z
+B Z
+A Z
+C X
+A X
+C X
+C Y
+C Z
+A Z
+B Z
+B X
+B X
+A Y
+B Y
+C Y
+B Y
+B Z
+A X
+A Y
+A Z
+B X
+B Z
+C Z
+C Z
+B Z
+C Y
+C Y
+C X
+C X
+B Z
+B Z
+C Y
+A Z
+C X
+C Y
+A Y
+A X
+B Z
+C Z
+C X
+C X
+C X
+A Z
+C Y
+B Z
+B Z
+C X
+C Y
+C Z
+B Z
+C Y
+A X
+A Z
+A Z
+C Y
+A X
+B Z
+C Y
+C X
+C X
+B Z
+C Z
+B Z
+B Z
+B X
+A Z
+C Y
+C Y
+C X
+B Z
+B Y
+B Z
+B Z
+C Y
+A X
+A Y
+C Y
+A X
+C Y
+C Z
+A Y
+A X
+B Z
+A X
+A X
+A Y
+B X
+B Z
+C Z
+B Z
+B Z
+B X
+B X
+C X
+A X
+C Y
+C X
+C Y
+A X
+B Z
+A X
+A Y
+B Z
+C Y
+B Z
+B Z
+C Y
+A Y
+A Z
+C X
+C Y
+C Y
+C X
+C Z
+C Y
+B Z
+C Z
+B X
+C Z
+B Z
+A Z
+B X
+C X
+C X
+B X
+B Z
+C X
+C X
+B X
+A Z
+A X
+A Z
+B Z
+B Z
+B Z
+A X
+C Y
+C Y
+B Z
+A X
+A X
+B Y
+C Y
+B X
+C X
+C Y
+C X
+C Y
+A X
+B X
+A Z
+A Y
+B Y
+A Z
+B X
+B Z
+B Z
+A Y
+B X
+C Y
+B X
+B Z
+B Y
+A X
+A Z
+C X
+C X
+C Z
+C Z
+B X
+C X
+B X
+C X
+B X
+B Z
+B Z
+B X
+B Y
+C Y
+A Z
+B Y
+A Z
+C Y
+B Z
+C Z
+C Z
+B Y
+B X
+B X
+C X
+A Y
+A Z
+B Y
+A Z
+A Z
+A X
+A Z
+B Y
+A X
+A X
+C Z
+C X
+C X
+C X
+C Z
+A Z
+C Z
+B Y
+B Z
+A X
+B Z
+C Z
+C X
+C Y
+C X
+A Z
+C Y
+C Y
+C Y
+B X
+C Y
+A Y
+C Y
+C X
+A Z
+A X
+B Z
+C Z
+C X
+A X
+B Y
+C Y
+B Z
+B Z
+B Z
+C Z
+A Z
+C Y
+C X
+C Z
+C X
+B Z
+B Z
+A X
+B Z
+A Z
+A Z
+B X
+C Y
+C Y
+A X
+B X
+B Y
+A X
+C Y
+A Z
+C Y
+C Y
+B X
+B X
+B Z
+B X
+A Y
+C Y
+C Y
+C Z
+B X
+A Y
+A X
+A X
+C Y
+C Z
+C Y
+A X
+C Y
+A X
+B Y
+B X
+A X
+C X
+C X
+A X
+A Z
+A X
+C Y
+B Y
+B Z
+B Y
+C Z
+A Z
+B Y
+A Z
+A X
+C X
+B Z
+C Z
+B X
+B Z
+A Z
+B Z
+C X
+B Z
+B X
+B Y
+C Z
+B Y
+C Y
+C X
+C X
+C Y
+A Z
+B Z
+B X
+B Z
+B X
+C Z
+A X
+A X
+A X
+B Y
+B Y
+B Z
+A X
+B Z
+A X
+A Z
+B Z
+B X
+B X
+A Z
+A X
+B Z
+C Z
+C Z
+C Z
+B Z
+C Y
+C X
+C X
+B Z
+C Z
+B Z
+C Y
+C X
+B Z
+C Z
+B Z
+B Z
+B Z
+C X
+C X
+B Y
+B Z
+B Z
+C X
+C Y
+A X
+A Z
+C Z
+C Z
+C X
+C Y
+A Z
+C Z
+B Z
+B Z
+C Y
+C X
+B X
+B Z
+A Z
+B Z
+C Y
+A X
+B X
+A X
+C Z
+C Y
+C X
+C X
+B Z
+C Z
+B Z
+C Z
+C Z
+A X
+B Z
+B Y
+B Z
+C X
+B Z
+A Z
+C X
+A X
+B Z
+C Z
+C X
+A X
+C Z
+A Y
+B Z
+C Z
+C Y
+A Z
+B X
+C Z
+A X
+A Y
+C X
+C Z
+B Z
+C X
+A Z
+B Z
+C Z
+C Z
+A Y
+C Y
+C X
+A Y
+B Z
+A Y
+C X
+C X
+C Z
+B X
+B Z
+C Y
+A X
+A Z
+B Z
+B Z
+C Z
+B Z
+A X
+A Y
+B Y
+A Z
+B Z
+B Z
+C X
+A Y
+C Y
+B Z
+C X
+B Y
+B X
+C Y
+C X
+B Z
+B Z
+B Z
+C Y
+B X
+A X
+B Z
+C X
+C Z
+C X
+A Z
+B Z
+C Y
+B Z
+A X
+A X
+B Z
+C Z
+C Z
+B X
+A Z
+C Z
+C X
+B X
+C Y
+B Z
+A X
+C X
+A Z
+C Z
+B X
+B Z
+A X
+A X
+B Z
+C Y
+C X
+A Y
+C X
+C X
+A X
+A Z
+B Y
+C Z
+C Z
+C X
+A Y
+C X
+B X
+C X
+B Y
+C Y
+B Z
+A Z
+C Z
+A Y
+A Z
+B Y
+C X
+B Z
+C X
+C Y
+C Z
+B X
+A X
+C X
+A Z
+B Z
+A Y
+C Y
+B Z
+C X
+C X
+C X
+B Y
+C Y
+B X
+C X
+A Z
+A Y
+A Z
+C X
+C Z
+C X
+C Z
+B Y
+A Z
+B Z
+C Z
+B Z
+B Z
+C X
+B Z
+A Z
+C Z
+C Z
+C X
+A Y
+B X
+B Z
+A Z
+B Z
+A X
+B Z
+C Y
+C X
+C X
+A X
+C X
+B X
+C Y
+C X
+B Z
+B Z
+C X
+B Y
+C Y
+B Y
+B X
+C X
+B X
+B Z
+B Z
+C Y
+A X
+A X
+A Z
+A Y
+C X
+B Y
+B Y
+A Y
+C Z
+B X
+B Z
+B Z
+C X
+C Y
+B Z
+C Y
+C Z
+C X
+C Z
+A Z
+B Y
+A Z
+B Z
+C Y
+C X
+C Y
+B Z
+B Z
+C X
+C X
+B Z
+A X
+A Z
+C Y
+B Y
+A Y
+B X
+B X
+A Z
+B Z
+B Z
+A Z
+A Z
+C X
+C X
+C Y
+C Z
+A Y
+C Y
+B X
+B Z
+C X
+B Z
+C Z
+B Z
+C X
+B Z
+B X
+A Y
+B Z
+C X
+C Y
+B Z
+C X
+C Y
+C X
+C X
+A X
+C X
+C Y
+A Z
+B Z
+C X
+C Y
+C Y
+A Z
+B Z
+C X
+C X
+B X
+A X
+C X
+C Y
+B Z
+C X
+C X
+C X
+C Z
+C Z
+B Z
+B Z
+C Z
+C Z
+C X
+A Z
+C Y
+C Y
+C X
+C Z
+C Y
+A Z
+A Z
+A Z
+C Y
+C Y
+B X
+B Z
+B Y
+C Z
+A Z
+C Z
+C Y
+C Z
+A Y
+A Y
+B X
+B Z
+B X
+A X
+B X
+C Z
+C X
+B Z
+C Z
+C Z
+B Z
+C X
+C X
+A X
+C Z
+C Y
+A Z
+A Z
+C Z
+A Y
+B Y
+B Z
+C Z
+A Z
+A X
+C Y
+B Z
+A X
+B Z
+B Z
+A Z
+A X
+A Z
+C Z
+C X
+B X
+C Y
+B Z
+B X
+C Y
+C Y
+B Z
+C X
+C Y
+C Z
+A Z
+B X
+C Y
+A Z
+C X
+B Y
+B Y
+C Y
+B Z
+B Z
+A X
+C X
+B Z
+C X
+B Z
+B Y
+C Y
+B X
+C Z
+B Z
+C Z
+B Z
+B Y
+C X
+C Z
+C Z
+C Y
+B X
+B Z
+C Y
+B Z
+C Z
+B Z
+B Z
+B Y
+C X
+C Y
+C X
+C X
+A Z
+C Y
+C Y
+C Z
+A X
+C X
+B Y
+B X
+A Y
+C X
+B Z
+C Y
+C Y
+B Z
+B Y
+B Z
+C Y
+C Y
+C Y
+C X
+C X
+A Z
+C Y
+C X
+C X
+A Y
+C Y
+B Z
+A X
+A X
+C X
+B Z
+C Y
+C Z
+B Z
+B Z
+C Z
+C Y
+B Z
+B X
+C Z
+B Z
+C Y
+C Z
+B X
+A Y
+A Z
+B X
+C Z
+C Y
+A X
+B Z
+A X
+B Z
+B X
+C Z
+C Y
+C X
+A Z
+C Y
+C Y
+A Z
+A X
+C Y
+A X
+A X
+A X
+B Z
+C Y
+B Z
+B Z
+B Z
+C X
+B Z
+A X
+B Y
+C Y
+C X
+C X
+C Y
+C Y
+A X
+A X
+C Y
+C Z
+B X
+C Y
+A X
+C X
+C X
+C Y
+B Z
+B Z
+A Y
+B Z
+C Y
+C Y
+C Y
+B Z
+C Z
+C X
+C X
+B Z
+C X
+B X
+B Z
+B Y
+C X
+C Y
+A X
+B Z
+B Z
+C X
+B Z
+B X
+B Z
+C Y
+B Z
+C Y
+C X
+B Z
+B Y
+A Y
+A X
+A Z
+A Z
+B Y
+A X
+A X
+C Y
+C Y
+A X
+B Z
+C X
+A Z
+B Z
+B Z
+A Y
+C X
+B Z
+A Y
+C Z
+C Y
+B X
+C Z
+C Z
+C X
+C Y
+C X
+C Y
+B Z
+B Z
+B Z
+B Z
+A X
+C Z
+B Z
+A Z
+A X
+A X
+C X
+C Y
+C X
+C X
+C Z
+C X
+A Y
+B Z
+C X
+A Z
+B Z
+C Y
+B Z
+A Z
+A X
+C X
+A Z
+C Z
+A X
+C Z
+C Y
+C Y
+A X
+C X
+B Y
+C Y
+C Y
+A Z
+B Z
+A Z
+C Z
+A Z
+C Y
+A X
+C X
+C Y
+C Y
+B Y
+B Z
+A Z
+C X
+B Y
+A X
+C Y
+A Y
+C Z
+A Z
+C Z
+A X
+B X
+A Z
+A Y
+C X
+A X
+B Z
+B Y
+C Y
+B Y
+C X
+B Z
+C X
+C Y
+B Z
+B X
+B X
+A X
+C X
+C Z
+A X
+B Z
+C X
+C X
+C Z
+B Y
+A Z
+A X
+C Y
+C Z
+B Z
+C X
+B Y
+B X
+C X
+C Z
+C Y
+B Z
+A Z
+B X
+B Z
+C X
+C Y
+C X
+C X
+B Z
+B Z
+B Z
+B Z
+B Z
+C X
+A Y
+C Z
+C Y
+C X
+C X
+A Z
+B Z
+C Y
+C Z
+B X
+B X
+C Z
+B Z
+C Z
+B X
+B Z
+C Z
+C Y
+B Z
+A X
+A X
+C Y
+C Z
+C X
+C X
+A Z
+C Z
+C Z
+B Z
+C Z
+B X
+C X
+A X
+C X
+B X
+C Z
+C X
+A X
+C Y
+B Z
+B X
+C X
+C X
+C Z
+B X
+B Z
+B Z
+A Z
+B Z
+B X
+A Z
+C Y
+B Z
+C Z
+C X
+C Z
+B Y
+C Y
+A X
+B Y
+B Z
+C Z
+B X
+C Z
+C Y
+B Z
+B Z
+B Z
+B Z
+A X
+B X
+B Z
+B Y
+B Y
+B Z
+A Z
+B Z
+B Z
+B X
+B X
+C X
+B X
+A Z
+B Z
+A Y
+C X
+B Y
+A X
+B Z
+A X
+B Z
+C Y
+C X
+B Z
+C Y
+A Y
+A X
+C Z
+B X
+A Y
+B Z
+C Y
+A X
+C Z
+C Y
+C Z
+A Z
+B Y
+A Z
+C Y
+C Y
+A Y
+A Z
+C Y
+C X
+C X
+C X
+C Z
+A Y
+C X
+C Y
+A Z
+B Y
+B Y
+B Z
+A Z
+B Z
+A Y
+B X
+A Z
+B Z
+B Y
+C Z
+A Y
+B X
+A Z
+B Y
+B Z
+B Z
+B Z
+B Z
+B Z
+A X
+C Z
+C Y
+B Z
+C X
+A X
+B Y
+A Y
+B Z
+C Z
+C X
+C Y
+B Z
+B Z
+C Z
+B Z
+B X
+A X
+A X
+C X
+B X
+A Z
+B X
+C X
+C Y
+C Y
+B Z
+A Y
+B Z
+C Z
+C Y
+B Y
+B Z
+C Y
+C Y
+A Z
+A X
+A Y
+C Z
+A Y
+C X
+B Z
+C Y
+B Z
+B Z
+A Z
+B Y
+C X
+B X
+C X
+B X
+A Z
+C X
+C X
+B Z
+B X
+C X
+A X
+C X
+B Z
+C Y
+C X
+B Z
+A Z
+B Y
+A Z
+B X
+B X
+A Z
+B X
+C Z
+B Z
+C Z
+B Z
+B X
+A Z
+C X
+C X
+C X
+C Z
+C X
+C X
+A Z
+B Z
+C Y
+A Y
+B X
+C X
+B Z
+B X
+C X
+C Z
+C Z
+B Z
+B Z
+B X
+C Y
+A X
+A X
+B Z
+B Z
+B Z
+C Z
+B Z
+C Z
+A Y
+A Y
+B Y
+C X
+C Z
+B Z
+B Z
+C X
+B Z
+B X
+A Z
+C X
+B X
+A Y
+C Y
+B Z
+C Y
+C Z
+C Y
+C Z
+B Z
+A X
+C Z
+B Z
+B Z
+A X
+C X
+C Y
+C Y
+C Y
+C Y
+B Z
+B Z
+B Z
+C Z
+A X
+B Z
+C Z
+B Z
+B X
+C Z
+B Z
+C X
+C Z
+C X
+B X
+B Z
+C X
+A Z
+B Z
+B Y
+C Y
+B Z
+C Z
+C Z
+C Z
+C Y
+B Z
+B Z
+B X
+B Z
+C Z
+C Y
+B X
+B Z
+C X
+C Y
+B X
+C Y
+C X
+B Z
+A Z
+C X
+A X
+C X
+A X
+A X
+B Z
+B Z
+A Y
+B Z
+A Z
+C X
+A Z
+B Z
+B Z
+A Z
+A X
+B Z
+B X
+C X
+B Z
+C X
+B X
+A X
+C Y
+C Z
+C Z
+B Z
+A Z
+A Z
+B Z
+C X
+B Y
+C X
+C Y
+A Z
+C X
+C X
+B Z
+C Y
+C Y
+C X
+B X
+C Z
+A X
+A Y
+B X
+B Z
+B Y
+B X
+C Y
+C Z
+B Z
+B X
+A X
+C X
+A X
+A Z
+B Z
+B Y
+B X
+B Y
+C Z
+C X
+C X
+C Y
+A Y
+C Z
+C Z
+C Z
+B X
+C Y
+C X
+A Z
+B X
+C Y
+C Y
+A Z
+C Z
+C X
+C X
+A X
+C X
+B Z
+B X
+A Z
+C X
+B Z
+B Z
+B Z
+B Z
+A X
+A Z
+B X
+B Z
+B X
+B Y
+B X
+B Z
+A Y
+C X
+C Z
+A Z
+C X
+C Y
+A X
+A Z
+B X
+B Y
+C Y
+C X
+A X
+C Z
+C X
+B Z
+A X
+B Z
+A Y
+A X
+C Y
+C X
+C Y
+A X
+C Y
+C Y
+C Y
+C Z
+A X
+A X
+B Z
+C X
+B Z
+B Z
+B Z
+C X
+C X
+B Z
+B X
+A X
+A Z
+A Y
+C X
+A X
+A Z
+B Z
+B Z
+C Y
+A X
+B Z
+C Y
+A X
+A Z
+C Y
+A Z
+C Z
+C Z
+C Y
+C Z
+A X
+C Y
+A Y
+A X
+A X
+B X
+A Z
+C X
+B X
+C Y
+C X
+B Z
+B Z
+B Z
+B Y
+B Y
+C Y
+A X
+B Z
+A Z
+C X
+B X
+A Z
+C X
+C Y
+C Y
+B Z
+B Z
+A Z
+B Y
+B Z
+B Z
+C X
+B Y
+B Z
+B Z
+C X
+C Y
+C Z
+A Z
+C Y
+A X
+C X
+B Y
+B Z
+A Y
+A X
+B Z
+B X
+C X
+A Z
+C X
+C Y
+B X
+C Y
+C X
+A Y
+B Z
+B Z
+C Z
+B Z
+C Y
+C X
+C X
+B Y
+C Z
+C X
+C Y
+A Z
+C Y
+A Z
+A Y
+A X
+C Y
+B Z
+A Z
+C X
+C X
+C X
+C X
+C X
+B Z
+A Y
+A X
+A Z
+C Y
+A Y
+B Z
+B Z
+C X
+A X
+A X
+C X
+C X
+C X
+B X
+A X
+B Z
+B Z
+B X
+B Z
+A Y
+C Z
+C Y
+B X
+B X
+B Z
+A X
+A X
+B Z
+B Z
+C X
+A X
+C X
+A Z
+A X
+C Z
+A Z
+C Z
+B Z
+A X
+B Y
+C Z
+A Z
+A Z
+C X
+A Z
+B X
+B Y
+B Z
+C X
+B X
+C X
+B Z
+B X
+C Y
+C X
+C X
+C Y
+B Z
+A Z
+B X
+C X
+C Y
+A Y
+C X
+A X
+B Z
+C Y
+C Y
+C Y
+B Z
+C Y
+B Z
+C X
+B Z
+B Z
+A Y
+C X
+B X
+C Z
+B Z
+B Z
+A X
+B Y
+A X
+B Z
+C Z
+B Z
+C Z
+A Z
+C X
+B Z
+C X
+B Z
+C X
+B Z
+B Z
+C X
+B X
+B Z
+A Z
+C X
+C Y
+B X
+C Y
+C Y
+C X
+B Z
+C X
+C X
+A X
+B Z
+C Y
+C Y
+B Z
+B Z
+C Z
+C X
+C Y
+B Z
+A X
+C Y
+C Z
+B Z
+B X
+C Y
+A Z
+C Z
+C X
+C Y
+C X
+C Z
+A X
+B X
+C Y
+C X
+C Y
+C X
+C X
+C Z
+C X
+C Z
+B Z
+C X
+C X
+A Z
+C Z
+C X
+C X
+B Z
+C Y
+B Z
+C Y
+C X
+A X
+C Z
+C Z
+A Z
+B X
+C Y
+A Z
+B Y
+C Y
+B X
+C Y
+B Z
+B Y
+B Z
+C Z
+B Z
+C X
+C Z
+A Y
+B Z
+B Z
+B Y
+B X
+B Z
+C Z
+C X
+C Y
+A Z
+C X
+C X
+C Z
+B X
+B Z
+C X
+A Z
+A Z
+B Y
+C X
+C X
+A X
+C X
+C X
+A Z
+B Z
+C X
+B Z
+C X
+C Y
+B Z
+C X
+A X
+B Z
+C X
+C Y
+A X
+C Z
+B Z
+B Z
+C Y
+C X
+A Y
+C Y
+C X
+C Y
+A Z
+B Z
+A Y
+B Y
+C Y
+A X
+A X
+C X
+B Z
+A Z
+A X
+B Y
+B X
+C X
+B X
+C X
+C Z
+B Y
+C Y
+C Z
+B Z
+B Y
+A Z
+B X
+A Z
+C X
+A X
+A X
+B Z
+B Z
+A Y
+C X
+B Y
+C Z
+B Z
+C X
+A X
+C X
+C Z
+A X
+C X
+C Z
+C Z
+C X
+A X
+A X
+C Z
+A Y
+C Z
+B Y
+C X
+C Z
+A X
+C Z
+B Z
+C Z
+A Z
+B Z
+C Z
+A Y
+A Z
+B Y
+B X
+A Y
+C X
+C Y
+B X
+B Z
+C Z
+B Z
+C Z
+C Z
+A X
+A Y
+C X
+B Z
+A X
+A Y
+C Z
+C Y
+C Y
+B Z
+C X
+B Z
+B Z
+A Y
+B Z
+B Z
+B Z
+B Z
+B Z
+B Z
+B Z
+C X
+B X
+B Z
+A X
+A X
+C X
+A Y
+C X
+C X
+C Y
+B Z
+B X
+C Y
+A Y
+A Y
+C X
+A Z
+B Z
+C X
+C Z
+C X
+A Z
+B Z
+B Z
+B X
+B Z
+C Y
+A Y
+C X
+C X
+A Z
+B X
+B Z
+B Z
+B X
+C Y
+C Y
+A X
+A Z
+B Z
+B Z
+C X
+B Y
+A X
+A X
+C X
+C Y
+C Y
+B Y
+C X
+C X
+C X
+A X
+B Z
+A Z
+B X
+B Z
+B Z
+A Z
+C X
+A X
+B Z
+B Z
+C Y
+C Y
+B Z
+C X
+B X
+C X
+B Y
+C Y
+C X
+C X
+B Z
+A X
+A Z
+B Z
+A X
+C X
+A Z
+C X
+A Y
+C Y
+C Y
+A X
+C X
+C X
+C Z
+B X
+B Z
+A Y
+B Z
+A Y
+A X
+C X
+B Z
+C X
+C Z
+C X
+B Z
+B Z
+B Z
+C Z
+B Z
+A Z
+A Z
+C Y
+C Z
+B X
+A Y
+A Z
+A Z
+B X
+A Z
+C Y
+B Z
+C X
+C Y
+B Z
+A Z
+C X
+B Z
+C X
+A Y
+B X
+C Z
+B Z
+C X
+A Z
+B X
+B Z
+B Z
+A Y
+B X
+A Z
+C X
+B Y
+B Z
+C X
+C Z
+B X
+B Z
+C X
+A X
+A Z
+A Z
+B Z
+B Z
+C X
+B Z
+C Z
+B Z
+C X
+C Y
+C Z
+B Z
+B Z
+C X
+B Y
+A X
+B X
+A X
+B Z
+B Z
+C X
+A Z
+A Z
+A Z
+A X
+C X
+B Z
+A Z
+C Y
+C Z
+A Z
+C X
+A Y
+C Y
+C Z
+C Z
+B Z
+A X
+A Y
+C X
+A Y
+C X
+A X
+B Z
+C Y
+A X
+B Z
+A X
+A Y
+C X
+A X
+C Y
+B X
+B Z
+A Z
+B Z
+A X
+C Y
+A Y
+A Z
+A Z
+C Z
+B Z
+B Y
+C Y
+C X
+B Z
+A X
+A X
+C X
+C Y
+C X
+A X
+C Z
+C X
+B X
+C X
+A X
+C X
+B Z
+A Z
+A Z
+C Z
+C Z
+A Z
+A X
+C Y
+C X
+B Z
+C Y
+C X
+A Z
+C Z
+A Z
+A Z
+C Z
+B Z
+C X
+A Z
+B X
+C Y
+A Z
+A X
+A Z
+A Z
+A Z
+A Z
+C X
+C Y
+B X
+B Z
+A X
+C Z
+C Z
+A Z
+C X
+C Z
+B Z
+A Z
+C Z
+C Y
+A X
+B Z
+A Y
+A Z
+A Z
+C Z
+B Z
+C Y
+C X
+A Y
+A Y
+B X
+C Y
+C X
+B Z
+C Z
+C X
+B Y
+C X
+C X
+C Z
+C Z
+B Z
+C Z
+A Z
+C Y
+B Z
+C Z
+C Z
+A Z
+B Z
+C Y
+C Z
+A X
+B Z
+B Z
+A Y
+B Z
+C X
+A Z
+B X
+B Z
+C Z
+B X
+B Z
+B Z
+A X
+A Y
+A Z
+B Z
+B Z
+A Z
+A Y
+B X
+C Y
+C Y
+C Y
+A Y
+B Z
+B X
+A Z
+A Z
+C Y
+C X
+A Z
+A Z
+C Y
+A Z
+C X
+C Z
+B X
+B Z
+A X
+C Z
+A Z
+C Y
+B Z
+A Z
+C X
+C X
+B Z
+C Z
+B X
+B X
+A Z
+B X
+B X
+C Y
+A X
+C Y
+C X
+C Y
+C X
+C Z
+B X
+B X
+C X
+A Z
+B X
+B Z
+C Z
+C Y
+C Y
+C X
+B Z
+C Y
+B Z
+C Y
+C Y
+B Z
+A Z
+A X
+C Z
+A Z
+A X
+C Y
+B X
+C Y
+A Y
+B Z
+A Z
+A X
+C X
+C X
+A Y
+C Z
+C X
+A X
+C Y
+B Z
+B X
+A Y
+B Z
+C X
+C X
+B Z
+A X
+C X
+A Z
+C Y
+A Z
+A Z
+A X
+C Z
+B X
+A Y
+C Z
+A Y
+C Y
+A X
+A Z
+A Z
+A X
+B Z
diff --git a/2022/day02/input2b.txt b/2022/day02/input2b.txt
new file mode 100644
index 0000000..bc98176
--- /dev/null
+++ b/2022/day02/input2b.txt
@@ -0,0 +1,2500 @@
+2
+6+1
+3
+1
+6+3
+6+1
+6+1
+6+3
+6+1
+6+3
+6+1
+6+1
+3+1
+2
+3+1
+2
+3+2
+6+1
+2
+6+3
+3+1
+6+1
+1
+1
+6+3
+3
+3+3
+6+3
+6+3
+6+1
+6+3
+6+1
+6+3
+6+3
+6+1
+2
+6+3
+2
+3
+3+2
+6+1
+2
+3
+6+3
+6+3
+6+1
+2
+1
+6+3
+3+1
+1
+3+1
+6+3
+2
+2
+3+1
+6+1
+6+1
+1
+3
+2
+6+1
+6+3
+3
+2
+1
+2
+6+3
+6+1
+1
+6+3
+6+3
+3+3
+3+2
+2
+3+2
+3
+3+1
+6+2
+6+2
+2
+6+1
+6+1
+6+3
+1
+6+1
+6+3
+3
+2
+3+3
+3+3
+1
+6+3
+2
+6+2
+3+1
+6+1
+6+3
+3+2
+1
+6+3
+6+3
+3+1
+2
+2
+6+1
+3+1
+6+3
+3
+3+1
+6+3
+6+1
+3+3
+3+3
+2
+3+3
+6+3
+3+3
+2
+6+3
+3+1
+2
+1
+2
+6+3
+2
+3
+3+1
+6+3
+3+1
+6+2
+6+3
+6+1
+2
+2
+6+3
+6+3
+3
+6+1
+3
+3+1
+3
+6+3
+1
+3
+6+3
+3+2
+6+1
+2
+6+1
+6+1
+3
+3
+2
+6+3
+2
+1
+2
+2
+6+3
+6+1
+6+3
+3
+2
+2
+6+3
+3+1
+6+1
+6+3
+6+1
+3+2
+6+2
+6+1
+1
+2
+6+3
+3+3
+6+1
+3+3
+6+3
+3+2
+3+1
+3
+6+3
+3
+6+1
+3+1
+6+1
+2
+3+3
+3
+6+3
+1
+1
+6+2
+3+2
+2
+3+2
+6+3
+3+1
+6+2
+3
+1
+6+3
+3+3
+3+3
+6+3
+2
+2
+6+1
+6+1
+6+3
+6+3
+2
+3
+6+1
+2
+6+2
+3+1
+6+3
+3+3
+6+1
+6+1
+6+1
+3
+2
+6+3
+6+3
+6+1
+2
+3+3
+6+3
+2
+3+1
+3
+3
+2
+3+1
+6+3
+2
+6+1
+6+1
+6+3
+3+3
+6+3
+6+3
+1
+3
+2
+2
+6+1
+6+3
+3+2
+6+3
+6+3
+2
+3+1
+6+2
+2
+3+1
+2
+3+3
+6+2
+3+1
+6+3
+3+1
+3+1
+6+2
+1
+6+3
+3+3
+6+3
+6+3
+1
+1
+6+1
+3+1
+2
+6+1
+2
+3+1
+6+3
+3+1
+6+2
+6+3
+2
+6+3
+6+3
+2
+6+2
+3
+6+1
+2
+2
+6+1
+3+3
+2
+6+3
+3+3
+1
+3+3
+6+3
+3
+1
+6+1
+6+1
+1
+6+3
+6+1
+6+1
+1
+3
+3+1
+3
+6+3
+6+3
+6+3
+3+1
+2
+2
+6+3
+3+1
+3+1
+3+2
+2
+1
+6+1
+2
+6+1
+2
+3+1
+1
+3
+6+2
+3+2
+3
+1
+6+3
+6+3
+6+2
+1
+2
+1
+6+3
+3+2
+3+1
+3
+6+1
+6+1
+3+3
+3+3
+1
+6+1
+1
+6+1
+1
+6+3
+6+3
+1
+3+2
+2
+3
+3+2
+3
+2
+6+3
+3+3
+3+3
+3+2
+1
+1
+6+1
+6+2
+3
+3+2
+3
+3
+3+1
+3
+3+2
+3+1
+3+1
+3+3
+6+1
+6+1
+6+1
+3+3
+3
+3+3
+3+2
+6+3
+3+1
+6+3
+3+3
+6+1
+2
+6+1
+3
+2
+2
+2
+1
+2
+6+2
+2
+6+1
+3
+3+1
+6+3
+3+3
+6+1
+3+1
+3+2
+2
+6+3
+6+3
+6+3
+3+3
+3
+2
+6+1
+3+3
+6+1
+6+3
+6+3
+3+1
+6+3
+3
+3
+1
+2
+2
+3+1
+1
+3+2
+3+1
+2
+3
+2
+2
+1
+1
+6+3
+1
+6+2
+2
+2
+3+3
+1
+6+2
+3+1
+3+1
+2
+3+3
+2
+3+1
+2
+3+1
+3+2
+1
+3+1
+6+1
+6+1
+3+1
+3
+3+1
+2
+3+2
+6+3
+3+2
+3+3
+3
+3+2
+3
+3+1
+6+1
+6+3
+3+3
+1
+6+3
+3
+6+3
+6+1
+6+3
+1
+3+2
+3+3
+3+2
+2
+6+1
+6+1
+2
+3
+6+3
+1
+6+3
+1
+3+3
+3+1
+3+1
+3+1
+3+2
+3+2
+6+3
+3+1
+6+3
+3+1
+3
+6+3
+1
+1
+3
+3+1
+6+3
+3+3
+3+3
+3+3
+6+3
+2
+6+1
+6+1
+6+3
+3+3
+6+3
+2
+6+1
+6+3
+3+3
+6+3
+6+3
+6+3
+6+1
+6+1
+3+2
+6+3
+6+3
+6+1
+2
+3+1
+3
+3+3
+3+3
+6+1
+2
+3
+3+3
+6+3
+6+3
+2
+6+1
+1
+6+3
+3
+6+3
+2
+3+1
+1
+3+1
+3+3
+2
+6+1
+6+1
+6+3
+3+3
+6+3
+3+3
+3+3
+3+1
+6+3
+3+2
+6+3
+6+1
+6+3
+3
+6+1
+3+1
+6+3
+3+3
+6+1
+3+1
+3+3
+6+2
+6+3
+3+3
+2
+3
+1
+3+3
+3+1
+6+2
+6+1
+3+3
+6+3
+6+1
+3
+6+3
+3+3
+3+3
+6+2
+2
+6+1
+6+2
+6+3
+6+2
+6+1
+6+1
+3+3
+1
+6+3
+2
+3+1
+3
+6+3
+6+3
+3+3
+6+3
+3+1
+6+2
+3+2
+3
+6+3
+6+3
+6+1
+6+2
+2
+6+3
+6+1
+3+2
+1
+2
+6+1
+6+3
+6+3
+6+3
+2
+1
+3+1
+6+3
+6+1
+3+3
+6+1
+3
+6+3
+2
+6+3
+3+1
+3+1
+6+3
+3+3
+3+3
+1
+3
+3+3
+6+1
+1
+2
+6+3
+3+1
+6+1
+3
+3+3
+1
+6+3
+3+1
+3+1
+6+3
+2
+6+1
+6+2
+6+1
+6+1
+3+1
+3
+3+2
+3+3
+3+3
+6+1
+6+2
+6+1
+1
+6+1
+3+2
+2
+6+3
+3
+3+3
+6+2
+3
+3+2
+6+1
+6+3
+6+1
+2
+3+3
+1
+3+1
+6+1
+3
+6+3
+6+2
+2
+6+3
+6+1
+6+1
+6+1
+3+2
+2
+1
+6+1
+3
+6+2
+3
+6+1
+3+3
+6+1
+3+3
+3+2
+3
+6+3
+3+3
+6+3
+6+3
+6+1
+6+3
+3
+3+3
+3+3
+6+1
+6+2
+1
+6+3
+3
+6+3
+3+1
+6+3
+2
+6+1
+6+1
+3+1
+6+1
+1
+2
+6+1
+6+3
+6+3
+6+1
+3+2
+2
+3+2
+1
+6+1
+1
+6+3
+6+3
+2
+3+1
+3+1
+3
+6+2
+6+1
+3+2
+3+2
+6+2
+3+3
+1
+6+3
+6+3
+6+1
+2
+6+3
+2
+3+3
+6+1
+3+3
+3
+3+2
+3
+6+3
+2
+6+1
+2
+6+3
+6+3
+6+1
+6+1
+6+3
+3+1
+3
+2
+3+2
+6+2
+1
+1
+3
+6+3
+6+3
+3
+3
+6+1
+6+1
+2
+3+3
+6+2
+2
+1
+6+3
+6+1
+6+3
+3+3
+6+3
+6+1
+6+3
+1
+6+2
+6+3
+6+1
+2
+6+3
+6+1
+2
+6+1
+6+1
+3+1
+6+1
+2
+3
+6+3
+6+1
+2
+2
+3
+6+3
+6+1
+6+1
+1
+3+1
+6+1
+2
+6+3
+6+1
+6+1
+6+1
+3+3
+3+3
+6+3
+6+3
+3+3
+3+3
+6+1
+3
+2
+2
+6+1
+3+3
+2
+3
+3
+3
+2
+2
+1
+6+3
+3+2
+3+3
+3
+3+3
+2
+3+3
+6+2
+6+2
+1
+6+3
+1
+3+1
+1
+3+3
+6+1
+6+3
+3+3
+3+3
+6+3
+6+1
+6+1
+3+1
+3+3
+2
+3
+3
+3+3
+6+2
+3+2
+6+3
+3+3
+3
+3+1
+2
+6+3
+3+1
+6+3
+6+3
+3
+3+1
+3
+3+3
+6+1
+1
+2
+6+3
+1
+2
+2
+6+3
+6+1
+2
+3+3
+3
+1
+2
+3
+6+1
+3+2
+3+2
+2
+6+3
+6+3
+3+1
+6+1
+6+3
+6+1
+6+3
+3+2
+2
+1
+3+3
+6+3
+3+3
+6+3
+3+2
+6+1
+3+3
+3+3
+2
+1
+6+3
+2
+6+3
+3+3
+6+3
+6+3
+3+2
+6+1
+2
+6+1
+6+1
+3
+2
+2
+3+3
+3+1
+6+1
+3+2
+1
+6+2
+6+1
+6+3
+2
+2
+6+3
+3+2
+6+3
+2
+2
+2
+6+1
+6+1
+3
+2
+6+1
+6+1
+6+2
+2
+6+3
+3+1
+3+1
+6+1
+6+3
+2
+3+3
+6+3
+6+3
+3+3
+2
+6+3
+1
+3+3
+6+3
+2
+3+3
+1
+6+2
+3
+1
+3+3
+2
+3+1
+6+3
+3+1
+6+3
+1
+3+3
+2
+6+1
+3
+2
+2
+3
+3+1
+2
+3+1
+3+1
+3+1
+6+3
+2
+6+3
+6+3
+6+3
+6+1
+6+3
+3+1
+3+2
+2
+6+1
+6+1
+2
+2
+3+1
+3+1
+2
+3+3
+1
+2
+3+1
+6+1
+6+1
+2
+6+3
+6+3
+6+2
+6+3
+2
+2
+2
+6+3
+3+3
+6+1
+6+1
+6+3
+6+1
+1
+6+3
+3+2
+6+1
+2
+3+1
+6+3
+6+3
+6+1
+6+3
+1
+6+3
+2
+6+3
+2
+6+1
+6+3
+3+2
+6+2
+3+1
+3
+3
+3+2
+3+1
+3+1
+2
+2
+3+1
+6+3
+6+1
+3
+6+3
+6+3
+6+2
+6+1
+6+3
+6+2
+3+3
+2
+1
+3+3
+3+3
+6+1
+2
+6+1
+2
+6+3
+6+3
+6+3
+6+3
+3+1
+3+3
+6+3
+3
+3+1
+3+1
+6+1
+2
+6+1
+6+1
+3+3
+6+1
+6+2
+6+3
+6+1
+3
+6+3
+2
+6+3
+3
+3+1
+6+1
+3
+3+3
+3+1
+3+3
+2
+2
+3+1
+6+1
+3+2
+2
+2
+3
+6+3
+3
+3+3
+3
+2
+3+1
+6+1
+2
+2
+3+2
+6+3
+3
+6+1
+3+2
+3+1
+2
+6+2
+3+3
+3
+3+3
+3+1
+1
+3
+6+2
+6+1
+3+1
+6+3
+3+2
+2
+3+2
+6+1
+6+3
+6+1
+2
+6+3
+1
+1
+3+1
+6+1
+3+3
+3+1
+6+3
+6+1
+6+1
+3+3
+3+2
+3
+3+1
+2
+3+3
+6+3
+6+1
+3+2
+1
+6+1
+3+3
+2
+6+3
+3
+1
+6+3
+6+1
+2
+6+1
+6+1
+6+3
+6+3
+6+3
+6+3
+6+3
+6+1
+6+2
+3+3
+2
+6+1
+6+1
+3
+6+3
+2
+3+3
+1
+1
+3+3
+6+3
+3+3
+1
+6+3
+3+3
+2
+6+3
+3+1
+3+1
+2
+3+3
+6+1
+6+1
+3
+3+3
+3+3
+6+3
+3+3
+1
+6+1
+3+1
+6+1
+1
+3+3
+6+1
+3+1
+2
+6+3
+1
+6+1
+6+1
+3+3
+1
+6+3
+6+3
+3
+6+3
+1
+3
+2
+6+3
+3+3
+6+1
+3+3
+3+2
+2
+3+1
+3+2
+6+3
+3+3
+1
+3+3
+2
+6+3
+6+3
+6+3
+6+3
+3+1
+1
+6+3
+3+2
+3+2
+6+3
+3
+6+3
+6+3
+1
+1
+6+1
+1
+3
+6+3
+6+2
+6+1
+3+2
+3+1
+6+3
+3+1
+6+3
+2
+6+1
+6+3
+2
+6+2
+3+1
+3+3
+1
+6+2
+6+3
+2
+3+1
+3+3
+2
+3+3
+3
+3+2
+3
+2
+2
+6+2
+3
+2
+6+1
+6+1
+6+1
+3+3
+6+2
+6+1
+2
+3
+3+2
+3+2
+6+3
+3
+6+3
+6+2
+1
+3
+6+3
+3+2
+3+3
+6+2
+1
+3
+3+2
+6+3
+6+3
+6+3
+6+3
+6+3
+3+1
+3+3
+2
+6+3
+6+1
+3+1
+3+2
+6+2
+6+3
+3+3
+6+1
+2
+6+3
+6+3
+3+3
+6+3
+1
+3+1
+3+1
+6+1
+1
+3
+1
+6+1
+2
+2
+6+3
+6+2
+6+3
+3+3
+2
+3+2
+6+3
+2
+2
+3
+3+1
+6+2
+3+3
+6+2
+6+1
+6+3
+2
+6+3
+6+3
+3
+3+2
+6+1
+1
+6+1
+1
+3
+6+1
+6+1
+6+3
+1
+6+1
+3+1
+6+1
+6+3
+2
+6+1
+6+3
+3
+3+2
+3
+1
+1
+3
+1
+3+3
+6+3
+3+3
+6+3
+1
+3
+6+1
+6+1
+6+1
+3+3
+6+1
+6+1
+3
+6+3
+2
+6+2
+1
+6+1
+6+3
+1
+6+1
+3+3
+3+3
+6+3
+6+3
+1
+2
+3+1
+3+1
+6+3
+6+3
+6+3
+3+3
+6+3
+3+3
+6+2
+6+2
+3+2
+6+1
+3+3
+6+3
+6+3
+6+1
+6+3
+1
+3
+6+1
+1
+6+2
+2
+6+3
+2
+3+3
+2
+3+3
+6+3
+3+1
+3+3
+6+3
+6+3
+3+1
+6+1
+2
+2
+2
+2
+6+3
+6+3
+6+3
+3+3
+3+1
+6+3
+3+3
+6+3
+1
+3+3
+6+3
+6+1
+3+3
+6+1
+1
+6+3
+6+1
+3
+6+3
+3+2
+2
+6+3
+3+3
+3+3
+3+3
+2
+6+3
+6+3
+1
+6+3
+3+3
+2
+1
+6+3
+6+1
+2
+1
+2
+6+1
+6+3
+3
+6+1
+3+1
+6+1
+3+1
+3+1
+6+3
+6+3
+6+2
+6+3
+3
+6+1
+3
+6+3
+6+3
+3
+3+1
+6+3
+1
+6+1
+6+3
+6+1
+1
+3+1
+2
+3+3
+3+3
+6+3
+3
+3
+6+3
+6+1
+3+2
+6+1
+2
+3
+6+1
+6+1
+6+3
+2
+2
+6+1
+1
+3+3
+3+1
+6+2
+1
+6+3
+3+2
+1
+2
+3+3
+6+3
+1
+3+1
+6+1
+3+1
+3
+6+3
+3+2
+1
+3+2
+3+3
+6+1
+6+1
+2
+6+2
+3+3
+3+3
+3+3
+1
+2
+6+1
+3
+1
+2
+2
+3
+3+3
+6+1
+6+1
+3+1
+6+1
+6+3
+1
+3
+6+1
+6+3
+6+3
+6+3
+6+3
+3+1
+3
+1
+6+3
+1
+3+2
+1
+6+3
+6+2
+6+1
+3+3
+3
+6+1
+2
+3+1
+3
+1
+3+2
+2
+6+1
+3+1
+3+3
+6+1
+6+3
+3+1
+6+3
+6+2
+3+1
+2
+6+1
+2
+3+1
+2
+2
+2
+3+3
+3+1
+3+1
+6+3
+6+1
+6+3
+6+3
+6+3
+6+1
+6+1
+6+3
+1
+3+1
+3
+6+2
+6+1
+3+1
+3
+6+3
+6+3
+2
+3+1
+6+3
+2
+3+1
+3
+2
+3
+3+3
+3+3
+2
+3+3
+3+1
+2
+6+2
+3+1
+3+1
+1
+3
+6+1
+1
+2
+6+1
+6+3
+6+3
+6+3
+3+2
+3+2
+2
+3+1
+6+3
+3
+6+1
+1
+3
+6+1
+2
+2
+6+3
+6+3
+3
+3+2
+6+3
+6+3
+6+1
+3+2
+6+3
+6+3
+6+1
+2
+3+3
+3
+2
+3+1
+6+1
+3+2
+6+3
+6+2
+3+1
+6+3
+1
+6+1
+3
+6+1
+2
+1
+2
+6+1
+6+2
+6+3
+6+3
+3+3
+6+3
+2
+6+1
+6+1
+3+2
+3+3
+6+1
+2
+3
+2
+3
+6+2
+3+1
+2
+6+3
+3
+6+1
+6+1
+6+1
+6+1
+6+1
+6+3
+6+2
+3+1
+3
+2
+6+2
+6+3
+6+3
+6+1
+3+1
+3+1
+6+1
+6+1
+6+1
+1
+3+1
+6+3
+6+3
+1
+6+3
+6+2
+3+3
+2
+1
+1
+6+3
+3+1
+3+1
+6+3
+6+3
+6+1
+3+1
+6+1
+3
+3+1
+3+3
+3
+3+3
+6+3
+3+1
+3+2
+3+3
+3
+3
+6+1
+3
+1
+3+2
+6+3
+6+1
+1
+6+1
+6+3
+1
+2
+6+1
+6+1
+2
+6+3
+3
+1
+6+1
+2
+6+2
+6+1
+3+1
+6+3
+2
+2
+2
+6+3
+2
+6+3
+6+1
+6+3
+6+3
+6+2
+6+1
+1
+3+3
+6+3
+6+3
+3+1
+3+2
+3+1
+6+3
+3+3
+6+3
+3+3
+3
+6+1
+6+3
+6+1
+6+3
+6+1
+6+3
+6+3
+6+1
+1
+6+3
+3
+6+1
+2
+1
+2
+2
+6+1
+6+3
+6+1
+6+1
+3+1
+6+3
+2
+2
+6+3
+6+3
+3+3
+6+1
+2
+6+3
+3+1
+2
+3+3
+6+3
+1
+2
+3
+3+3
+6+1
+2
+6+1
+3+3
+3+1
+1
+2
+6+1
+2
+6+1
+6+1
+3+3
+6+1
+3+3
+6+3
+6+1
+6+1
+3
+3+3
+6+1
+6+1
+6+3
+2
+6+3
+2
+6+1
+3+1
+3+3
+3+3
+3
+1
+2
+3
+3+2
+2
+1
+2
+6+3
+3+2
+6+3
+3+3
+6+3
+6+1
+3+3
+6+2
+6+3
+6+3
+3+2
+1
+6+3
+3+3
+6+1
+2
+3
+6+1
+6+1
+3+3
+1
+6+3
+6+1
+3
+3
+3+2
+6+1
+6+1
+3+1
+6+1
+6+1
+3
+6+3
+6+1
+6+3
+6+1
+2
+6+3
+6+1
+3+1
+6+3
+6+1
+2
+3+1
+3+3
+6+3
+6+3
+2
+6+1
+6+2
+2
+6+1
+2
+3
+6+3
+6+2
+3+2
+2
+3+1
+3+1
+6+1
+6+3
+3
+3+1
+3+2
+1
+6+1
+1
+6+1
+3+3
+3+2
+2
+3+3
+6+3
+3+2
+3
+1
+3
+6+1
+3+1
+3+1
+6+3
+6+3
+6+2
+6+1
+3+2
+3+3
+6+3
+6+1
+3+1
+6+1
+3+3
+3+1
+6+1
+3+3
+3+3
+6+1
+3+1
+3+1
+3+3
+6+2
+3+3
+3+2
+6+1
+3+3
+3+1
+3+3
+6+3
+3+3
+3
+6+3
+3+3
+6+2
+3
+3+2
+1
+6+2
+6+1
+2
+1
+6+3
+3+3
+6+3
+3+3
+3+3
+3+1
+6+2
+6+1
+6+3
+3+1
+6+2
+3+3
+2
+2
+6+3
+6+1
+6+3
+6+3
+6+2
+6+3
+6+3
+6+3
+6+3
+6+3
+6+3
+6+3
+6+1
+1
+6+3
+3+1
+3+1
+6+1
+6+2
+6+1
+6+1
+2
+6+3
+1
+2
+6+2
+6+2
+6+1
+3
+6+3
+6+1
+3+3
+6+1
+3
+6+3
+6+3
+1
+6+3
+2
+6+2
+6+1
+6+1
+3
+1
+6+3
+6+3
+1
+2
+2
+3+1
+3
+6+3
+6+3
+6+1
+3+2
+3+1
+3+1
+6+1
+2
+2
+3+2
+6+1
+6+1
+6+1
+3+1
+6+3
+3
+1
+6+3
+6+3
+3
+6+1
+3+1
+6+3
+6+3
+2
+2
+6+3
+6+1
+1
+6+1
+3+2
+2
+6+1
+6+1
+6+3
+3+1
+3
+6+3
+3+1
+6+1
+3
+6+1
+6+2
+2
+2
+3+1
+6+1
+6+1
+3+3
+1
+6+3
+6+2
+6+3
+6+2
+3+1
+6+1
+6+3
+6+1
+3+3
+6+1
+6+3
+6+3
+6+3
+3+3
+6+3
+3
+3
+2
+3+3
+1
+6+2
+3
+3
+1
+3
+2
+6+3
+6+1
+2
+6+3
+3
+6+1
+6+3
+6+1
+6+2
+1
+3+3
+6+3
+6+1
+3
+1
+6+3
+6+3
+6+2
+1
+3
+6+1
+3+2
+6+3
+6+1
+3+3
+1
+6+3
+6+1
+3+1
+3
+3
+6+3
+6+3
+6+1
+6+3
+3+3
+6+3
+6+1
+2
+3+3
+6+3
+6+3
+6+1
+3+2
+3+1
+1
+3+1
+6+3
+6+3
+6+1
+3
+3
+3
+3+1
+6+1
+6+3
+3
+2
+3+3
+3
+6+1
+6+2
+2
+3+3
+3+3
+6+3
+3+1
+6+2
+6+1
+6+2
+6+1
+3+1
+6+3
+2
+3+1
+6+3
+3+1
+6+2
+6+1
+3+1
+2
+1
+6+3
+3
+6+3
+3+1
+2
+6+2
+3
+3
+3+3
+6+3
+3+2
+2
+6+1
+6+3
+3+1
+3+1
+6+1
+2
+6+1
+3+1
+3+3
+6+1
+1
+6+1
+3+1
+6+1
+6+3
+3
+3
+3+3
+3+3
+3
+3+1
+2
+6+1
+6+3
+2
+6+1
+3
+3+3
+3
+3
+3+3
+6+3
+6+1
+3
+1
+2
+3
+3+1
+3
+3
+3
+3
+6+1
+2
+1
+6+3
+3+1
+3+3
+3+3
+3
+6+1
+3+3
+6+3
+3
+3+3
+2
+3+1
+6+3
+6+2
+3
+3
+3+3
+6+3
+2
+6+1
+6+2
+6+2
+1
+2
+6+1
+6+3
+3+3
+6+1
+3+2
+6+1
+6+1
+3+3
+3+3
+6+3
+3+3
+3
+2
+6+3
+3+3
+3+3
+3
+6+3
+2
+3+3
+3+1
+6+3
+6+3
+6+2
+6+3
+6+1
+3
+1
+6+3
+3+3
+1
+6+3
+6+3
+3+1
+6+2
+3
+6+3
+6+3
+3
+6+2
+1
+2
+2
+2
+6+2
+6+3
+1
+3
+3
+2
+6+1
+3
+3
+2
+3
+6+1
+3+3
+1
+6+3
+3+1
+3+3
+3
+2
+6+3
+3
+6+1
+6+1
+6+3
+3+3
+1
+1
+3
+1
+1
+2
+3+1
+2
+6+1
+2
+6+1
+3+3
+1
+1
+6+1
+3
+1
+6+3
+3+3
+2
+2
+6+1
+6+3
+2
+6+3
+2
+2
+6+3
+3
+3+1
+3+3
+3
+3+1
+2
+1
+2
+6+2
+6+3
+3
+3+1
+6+1
+6+1
+6+2
+3+3
+6+1
+3+1
+2
+6+3
+1
+6+2
+6+3
+6+1
+6+1
+6+3
+3+1
+6+1
+3
+2
+3
+3
+3+1
+3+3
+1
+6+2
+3+3
+6+2
+2
+3+1
+3
+3
+3+1
+6+3
diff --git a/2022/day02/input3.txt b/2022/day02/input3.txt
new file mode 100644
index 0000000..e99c661
--- /dev/null
+++ b/2022/day02/input3.txt
@@ -0,0 +1,9 @@
+A X
+A Y
+A Z
+B X
+B Y
+B Z
+C X
+C Y
+C Z \ No newline at end of file
diff --git a/2022/day02/input4.txt b/2022/day02/input4.txt
new file mode 100644
index 0000000..85f9460
--- /dev/null
+++ b/2022/day02/input4.txt
@@ -0,0 +1,9 @@
+A X
+A Y
+A Z
+B X
+B Y
+B Z
+C X
+C Y
+C Z
diff --git a/2022/day02/main.sh b/2022/day02/main.sh
new file mode 100755
index 0000000..08f922a
--- /dev/null
+++ b/2022/day02/main.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+# gleichstand 3
+# gewonnen 6
+# A X=Rock 1
+# B Y=Paper 2
+# C Z=Scissors 3
+# sed -e 's/\w \(\w\)/& \1/g' -e 's/X/A/' -e 's/Y/B/' -e 's/Z/C/' \
+# -e 's/\(A A\)\|\(B B\)\|\(C C\)/3/' -e 's/\(A B\)\|\(B C\)|\(C A\)/6/' \
+# -e 's/[ABC] [ABC] //' -e 's/X/1/' -e 's/Y/2/' -e 's/Z/3/' \
+# -e 's/ /+/' /dev/stdin \
+# | paste -sd+
+
+cat /dev/stdin | sed -e 's/\w \(\w\)/& \1/g' -e 's/\(A X\)\|\(B Y\)\|\(C Z\)/3/' \
+ -e 's/\(A Y\)\|\(B Z\)\|\(C X\)/6/' -e 's/[ABC] [XYZ] //' -e 's/X/1/' \
+ -e 's/Y/2/' -e 's/Z/3/' -e 's/ /+/' | paste -sd+ | bc
diff --git a/2022/day02/main2.sh b/2022/day02/main2.sh
new file mode 100755
index 0000000..2acfd50
--- /dev/null
+++ b/2022/day02/main2.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+# gleichstand 3
+# gewonnen 6
+# A X=Rock 1
+# B Y=Paper 2
+# C Z=Scissors 3
+cat /dev/stdin | sed -e 's/A X/0+3/' -e 's/B X/0+1/' -e 's/C X/0+2/' \
+ -e 's/A Y/3+1/' -e 's/B Y/3+2/' -e 's/C Y/3+3/' \
+ -e 's/A Z/6+2/' -e 's/B Z/6+3/' -e 's/C Z/6+1/'
diff --git a/2022/day03/input1.txt b/2022/day03/input1.txt
new file mode 100644
index 0000000..f17e726
--- /dev/null
+++ b/2022/day03/input1.txt
@@ -0,0 +1,6 @@
+vJrwpWtwJgWrhcsFMMfFFhFp
+jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
+PmmdzqPrVvPwwTWBwg
+wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
+ttgJtRGJQctTZtZT
+CrZsJsPPZsGzwwsLwLmpwMDw
diff --git a/2022/day03/input2.txt b/2022/day03/input2.txt
new file mode 100644
index 0000000..09ed9e4
--- /dev/null
+++ b/2022/day03/input2.txt
@@ -0,0 +1,300 @@
+gvNbShZZgQfWdQhdPQmggLTFLwmwjFqjVVgM
+CsJnHllcsnnnnJrGRnRwPPLVmFLHLBjFFVHmPT
+JlnCtctJnJDcJlDCRpPrSSQWfphzWZfbZSvfNfbS
+WjvRSdSQjvpjWzNlnZlNZqCCMzZZ
+nJtJsbctPBPwLNcDZNNGLClC
+tsFJHBgJwgJbnvSHHWVWHhVhpQ
+zRzPhCCSHVZzfGHZ
+qBsWBpqBwBcvqqWgdfZrprdggPHHVZ
+WWmvwvBbnWmnwvWcbmWWnqNCRSDRRSSjjSDbPJbRjClLhC
+rQrznfHHhrHzllzlzTGcJgtJ
+jhhjjSZVPWVZvSFtTttLTglgFtvm
+dqSCqVWdbDSSVqbVVSqhNdrnpnCnfsnnwfnsRpMpBMrf
+rTnvrSSHvHtnDQVDtfmW
+ZjCglhcCJschpZbZgbtGmRtbGmwtQtbmtN
+FFZCghFJhlslFpjcdFTPLHHmrqTMTdzBLHLH
+WzDfrDwwDCCDMnfDHHJjTHTtNdngdHtQ
+FmScGPPPPmpspchbGHtRsjdJJJWJWNttgH
+bvhFlVhPchPvqWLwqLWqvq
+RcchVlCCvmhDRjNJJJjbjllZlJ
+wPwFGFMPfpdtqbpwFFfGPQZTWTZjtzQWTBBQJzZjZZ
+fbwPqqMPwdgvmDVDhmRCgR
+SSQggtQVQQgQGmGVthVnWDGjCBLLzdDNCCjDGWCW
+RcHcHbFqbPMZRFTvHFFFlcZZBNBtNjjLLjDdjLjDqWCpNLpj
+sPPclZcsZtMPfVsnnwwVJhmQ
+jlrwpVPjMwfzZfhfwddH
+DbQBGgBJPPBBHfPZ
+ggGSQTnTgQGbSRQRPrNlsjVjMrpmMLnrrW
+MzNNbMSrZNSSvGWWznwGQlTG
+ZCFCJHqJFjqTTqngPwPG
+LCJLJCCFtfjsJCMbZSMSbbcDdBfd
+LCdjljfJJBfLDCCdJqGqsGGtmBsWtbGmSS
+gpgchRcPgRRQNZcpNhgNPzzmGrmrGwtSSswqrSGbbTzt
+QgQvNppRPQcggZNccchvNZgCjlnsDLDflDdfjLfMDVsMLv
+jfSfTWfwTJffQQNwTCHnGGGgHbgqGFvF
+LmspctdsLDlBLPmFFgqbqFFbqlnSRS
+PSZZsctsDDtdBmzBLBSmpJjMzWwjVfwJVMrNfwrfzf
+zFZqbRNRHNHhqHFqzNnzzqDQVFMggMgDpmJMTgpVTQFJ
+SwLVsSWBfStDGMfDTDGGGT
+vlCBVsSvCRrHRjCqrn
+ndGVddlVdrcGlGcljdVGjCgfffPCCLfCMvqWvPnqgn
+FNtRZBDDSNSNStDhFRNQtLgCMTCBqvLMMTfJqBLPLP
+bwQwZhSDFhZbFSNccwzwHmHHjHMwsd
+BrSDgqrgWzWDwJBzMDWBLjpmVLFfFPLVJjVVPLFV
+cNnRlvNRvQTcnZwmfQGPmfVFPP
+dsCNllvTdnntTlTsHcdCRtNRBDWBDWDrWBhDBqMBDqbzWwCr
+stLcchcTwRcsVTtftVVthchqmmCCFvWmmgSgQFCwGvWSFCrr
+PljDbZbzjllHdQNWHMFGrMMHMFrmmM
+njjjzbPdqRcRQQns
+BTBLwzmqWNbpzqNzLppLBnhZJcJSHThhnnJZHHSQnr
+RfQgDjgsjVfRFDdvddtvhhhJCnrSnMZCcMSCSJ
+QRtjtRQQlzlqqzzzBW
+FnzllplJMntnzptLFzsjTVSQcSjSjQFFmdQQ
+wgwrBrwGHPGBqHrDcpmjddSQTmTGVmmG
+DBhhNBrCrMvNvzptpN
+LgSbLLRJQSzLCgJRJhWCCzRBdZdcMfcHsMdFFjfPjsCHBc
+nrVTnmrrrlnGGmrlVwVZPFHmdsZHBmjMcdjfcZ
+wrnTlNpvVVrqFrtnwGqwwrTpSgSQQLbQRzQSQRJbQpDbQz
+pgvmcpVcpwJppwgwvMWfHbRGRHDBJbWGfGGb
+hQqFqQNhqdCPNhTQCCFbbjmBHBbBRjGHBDBGFj
+TtdCCNlPCmssnqgvzzvvtVrgzzrc
+JltddTSgtLLvgvdldgvWPZPPSjWMjCfWNjNWPG
+FrwpbwhbmfjGRpGPNM
+cmBrBcBnmFBQqcFbscBhQfttznJgzlLLDlnglzLLlg
+mDhRsDzWZzGhhhWpZwzwGdfbFsfFTQTLcNFfFrNvvcbT
+ngMHjjgVgqHnPlnqtnClMHbfCJFbcLFFJFLbrQNbFQcQ
+SlqHqVVqPnBHSHHljlMndBdZQphRhdGpzWmWWwBh
+hVNhcfbSSNMfjjMlqRCqpdzpRJdnhl
+sBHPPwQwttBBssLCHzDBlDDmRmpJdqJJJd
+sHHwtsHTWwtZPHtZbbVSgMbGCNjNvN
+SgMtSMVChFBHBFdCwhdqPcPsbRVQqsblDbRmlc
+jlrLWfvWvzWWzmcQcqcNbmNDjR
+JpLznrnfGrrfnWWzTpfvzvdHHCgSBwdlTMhCTMFhBBwg
+fptnFPLsttddDdRhQShQzC
+BqGHGlqmmGmlJmNmqlbbCzSCQHDzSjHhfSShjfVh
+fbrrMqGGBlNMGNqrqglmrLZwFcwgFwsPcscctpWLgn
+TCMMTtWBqCMMMWWMSWhNFhlNBNlNHwNDsvhw
+frfdrbZJrVLdZLbnJcrmvhlhHshlgsZsHwwghZ
+fLRVvcvRVpfbcfVVJTqpWCCSqCCTTtjjPj
+vRCGzdTtvdBCTzCdmVsQjnVttngthgnQHs
+rLNZlrwrjrFLMsggsQpsQngqMq
+NfjZWcbffDrLZfNLbDczvmcTvvGCmCBBmSdP
+DSqdzrHgJtSHMgvmnNGdcmCnvssN
+ZwQLlVlRVVWZFZhbJZVjRJscvBGcpssLpBcnGpBsmpBs
+TwwjjQJTjlhwMfTDgMrfgtqg
+HhvVhgddvdvqTqVqHQgjgmCPWGrcWsGWPcvlsWrWmC
+lbJBBFbMlJFRCmsRmRPtCtwm
+FMLLpDLnFpFJbDfLnZZSzhqHVdVQjgSdlQTZ
+mvBrszzsrrrGsBDvBvszDRQDhjCwWdLhJdCjjWZdqqdZdW
+gMlfFVccTGMGPMSCdcLLdqhjLJWWdZ
+VfggggPVltVSlSlHfgFtTpfRGmRrrrvQpQsrGmnvnQbzmz
+HjtMgWbHBtbtcggVcHwMwcdzpZFGzGZFpvFFZZWnnpFG
+RNNrfmSrSSzdGBzFfJFq
+mNsSrrTPPRshmsBClRClPmSccVgQVHjHwtHwTMbTVwMHgg
+pZmmLpQLDJBCPCssJTsCTc
+SwlLwWvSwNSSSMSMfWLvvVdPFzjfTscdjcCsjzCPddFc
+vbVMqGbLSVMhDQnRRQnBqH
+lNmNwlmlbhhfFNgpJLnHfTHfTdnTML
+BGvCwVGVPSDWDMMJTHZMpndH
+rVcBrPSPCwWqPwGCBCSrqlNNQFhsQhtlhhhgNQtb
+HqZCQRQgWjpmZHRHqQjttGGJQNQtwQGGGbGrJz
+SlddfFVMLncbJJMzMzzMwD
+ndSznsdVHsqgpZvH
+sNStMtNtDztrvrRGPRRRRrNzqcchgJJLqnBScBcJThJggJBT
+QCWWZbCbCVjVbFVFbVwbnhqLqhghBLwwTqJJcpgTBL
+ZlHjfHHFWFjCdbHlQFnfdnZFMzPzrrlMrtrrGRMsDPrGvGPz
+NnDHhNNldhNTdHllpptCRtftzmGBGmVRVGRH
+wgZgZJLBwqgLSWrBvZVVzmffWzRmGsGmmssm
+bgqPBBLbPbrrZBjjlpjccjDdDchFTNlc
+WRWNNRWNfLZtsmtSWrtLmWgTcMcPrpMTcVMMPPBBqjcg
+QJJDFbpnpJdlcwcgBTqlgPwc
+GJFHJGhHnpWWShpsRS
+DHDZvDQWdHJMHlJf
+RhhnGLnBtGrnLjwwJTTMTdQccllSMQ
+rmFrrBGQLQFLjbFnBhQLhrRGCPVDWzgmpsWvWWDzppWpzCvC
+bsrJrWgWJvQRqbbRDNGGZDlwNfNfwS
+ttCHThhhcBVpTBcdhdpfNGDSQLwDLfDGfQllCG
+jFjzcFhzQTTjHFvJsrPPnnFgPb
+SZggDgNLGCQzSgRsljscPvPPbHsBNc
+TtFfTpMthzhFFTpdMMJPfjPPWjBbHbjPlPPBjj
+dpdttMMTJttzMFhqFwGLgGRSrrQGSZrwRrDQ
+JsJntWmghjgJTpfgFCczlztzrDZDtDzC
+QddBBdBSPPPHBSVHVHvNdPVRClvlcclCDLCLFRFrrDLcZc
+NVwBVSNlSBNHngnngsJWhwWh
+hQVWJGWJlJQDGJHQWHpVWJVHmfPGPcjfdLdLSrcCmfjPjCPm
+wgwnRwMvNvBvFZMngNvFZCjdSSfcbPLjCbcdCbSf
+wgnRvMMvjMsTwngTgnnDVDWJDplHWhlhQWlWDT
+WGswWFGsBFwHvjnbnnJjbG
+gLDrSrPpLfmmDqqbbJZsjvmvRv
+DTldTpTsDLgSsLpfPTslVdVVdNWVzcNwtWdWhzVt
+sttWrhWZsLVtJVZrWhgbCPQQbDNVCHglnnlN
+vvRRRMqpmTjwFqmfjFjmBMwNbCwQNgHgDnbNnHQHQCDg
+THpvmBGfzWGzSzzS
+nmZwwfPmNggwgPgNmdvPPhTRHTHBJTsvSP
+WDccMzVQzGWcrllLdsGTvTsJJBLTdL
+pWtzQrzDlrCpcQztlzCCCpCVFFFwtgmfbjmbqwZjZfmFwfdw
+bmMNNMVSRWBWCSmVRdMRmMnvZZscvvszGcnZClpcGsvZ
+gfLfDDtDgjgDtWTjFQjHsvvpZqqplfvvcllcnnvG
+TFPjDtWPNPwBBBNB
+QcTCHcTwdpQgcWzWwvMPRzSGwW
+sDNjfhVmnlVffmLNfLbMPPDbqGtMSRWtDMtP
+fZjJJshhhLNnrCJScHSccTQQ
+qfhBhLLjvMqWWBWjsQGrdrGzpszpGrqd
+JTSDHFtlTDbHTcFcDbTHzmrNRdRRbNzrmRRnRpnQ
+PHcltTgJDlplgptScCfCgWMVfvfZvhMMBV
+rttDPglHZZDDDPHgZtgWBswdsTfpfdplLqfsFfFdfd
+cRVvpcmpmRSCGGCcMQmQFqNNqdVdqTbLwNbdFfFs
+zhGjRhSvcMtnrpZjHZBg
+STNrrzVdTJwsBggwFgBN
+WbtMWJJpwpDsLBfP
+cbvncCCmWtCGMcZHVVSlJVQrzvzVqQ
+MtPVBHVbBBTwbvWgRgvF
+LhZjZpnnMRwWfhSh
+LQcQCLCCCcnmnqZpcrpnrjQlsBMHddtMGGzrJHPPsHsNPPJz
+NbZtmZDmNNDBHBhDNtNGcvpmgLmmFrvprgrFGv
+djMjffMdqnVVTdMfTPnQSFScFFVSLLFrvccvcllL
+PPdPwMQwTMWDwBDZLHZN
+DqpJFdhtmdSwpqSncljHsnfjqlbzlc
+rQVZLGMWPCNrCGMwNVMcbzsVgfHHgfncfscssH
+NBCrPLwMTrrMBLQLwCFhpFBDFdFFtdvDFvpD
+QRwGBdGwqRTBMWRMMzBqQHHhngspPFFbHbzgbhZLLP
+rCNmDjvrCFpvLZsgPb
+lDrmpcfCtVDtCjlfNfQQqVdJBQWRVVRMMMJQ
+zcgjlRcJCFtlnTvppn
+BLSHDMVPVPHVHwFwMhTvgnFZMh
+DsLSDdmPVNVdGgrzCCdbjc
+tjjRbNQtvJVVsvqsvdTsGqBp
+wlFLPZPzzzrzwZPmZfZPlrmpLDCpWDWCSTCpppDDBssdWG
+rwwcFFghFmgTcNRJNnnNJtHV
+RLhbzMhccqLzdjghdFddNWPN
+DmsTZfvrfJLPPWwrdFgw
+LsmDtQDfLLGbGQbSzcpM
+qwhmmHlHmlwChcCWlpPCBzjPVdBzLsdLBVsT
+DnJDMqRDsPsjRVQR
+tSGSnNNSbrJJGfDSSfbchpvptFwmpcvlHqZlcF
+rdQdBRPrQBBnfdBbzLLgLgmbzSLCPW
+TcRTcFDTcjvswMWzzgLSzwwSLJbL
+MNTRMNGTsFMMqqqcMDTTnfpBhQhNpHZBZHBfrptQ
+ZZFwcQGwRGLTGLTl
+rJtMrqBVvhBCnlCn
+WWWMttbqqzfPWqWJVzmDQwFQlwZwjQfjgFcZ
+RhgmdBbLLmRvhGZwhZZJDwGq
+ldPpTtTPtVPpfTGzJQFGFqJsFG
+MPpCnrlCVfPtrPVtntllnbdHSbnBvvgdgHgnWvSv
+nbnfjQbQZBqBvjQdVFGHhsQhsFsFzGpD
+RSJSTTcCVTTMlSNcSTRRwTccpwDFDDzFhHhtwppssFGGpsDp
+clcTNJlLMgrcgRvBjfWVfWfBrrZn
+LHQdpQLQDRcDBQccVQpnNRhllzMtRqzRztTNnt
+mrvZPZvZvZbPSFJrSrggFvrJzbhlzttTlNtqtsMtTntntdqq
+GPfJPJwfZFrmFvrPmgHHQLQWdHQBwWWCHVVC
+TvTTLfflhZmwZLvtJmhdFhMpnWrpnbJcWMnpHzMrzbcn
+VqRRNGCBjRmqPGqDzbHMcMccWnzngHnP
+jNqNBjsDsDRCNVsmBRNQNRSSSddhZvLhddZhvhwvLTZwhSfT
+vjpJvpgpNwjDWvvJLhFLLhNRTmPTRPRF
+HHbHVrMHMmqzHlGmtGqMtdLCLQthQQPCSPTSFLLPRT
+bZZzbHszMrqzGmrHMBzbHbqJjffcDgwWjDJpnjjcscwgnw
+fBHDMNhhHMrBDBrfQqfwwvvLvfjLZZ
+lmppmGJgPPpddJVdnwsQjLttqtjZTpcsvT
+RndRmlGWJgdRnWQJQgWdQPlFFbhhbFbHbHMhhBbRDRFrrS
+tVhwlMdMWlhlZMZMlzWrtRpBNpLPpmnmCPQBLppPPPBz
+GvGTsgjcTLRQHmTQ
+gGRGbfbgbcSbbcRggvfcwlZVhVMfltddVtrlZdhW
+PwjPHwWssqrHqCqprpCPjwrrQnnDbdnQnGQHnbZbGQZbBQdD
+WvNtLhfLndnBNbJJ
+fvhvvWfTmtzTmjpsVVqsPzMjjq
+GjHMMTMfZbnqHnJNCN
+rlpQpthdlQbnlJqRzqVL
+spphwcpBvcvdvFTqPDFfwwPZTG
+mQfqmtpfBHJCHdlMDB
+cbbPPsZqjqcSvVsCrDllsrdzrzzD
+TSbVTvShqnVjPTPbggSPbNFQWGtfNLtFfWgGmGgGWR
+HJtwgJJwJrcjRRjRnwhVdrVbmGhPmNNrGhdV
+fWFvTDssTDMCBCWsvszWWMCQhZhLLNvNNbhVGGZdRZRdmhmd
+zCTBzWzDDCDCfFCRqCJHcJJctjJSgHpqHqJg
+dgnwgbcwVGbgDWnQbjdgDnBRBBNNqRLBNMLFRMRlqNsc
+fTZHmTmzJMmSSCZChZvZTHRlBNBFqtqftlqssqNqftts
+JTHJvhzCHpmPCSSTzPpPzJHgQVdQQjQdQwjgdpgdDMGgQM
+qPGmWLJWBRRdvqvvNq
+TnZHsTZsZsZZbDtbrNrdnDft
+SShhQQZCHQCSTVlllVVQCjQWNJGFWpWgFpmmVmNgLgFpGw
+TsSmttWMVstNfbMfBcpnFchFwFwZNrrwFp
+DWWCGlHWdhddwpcrjh
+gQvPqglRCHCHCPCPCJbbtSVVWtTVVJvTbs
+ddHSZQHDStZStLtsdDpbCbBPcjGGCqCMBGdNPb
+hWhvmglVznzglgzvzfznwfnfscswPjbMBMjNGBMPGMcjcPwP
+sJWsJfVflWsnhrltrZLFDDRRFTSSLT
+qqCqLNjnPPLZPjqnDjLNgnNrcGwtgddGrhprBJhhJtBGJG
+lTMDsDHmlRRbQQbVfMHFmMBJhwcTddrcpBBGdGGJcJdB
+lHFfQFssFFFMQRVWQVlssLnDSLLPvZZPqWCLWSqjvS
+pJPZRpQtpPQpGPqWbqlWTdLVLJbT
+nnnjCwgrgcCFBfnggBCsMTVbVsWVWdCTTdbb
+cfhcnwnrcggrncrwcjBDcGHmNPRRGRZZQRRdDZzmzH
+NqTrrzLpTNdLLJBBcBGGZGpFHB
+sWbgfHSfSgVgZcmGtStZwBFG
+VjQjjPjhbbfsCbbDQCgsDrRhzMdlNzHTRdRhqdNTrq
+GlqfPdvdBqPgfqDgFMsMVDppbsNJNpMs
+WnmmWCTCjZnmzRjTZRRnFBMNpbZZpFJMSFSNFSbS
+TRRrnLBmzjttRRCmTRjjwLlvdhQvdrhqqlGdPqGggPlQ
+McjMPgPgGPHJWjhPNgPqQbpQSfqffnWVnnnpnZ
+BwwDmBTLRBBLzBTBTvtVqlfpqfbQqpqZbnQFlt
+rDsDBsmvRTBRzCTZsTmCsCrLPgNcPHNhPccNHHrjMNrgdNdP
+GqmLFDrcglvQGZwwzj
+nlHbSNBhhslJfsBfvdZHdCvRzdCzppzR
+JWShMfWMMthSJBBthJsgtcTTcFqcTrmTLrrTlr
+CsBsShBWsBWhvFJWCSsJpbTZdTbdBRgHffRlHHHBgH
+tqmnwwwDmVwfzZblzTRqzQ
+DGtDjGMcntMGnnGhhjJJJsCpFRRSJJ
+GQVVcGgFGcSFvfcFfJVnQmdbTwMLwTTnbnQMws
+ZqZrDWDtNPPHRNPzGCdndLLMLwMWhwbmLddn
+DRqRHCHlCtDrqtNqDplfpvGFjVjvBSFFcj
+zfSfdGPdMVHHdcMThhpwqqrwrqJhcF
+vlDNTWDDWWnngNQZtgwLrJZqLFZLFJpFJjJJ
+NCtWmnvBmDnWQVTmTGSRmmRTPz
+LLvppVLDsppGMGCLCCwNmJMNrNHrNmNNmHFjrh
+lZZfvfgRPZQWNNmlWlFNHl
+nnRtndRbcPttvTpswLTs
+trtzWfszNPlhPlgrWglhZjSLDBvTfSDTmSvmLvfS
+QMdVVGBQMTJDvSjdHJ
+nBppGVVnQQgzgPsPzzhp
+fVQzVrQVtVzHwjtMTjcTCjFgcDCGCd
+JslDPWLbLbZlJBMgBTBPdcFTFd
+JNJmZsDLnLDWmsVqSrHqnHqQwQSq
+mLMZRMRmZLmHLLjNshrrJjRsNNsj
+PnqnBVBPcpWrWfWzDhDsHW
+qpBQgcQncqpBcVgtclHqcSMTLZZQvLLZdLdwCmLMSd
+PZgMwZMjPgBCWgZFgmBGSTtwcccztTzbnGDcNT
+vJLlvvlfdsVVslVHrrpLfRlDcSScmbSnnRGDnbDTSbSSDt
+fvVHdLfLQljmmqqMQPhQ
+DZRstNGrDWGRMlzLHLMpNSpp
+bPgCrCvgnrCPgwplbMSjfHzHfj
+CgnFnBVrFFVmdVggmPPVTTcZBGhRqGtcZqqJhGRGssWs
+WrrCGrDlWhBBZtHB
+ggdcnQpcPRSpzfvJBTfPJvtP
+gSNnSBFnSMBNjpMssDmCrrGmCLqq
+szZGZGGwNdVtpwvbzptzVBQQLFclTJQFlHJNcFBRRJ
+CTrqSfWThWDjJCcLQRRRFLlQ
+rggqfMqPWnDqnVbZvTtPZpssVw
+GJHqPPcJnhthNHnL
+rzzlVDVTQDzSSdsSlzpBspssLhmZNjhZWjjffWBLZhgBmnjt
+TSTQTsnTbDsMvCGwcFvbJR
+PPjtzdnCnSjSthPjWJgJWjgMNBsNrT
+bZHfLLhvhpbfvLhHfQbqpNJTWWNsqNTrTNrgWN
+ZFbZZFvlRvZwhQwLDSdGnmCGmnlmdznD
+RFRRhzzsRsszRlhbrhgBcbTfHgBT
+pJtNmSgwZNtSJLgSqHcbBDDTHPfrSqTc
+ZNWdpNCJtLZpQJLLpmLtZNFGjVgFnsngRGllVsjjCnvs
+sJVRJmmmwwlmzcszMzjRjJVzspCZBsZTTFpTTZvSZTFBFbtZ
+GhNDgNWnGGqDvFSCZvbtFpvg
+fWrCNNffGnhWdrPhWjwjzRlJmcjRcPzlmV
+FdncmqmgcZztLWFvFFvjWLlT
+RsMMJVpfhJVsDVMfJpvlTWTvhjQSQvCbLCSC
+jDBjRrsVfNJgzdZrZwtmZt
+THDDQLZTGQQLQDSSTBCZSZHfFrvvlVRRlPVFfVrvqnvnnH
+VbWWcgbNpjgPrRvrNfqnzv
+swggwpJWwsWscJsDSLTJTmSVZJTBDZ
+wGsznPGGBHdzHhtHDD
+WMVSWqVmrSBMpvWVMFtdClhDtqDDHhdtQt
+RgWVRcmgnPPnjJBg
+BmfPBHBFswLLjQQnLCnzzW
+SRdvvRSGrdlRSvTgRrMVCjVWCZzMnVZhWzTj
+vlSRJrRJvbGGrSSJgWvlScptFmwbmfHHBfsNFmBbfsFm
diff --git a/2022/day03/main b/2022/day03/main
new file mode 100755
index 0000000..6f77a3f
--- /dev/null
+++ b/2022/day03/main
Binary files differ
diff --git a/2022/day03/main.c b/2022/day03/main.c
new file mode 100644
index 0000000..69068fa
--- /dev/null
+++ b/2022/day03/main.c
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+char getWrong(char *line)
+{
+ char *middle = line + strlen(line)/2;
+ char *a = line;
+ char *b = middle;
+ for (char *a = line; a < middle; a++)
+ {
+ for (char *b = middle; *b != '\n'; b++)
+ {
+ if ( *a == *b ) return *b;
+ }
+ }
+}
+
+int main()
+{
+ char *line = NULL;
+ size_t len;
+ int prios = 0;
+
+ while (getline(&line, &len, stdin) >= 0)
+ {
+ char wrong = getWrong(line);
+ printf("%c", wrong);
+ int prio;
+ if ( wrong >= 97 && wrong <= 122 ) prio = wrong - 96;
+ else prio = wrong - 64 + 26;
+ printf("%d", prio);
+ prios += prio;
+ }
+ printf("\n%d\n", prios);
+}
diff --git a/2022/day03/main2.c b/2022/day03/main2.c
new file mode 100644
index 0000000..17daa38
--- /dev/null
+++ b/2022/day03/main2.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+char getWrong(char *line, char *line2, char *line3)
+{
+
+ for (char *a = line; *a != '\n'; a++)
+ {
+ for (char *b = line2; *b != '\n'; b++)
+ {
+ for (char *c = line3; *c != '\n'; c++)
+ {
+ if ( *a == *b && *a == *c ) return *b;
+ }
+ }
+ }
+}
+
+int main()
+{
+ char *line = NULL;
+ char *line2 = NULL;
+ char *line3 = NULL;
+ size_t len;
+ size_t len2;
+ size_t len3;
+ int prios = 0;
+
+ while (getline(&line, &len, stdin) >= 0)
+ {
+ getline(&line2, &len2, stdin);
+ getline(&line3, &len3, stdin);
+
+ char wrong = getWrong(line, line2, line3);
+ printf("%c", wrong);
+ int prio;
+ if ( wrong >= 97 && wrong <= 122 ) prio = wrong - 96;
+ else prio = wrong - 64 + 26;
+ printf("%d", prio);
+ prios += prio;
+ }
+ printf("\n%d\n", prios);
+}
+
diff --git a/2022/day04/input1.txt b/2022/day04/input1.txt
new file mode 100644
index 0000000..9f9e9cf
--- /dev/null
+++ b/2022/day04/input1.txt
@@ -0,0 +1,6 @@
+2-4,6-8
+2-3,4-5
+5-7,7-9
+2-8,3-7
+6-6,4-6
+2-6,4-8
diff --git a/2022/day04/input2.txt b/2022/day04/input2.txt
new file mode 100644
index 0000000..0f2f19d
--- /dev/null
+++ b/2022/day04/input2.txt
@@ -0,0 +1,1000 @@
+23-33,24-65
+10-24,23-88
+71-92,18-71
+2-2,10-95
+24-26,25-66
+19-93,36-99
+12-99,5-13
+13-88,14-94
+4-85,5-84
+78-88,79-87
+13-82,13-83
+3-98,3-99
+27-69,28-89
+24-47,23-66
+43-48,29-49
+2-99,2-98
+3-77,21-65
+10-90,89-93
+64-75,63-75
+97-99,1-97
+48-65,49-64
+18-26,25-28
+85-86,26-85
+82-89,69-83
+21-93,93-98
+73-79,46-81
+33-52,32-51
+1-99,99-99
+11-36,34-40
+31-88,32-89
+9-19,18-35
+9-84,83-83
+34-82,4-83
+33-33,24-33
+34-83,83-90
+11-86,10-86
+48-48,3-50
+8-92,9-91
+16-38,15-37
+4-84,5-93
+70-75,41-79
+40-48,47-92
+37-41,52-89
+3-3,4-91
+27-77,27-77
+64-90,33-52
+28-40,9-64
+2-73,3-95
+17-94,7-75
+6-71,7-71
+11-69,10-70
+4-40,4-40
+9-54,30-44
+92-93,4-92
+62-63,63-67
+7-34,16-34
+54-55,31-54
+12-90,11-91
+11-13,12-53
+10-73,9-64
+13-18,13-84
+6-82,16-81
+52-78,18-53
+22-82,23-74
+90-91,3-90
+92-93,70-93
+18-44,19-45
+20-20,20-67
+31-93,76-93
+25-86,86-86
+6-73,5-94
+75-84,74-86
+50-51,50-51
+56-86,57-86
+18-81,13-18
+3-9,8-93
+31-36,34-34
+19-88,18-87
+10-95,54-79
+83-85,66-86
+32-68,31-49
+14-97,12-99
+42-42,42-53
+27-32,28-69
+96-98,15-96
+25-49,25-48
+71-81,15-92
+19-83,15-19
+14-99,6-14
+52-90,53-94
+5-98,85-96
+18-30,10-15
+4-86,4-98
+54-55,30-78
+85-99,62-86
+10-99,10-98
+4-96,5-95
+6-59,7-18
+6-86,1-7
+28-85,5-84
+3-82,2-82
+73-92,87-87
+2-3,2-89
+4-5,4-8
+21-96,69-97
+89-90,4-89
+28-79,29-80
+35-58,40-48
+96-96,3-97
+17-27,16-96
+7-99,8-94
+26-92,25-92
+17-24,17-25
+44-44,40-47
+57-64,57-65
+60-91,59-79
+23-79,22-71
+34-37,31-70
+22-60,22-59
+44-99,98-98
+9-57,49-55
+61-64,33-62
+15-68,4-15
+53-55,34-55
+13-13,9-15
+2-43,3-81
+17-56,16-99
+1-4,3-92
+76-77,73-83
+2-97,2-96
+44-45,44-55
+8-89,8-97
+23-73,22-88
+23-90,79-93
+23-87,86-91
+3-45,17-44
+7-99,8-98
+92-97,14-92
+85-89,59-90
+7-8,7-89
+5-90,49-89
+28-30,29-63
+38-61,38-60
+32-98,5-75
+22-87,71-76
+5-85,5-88
+16-96,18-88
+39-51,40-90
+21-21,19-23
+22-55,15-56
+1-75,35-59
+13-84,12-85
+11-83,23-27
+11-98,11-97
+35-92,34-92
+8-96,8-30
+48-72,33-60
+9-83,10-82
+97-97,10-98
+5-7,9-98
+1-44,3-43
+7-85,8-85
+12-32,12-52
+1-86,86-86
+3-63,4-63
+3-83,83-91
+74-88,38-74
+92-95,6-98
+11-19,10-20
+6-94,7-94
+39-90,38-42
+60-92,61-92
+43-94,44-98
+23-98,22-99
+31-41,27-32
+9-79,9-78
+63-64,11-64
+82-82,83-98
+78-79,77-78
+19-63,4-27
+26-62,27-44
+91-91,91-93
+16-94,31-93
+23-25,24-99
+78-79,11-78
+30-30,29-31
+34-85,35-84
+4-78,4-5
+42-84,43-85
+39-87,40-86
+49-84,50-84
+67-67,7-67
+38-38,62-67
+2-83,3-82
+14-33,32-68
+18-76,17-75
+68-77,68-76
+4-97,53-73
+53-97,54-96
+53-55,54-98
+35-95,75-83
+2-3,2-78
+3-97,15-96
+26-87,26-92
+4-10,9-48
+3-89,22-96
+10-85,10-84
+1-93,2-2
+24-37,37-62
+32-68,48-53
+33-96,95-97
+9-26,14-31
+16-66,13-14
+85-86,78-85
+65-82,64-81
+5-85,31-49
+47-88,59-91
+34-71,70-76
+14-14,14-14
+45-46,45-97
+63-73,63-64
+16-54,17-53
+87-88,51-87
+20-79,19-98
+3-96,2-95
+86-86,60-86
+82-82,67-82
+12-35,11-35
+15-31,26-52
+1-2,1-99
+3-96,2-2
+91-97,11-92
+41-89,42-96
+62-64,41-65
+54-54,16-55
+28-41,40-97
+15-89,89-90
+50-71,55-70
+30-66,30-93
+89-92,84-89
+25-27,26-84
+59-91,60-91
+4-11,4-98
+5-48,10-44
+53-80,77-79
+20-21,10-20
+14-86,14-85
+32-70,33-69
+94-94,26-95
+5-57,5-97
+38-50,38-92
+48-50,49-51
+13-98,12-98
+90-95,24-88
+90-94,67-91
+1-11,10-91
+48-59,59-91
+26-68,31-55
+15-56,21-57
+6-69,7-69
+6-8,5-95
+32-93,33-94
+13-73,14-42
+1-4,3-98
+30-62,29-62
+57-64,61-99
+12-27,11-46
+28-99,98-98
+7-83,8-92
+56-77,56-76
+30-89,31-51
+69-83,37-72
+11-78,11-65
+61-61,60-62
+38-65,65-66
+20-44,21-97
+39-76,40-75
+10-94,11-93
+33-90,89-96
+23-77,22-78
+63-86,62-73
+42-81,35-43
+34-91,34-55
+12-97,4-13
+1-98,1-97
+23-72,24-73
+14-99,13-99
+17-97,18-96
+65-85,14-66
+68-77,67-69
+8-96,9-9
+28-57,29-56
+14-26,14-26
+6-72,6-72
+49-49,1-48
+4-65,65-65
+53-92,54-91
+48-87,15-48
+51-54,20-72
+65-75,64-64
+4-92,3-93
+42-70,30-98
+15-71,14-15
+29-62,28-63
+6-92,6-93
+37-84,83-83
+1-99,23-98
+23-82,24-88
+2-60,61-74
+3-5,17-93
+50-63,51-62
+51-55,52-52
+30-82,5-83
+5-77,4-42
+44-99,3-99
+18-81,5-18
+2-32,32-32
+50-59,58-87
+23-30,24-40
+70-70,9-71
+40-62,49-62
+2-29,1-3
+48-69,48-49
+48-48,47-93
+5-42,17-41
+11-95,12-92
+9-66,8-65
+32-84,33-84
+16-69,15-99
+12-96,9-12
+69-91,68-70
+14-69,15-81
+96-99,50-96
+35-62,35-61
+6-22,22-60
+20-76,73-74
+4-21,4-22
+22-30,21-76
+5-90,1-6
+82-96,82-95
+18-31,19-71
+29-56,50-59
+11-21,1-61
+15-76,30-81
+1-1,2-83
+11-90,90-91
+40-90,40-41
+68-83,68-83
+25-81,25-81
+87-88,22-87
+31-65,32-64
+17-90,16-90
+11-65,11-12
+35-60,36-93
+5-93,4-94
+28-29,27-75
+12-38,37-45
+39-46,32-44
+12-89,12-97
+4-54,52-52
+5-94,94-94
+30-31,29-31
+18-82,74-76
+80-80,59-81
+3-65,54-54
+20-31,19-23
+82-87,32-82
+41-41,41-42
+6-6,6-81
+2-98,98-98
+84-94,6-95
+29-89,28-92
+27-30,28-34
+5-86,4-86
+32-96,50-96
+28-93,69-90
+75-75,27-82
+9-30,30-36
+76-76,61-77
+74-80,11-74
+48-61,48-60
+64-98,64-99
+83-87,5-88
+23-25,25-98
+55-55,39-55
+5-36,5-36
+45-57,46-85
+4-86,3-85
+19-58,20-58
+25-83,14-26
+27-74,27-27
+17-18,17-45
+81-88,62-84
+84-96,21-85
+3-81,1-2
+54-93,1-94
+1-1,3-66
+69-78,49-78
+47-93,47-93
+13-13,13-66
+18-78,18-73
+11-20,15-18
+52-99,51-99
+2-57,1-58
+9-97,10-97
+80-80,24-80
+33-77,34-47
+68-75,67-73
+20-95,19-95
+4-99,5-98
+8-85,7-85
+42-80,66-82
+22-47,31-47
+22-26,24-24
+4-98,38-44
+92-94,92-95
+82-92,71-94
+6-10,1-5
+3-92,1-92
+72-76,71-74
+6-69,7-69
+25-75,26-66
+15-51,15-63
+14-99,14-98
+7-89,6-70
+58-66,62-85
+7-11,15-23
+42-62,42-63
+1-4,4-91
+1-3,3-97
+49-79,48-80
+15-95,16-77
+6-99,5-99
+6-79,8-27
+47-69,46-68
+20-21,24-96
+13-71,60-92
+69-94,36-69
+66-86,33-67
+34-47,34-47
+4-4,4-93
+22-68,68-68
+42-90,43-90
+74-74,74-94
+3-72,3-62
+63-75,64-67
+16-48,7-48
+2-89,3-99
+2-98,3-97
+41-94,42-95
+45-93,44-98
+16-18,17-64
+69-70,47-69
+2-93,93-94
+65-94,66-95
+54-56,55-57
+5-92,2-92
+48-92,28-45
+67-68,48-67
+7-12,6-8
+7-8,6-8
+94-99,16-95
+13-49,14-48
+25-48,48-48
+6-51,7-18
+46-83,15-97
+34-57,34-58
+16-89,9-17
+41-74,41-42
+13-32,13-97
+90-99,99-99
+7-99,7-98
+78-79,63-78
+4-98,64-79
+49-75,50-80
+40-75,40-52
+14-72,6-14
+5-91,91-91
+27-55,27-27
+20-22,27-37
+35-71,34-96
+2-52,1-1
+3-87,2-87
+2-70,36-69
+38-90,39-89
+67-79,67-80
+5-77,77-78
+26-32,2-34
+10-43,43-85
+55-84,84-85
+24-59,24-58
+43-49,44-48
+60-81,59-80
+52-91,91-92
+44-62,42-63
+3-96,3-97
+29-45,30-45
+64-92,6-93
+89-96,4-90
+71-91,71-90
+50-64,60-63
+49-88,49-89
+18-98,18-90
+30-74,72-77
+32-88,4-76
+22-58,22-23
+5-71,5-18
+8-90,7-98
+4-78,4-79
+54-87,54-55
+3-91,3-92
+14-92,89-91
+41-95,42-42
+74-75,53-77
+12-90,3-12
+5-50,3-51
+27-67,66-68
+10-42,24-38
+20-79,20-81
+10-78,78-97
+26-47,35-46
+34-82,34-63
+2-94,3-98
+19-87,19-87
+4-42,6-90
+13-49,12-14
+75-75,3-76
+55-70,54-56
+86-92,85-93
+31-38,28-46
+7-90,6-91
+33-72,32-50
+22-46,45-99
+45-53,46-51
+90-91,6-90
+13-87,14-45
+41-95,14-42
+90-95,76-95
+51-70,15-89
+15-49,25-95
+15-15,15-98
+20-88,14-33
+2-67,67-70
+88-93,78-96
+77-91,53-84
+53-88,52-98
+24-96,25-25
+40-40,26-40
+3-15,9-25
+35-99,36-97
+61-61,4-62
+5-95,6-6
+52-56,52-95
+22-30,23-23
+40-44,43-63
+13-16,5-14
+18-90,89-89
+5-88,4-88
+78-83,82-82
+6-80,1-1
+15-31,14-32
+13-96,13-13
+68-76,68-69
+56-67,67-90
+24-92,92-93
+16-29,17-90
+2-99,1-90
+12-75,1-13
+21-91,20-90
+1-99,11-97
+94-94,25-95
+2-91,3-92
+95-95,2-95
+2-99,1-97
+28-98,27-29
+6-26,2-67
+20-58,19-71
+32-87,49-86
+13-57,14-56
+2-55,11-44
+13-61,12-61
+33-81,80-80
+39-91,41-44
+40-93,39-47
+83-95,40-93
+20-79,24-78
+52-93,6-94
+96-96,3-97
+44-55,36-87
+43-44,13-43
+19-99,19-98
+6-17,17-97
+91-99,88-91
+31-51,52-77
+1-97,1-2
+26-86,26-87
+50-53,40-81
+40-89,89-93
+78-83,1-79
+9-89,8-73
+6-38,7-21
+19-20,18-21
+97-97,35-97
+28-57,20-28
+3-86,86-87
+53-53,2-52
+59-99,60-99
+75-84,76-95
+20-93,21-94
+29-29,29-30
+34-92,15-58
+11-58,11-59
+11-11,10-98
+19-77,77-77
+38-56,38-71
+83-86,12-88
+8-73,5-6
+5-7,7-93
+18-79,19-72
+4-99,2-2
+5-82,5-81
+24-37,37-95
+11-63,9-12
+6-99,7-98
+92-92,91-91
+58-91,2-95
+23-98,24-59
+2-90,3-89
+54-71,1-81
+22-98,48-97
+14-49,13-76
+5-52,6-89
+6-88,76-86
+3-85,6-97
+87-94,86-88
+30-46,31-45
+63-95,9-97
+19-94,94-98
+71-75,72-74
+48-89,49-89
+27-52,52-54
+21-99,41-94
+5-96,3-5
+40-69,38-40
+74-99,73-98
+6-31,22-85
+13-76,12-75
+29-74,29-74
+10-86,11-86
+40-41,33-40
+63-94,29-94
+55-85,55-55
+14-20,18-19
+52-78,1-79
+92-96,7-92
+12-89,14-57
+32-49,49-82
+36-63,43-62
+20-94,41-93
+79-95,7-97
+5-60,5-22
+29-93,28-93
+18-68,18-67
+12-37,13-36
+12-64,12-46
+1-99,2-2
+61-92,61-82
+14-16,15-68
+68-83,67-77
+24-93,93-93
+33-99,32-33
+93-93,11-94
+27-37,26-37
+7-31,6-31
+1-45,2-67
+5-99,5-99
+20-21,18-22
+22-89,23-88
+53-58,53-56
+48-91,48-86
+11-11,10-12
+33-50,50-81
+11-47,7-20
+51-71,71-72
+15-89,15-88
+6-90,2-15
+7-88,18-91
+4-98,4-98
+9-19,3-19
+29-58,57-83
+16-34,15-33
+13-50,12-89
+17-60,17-17
+90-94,91-98
+52-77,52-76
+97-99,5-97
+42-86,53-76
+4-7,19-56
+23-63,2-41
+15-43,43-44
+19-23,22-97
+47-48,45-49
+31-73,32-73
+57-72,21-38
+54-97,53-96
+2-29,3-64
+53-79,13-77
+63-77,4-63
+94-94,4-95
+5-44,4-98
+5-99,4-98
+31-96,32-96
+44-89,43-90
+1-63,2-63
+31-60,8-32
+48-88,55-62
+36-85,35-85
+7-98,97-97
+3-52,4-99
+19-57,1-20
+65-96,66-97
+61-95,43-62
+4-94,93-93
+14-97,58-96
+26-46,6-47
+79-96,81-95
+30-88,30-87
+27-97,26-96
+24-88,24-25
+27-95,28-51
+22-24,23-76
+40-44,44-52
+4-37,3-38
+6-7,4-8
+22-24,16-25
+59-73,58-73
+2-14,3-40
+20-65,65-65
+58-87,58-86
+99-99,26-98
+10-17,16-91
+52-71,59-70
+3-87,2-87
+22-95,95-96
+55-55,10-54
+52-84,82-96
+5-82,81-81
+9-95,7-7
+53-88,88-90
+5-6,5-63
+11-68,10-85
+8-12,10-11
+40-92,43-49
+19-35,20-34
+44-46,45-85
+10-25,12-26
+63-85,54-80
+10-97,91-94
+41-50,40-42
+7-72,8-71
+1-15,12-92
+22-93,54-99
+82-94,30-83
+7-89,6-89
+6-69,5-7
+8-25,24-24
+8-47,8-47
+21-25,24-92
+81-81,81-86
+6-15,44-68
+82-82,34-82
+29-86,2-87
+37-54,20-57
+56-97,1-96
+65-65,6-65
+4-81,5-82
+78-85,37-78
+18-99,19-97
+31-97,34-96
+41-58,40-77
+11-96,10-97
+18-35,7-24
+5-75,3-74
+2-53,15-47
+9-17,9-85
+20-26,21-26
+23-70,67-68
+23-72,23-73
+36-81,9-93
+25-76,25-26
+77-77,46-77
+78-98,78-87
+91-91,14-92
+22-92,21-93
+3-3,3-87
+99-99,61-99
+18-28,19-29
+44-45,19-44
+17-60,11-17
+35-97,36-36
+58-58,11-58
+24-62,23-63
+18-56,55-81
+7-31,8-30
+60-61,1-65
+8-99,7-31
+2-4,5-6
+4-93,48-92
+2-87,1-98
+3-75,3-4
+1-53,53-54
+57-73,57-68
+11-60,2-61
+51-70,43-52
+4-33,3-34
+29-68,67-68
+75-86,28-71
+4-84,3-83
+12-96,51-96
+30-98,71-94
+54-62,60-62
+13-66,14-86
+14-42,12-43
+47-69,48-69
+58-89,86-96
+27-96,27-95
+6-66,6-16
+2-30,1-37
+27-91,27-38
+46-52,45-49
+9-64,8-75
+53-92,54-93
+35-91,35-72
+66-91,91-97
+46-81,49-81
+3-90,1-3
+53-54,52-56
+4-92,3-5
+42-84,42-77
+1-3,2-95
+8-73,9-90
+17-69,16-70
+9-20,2-10
+97-99,96-97
+1-86,2-91
+17-66,9-95
+9-10,9-97
+19-40,39-54
+5-94,5-91
+33-33,18-34
+2-3,2-3
+22-66,21-84
+37-90,37-81
+6-93,6-93
+64-81,65-78
+57-59,57-67
+69-94,68-68
+39-97,38-98
+74-79,71-79
+2-80,41-80
+5-91,28-89
+1-97,2-97
+24-61,25-94
+76-81,76-97
+48-56,48-49
+25-81,7-12
+42-99,41-41
+45-60,46-59
+19-85,57-84
+8-8,7-98
+14-53,13-54
+17-82,69-84
+73-86,24-90
+78-80,6-78
+2-76,3-26
+1-33,33-89
+12-48,48-75
+25-87,21-88
+22-68,22-71
+2-91,1-91
+59-79,7-60
+6-70,4-4
+47-94,27-94
+23-50,10-49
+2-85,2-83
+2-96,7-96
+21-93,22-92
+27-67,28-67
+32-38,32-33
+15-94,93-94
+36-74,36-37
+33-84,43-83
+5-98,2-2
+1-93,2-92
+37-97,42-70
+81-82,21-81
+14-94,13-15
+5-45,4-87
+44-96,45-95
+2-7,6-14
+14-73,25-77
+83-83,84-99
+13-62,21-73
+91-98,22-91
+19-96,86-93
+5-78,6-77
+3-97,4-98
+8-54,17-83
+9-94,10-10
+36-96,35-37
+8-93,7-98
+48-60,48-61
+17-97,9-18
+73-87,74-88
+19-63,19-63
+21-73,20-74
+1-89,26-89
+44-50,48-55
+43-70,70-71
+5-14,6-63
+23-82,22-94
+20-67,18-94
+36-52,47-51
+10-84,9-83
+18-96,18-71
+3-64,4-65
+4-7,6-89
+62-89,73-99
+4-92,3-5
+3-62,45-59
+9-98,10-97
+12-80,12-89
+14-15,18-85
+7-18,6-23
+14-70,15-24
+24-52,21-78
+63-92,32-93
+47-91,42-48
+16-91,91-95
+31-66,30-65
+52-91,5-91
+85-85,11-86
+22-69,68-68
+11-58,10-21
+47-76,42-47
+63-64,43-66
+17-29,4-66
+19-19,18-86
+33-70,33-70
+33-38,32-38
+3-5,4-99
+14-55,13-55
+4-48,4-4
+80-96,79-98
+99-99,5-29
+48-72,49-72
+5-91,3-92
+10-25,10-26
+9-11,10-28
+29-39,28-38
+19-55,55-56
+1-14,1-2
+21-81,21-81
+32-89,38-86
+31-79,31-39
+66-72,67-73
+3-3,2-29
+9-67,10-10
+24-96,23-25
+90-94,90-93
+91-91,7-92
+45-98,44-93
+1-76,3-75
+14-59,22-60
+12-70,4-21
+30-93,25-98
+18-30,9-19
+1-4,3-90
+9-95,9-22
+92-96,59-92
+26-67,22-25
+7-9,8-30
+74-82,82-83
+92-92,4-93
+14-76,2-63
+52-86,51-82
+11-98,10-12
+2-97,96-96
+18-91,18-99
+15-36,17-92
+14-90,13-91
+14-88,87-99
+47-92,48-92
+3-97,10-93
+9-87,80-98
+4-96,3-5
+89-99,3-89
+11-65,10-66
+4-52,52-93
+29-31,12-28
diff --git a/2022/day04/main b/2022/day04/main
new file mode 100755
index 0000000..498303f
--- /dev/null
+++ b/2022/day04/main
Binary files differ
diff --git a/2022/day04/main.c b/2022/day04/main.c
new file mode 100644
index 0000000..8233265
--- /dev/null
+++ b/2022/day04/main.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+
+int main()
+{
+ int a1,a2,b1,b2;
+ int overlaps = 0;
+ while (scanf("%d-%d,%d-%d", &a1, &a2, &b1, &b2) != EOF)
+ {
+ // printf("%d-%d,%d-%d", a1, a2, b1, b2);
+ if ( ((a1 >= b1) && (a2 <= b2)) || ((b1 >= a1) && (b2 <= a2))) {
+ overlaps++;
+ }
+ }
+ printf("%d\n", overlaps);
+}
diff --git a/2022/day04/main2.c b/2022/day04/main2.c
new file mode 100644
index 0000000..d26bdb6
--- /dev/null
+++ b/2022/day04/main2.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+int main()
+{
+ int a1,a2,b1,b2;
+ int overlaps = 0;
+ while (scanf("%d-%d,%d-%d", &a1, &a2, &b1, &b2) != EOF)
+ {
+ // printf("%d-%d,%d-%d", a1, a2, b1, b2);
+ if (
+ ((a1 >= b1) && (a2 <= b2)) || ((b1 >= a1) && (b2 <= a2)) ||
+ ((a1 <= b1) && (a2 >= b1) || (a1 <= b2) && (a2 >= b2) )
+ ) {
+ overlaps++;
+ }
+ }
+ printf("%d\n", overlaps);
+}
diff --git a/2022/day05/input1.txt b/2022/day05/input1.txt
new file mode 100644
index 0000000..84933bb
--- /dev/null
+++ b/2022/day05/input1.txt
@@ -0,0 +1,9 @@
+ [D]
+[N] [C]
+[Z] [M] [P]
+ 1 2 3
+
+move 1 from 2 to 1
+move 3 from 1 to 3
+move 2 from 2 to 1
+move 1 from 1 to 2
diff --git a/2022/day05/input2.txt b/2022/day05/input2.txt
new file mode 100644
index 0000000..c1f5fb0
--- /dev/null
+++ b/2022/day05/input2.txt
@@ -0,0 +1,512 @@
+[T] [D] [L]
+[R] [S] [G] [P] [H]
+[G] [H] [W] [R] [L] [P]
+[W] [G] [F] [H] [S] [M] [L]
+[Q] [V] [B] [J] [H] [N] [R] [N]
+[M] [R] [R] [P] [M] [T] [H] [Q] [C]
+[F] [F] [Z] [H] [S] [Z] [T] [D] [S]
+[P] [H] [P] [Q] [P] [M] [P] [F] [D]
+ 1 2 3 4 5 6 7 8 9
+
+move 3 from 8 to 9
+move 2 from 2 to 8
+move 5 from 4 to 2
+move 7 from 1 to 4
+move 3 from 8 to 2
+move 3 from 2 to 7
+move 1 from 7 to 4
+move 3 from 2 to 9
+move 4 from 7 to 9
+move 1 from 5 to 2
+move 2 from 3 to 4
+move 5 from 9 to 5
+move 6 from 9 to 3
+move 5 from 9 to 5
+move 1 from 9 to 7
+move 2 from 3 to 1
+move 7 from 3 to 9
+move 2 from 7 to 2
+move 5 from 2 to 4
+move 1 from 2 to 9
+move 2 from 1 to 9
+move 7 from 6 to 1
+move 2 from 7 to 3
+move 2 from 3 to 9
+move 1 from 7 to 4
+move 1 from 9 to 2
+move 3 from 1 to 8
+move 2 from 3 to 4
+move 5 from 9 to 2
+move 1 from 3 to 9
+move 8 from 5 to 7
+move 1 from 6 to 1
+move 15 from 4 to 1
+move 4 from 2 to 5
+move 5 from 9 to 7
+move 1 from 9 to 5
+move 5 from 1 to 2
+move 3 from 8 to 9
+move 1 from 7 to 6
+move 11 from 1 to 2
+move 7 from 5 to 3
+move 4 from 2 to 6
+move 7 from 3 to 4
+move 3 from 5 to 9
+move 2 from 2 to 5
+move 5 from 1 to 8
+move 2 from 6 to 8
+move 3 from 8 to 9
+move 9 from 4 to 9
+move 9 from 7 to 4
+move 2 from 8 to 1
+move 1 from 8 to 7
+move 6 from 2 to 7
+move 5 from 2 to 4
+move 5 from 7 to 2
+move 2 from 1 to 7
+move 2 from 6 to 4
+move 7 from 7 to 1
+move 3 from 2 to 6
+move 1 from 8 to 7
+move 2 from 9 to 3
+move 2 from 3 to 1
+move 1 from 2 to 5
+move 4 from 6 to 5
+move 2 from 2 to 3
+move 3 from 5 to 7
+move 1 from 5 to 3
+move 9 from 1 to 7
+move 2 from 9 to 5
+move 13 from 4 to 1
+move 5 from 7 to 2
+move 3 from 3 to 1
+move 2 from 2 to 9
+move 1 from 2 to 7
+move 5 from 5 to 6
+move 2 from 2 to 4
+move 5 from 1 to 3
+move 9 from 7 to 8
+move 2 from 9 to 5
+move 3 from 5 to 4
+move 5 from 9 to 2
+move 10 from 4 to 8
+move 1 from 4 to 1
+move 2 from 8 to 4
+move 4 from 8 to 2
+move 3 from 6 to 8
+move 7 from 8 to 7
+move 10 from 9 to 3
+move 7 from 3 to 2
+move 11 from 2 to 3
+move 13 from 3 to 9
+move 1 from 6 to 3
+move 1 from 1 to 2
+move 1 from 2 to 8
+move 3 from 3 to 4
+move 1 from 2 to 9
+move 1 from 4 to 1
+move 10 from 8 to 3
+move 11 from 9 to 7
+move 1 from 6 to 2
+move 14 from 7 to 1
+move 2 from 2 to 9
+move 4 from 7 to 6
+move 1 from 2 to 4
+move 3 from 4 to 2
+move 4 from 2 to 9
+move 10 from 3 to 4
+move 3 from 6 to 1
+move 5 from 9 to 5
+move 5 from 5 to 8
+move 1 from 9 to 7
+move 2 from 9 to 6
+move 1 from 9 to 8
+move 2 from 4 to 8
+move 1 from 4 to 5
+move 2 from 3 to 1
+move 2 from 3 to 7
+move 27 from 1 to 2
+move 2 from 7 to 1
+move 9 from 4 to 6
+move 9 from 6 to 5
+move 5 from 8 to 6
+move 26 from 2 to 3
+move 1 from 2 to 5
+move 1 from 2 to 7
+move 1 from 8 to 4
+move 1 from 7 to 8
+move 24 from 3 to 5
+move 1 from 8 to 5
+move 1 from 4 to 3
+move 1 from 7 to 1
+move 1 from 8 to 9
+move 7 from 1 to 7
+move 8 from 6 to 4
+move 4 from 7 to 6
+move 1 from 3 to 9
+move 2 from 9 to 1
+move 3 from 7 to 9
+move 8 from 4 to 6
+move 3 from 9 to 1
+move 1 from 3 to 6
+move 1 from 8 to 2
+move 10 from 5 to 4
+move 1 from 3 to 8
+move 13 from 5 to 3
+move 1 from 2 to 9
+move 1 from 8 to 9
+move 1 from 3 to 8
+move 1 from 9 to 2
+move 3 from 6 to 9
+move 7 from 4 to 9
+move 4 from 3 to 9
+move 2 from 6 to 8
+move 2 from 4 to 5
+move 10 from 9 to 3
+move 1 from 1 to 9
+move 1 from 4 to 8
+move 1 from 1 to 4
+move 1 from 4 to 5
+move 4 from 6 to 3
+move 1 from 9 to 5
+move 1 from 6 to 9
+move 2 from 6 to 5
+move 1 from 9 to 2
+move 1 from 6 to 7
+move 18 from 5 to 2
+move 22 from 3 to 7
+move 19 from 7 to 1
+move 3 from 8 to 5
+move 4 from 9 to 3
+move 2 from 7 to 2
+move 1 from 8 to 1
+move 19 from 1 to 3
+move 2 from 7 to 5
+move 13 from 3 to 9
+move 4 from 1 to 2
+move 3 from 5 to 1
+move 11 from 9 to 1
+move 11 from 2 to 8
+move 3 from 9 to 3
+move 3 from 5 to 2
+move 2 from 1 to 4
+move 5 from 2 to 7
+move 12 from 1 to 5
+move 2 from 4 to 5
+move 9 from 5 to 8
+move 1 from 5 to 3
+move 4 from 2 to 3
+move 2 from 7 to 5
+move 6 from 2 to 8
+move 17 from 8 to 9
+move 2 from 9 to 6
+move 2 from 7 to 1
+move 15 from 9 to 6
+move 2 from 2 to 4
+move 9 from 8 to 5
+move 2 from 1 to 3
+move 12 from 6 to 2
+move 2 from 3 to 9
+move 5 from 6 to 3
+move 4 from 5 to 3
+move 11 from 3 to 4
+move 2 from 9 to 4
+move 6 from 5 to 2
+move 13 from 4 to 3
+move 1 from 4 to 5
+move 1 from 4 to 8
+move 18 from 2 to 6
+move 2 from 5 to 3
+move 1 from 8 to 3
+move 1 from 2 to 5
+move 1 from 7 to 8
+move 28 from 3 to 6
+move 2 from 3 to 4
+move 3 from 5 to 9
+move 2 from 5 to 9
+move 3 from 9 to 3
+move 5 from 3 to 4
+move 1 from 9 to 3
+move 1 from 9 to 1
+move 1 from 3 to 4
+move 45 from 6 to 2
+move 1 from 8 to 3
+move 2 from 4 to 6
+move 5 from 4 to 2
+move 1 from 3 to 7
+move 3 from 2 to 9
+move 1 from 4 to 8
+move 3 from 6 to 1
+move 42 from 2 to 8
+move 2 from 9 to 2
+move 4 from 2 to 6
+move 2 from 2 to 7
+move 1 from 9 to 6
+move 2 from 8 to 9
+move 4 from 1 to 8
+move 1 from 6 to 4
+move 1 from 4 to 8
+move 1 from 2 to 5
+move 3 from 7 to 4
+move 39 from 8 to 3
+move 7 from 8 to 5
+move 8 from 5 to 7
+move 35 from 3 to 1
+move 4 from 3 to 7
+move 10 from 7 to 2
+move 2 from 9 to 6
+move 3 from 4 to 2
+move 1 from 7 to 5
+move 1 from 7 to 8
+move 1 from 5 to 4
+move 12 from 1 to 6
+move 1 from 8 to 1
+move 1 from 4 to 5
+move 14 from 6 to 8
+move 9 from 8 to 6
+move 5 from 6 to 1
+move 11 from 2 to 9
+move 1 from 9 to 8
+move 6 from 8 to 3
+move 6 from 9 to 2
+move 8 from 1 to 9
+move 3 from 3 to 6
+move 7 from 1 to 4
+move 1 from 5 to 9
+move 8 from 9 to 8
+move 7 from 6 to 8
+move 1 from 9 to 3
+move 3 from 6 to 4
+move 3 from 9 to 1
+move 4 from 3 to 2
+move 1 from 6 to 7
+move 1 from 4 to 2
+move 13 from 1 to 7
+move 6 from 4 to 8
+move 1 from 7 to 3
+move 1 from 4 to 6
+move 1 from 9 to 5
+move 1 from 3 to 5
+move 19 from 8 to 9
+move 1 from 6 to 5
+move 6 from 9 to 2
+move 2 from 5 to 8
+move 1 from 5 to 2
+move 4 from 1 to 4
+move 8 from 9 to 4
+move 3 from 9 to 8
+move 2 from 9 to 1
+move 6 from 7 to 5
+move 12 from 4 to 2
+move 6 from 8 to 3
+move 1 from 4 to 1
+move 1 from 3 to 1
+move 13 from 2 to 3
+move 4 from 5 to 3
+move 1 from 4 to 9
+move 1 from 8 to 9
+move 12 from 3 to 2
+move 1 from 9 to 1
+move 2 from 5 to 9
+move 3 from 9 to 5
+move 1 from 7 to 5
+move 3 from 7 to 3
+move 1 from 5 to 4
+move 1 from 5 to 8
+move 9 from 2 to 3
+move 2 from 2 to 3
+move 3 from 1 to 9
+move 1 from 8 to 9
+move 3 from 9 to 1
+move 9 from 2 to 6
+move 1 from 9 to 5
+move 6 from 2 to 3
+move 2 from 6 to 9
+move 3 from 6 to 3
+move 1 from 4 to 3
+move 2 from 9 to 6
+move 2 from 7 to 2
+move 2 from 2 to 8
+move 24 from 3 to 7
+move 2 from 5 to 6
+move 2 from 8 to 2
+move 7 from 2 to 8
+move 8 from 3 to 6
+move 2 from 1 to 3
+move 1 from 1 to 2
+move 1 from 5 to 2
+move 15 from 7 to 4
+move 9 from 7 to 9
+move 7 from 9 to 1
+move 5 from 8 to 1
+move 4 from 1 to 4
+move 19 from 4 to 3
+move 22 from 3 to 5
+move 1 from 7 to 5
+move 9 from 5 to 4
+move 6 from 1 to 3
+move 6 from 3 to 1
+move 4 from 5 to 4
+move 1 from 2 to 1
+move 1 from 2 to 6
+move 4 from 6 to 1
+move 1 from 3 to 6
+move 3 from 6 to 3
+move 2 from 9 to 8
+move 2 from 5 to 3
+move 2 from 5 to 1
+move 10 from 6 to 4
+move 4 from 4 to 9
+move 7 from 4 to 3
+move 2 from 8 to 7
+move 4 from 9 to 3
+move 5 from 5 to 7
+move 1 from 5 to 1
+move 1 from 6 to 3
+move 1 from 8 to 4
+move 1 from 8 to 3
+move 13 from 4 to 5
+move 1 from 1 to 8
+move 6 from 5 to 3
+move 1 from 7 to 6
+move 5 from 7 to 6
+move 9 from 1 to 8
+move 1 from 8 to 4
+move 1 from 7 to 1
+move 1 from 4 to 1
+move 5 from 3 to 7
+move 3 from 7 to 9
+move 1 from 5 to 4
+move 6 from 8 to 6
+move 1 from 9 to 3
+move 2 from 9 to 5
+move 7 from 5 to 9
+move 1 from 7 to 5
+move 2 from 5 to 3
+move 10 from 6 to 8
+move 2 from 6 to 1
+move 1 from 4 to 9
+move 1 from 7 to 5
+move 8 from 8 to 2
+move 1 from 1 to 7
+move 1 from 9 to 7
+move 1 from 5 to 1
+move 3 from 9 to 8
+move 7 from 8 to 7
+move 6 from 7 to 1
+move 1 from 8 to 7
+move 4 from 7 to 1
+move 16 from 3 to 7
+move 4 from 3 to 1
+move 5 from 7 to 8
+move 16 from 1 to 4
+move 9 from 1 to 7
+move 1 from 3 to 4
+move 15 from 4 to 8
+move 1 from 3 to 1
+move 2 from 1 to 6
+move 2 from 4 to 9
+move 17 from 8 to 2
+move 6 from 9 to 5
+move 8 from 7 to 8
+move 2 from 6 to 9
+move 4 from 5 to 7
+move 2 from 8 to 5
+move 1 from 5 to 9
+move 11 from 2 to 6
+move 4 from 6 to 1
+move 5 from 2 to 8
+move 2 from 9 to 2
+move 1 from 9 to 3
+move 3 from 1 to 8
+move 1 from 3 to 6
+move 7 from 6 to 9
+move 2 from 5 to 4
+move 6 from 7 to 4
+move 4 from 8 to 1
+move 1 from 5 to 2
+move 1 from 6 to 1
+move 7 from 9 to 8
+move 2 from 7 to 9
+move 9 from 2 to 9
+move 5 from 9 to 3
+move 3 from 2 to 8
+move 4 from 8 to 7
+move 9 from 7 to 2
+move 3 from 1 to 3
+move 14 from 8 to 1
+move 2 from 8 to 3
+move 1 from 9 to 4
+move 3 from 7 to 9
+move 8 from 3 to 9
+move 2 from 2 to 7
+move 12 from 1 to 8
+move 4 from 1 to 6
+move 2 from 6 to 7
+move 1 from 6 to 7
+move 9 from 4 to 7
+move 9 from 7 to 4
+move 1 from 1 to 6
+move 2 from 3 to 6
+move 2 from 6 to 8
+move 12 from 9 to 8
+move 2 from 6 to 9
+move 2 from 9 to 7
+move 1 from 8 to 5
+move 5 from 7 to 5
+move 1 from 9 to 1
+move 3 from 4 to 1
+move 5 from 4 to 8
+move 4 from 1 to 7
+move 1 from 4 to 2
+move 19 from 8 to 4
+move 2 from 7 to 5
+move 14 from 8 to 5
+move 2 from 7 to 8
+move 3 from 9 to 8
+move 19 from 4 to 2
+move 9 from 2 to 4
+move 2 from 7 to 8
+move 15 from 5 to 9
+move 15 from 9 to 8
+move 1 from 5 to 9
+move 11 from 8 to 7
+move 4 from 5 to 8
+move 1 from 5 to 9
+move 2 from 9 to 5
+move 2 from 2 to 6
+move 14 from 2 to 9
+move 12 from 8 to 9
+move 3 from 8 to 4
+move 7 from 9 to 2
+move 4 from 7 to 9
+move 1 from 6 to 9
+move 1 from 7 to 5
+move 1 from 6 to 2
+move 3 from 5 to 4
+move 19 from 9 to 4
+move 1 from 5 to 1
+move 1 from 9 to 8
+move 1 from 1 to 7
+move 1 from 8 to 9
+move 4 from 7 to 2
+move 3 from 7 to 6
+move 18 from 4 to 2
+move 17 from 2 to 3
+move 2 from 6 to 8
+move 17 from 3 to 6
+move 13 from 2 to 1
+move 2 from 8 to 3
+move 2 from 2 to 9
+move 6 from 1 to 9
+move 1 from 3 to 4
+move 1 from 3 to 9
+move 8 from 6 to 4
+move 20 from 4 to 8
+move 3 from 4 to 8
+move 15 from 8 to 2
+move 11 from 2 to 6
+move 2 from 1 to 7
+move 7 from 9 to 8
+move 6 from 9 to 3
+move 1 from 6 to 5
diff --git a/2022/day05/main b/2022/day05/main
new file mode 100755
index 0000000..1d67170
--- /dev/null
+++ b/2022/day05/main
Binary files differ
diff --git a/2022/day05/main.c b/2022/day05/main.c
new file mode 100644
index 0000000..f6af2ea
--- /dev/null
+++ b/2022/day05/main.c
@@ -0,0 +1,122 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct StackItem_;
+
+typedef struct StackItem_ {
+ char value;
+ struct StackItem_ *next, *prev;
+} StackItem;
+
+typedef struct Stack_ {
+ StackItem *top, *bottom;
+} Stack;
+
+void push_top(Stack *stack, StackItem *item) {
+ if (stack->top)
+ {
+ StackItem* old = stack->top;
+ old->next = item;
+ item->prev = old;
+ }
+ if (!stack->top) stack->bottom = item;
+ stack->top = item;
+}
+
+void push_back(Stack *stack, StackItem *item) {
+ if (stack->bottom)
+ {
+ StackItem* old = stack->bottom;
+ old->prev = item;
+ item->next = old;
+ }
+ if (!stack->bottom) stack->top = item;
+ stack->bottom = item;
+}
+
+StackItem* pop_top(Stack *stack) {
+ StackItem* old = stack->top;
+ stack->top = old->prev;
+ if (old->prev != 0)
+ {
+ stack->top->next = 0;
+ }
+ old->next = old->prev = 0;
+
+ return old;
+}
+
+StackItem* pop_back(Stack *stack) {
+ StackItem* old = stack->bottom;
+ stack->bottom = old->next;
+ stack->bottom->prev = 0;
+ old->next = old->prev = 0;
+
+ return old;
+}
+
+void printCargo(Stack *cargo, size_t len)
+{
+ for (int i = 0; i < len; i++)
+ {
+ for ( StackItem *e = cargo[i].bottom; e != 0; e = e->next )
+ {
+ printf("%c", e->value);
+ }
+ printf("\n");
+ }
+}
+
+int main()
+{
+ char *line = 0;
+ size_t len;
+ Stack *cargo;
+ size_t cargos;
+ ssize_t nread;
+
+ int amount, from, to;
+
+ while ((nread = getline(&line, &len, stdin)) != 0)
+ {
+ if ( line[1] == '1' ) continue;
+ if ( line[0] == '\n' ) break;
+ if ( !cargo ) {
+ cargos = (nread+1)/4;
+ cargo = (Stack*)malloc( sizeof(Stack) * cargos );
+ }
+
+ for (int i = 0; i < cargos; i++ ) {
+ char load = line[i*4+1];
+ if ( load != ' ' ) {
+ StackItem *box = malloc(sizeof(StackItem));
+ box->value = line[i*4+1];
+ box->next = box->prev = 0;
+ push_back(&cargo[i], box);
+ }
+ }
+ }
+
+ printCargo(cargo, cargos);
+ printf("---------------\n");
+
+ while (scanf("move %d from %d to %d\n", &amount, &from, &to) != EOF)
+ {
+ printf( "%d %d %d\n", amount, from, to );
+ for (int i = 0; i < amount; i++)
+ {
+ StackItem *item = pop_top(&cargo[from-1]);
+ push_top(&cargo[to-1], item);
+
+ printCargo(cargo, cargos);
+ printf("---------------\n");
+ }
+ }
+
+ for ( int i = 0; i < cargos; i++ )
+ {
+ printf( "%c", cargo[i].top->value );
+ }
+ printf("\n");
+}
diff --git a/2022/day05/main2.c b/2022/day05/main2.c
new file mode 100644
index 0000000..f7fe805
--- /dev/null
+++ b/2022/day05/main2.c
@@ -0,0 +1,129 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+
+struct StackItem_;
+
+typedef struct StackItem_ {
+ char value;
+ struct StackItem_ *next, *prev;
+} StackItem;
+
+typedef struct Stack_ {
+ StackItem *top, *bottom;
+} Stack;
+
+void push_top(Stack *stack, StackItem *item) {
+ if (stack->top)
+ {
+ StackItem* old = stack->top;
+ old->next = item;
+ item->prev = old;
+ }
+ if (!stack->top) stack->bottom = item;
+ stack->top = item;
+}
+
+void push_back(Stack *stack, StackItem *item) {
+ if (stack->bottom)
+ {
+ StackItem* old = stack->bottom;
+ old->prev = item;
+ item->next = old;
+ }
+ if (!stack->bottom) stack->top = item;
+ stack->bottom = item;
+}
+
+StackItem* pop_top(Stack *stack) {
+ StackItem* old = stack->top;
+ stack->top = old->prev;
+ if (old->prev != 0)
+ {
+ stack->top->next = 0;
+ }
+ old->next = old->prev = 0;
+
+ return old;
+}
+
+StackItem* pop_back(Stack *stack) {
+ StackItem* old = stack->bottom;
+ stack->bottom = old->next;
+ stack->bottom->prev = 0;
+ old->next = old->prev = 0;
+
+ return old;
+}
+
+void printCargo(Stack *cargo, size_t len)
+{
+ for (int i = 0; i < len; i++)
+ {
+ for ( StackItem *e = cargo[i].bottom; e != 0; e = e->next )
+ {
+ printf("%c", e->value);
+ }
+ printf("\n");
+ }
+}
+
+int main()
+{
+ char *line = 0;
+ size_t len;
+ Stack *cargo;
+ size_t cargos;
+ ssize_t nread;
+
+ int amount, from, to;
+
+ Stack *temp = malloc(sizeof(Stack));
+
+ while ((nread = getline(&line, &len, stdin)) != 0)
+ {
+ if ( line[1] == '1' ) continue;
+ if ( line[0] == '\n' ) break;
+ if ( !cargo ) {
+ cargos = (nread+1)/4;
+ cargo = (Stack*)malloc( sizeof(Stack) * cargos );
+ }
+
+ for (int i = 0; i < cargos; i++ ) {
+ char load = line[i*4+1];
+ if ( load != ' ' ) {
+ StackItem *box = malloc(sizeof(StackItem));
+ box->value = line[i*4+1];
+ box->next = box->prev = 0;
+ push_back(&cargo[i], box);
+ }
+ }
+ }
+
+ printCargo(cargo, cargos);
+ printf("---------------\n");
+
+ while (scanf("move %d from %d to %d\n", &amount, &from, &to) != EOF)
+ {
+ printf( "%d %d %d\n", amount, from, to );
+ for (int i = 0; i < amount; i++)
+ {
+ StackItem *item = pop_top(&cargo[from-1]);
+ push_top(temp, item);
+ }
+ for (int i = 0; i < amount; i++)
+ {
+ StackItem *item = pop_top(temp);
+ push_top(&cargo[to-1], item);
+
+ printCargo(cargo, cargos);
+ printf("---------------\n");
+ }
+ }
+
+ for ( int i = 0; i < cargos; i++ )
+ {
+ printf( "%c", cargo[i].top->value );
+ }
+ printf("\n");
+}
diff --git a/2022/day06/input2.txt b/2022/day06/input2.txt
new file mode 100644
index 0000000..19a271d
--- /dev/null
+++ b/2022/day06/input2.txt
@@ -0,0 +1 @@
+mvwvrwvwbblffmvmhmllmzmqzzbhbnnvrnvnmvvqrqrccpsstvvshvvpvvpddzwwjddfzzgbbzcchrrtzzmfffzqqsjjbfbjfjwffhrhrgrfrsfrsffbwwphwhgwgmgnggzwzhwzzpggnccdbcbssgccqgcgcvgccwffrqfqtqmqppwphhlbblnnwhwfhwhmhzhmmzbmbbjjmcjcggwlgltldttpccjlccbjccvfcvvdbvdvndvvmbmcbmmhphpbhhgjgllmljlqlwlclzlccrvrdvdzvzzzbrbrnbblplrplpsstdtjddgjgjgwjwzwbzwwrhwwbzwbwpwssvgvnnwnvvjqqswwsccwctwtntdndffjzfzmfzmfzmfzzhjzhzssdsgsnggbbqdqlqbllmglgddqppjjtzttlflrrczcmzzsppvfpvffcfrccvvvhjvhvfhfbbwdwrwswqqftfbfcfdfnfpnfflbbcmcqqsqwqqccmwmvwvffvdvlvtvqttnllqslsnllzplldmmzczhzmzzhllpfpqpnnqwwwrzzdpzzhccfvcvclcnnrjrmjrjlrlflqqtpqqdgqghhwdwdttlztttwmmvfmftfptphhddswdsdpdvpvpcpjjnvjvqvhvqqqfgqqgwqgwghwwmmvmvfmvvnvsslcclzlslppztzfzbzllcgllcsllvgvqvtqtsstztwwgjgghnhnhdnnqgnntqqtccdmcmhmpphpmmmbpbptpnnnmnppwlpwwfpwfwmfwfssbspslsflljpppbsspwptpwttfbtfftltvlttdmttllmggfcgfccvwcvczvvgvsgswsrrwppgcpggpgnngfnndrrdjrdrfdfmmjmsmbmmwjjjfzfdfbdbbtgbbcsbccgbbrvvrqrwqwmmhrhhbcbdbvdvzdvdjvvnwntwwdfwwrhrmhhnghhncccfttmpmrrjhhqddrsrvvssmrrgvgdgmmfqqhttspswpwlplpjljcjmjmvmdvvhbvvtqvqccczwwtlllztlzzpnnqznzddqsqvsshrrmccnppgrrjcjpccrvcvnvcncllffvnnbsbhhrmhmzzzhrhchjccgjcjwwhddmfmhhmrrrbccqddmjdmjdjtdjjmttzstsctssvvgghgbbhmhzmmjqqqqjgjfjpffpmpzmzszfzgzcggpmpnnqjqffgpghhszzvlzzdgzggqmggqlllcwwtzwwcfwccpjpggtqgtttzffdpffjzfzddzppprnprpqqbppvjpjzppbzpbzppwzzcnndsdzszbssqwqggnhggnzggpcpnndssghsggmfmrffvddvwvssjmjrmrmnndwdwhdhwwfjfjwjmwwqssmdsmdmssqzzrgzzjttnqnfqfcccvvmsvsvffccdjdccgtgqqjwqqnbqqnhqhrqrmrgmrrzjzrznzllwrlrbbcppctptwtfttlntnltnlnzzhrzhrzrtzzvsvfvjffsbsnbbfpphtptjjmffqgqnggnqnsshffslflggtlggmpggnfgfbgbfbcbbtdbdjqwfggzsfmzflttgdfqchhtjfwlmdnsbvmqcrhsrtwtjlmnlwbvjvqdzswdthbjslqzgmtzfjfcrgbhrrjtzgljbqfrzzqszhddnmzpnbgnflghnflwdmjdhgpnvwvnltcngwggqdznrpdtwsrclwwlfzhnjtpqcgzjqjnhcwbhndwvgrczhzwfjrdvjztdbjshmhrrqctjwpcdnpnvrtggrmhzhdtlntjphcddplgfvvmjzcbbpjbqbjwmnwqgftbmchghwvrlptvnfbffvgtdbtnfzwdmdlgzjbrvffvbrfwgjzzpbpcdzhcjbhfwnmqqwvjvnpgdqdjsmwdmrgfqrwhhqqjpfmvlncfdjchrccwpbptccdchqwvbcqzlhbfgrdzgncbwrzqpfszrcwtmnvbztjlzjlrqqfrnplhnmdjljcpnqssthhmjqrrlwdvsjswdwtfstmbvwhbptjnphjmnllbwffppzmdpchbcwcmgqzfmdqvhcmrvtgtjwlzfpnjnjtfvdhtjlqsdjwrrnflnsqrtfsnbjfdllhqslltsjqzdfqthqjjgrtqjwmlqqlhvszqswmdcbnwqgshpvfjdtvsqjvcnrnvtpfsgqszhtmcdlsqjwmttcqsdlvssrgwhtmtqwmttptnmgzpwzzrbwtsrjhmjpblztgftppcwwrjppvwlvdhwwdlfcdvhwpvhqpwrqsczvlmtghrrvqbphljcmcrfmwltlmnzchzrlbgspdjwfbhrmnfhvjwlgtghcpbfgdvrmwbqbprfvwpzqzrgqbhjtztwhjcjtncmbgjphsgdfvjwjljlwzhsdldqtdvgtzpwtmrbnpvqrmfdwngzqtsdjjztslrwdnfwgbnsjblcjzvmgbqllmdvvvdcvplgbzmhcrpbbjbfzhjgfpmjtrpmgvshzvqhcbcjzfcsvqggjcllcnjlrwqfpzldswzjgzvqwvszhrntnvlcpdcfqhqrtmhbdjqpfblrsbrhdfdwfgbhsnnjpgjvfpssfmhdbdncfrqbzpbttrhfzqnrttltqbvmhglbdpwmdbmgwcdsdsflmcnphwvbbhgqpqmwbdsmqwhcdftdlcfnstlfnzzsjhqzlsdmhpvlcqvhhlpdtzlqzlvbbwhhdsqhntbtpjjvnjlrncfmvnqmzwpldgrbfcfgdtlmrfzcbqfhvhpmsrrlnqwfggwrjsmnpnqhvvcfsfspfrmhwmbpqfhprzsswrczttlczhcqvgqqsnbhhfszqbswgtcjgddhngtcvlwqqmqzntrcwgwjhmhlgclpgtmqnpgwwhnjfdvvjgmqjlzsmwztpsdzrjlshswzljlmdzfqmqbtgtzlsfwqvwrdchjvrdnwdbprfvdvczstvnzfzzfmzbwjhtflbmhlgmfzrdfrqwfbltwqlqrghlprppvlqwggvczdcnmrmblhcfmpzdmqppgwhbbrjlzsvmsfzlrdljftcrdfdgmvrccwszpjmvdnbmfdnsgmgzsdpbrlsqvsmcwwqlwtwbgfvwtsmpqlnhjchnzrpncgtcqgwqrmqmrwsbmdvqcpggpzcjgtrhvnbpprlwfnjlvrgrdjjvncjmmflrpczqnlbqczggssqfcjcrghqlsztpdjpbbfcdjzzdjbljlsczdmrgshdscvhnltrwchjcmjzmjbhldnqzwwpswsnsldcbdcdpdgpjgwrnfbcpjtvzlhvgggldcfqcwwppvltsvsmwzwdgmhnfggtgtwldmrglcvmstgmbgbjhwwhgdhfrbjlwfhjfppdmffblbbzrplhlhqlsrnsthvjtglqntzcncmvhqnlsvvrscrhlncgncjswfgcvgjlwsndzmsbhbdqsggdgrsfqtzwnjpsdlbsqjrrjwwlbptwqpfqwvpsrtrmstddzdbjjlwvfqcpfczpsnmcgbfpbwcpljdhrgsqftbnplccjphwsdbprqfqqfcvtcdznnhrbdqpccphvdgtspmzzdbnslnrvtfrtbhcfzfgmhrttmdpwftvccjbllhqgtmpgwvbdjgtvtfbfnnsfgzqjmrpbcmqhpfbstznbvgtbhnwbbnjfsthdgdrpfdtvrtmgbwzqqpnlltbshjvnhsmqhqwzgbsfqqccfznjtnnzdrgcvwnlffdgvvqzvwhwfswdmqlrsglntzsnwjzgrhhwzzshwsfmlmrbnmrqlptmjgmtqctrmddzghsgtrbbcsmhtcnrzwmvrjmrnmhbjmflrclvlbzwbgmtnmwqgfmbbnnrdvhqcflglvzbmjzjtvnmrbgghnccfrphjshsgtrhfmmghhpwgclfvzfbdccsfrlfwtsjjnhlndpwcjdtlllhcsvwrwsbppqwhfcvnsnrvthrsbgmgjhpmjdndmdqdgzfvbqfmgfjrnrjchstrjprfwfnjqblhjdgsstvtpcsvmpbhggnwzncpjdhrcllcghhprhwhfgsqpfzphrdlcbrccglsb
diff --git a/2022/day06/main b/2022/day06/main
new file mode 100755
index 0000000..9963238
--- /dev/null
+++ b/2022/day06/main
Binary files differ
diff --git a/2022/day06/main.c b/2022/day06/main.c
new file mode 100644
index 0000000..5b96fb9
--- /dev/null
+++ b/2022/day06/main.c
@@ -0,0 +1,26 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+int main()
+{
+ char *line = 0;
+ size_t len;
+ ssize_t nlen = getline(&line, &len, stdin);
+ int distinctChars = 4;
+ for (int i = distinctChars -1; i < nlen; i++)
+ {
+ int isTwoEqual = 0;
+ for (int ii = 0; ii < distinctChars; ii++)
+ {
+ for (int iii = 0; iii < distinctChars; iii++)
+ {
+ if (ii == iii) continue;
+ isTwoEqual |= (line[i-ii] == line[i-iii]);
+ }
+ }
+ if ( !isTwoEqual ) {
+ printf("%d\n", i+1);
+ return 0;
+ }
+ }
+}
diff --git a/2022/day06/main2.c b/2022/day06/main2.c
new file mode 100644
index 0000000..3ab3786
--- /dev/null
+++ b/2022/day06/main2.c
@@ -0,0 +1,26 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+int main()
+{
+ char *line = 0;
+ size_t len;
+ ssize_t nlen = getline(&line, &len, stdin);
+ int distinctChars = 14;
+ for (int i = distinctChars -1; i < nlen; i++)
+ {
+ int isTwoEqual = 0;
+ for (int ii = 0; ii < distinctChars; ii++)
+ {
+ for (int iii = 0; iii < distinctChars; iii++)
+ {
+ if (ii == iii) continue;
+ isTwoEqual |= (line[i-ii] == line[i-iii]);
+ }
+ }
+ if ( !isTwoEqual ) {
+ printf("%d\n", i+1);
+ return 0;
+ }
+ }
+}
diff --git a/2022/day07/input1.txt b/2022/day07/input1.txt
new file mode 100644
index 0000000..09a921e
--- /dev/null
+++ b/2022/day07/input1.txt
@@ -0,0 +1,23 @@
+$ cd /
+$ ls
+dir a
+14848514 b.txt
+8504156 c.dat
+dir d
+$ cd a
+$ ls
+dir e
+29116 f
+2557 g
+62596 h.lst
+$ cd e
+$ ls
+584 i
+$ cd ..
+$ cd ..
+$ cd d
+$ ls
+4060174 j
+8033020 d.log
+5626152 d.ext
+7214296 k
diff --git a/2022/day07/input2.txt b/2022/day07/input2.txt
new file mode 100644
index 0000000..1d69f2d
--- /dev/null
+++ b/2022/day07/input2.txt
@@ -0,0 +1,1030 @@
+$ cd /
+$ ls
+dir dtcfhsm
+dir hblzj
+dir jbssdwf
+35442 jrfpjdpw.znd
+dir ljv
+dir nhp
+31592 qtwnndbg.rsh
+326062 sjc.mvn
+235205 wmtvbq
+$ cd dtcfhsm
+$ ls
+206818 czgnjmw
+dir drjhjtm
+dir hjlmf
+dir jllhmmf
+187778 jrfpjdpw.znd
+49334 lljh.jhb
+dir qtwnndbg
+dir sshvc
+dir tzhbztd
+290622 vmwddb
+214581 wmtvbq
+dir wqcsrw
+dir zjbzdrnd
+$ cd drjhjtm
+$ ls
+dir cvrf
+dir gddqh
+dir qccmn
+dir qjgv
+dir sjgwv
+$ cd cvrf
+$ ls
+233913 frfvjtt.dhv
+30000 ljcmscc.jvh
+61418 mcs.blh
+227397 swd.mrf
+dir tpwvvbh
+120888 vsrfw.gvd
+$ cd tpwvvbh
+$ ls
+266824 qtwnndbg
+dir sdwjz
+dir vrgjhvrd
+88616 wmtvbq
+dir wqcsrw
+$ cd sdwjz
+$ ls
+269696 jrfpjdpw.znd
+$ cd ..
+$ cd vrgjhvrd
+$ ls
+67409 sddmdd.dsb
+$ cd ..
+$ cd wqcsrw
+$ ls
+dir ttgwphbc
+$ cd ttgwphbc
+$ ls
+178435 csjzz.vcd
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd gddqh
+$ ls
+dir cfvpq
+318413 jrfpjdpw.znd
+dir wwv
+$ cd cfvpq
+$ ls
+dir ljncp
+175740 ljv.nqn
+$ cd ljncp
+$ ls
+146594 rhjlds.nfm
+$ cd ..
+$ cd ..
+$ cd wwv
+$ ls
+dir zqzch
+$ cd zqzch
+$ ls
+dir jllhmmf
+$ cd jllhmmf
+$ ls
+dir pvqhg
+$ cd pvqhg
+$ ls
+76789 ntdtbnr
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd qccmn
+$ ls
+dir czpnrsfc
+123617 jrcgldd.pvd
+$ cd czpnrsfc
+$ ls
+316779 lqtw.vtp
+dir tdwmpl
+$ cd tdwmpl
+$ ls
+84395 rvqgwwz.rbq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd qjgv
+$ ls
+173535 qtwnndbg.clf
+73941 wldfq.rjm
+327245 zfqsvs.qwh
+$ cd ..
+$ cd sjgwv
+$ ls
+307757 mvgmfhh.thn
+$ cd ..
+$ cd ..
+$ cd hjlmf
+$ ls
+313069 qlmlvvvg
+$ cd ..
+$ cd jllhmmf
+$ ls
+180570 chhgrj
+dir fqqnjd
+dir hmz
+dir ljv
+dir lrlqc
+dir pfvmhz
+299487 tnhwncj.nfv
+dir wqcsrw
+$ cd fqqnjd
+$ ls
+131810 mcm.pbj
+237810 mvgmfhh.thn
+199479 qrqpl
+281772 vmwddb.qbh
+$ cd ..
+$ cd hmz
+$ ls
+319803 lqtw.vtp
+111388 mgdwvvqd
+38536 mlqsbjr.npn
+85619 vmwddb.vhq
+$ cd ..
+$ cd ljv
+$ ls
+dir vmwddb
+$ cd vmwddb
+$ ls
+dir bgdchqwj
+$ cd bgdchqwj
+$ ls
+147734 jrfpjdpw.znd
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd lrlqc
+$ ls
+327255 wmtvbq
+$ cd ..
+$ cd pfvmhz
+$ ls
+dir bpdv
+dir cgnhzrb
+dir cpgvb
+71305 mmlbp.hnw
+207351 rgwgmtr
+223983 sgmlt.nrj
+$ cd bpdv
+$ ls
+50169 stvpjws.pbn
+$ cd ..
+$ cd cgnhzrb
+$ ls
+328146 fzd.fgm
+307323 gnmgw.rsf
+311890 tmrdgzmm
+$ cd ..
+$ cd cpgvb
+$ ls
+241313 vzgnlqzh.fcb
+$ cd ..
+$ cd ..
+$ cd wqcsrw
+$ ls
+dir jllhmmf
+$ cd jllhmmf
+$ ls
+dir jllhmmf
+$ cd jllhmmf
+$ ls
+161384 rvqgwwz.rbq
+2778 zlbgrzs.jlv
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd qtwnndbg
+$ ls
+222554 qtwnndbg
+20197 rrnmgz.hsj
+135325 rvqgwwz.rbq
+dir rzbjntjl
+81086 tbsj.zns
+275538 wqcsrw
+$ cd rzbjntjl
+$ ls
+315148 lqtw.vtp
+$ cd ..
+$ cd ..
+$ cd sshvc
+$ ls
+37541 mvgmfhh.thn
+27276 vwwpbqq
+$ cd ..
+$ cd tzhbztd
+$ ls
+dir gcrfzd
+dir ltvhvt
+dir qtwnndbg
+dir rgqwp
+dir wqcsrw
+$ cd gcrfzd
+$ ls
+319338 jrfpjdpw.znd
+24471 wmtvbq
+77828 zcbwwf
+210897 zgfncbmh
+169336 zvrfwmgm
+$ cd ..
+$ cd ltvhvt
+$ ls
+dir qtwnndbg
+1644 rqr
+114660 sfvv.frz
+dir shl
+dir vmwddb
+dir wqcsrw
+$ cd qtwnndbg
+$ ls
+dir hgfvpn
+dir jcgr
+dir ljv
+dir scrd
+dir zwwclfj
+$ cd hgfvpn
+$ ls
+83476 nrpjcnz.psn
+$ cd ..
+$ cd jcgr
+$ ls
+dir jhvqhq
+dir zhdch
+$ cd jhvqhq
+$ ls
+dir ljv
+$ cd ljv
+$ ls
+213483 hsjbmv
+165211 rvqgwwz.rbq
+48993 wmtvbq
+$ cd ..
+$ cd ..
+$ cd zhdch
+$ ls
+126929 zsmpbnml.qbl
+$ cd ..
+$ cd ..
+$ cd ljv
+$ ls
+60596 jrfpjdpw.znd
+$ cd ..
+$ cd scrd
+$ ls
+313679 nmhhp.bvt
+199353 wmtvbq
+$ cd ..
+$ cd zwwclfj
+$ ls
+dir czqszmf
+dir dmv
+dir pgjwmnwf
+dir whpmfw
+$ cd czqszmf
+$ ls
+181716 jrfpjdpw.znd
+$ cd ..
+$ cd dmv
+$ ls
+303356 qtwnndbg.phh
+$ cd ..
+$ cd pgjwmnwf
+$ ls
+59757 cbdggnvh.szc
+$ cd ..
+$ cd whpmfw
+$ ls
+102901 lqtw.vtp
+162907 rvqgwwz.rbq
+dir whd
+$ cd whd
+$ ls
+dir rvqnddsb
+$ cd rvqnddsb
+$ ls
+265936 wmtvbq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd shl
+$ ls
+270493 llqj.cvz
+199257 lvhrltd.cbq
+44404 qqhvstd.vjd
+$ cd ..
+$ cd vmwddb
+$ ls
+176668 dsmjtpcm.vfr
+$ cd ..
+$ cd wqcsrw
+$ ls
+85545 wqcsrw.llm
+$ cd ..
+$ cd ..
+$ cd qtwnndbg
+$ ls
+dir ljv
+dir psqjqb
+dir tnvlnmw
+44316 wmtvbq
+dir wqcsrw
+$ cd ljv
+$ ls
+205777 jrfpjdpw.znd
+279684 mvgmfhh.thn
+dir ppw
+dir rms
+dir tsccztf
+dir wqcsrw
+$ cd ppw
+$ ls
+139214 ljv
+dir vmwddb
+$ cd vmwddb
+$ ls
+141988 fbgbwp.fwl
+$ cd ..
+$ cd ..
+$ cd rms
+$ ls
+221170 crlhwdqs.rbp
+$ cd ..
+$ cd tsccztf
+$ ls
+dir csrc
+dir dbtzwqj
+dir vqw
+$ cd csrc
+$ ls
+dir jllhmmf
+281285 nwbcqwf.lqw
+$ cd jllhmmf
+$ ls
+337404 qtwnndbg.qhb
+$ cd ..
+$ cd ..
+$ cd dbtzwqj
+$ ls
+89297 clsblqf.sql
+75292 jrfpjdpw.znd
+242192 mvgmfhh.thn
+$ cd ..
+$ cd vqw
+$ ls
+43526 vrgfvcd.tsc
+$ cd ..
+$ cd ..
+$ cd wqcsrw
+$ ls
+38096 lqtw.vtp
+37490 mvgmfhh.thn
+$ cd ..
+$ cd ..
+$ cd psqjqb
+$ ls
+9842 wqcsrw
+$ cd ..
+$ cd tnvlnmw
+$ ls
+dir cvgs
+dir npslzj
+dir qtwnndbg
+dir tsshp
+$ cd cvgs
+$ ls
+48820 jllhmmf.rjr
+2036 sprlcwv
+$ cd ..
+$ cd npslzj
+$ ls
+dir bbj
+227147 slfq.bdf
+$ cd bbj
+$ ls
+77671 bsmgb
+$ cd ..
+$ cd ..
+$ cd qtwnndbg
+$ ls
+121924 wmtvbq
+$ cd ..
+$ cd tsshp
+$ ls
+33269 jllhmmf
+$ cd ..
+$ cd ..
+$ cd wqcsrw
+$ ls
+dir jllhmmf
+$ cd jllhmmf
+$ ls
+133114 rvqgwwz.rbq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd rgqwp
+$ ls
+13207 djgldhd
+120394 fpjppcp.sbr
+296110 fwwqr.gzz
+146254 nprjzt.fml
+265873 wqcsrw
+$ cd ..
+$ cd wqcsrw
+$ ls
+dir bbjgh
+157738 mvgmfhh.thn
+dir njdnjmz
+dir wqm
+179080 wtgpwt.sqm
+$ cd bbjgh
+$ ls
+2285 wqcsrw.cvn
+$ cd ..
+$ cd njdnjmz
+$ ls
+dir cfd
+$ cd cfd
+$ ls
+95362 vmwddb.rgq
+$ cd ..
+$ cd ..
+$ cd wqm
+$ ls
+235077 jrfpjdpw.znd
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd wqcsrw
+$ ls
+11821 rvqgwwz.rbq
+$ cd ..
+$ cd zjbzdrnd
+$ ls
+273551 ljv.mtt
+73077 ljv.rpz
+dir sbqsqw
+102241 wmtvbq
+$ cd sbqsqw
+$ ls
+308189 drmlmhb.jqt
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd hblzj
+$ ls
+dir cgm
+113128 csgchmtn.drj
+dir qlg
+dir rsgbjpp
+dir tpjpnjg
+dir vmwddb
+$ cd cgm
+$ ls
+dir dfm
+dir fqhzrms
+dir ljv
+125604 lqtw.vtp
+dir vtrs
+56731 wmtvbq
+$ cd dfm
+$ ls
+228574 ljv
+$ cd ..
+$ cd fqhzrms
+$ ls
+dir qtwnndbg
+$ cd qtwnndbg
+$ ls
+230853 njvmtghw
+$ cd ..
+$ cd ..
+$ cd ljv
+$ ls
+68290 fbrm.gdc
+117256 jllhmmf.dvj
+$ cd ..
+$ cd vtrs
+$ ls
+150365 brt.dqc
+313762 chhlg.fst
+dir dtmjbfm
+92651 ljv.sjz
+306760 rrwh
+276248 rvqgwwz.rbq
+$ cd dtmjbfm
+$ ls
+270715 jllhmmf.vdw
+20878 wmtvbq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd qlg
+$ ls
+dir fgv
+131774 jrfpjdpw.znd
+dir ldmpnbt
+36604 mvgmfhh.thn
+dir prhtj
+dir vfsj
+dir wqcsrw
+$ cd fgv
+$ ls
+222821 wmtvbq
+$ cd ..
+$ cd ldmpnbt
+$ ls
+183619 tbfjvng
+$ cd ..
+$ cd prhtj
+$ ls
+201210 lpdvzs.ndv
+309785 smmfht
+$ cd ..
+$ cd vfsj
+$ ls
+dir bzznmpc
+123825 cbzvvdm.rvs
+dir ghp
+dir gwzm
+313610 jrfpjdpw.znd
+dir ndsfzz
+34270 rjq.ttw
+dir rsqhz
+108776 rvqgwwz.rbq
+dir tsmlpnbc
+29065 wwqfpv.fgv
+dir zmljzwt
+$ cd bzznmpc
+$ ls
+147394 rft.fsn
+$ cd ..
+$ cd ghp
+$ ls
+dir bhvgpz
+248463 gwwtl
+285955 tccqqtbw.bzv
+122937 zwqh
+$ cd bhvgpz
+$ ls
+300057 jllhmmf
+137933 jrfpjdpw.znd
+170731 pstc.hjq
+dir tvpw
+$ cd tvpw
+$ ls
+226913 ltjtlcp.nfj
+113485 mvgmfhh.thn
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd gwzm
+$ ls
+33023 jrfpjdpw.znd
+dir zwztrgr
+$ cd zwztrgr
+$ ls
+310997 mtrfsv.jgn
+$ cd ..
+$ cd ..
+$ cd ndsfzz
+$ ls
+dir bhfnclp
+dir jllhmmf
+15445 lqtw.vtp
+68225 rvqgwwz.rbq
+46093 spvrn
+dir vdfmwrq
+dir zwzlr
+$ cd bhfnclp
+$ ls
+174231 mvgmfhh.thn
+dir qgtrvmf
+202378 qtwnndbg.cnp
+124762 sctssqpq
+$ cd qgtrvmf
+$ ls
+65851 mvgmfhh.thn
+$ cd ..
+$ cd ..
+$ cd jllhmmf
+$ ls
+dir jmqltsd
+dir mjzcf
+281062 sjdmlqzs
+dir vmjjtbl
+$ cd jmqltsd
+$ ls
+327426 ddhs.qsp
+$ cd ..
+$ cd mjzcf
+$ ls
+229568 cjq.jss
+227699 jrfpjdpw.znd
+41949 pjzcq
+62253 rvqgwwz.rbq
+$ cd ..
+$ cd vmjjtbl
+$ ls
+dir sjqpfc
+$ cd sjqpfc
+$ ls
+dir mbpfvsg
+dir vfwvtscb
+$ cd mbpfvsg
+$ ls
+128515 lqtw.vtp
+$ cd ..
+$ cd vfwvtscb
+$ ls
+dir ljv
+$ cd ljv
+$ ls
+dir nwbfd
+$ cd nwbfd
+$ ls
+297506 mvgmfhh.thn
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vdfmwrq
+$ ls
+dir ntm
+$ cd ntm
+$ ls
+36060 vlvdhw.vlj
+$ cd ..
+$ cd ..
+$ cd zwzlr
+$ ls
+126975 bfnpq.hzt
+$ cd ..
+$ cd ..
+$ cd rsqhz
+$ ls
+dir cjzh
+238925 crgfccz.hlg
+dir dsssbm
+197221 ftrdjhcn.grz
+171860 jvvcpbh
+60237 qtwnndbg.rwr
+247770 whwf
+$ cd cjzh
+$ ls
+105519 rvqgwwz.rbq
+$ cd ..
+$ cd dsssbm
+$ ls
+128213 dqsrbnjd.bwf
+dir frmmlzv
+318040 wmtvbq
+$ cd frmmlzv
+$ ls
+127732 mvgmfhh.thn
+37436 qtwnndbg.zzg
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd tsmlpnbc
+$ ls
+dir bdb
+dir ddjd
+dir gbdm
+dir grm
+273561 hzszqjgf.ggp
+$ cd bdb
+$ ls
+100286 qtwnndbg
+$ cd ..
+$ cd ddjd
+$ ls
+dir vmwddb
+$ cd vmwddb
+$ ls
+261837 wqcsrw.mzq
+$ cd ..
+$ cd ..
+$ cd gbdm
+$ ls
+233279 wmtvbq
+$ cd ..
+$ cd grm
+$ ls
+dir cghd
+$ cd cghd
+$ ls
+8883 ncjc.vsj
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd zmljzwt
+$ ls
+274821 lqtw.vtp
+dir ltpmzrtf
+dir qtwnndbg
+dir shfjtm
+$ cd ltpmzrtf
+$ ls
+222040 vmwddb.fcz
+$ cd ..
+$ cd qtwnndbg
+$ ls
+245288 lhbjpggt.rfr
+dir ltgqs
+dir nqngjr
+161396 rmlm.psv
+130067 vmwddb.ssz
+$ cd ltgqs
+$ ls
+45032 vmwddb.zwl
+$ cd ..
+$ cd nqngjr
+$ ls
+296145 fbt
+$ cd ..
+$ cd ..
+$ cd shfjtm
+$ ls
+dir dqv
+dir jhgdb
+dir jllhmmf
+dir sczqst
+dir zngqfcw
+$ cd dqv
+$ ls
+327447 jllhmmf.ndg
+$ cd ..
+$ cd jhgdb
+$ ls
+138120 bdbjjfs.rtn
+dir nfd
+dir qwng
+dir zwdbl
+$ cd nfd
+$ ls
+dir tdslfhgq
+$ cd tdslfhgq
+$ ls
+dir jnfrd
+45044 jrfpjdpw.znd
+133120 sdjzcfhh.dmm
+$ cd jnfrd
+$ ls
+314151 wmtvbq
+161805 zzctqr
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd qwng
+$ ls
+202921 zvtlrb.sdf
+$ cd ..
+$ cd zwdbl
+$ ls
+219865 wmtvbq
+$ cd ..
+$ cd ..
+$ cd jllhmmf
+$ ls
+258183 rvqgwwz.rbq
+$ cd ..
+$ cd sczqst
+$ ls
+37030 jrfpjdpw.znd
+$ cd ..
+$ cd zngqfcw
+$ ls
+dir fmwlfgm
+254522 rvqgwwz.rbq
+$ cd fmwlfgm
+$ ls
+229979 jgcr.qlt
+282169 wwpwcjgv
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd wqcsrw
+$ ls
+111251 ghjbjfhg.nqs
+$ cd ..
+$ cd ..
+$ cd rsgbjpp
+$ ls
+dir dchrnhrl
+dir lsqztz
+dir lwlh
+dir slb
+$ cd dchrnhrl
+$ ls
+45452 ctmp.cmv
+dir gqznj
+206243 mvgmfhh.thn
+166028 szzzlft.lst
+156182 trtgnc.gcr
+75072 zrh
+$ cd gqznj
+$ ls
+251328 ljv.tpg
+24996 lqtw.vtp
+$ cd ..
+$ cd ..
+$ cd lsqztz
+$ ls
+dir cmrqhlf
+$ cd cmrqhlf
+$ ls
+290574 wzbg.fdp
+$ cd ..
+$ cd ..
+$ cd lwlh
+$ ls
+dir flc
+dir pjm
+dir vhs
+140257 wqcsrw
+dir zqwvr
+$ cd flc
+$ ls
+75721 fbhzn
+84992 jrfpjdpw.znd
+2018 rvqgwwz.rbq
+$ cd ..
+$ cd pjm
+$ ls
+dir bzctws
+213358 jllhmmf.vlr
+243414 jrfpjdpw.znd
+dir ljv
+dir vjjhgjmp
+$ cd bzctws
+$ ls
+89520 ljv.nbf
+$ cd ..
+$ cd ljv
+$ ls
+210757 fnnbm
+$ cd ..
+$ cd vjjhgjmp
+$ ls
+dir ljv
+dir qvpcmscg
+dir rsbdmvjq
+219321 wjcwpt.psz
+dir wqcsrw
+$ cd ljv
+$ ls
+137884 jrfpjdpw.znd
+$ cd ..
+$ cd qvpcmscg
+$ ls
+36087 gwflqqnm.qjb
+82032 pmqfdv
+242377 qpth
+$ cd ..
+$ cd rsbdmvjq
+$ ls
+223158 wmtvbq
+72999 zchc.wfg
+$ cd ..
+$ cd wqcsrw
+$ ls
+dir ljv
+$ cd ljv
+$ ls
+dir mrw
+$ cd mrw
+$ ls
+271684 tmnldb.rgb
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vhs
+$ ls
+dir hsjs
+dir jhvqqcls
+172468 rvqgwwz.rbq
+$ cd hsjs
+$ ls
+227982 jrfpjdpw.znd
+323849 wmtvbq
+$ cd ..
+$ cd jhvqqcls
+$ ls
+dir wqcsrw
+$ cd wqcsrw
+$ ls
+145011 twdzdhrb.nsw
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd zqwvr
+$ ls
+333371 rvqgwwz.rbq
+144186 vmwddb.htb
+$ cd ..
+$ cd ..
+$ cd slb
+$ ls
+101405 jrfpjdpw.znd
+80571 lqtw.vtp
+212763 rfqt.cvz
+242678 ssrbmlwn.rgn
+204742 tftbz
+$ cd ..
+$ cd ..
+$ cd tpjpnjg
+$ ls
+37762 wqcsrw.vhz
+$ cd ..
+$ cd vmwddb
+$ ls
+dir ctgzpnn
+237933 hhv
+dir lwvcw
+dir wpw
+$ cd ctgzpnn
+$ ls
+dir jbfqtvhl
+100662 jhp
+117832 lqtw.vtp
+225417 mvgmfhh.thn
+21553 rvqgwwz.rbq
+240333 sbmzdqrc
+dir shnnqff
+$ cd jbfqtvhl
+$ ls
+37115 ljv.rws
+73007 wqcsrw
+$ cd ..
+$ cd shnnqff
+$ ls
+294441 frghtdtd.qwf
+dir srbf
+dir vmwddb
+$ cd srbf
+$ ls
+dir fqhhcdcm
+$ cd fqhhcdcm
+$ ls
+142423 vmwddb.snc
+$ cd ..
+$ cd ..
+$ cd vmwddb
+$ ls
+dir jllhmmf
+dir ljv
+61218 nsmtdl
+58661 wqcsrw
+$ cd jllhmmf
+$ ls
+6984 qdjnldqn
+231401 sfcwg
+$ cd ..
+$ cd ljv
+$ ls
+110331 jfjsgfn.lvq
+269960 mvgmfhh.thn
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd lwvcw
+$ ls
+115763 mvgmfhh.thn
+$ cd ..
+$ cd wpw
+$ ls
+187278 lqtw.vtp
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd jbssdwf
+$ ls
+31839 ljcttp
+$ cd ..
+$ cd ljv
+$ ls
+270886 jrfpjdpw.znd
+$ cd ..
+$ cd nhp
+$ ls
+dir sgffh
+$ cd sgffh
+$ ls
+76321 psbpb.sqj
diff --git a/2022/day07/main b/2022/day07/main
new file mode 100755
index 0000000..2569466
--- /dev/null
+++ b/2022/day07/main
Binary files differ
diff --git a/2022/day07/main.c b/2022/day07/main.c
new file mode 100644
index 0000000..8df3e04
--- /dev/null
+++ b/2022/day07/main.c
@@ -0,0 +1,111 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct Dir_ Dir;
+
+typedef struct Dir_ {
+ char name[32];
+ int size, dir;
+ int children;
+ Dir *parent;
+ Dir *files[32];
+} Dir;
+
+Dir* changeDir(Dir *dir, Dir *root, char *name)
+{
+ printf("cd %s\n", name);
+ if ( name[0] == '/' ) return root;
+ if ( name[0] == '.' ) return dir->parent;
+
+ for ( int i = 0; i < dir->children; i++ )
+ {
+ if(strcmp( dir->files[i]->name, name ) == 0)
+ {
+ return dir->files[i];
+ }
+ }
+}
+
+void list(Dir *dir, int d)
+{
+ for (int i = 0; i < d; i++) printf("'-");
+ printf("%s", dir->name);
+ if (dir->dir) printf(" (d)");
+ else printf(" %d", dir->size);
+ printf("\n");
+ for (int i = 0; i < dir->children; i++)
+ {
+ list(dir->files[i], d+1);
+ }
+}
+
+int findlarge(Dir *dir, int *globalsum) {
+
+ if (!dir->dir) {
+ return dir->size;
+ }
+
+ int sum = 0;
+ for (int i = 0; i < dir->children; i++)
+ {
+ sum += findlarge(dir->files[i], globalsum);
+ }
+ if (sum <= 100000) {
+ *globalsum += sum;
+ }
+
+ return sum;
+}
+
+int main()
+{
+
+ char *line = 0;
+ size_t len;
+ ssize_t nlen;
+
+ Dir *root = malloc(sizeof(Dir));
+ root->children = 0;
+ root->dir = 1;
+ strcpy(root->name, "/");
+ Dir *head = root;
+
+ int globalsum = 0;
+
+ while( (nlen = getline(&line, &len, stdin)) != -1 )
+ {
+ line[nlen-1] = '\0';
+ if ( line[0] == '$' )
+ {
+ if ( line[2] == 'c' ) head = changeDir(head, root, line+5);
+ }
+ else if ( line[0] == 'd' )
+ {
+ Dir *newdir = malloc(sizeof(Dir));
+ strcpy(newdir->name, line+4);
+ newdir->dir = 1;
+ newdir->children = 0;
+ newdir->parent = head;
+ head->files[head->children] = newdir;
+ head->children++;
+ }
+ else {
+ Dir *newdir = malloc(sizeof(Dir));
+ newdir->size = atoi( strsep(&line, " ") );
+ strcpy(newdir->name, strsep(&line, " "));
+ head->files[head->children] = newdir;
+ head->children++;
+
+ // printf("file %d %s\n", newdir->size, newdir->name);
+ // printf("name %s\n", root->files[0]->name);
+ }
+ printf("cmd '%s' head: %s\n", line, head->name);
+ list(root, 0);
+ }
+
+ list(root, 0);
+
+ findlarge(root, &globalsum);
+ printf("sum: %d\n", globalsum);
+}
diff --git a/2022/day07/main2.c b/2022/day07/main2.c
new file mode 100644
index 0000000..5121e4a
--- /dev/null
+++ b/2022/day07/main2.c
@@ -0,0 +1,118 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+typedef struct Dir_ Dir;
+
+typedef struct Dir_ {
+ char name[32];
+ int size, dir;
+ int children;
+ Dir *parent;
+ Dir *files[32];
+} Dir;
+
+Dir* changeDir(Dir *dir, Dir *root, char *name)
+{
+ printf("cd %s\n", name);
+ if ( name[0] == '/' ) return root;
+ if ( name[0] == '.' ) return dir->parent;
+
+ for ( int i = 0; i < dir->children; i++ )
+ {
+ if(strcmp( dir->files[i]->name, name ) == 0)
+ {
+ return dir->files[i];
+ }
+ }
+}
+
+void list(Dir *dir, int d)
+{
+ for (int i = 0; i < d; i++) printf("'-");
+ printf("%s", dir->name);
+ if (dir->dir) printf(" (d)");
+ else printf(" %d", dir->size);
+ printf("\n");
+ for (int i = 0; i < dir->children; i++)
+ {
+ list(dir->files[i], d+1);
+ }
+}
+
+int findlarge(Dir *dir, int *globalmin, int *localmin) {
+
+ if (!dir->dir) {
+ return dir->size;
+ }
+
+ int sum = 0;
+ for (int i = 0; i < dir->children; i++)
+ {
+ sum += findlarge(dir->files[i], globalmin, localmin);
+ }
+ if (sum >= *globalmin && sum < *localmin) {
+ *localmin = sum;
+ }
+
+ return sum;
+}
+
+int main()
+{
+
+ char *line = 0;
+ size_t len;
+ ssize_t nlen;
+
+ Dir *root = malloc(sizeof(Dir));
+ root->children = 0;
+ root->dir = 1;
+ strcpy(root->name, "/");
+ Dir *head = root;
+
+ int globalmin = 0;
+ int localmin = 70000000;
+
+ int rootsize = 0;
+
+ while( (nlen = getline(&line, &len, stdin)) != -1 )
+ {
+ line[nlen-1] = '\0';
+ if ( line[0] == '$' )
+ {
+ if ( line[2] == 'c' ) head = changeDir(head, root, line+5);
+ }
+ else if ( line[0] == 'd' )
+ {
+ Dir *newdir = malloc(sizeof(Dir));
+ strcpy(newdir->name, line+4);
+ newdir->dir = 1;
+ newdir->children = 0;
+ newdir->parent = head;
+ head->files[head->children] = newdir;
+ head->children++;
+ }
+ else {
+ Dir *newdir = malloc(sizeof(Dir));
+ newdir->size = atoi( strsep(&line, " ") );
+ strcpy(newdir->name, strsep(&line, " "));
+ head->files[head->children] = newdir;
+ head->children++;
+
+ rootsize += newdir->size;
+
+ // printf("file %d %s\n", newdir->size, newdir->name);
+ // printf("name %s\n", root->files[0]->name);
+ }
+ printf("cmd '%s' head: %s\n", line, head->name);
+ list(root, 0);
+ }
+
+ list(root, 0);
+
+ globalmin = 30000000 - (70000000 - rootsize);
+
+ findlarge(root, &globalmin, &localmin);
+ printf("sum: %d\n", localmin);
+}
diff --git a/2022/day08/input1.txt b/2022/day08/input1.txt
new file mode 100644
index 0000000..16d6fbd
--- /dev/null
+++ b/2022/day08/input1.txt
@@ -0,0 +1,5 @@
+30373
+25512
+65332
+33549
+35390
diff --git a/2022/day08/input2.txt b/2022/day08/input2.txt
new file mode 100644
index 0000000..ffdd5b1
--- /dev/null
+++ b/2022/day08/input2.txt
@@ -0,0 +1,99 @@
+011201001000123232122300403211332202122424332111151523152310403222120311202224013311113203311122001
+102201211220103202323002411123324024134251423232343141424431144431022143443131141222323122010012220
+002022232232102013311311301321044421352134513235443522243113311323213013301030440423203311103101020
+002212021110130112400112141310424411421435324412235335534245212325313312413434430114302030310200000
+202000312203303110042324124431114212153432535412115323131323541522511253002131401212012131031321110
+120203002030304244102444143021314124552253521343321513511124144454343454102412220143321013220111212
+012133330030200444414333325255125142322121412245551424242135123513411533153323130432231002121211210
+012300220003100211444401144353345522135453435223464636451554321531323513234331131114224102232333310
+000201310302031301344341134512444312432566266533252332656654251123535525135213300040211242011230031
+121002133124022203240512452433331223524622643252532325346635555552514352434233454024134201432001111
+112213110140442401434531255323512525265655352543623565556265545555235551143135124203142220020302000
+033001202421424143555311243322416262636322654432542644633525453666655354514351121150231101002002310
+133303044321221102531154151541224245536464535622566355532543644552554644312231415325142303020031312
+112333344411024045335422225146442243536464622553556234523445362524655623435243115242532313102020021
+123023422310204444121415255225254435644446326664473564435422565325224635623542352154120001224144312
+102303024142131515433355242322223363453633455657436436574636544336652564626641215232314243234004001
+021344140434455245134415553542352643537665534644574553367446664254532523624521243554252411433032112
+100140101131444142414254644644434663647646555637737475474473636562243265243536422253531252202124322
+111043301134142345422324342454235374733474673456744577746755765343355535622342432251442244140231224
+232120141224122324244532255543256467566454337465647735433663734756446566663442525425254525142212311
+102310340244433433553362546534535757453376643763344566566557634664535744445254533545223521213213014
+330111232252114431226334564636467643777466445537346735563633337744734474466254662225321443542401243
+344311321253412213666443354643647347656735478884748547564466577774737677363226422622515344334010341
+222340105234132533423442424376674757757675647476557547564445666676437755355626455436313331225343402
+334241221121414455435265324646757456774784864846746867457546648735456677555624445353555434433340341
+333430021343121666326363537633737767788775478777445558858444854755434544735362564626265444342330020
+332224425333452333556456745375454657668644877658744844547774765844454475434765533256545152435214410
+411322431421116436336347456774356844455867864644844878664785864444475567664473365652253123453220003
+130345455115155526426437663665665668576686587847778476557678655576775553535745643522532344433523042
+241333521455132466523664543556384776587787745658797755565556576546847447434775733626365325451531301
+202135433134452323646546565545646885747548679876767658578565476458486465755545465664435422532454541
+344025243154435524235475655536845545775797795959686975588855546544875685664377465455353661444452422
+120511445324333353265334766654858656857755669695597899959957757545465687447345336332322634434414522
+041425252513666643357433333888555778459755889566967799659865567757457567576463765323236366123221323
+142343534134652443554434768544658774587669979986775985989879787975445856456554364645323653454511323
+443155144123223566654765746758688875856899955996667659755976778586644774777456744653322566354532232
+013242522162435447764573774877757879868788876799896979576555597985885468586473474464455426633333452
+101431333345553353553337548577478656967866886877887889699999856979976485874455544477534422463331314
+422325541533664573334736464857446675995799977868697688998787757585668584775766563477536636621514142
+313315332565562573637376866486547776557979868979996867779966955885566785455767644565336236452541411
+231122455364326235655644685888786685587796897688777698977986787596655865857448333576665523356143332
+314415154446535337443754887576795586569678967879977696896667866768856785586774365336636426455324541
+251324556334435537567468544665859588888869687767876697967887867856679658788866355353346553442543353
+134353225423362456734666455757877769577678987866887877799886886885859796767664444665534363236114533
+251241346545626367667578575687955957988796678987999979977897978877579787844755554533763646262143315
+353543555544353753474346565789555799696999667888997899777669899867697878476845756644734243432245123
+221521465632632737777766744748678869769669668898887888987898666789869785645678734643552655525624335
+351552456455622567337644647486678857766866879798779999878779869885869788874885873744772665326352324
+153242153665224557353455465857685566797887699998988788877767696668668675666664465757646436665554315
+321113152666424547657348876876678597898779877779998999978978777885976658558676664444674243656333212
+421511245364456777655754476646885699898678788797778788778778999795687589454774563737333365434325525
+213532265252653474345766566877669898969767779777879797899977669868595997784466766655547455234435452
+125232235356525353764645486577668857868788699799787978898988669878688867586564457353673236664223343
+441242562562223643773466848558599657669669968987979987787969676777796877655876456745562442232541525
+135122156635652746574578664849659556998698797778797889988788869797687977855447474475546334662522444
+144315413442434666777478887855885568968799966889978797797867786966685589646488554737453225335213325
+511213234443636433646678657654587788667696879878989799867699988765895758788675765445656425425334544
+052145146243336363474565857687976889776768867898889967686967668565998666768575534675445244546424155
+235513424332444756467574556745997958679678999799789777998968876679956958746554677637762355253554335
+331155256654246447545776676487485655676699678967897779688898989999768655488874564764434223445132152
+152152253254255234473347878744485766678897879689897888667968795675655864748584644653323363464154251
+245154344235223346354765457746867586969968687876867899766986679689585778787473555663424264553541344
+235253541263666477544377746867785766579566868896689699876766695956667455774677646576554255521144355
+033522343456423455634354575764856898657669957896677776766596688857787474488436433455326554242331222
+321532413246333226435563556578864759978657759897896799958558598588975755858856537673332523244522141
+101422552442534324467345475684574877989759655788785857697957976679848768474665346435664653421242444
+103425135453353666736674677847548667967885667765576995797857589796866646565443377775564436443333543
+041131245522253556554636537878457787468577768876778599999689667978487755747676763666266652435545351
+424232344536333364556466767555646468677996965895798968676966868665587584664535544755645232211324114
+334034423343366322247357747635787857555667756956768657779596877655676555367754633345545442422145333
+424344345121532564223643563774744574746844686888885779565686455664565643634566756543362551431252401
+232123114442152332546734767375678475664877645798695799654765488755876545334345452455463633534433233
+414423121145222454332477456654436757485685646546884446667744645744675377357654436554353221451345404
+234130223314353235262655676637577858558554556467788664555466588778677546456334642623666524333250443
+414001252524152463224524734765775677644765886656877578666575855788653533364773455446565352432424320
+024323134311552535243564667476365737764685474446876486685546667685363735646643655435355533243440034
+331141044111451522226436327536773637654887585478885586588745847444466365767232265352211455413531431
+241321311312323233252665352455436545735388846445565487667644555744667753556266645332452431541341044
+234030032312154414563442653244476576544654676884777445766434443476675746365245632242515342521301442
+202112004552434344564624422526757574735736566643654737673776743354737744242533546523434111443034202
+323422334452422412134566522262537334374446646774476534347655656336555632626663364214333341322443300
+031243421344143515452456444553266345437737337675574563437533573575456463665443432215213541123241240
+002114441013421154331235436253442576764555535635775735635377573353666526333623554524421352131443020
+111342301013125124521245222663363363467436357434736773473777464564655622533254352444544553311114233
+222323000331131531351433363334345533653474663466435557365553376535246564324662454422135233103003200
+002103300342403311123432563445263435443255635353333564444573456633466424623313351545133022013122320
+300304042333200223123432352234525626625234236453763536563235242224645265643515312312520000242200000
+210121244033001141551213125554433445222532265463624234562324443435344362451243522525243002401410013
+303323342040431313415255233251226626334264553655346266323665655652522363324341123235410333230402230
+300112203021311400115231251543524354554262365526643622264625434236554412121342322522123434120120203
+011001023222004142422445443143212526654365444643442536365453622222634154551441553400220414300301332
+230032020342121242113341435444543253355352433246243543645634456552525315313143243431133302112320020
+232132202131312144424224413332214322543242664652323324456222615212244414145113442320023403200012111
+112222030320432400004224215552515412325221525356363643351335211141344255554442403013303120331312202
+110321230332323212301432002424211134155124241552254334221154111545254253122214132321141212032221001
+021020121321302320401011302153145251455114411155452245422422135453412153112033343412340101230302010
+122203012232330222213342133012334131225335225325343355122151154444535354414423434423220001330003020
+221120213213221333210131242440001425551432522221141211124544343151315104244333311124033221102312011
+202201033331203122413021242022211002455531321354252412214332215513311231404032244320020330332301120
diff --git a/2022/day08/main b/2022/day08/main
new file mode 100755
index 0000000..e2d2028
--- /dev/null
+++ b/2022/day08/main
Binary files differ
diff --git a/2022/day08/main.c b/2022/day08/main.c
new file mode 100644
index 0000000..f80b1d0
--- /dev/null
+++ b/2022/day08/main.c
@@ -0,0 +1,36 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+int main(int argc, char *argv[] )
+{
+ FILE *file = fopen(argv[1], "r");
+ size_t size;
+
+ fseek(file, 0, SEEK_END); // seek to end of file
+ size = ftell(file); // get current file pointer
+ fseek(file, 0, SEEK_SET); // seek back to beginning of file
+
+ char *line = NULL;
+ size_t len;
+ ssize_t nlen;
+ char *forrest, *pf;
+
+ while ((nlen = getline(&line, &len, file)) != -1)
+ {
+ if (forrest == 0)
+ {
+ forrest = pf = malloc( (size / nlen) * sizeof(char*) );
+ int i=0;
+ for (; *pf != 0; pf++)
+ {
+ i++;
+ }
+ printf("%d, %zu, %zd", i, size, nlen);
+ }
+
+ }
+
+
+}
+
diff --git a/2022/day08/main.py b/2022/day08/main.py
new file mode 100644
index 0000000..45ba142
--- /dev/null
+++ b/2022/day08/main.py
@@ -0,0 +1,39 @@
+import sys
+
+def isVisible(lines, row, col):
+ if ( row == 0 or col == 0 or row == len(lines)-1 or col == len(lines[0])-1):
+ return True
+
+ if all(x[col] < lines[row][col] for x in lines[:row]):
+ return True
+
+ if all(x[col] < lines[row][col] for x in lines[row+1:]):
+ return True
+
+ if all(x < lines[row][col] for x in lines[row][:col]):
+ return True
+
+ if all(x < lines[row][col] for x in lines[row][col+1:]):
+ return True
+
+ return False
+
+with open(sys.argv[1], "r") as file:
+ lines = file.readlines()
+ for a in range(len(lines)):
+ lines[a] = lines[a].rstrip()
+ # a = a.rstrip()
+
+ visible=0
+ for row in range(len(lines)):
+ for col in range(len(lines[0])):
+ # print(lines[row][col], end="")
+ yes = isVisible(lines, row, col)
+ visible += yes
+ if yes:
+ print("1", end="")
+ else:
+ print("_", end="")
+ print()
+
+ print(visible)
diff --git a/2022/day08/main2.py b/2022/day08/main2.py
new file mode 100644
index 0000000..a2a7df2
--- /dev/null
+++ b/2022/day08/main2.py
@@ -0,0 +1,49 @@
+import sys
+
+def isVisible(lines, row, col):
+ scenic = 1
+ score1 = 0
+ for x in lines[:row:-1]:
+ if ( x[col] >= lines[row][col]):
+ break
+ score1 += 1
+ scenic *= score1
+
+ score2 = 0
+ for x in lines[row+1:]:
+ if ( x[col] >= lines[row][col]):
+ break
+ score2 += 1
+ scenic *= score2
+
+ score3 = 0
+ for x in lines[row][:col:-1]:
+ if ( x >= lines[row][col]):
+ break
+ score3 += 1
+ scenic *= score3
+
+ score4 = 0
+ for x in lines[row][col:]:
+ if ( x >= lines[row][col]):
+ break
+ score4 += 1
+ scenic *= score4
+
+ print(row, col, score1, score2, score3, score4, scenic)
+ return scenic
+
+with open(sys.argv[1], "r") as file:
+ lines = file.readlines()
+ for a in range(len(lines)):
+ lines[a] = lines[a].rstrip()
+ # a = a.rstrip()
+
+ best=0
+ for row in range(len(lines)):
+ for col in range(len(lines[0])):
+ # print(lines[row][col], end="")
+ yes = isVisible(lines, row, col)
+ best = max(best, yes)
+
+ print(best)