Initial commit.
This commit is contained in:
		
						commit
						dfddbea84b
					
				| 
						 | 
					@ -0,0 +1,883 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Created by https://www.gitignore.io/api/jetbrains,intellij+iml,eclipse,visualstudio,sublimetext,windows,macos,emacs,vim,linux,c,c++,cmake,python,csharp,java
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Vim ###
 | 
				
			||||||
 | 
					# swap
 | 
				
			||||||
 | 
					[._]*.s[a-w][a-z]
 | 
				
			||||||
 | 
					[._]s[a-w][a-z]
 | 
				
			||||||
 | 
					# session
 | 
				
			||||||
 | 
					Session.vim
 | 
				
			||||||
 | 
					# temporary
 | 
				
			||||||
 | 
					.netrwhist
 | 
				
			||||||
 | 
					*~
 | 
				
			||||||
 | 
					# auto-generated tag files
 | 
				
			||||||
 | 
					tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### JetBrains ###
 | 
				
			||||||
 | 
					# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
 | 
				
			||||||
 | 
					# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific stuff:
 | 
				
			||||||
 | 
					.idea/workspace.xml
 | 
				
			||||||
 | 
					.idea/tasks.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sensitive or high-churn files:
 | 
				
			||||||
 | 
					.idea/dataSources/
 | 
				
			||||||
 | 
					.idea/dataSources.ids
 | 
				
			||||||
 | 
					.idea/dataSources.xml
 | 
				
			||||||
 | 
					.idea/dataSources.local.xml
 | 
				
			||||||
 | 
					.idea/sqlDataSources.xml
 | 
				
			||||||
 | 
					.idea/dynamic.xml
 | 
				
			||||||
 | 
					.idea/uiDesigner.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Gradle:
 | 
				
			||||||
 | 
					.idea/gradle.xml
 | 
				
			||||||
 | 
					.idea/libraries
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Mongo Explorer plugin:
 | 
				
			||||||
 | 
					.idea/mongoSettings.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## File-based project format:
 | 
				
			||||||
 | 
					*.iws
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Plugin-specific files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# IntelliJ
 | 
				
			||||||
 | 
					/out/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mpeltonen/sbt-idea plugin
 | 
				
			||||||
 | 
					.idea_modules/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JIRA plugin
 | 
				
			||||||
 | 
					atlassian-ide-plugin.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Crashlytics plugin (for Android Studio and IntelliJ)
 | 
				
			||||||
 | 
					com_crashlytics_export_strings.xml
 | 
				
			||||||
 | 
					crashlytics.properties
 | 
				
			||||||
 | 
					crashlytics-build.properties
 | 
				
			||||||
 | 
					fabric.properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### JetBrains Patch ###
 | 
				
			||||||
 | 
					# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# *.iml
 | 
				
			||||||
 | 
					# modules.xml
 | 
				
			||||||
 | 
					# .idea/misc.xml
 | 
				
			||||||
 | 
					# *.ipr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Eclipse ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.metadata
 | 
				
			||||||
 | 
					bin/
 | 
				
			||||||
 | 
					tmp/
 | 
				
			||||||
 | 
					*.tmp
 | 
				
			||||||
 | 
					*.bak
 | 
				
			||||||
 | 
					*.swp
 | 
				
			||||||
 | 
					*~.nib
 | 
				
			||||||
 | 
					local.properties
 | 
				
			||||||
 | 
					.settings/
 | 
				
			||||||
 | 
					.loadpath
 | 
				
			||||||
 | 
					.recommenders
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Eclipse Core
 | 
				
			||||||
 | 
					.project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# External tool builders
 | 
				
			||||||
 | 
					.externalToolBuilders/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Locally stored "Eclipse launch configurations"
 | 
				
			||||||
 | 
					*.launch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyDev specific (Python IDE for Eclipse)
 | 
				
			||||||
 | 
					*.pydevproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CDT-specific (C/C++ Development Tooling)
 | 
				
			||||||
 | 
					.cproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JDT-specific (Eclipse Java Development Tools)
 | 
				
			||||||
 | 
					.classpath
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Java annotation processor (APT)
 | 
				
			||||||
 | 
					.factorypath
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PDT-specific (PHP Development Tools)
 | 
				
			||||||
 | 
					.buildpath
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# sbteclipse plugin
 | 
				
			||||||
 | 
					.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Tern plugin
 | 
				
			||||||
 | 
					.tern-project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TeXlipse plugin
 | 
				
			||||||
 | 
					.texlipse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# STS (Spring Tool Suite)
 | 
				
			||||||
 | 
					.springBeans
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Code Recommenders
 | 
				
			||||||
 | 
					.recommenders/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Csharp ###
 | 
				
			||||||
 | 
					## Ignore Visual Studio temporary files, build results, and
 | 
				
			||||||
 | 
					## files generated by popular Visual Studio add-ons.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files
 | 
				
			||||||
 | 
					*.suo
 | 
				
			||||||
 | 
					*.user
 | 
				
			||||||
 | 
					*.userosscache
 | 
				
			||||||
 | 
					*.sln.docstates
 | 
				
			||||||
 | 
					*.vcxproj.filters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files (MonoDevelop/Xamarin Studio)
 | 
				
			||||||
 | 
					*.userprefs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build results
 | 
				
			||||||
 | 
					[Dd]ebug/
 | 
				
			||||||
 | 
					[Dd]ebugPublic/
 | 
				
			||||||
 | 
					[Rr]elease/
 | 
				
			||||||
 | 
					[Rr]eleases/
 | 
				
			||||||
 | 
					x64/
 | 
				
			||||||
 | 
					x86/
 | 
				
			||||||
 | 
					bld/
 | 
				
			||||||
 | 
					[Bb]in/
 | 
				
			||||||
 | 
					[Oo]bj/
 | 
				
			||||||
 | 
					[Ll]og/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 2015 cache/options directory
 | 
				
			||||||
 | 
					.vs/
 | 
				
			||||||
 | 
					# Uncomment if you have tasks that create the project's static files in wwwroot
 | 
				
			||||||
 | 
					#wwwroot/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MSTest test Results
 | 
				
			||||||
 | 
					[Tt]est[Rr]esult*/
 | 
				
			||||||
 | 
					[Bb]uild[Ll]og.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NUNIT
 | 
				
			||||||
 | 
					*.VisualState.xml
 | 
				
			||||||
 | 
					TestResult.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Results of an ATL Project
 | 
				
			||||||
 | 
					[Dd]ebugPS/
 | 
				
			||||||
 | 
					[Rr]eleasePS/
 | 
				
			||||||
 | 
					dlldata.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# .NET Core
 | 
				
			||||||
 | 
					project.lock.json
 | 
				
			||||||
 | 
					project.fragment.lock.json
 | 
				
			||||||
 | 
					artifacts/
 | 
				
			||||||
 | 
					**/Properties/launchSettings.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*_i.c
 | 
				
			||||||
 | 
					*_p.c
 | 
				
			||||||
 | 
					*_i.h
 | 
				
			||||||
 | 
					*.ilk
 | 
				
			||||||
 | 
					*.meta
 | 
				
			||||||
 | 
					*.obj
 | 
				
			||||||
 | 
					*.pch
 | 
				
			||||||
 | 
					*.pdb
 | 
				
			||||||
 | 
					*.pgc
 | 
				
			||||||
 | 
					*.pgd
 | 
				
			||||||
 | 
					*.rsp
 | 
				
			||||||
 | 
					*.sbr
 | 
				
			||||||
 | 
					*.tlb
 | 
				
			||||||
 | 
					*.tli
 | 
				
			||||||
 | 
					*.tlh
 | 
				
			||||||
 | 
					*.tmp_proj
 | 
				
			||||||
 | 
					*.log
 | 
				
			||||||
 | 
					*.vspscc
 | 
				
			||||||
 | 
					*.vssscc
 | 
				
			||||||
 | 
					.builds
 | 
				
			||||||
 | 
					*.pidb
 | 
				
			||||||
 | 
					*.svclog
 | 
				
			||||||
 | 
					*.scc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Chutzpah Test files
 | 
				
			||||||
 | 
					_Chutzpah*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual C++ cache files
 | 
				
			||||||
 | 
					ipch/
 | 
				
			||||||
 | 
					*.aps
 | 
				
			||||||
 | 
					*.ncb
 | 
				
			||||||
 | 
					*.opendb
 | 
				
			||||||
 | 
					*.opensdf
 | 
				
			||||||
 | 
					*.sdf
 | 
				
			||||||
 | 
					*.cachefile
 | 
				
			||||||
 | 
					*.VC.db
 | 
				
			||||||
 | 
					*.VC.VC.opendb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio profiler
 | 
				
			||||||
 | 
					*.psess
 | 
				
			||||||
 | 
					*.vsp
 | 
				
			||||||
 | 
					*.vspx
 | 
				
			||||||
 | 
					*.sap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TFS 2012 Local Workspace
 | 
				
			||||||
 | 
					$tf/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Guidance Automation Toolkit
 | 
				
			||||||
 | 
					*.gpState
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ReSharper is a .NET coding add-in
 | 
				
			||||||
 | 
					_ReSharper*/
 | 
				
			||||||
 | 
					*.[Rr]e[Ss]harper
 | 
				
			||||||
 | 
					*.DotSettings.user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JustCode is a .NET coding add-in
 | 
				
			||||||
 | 
					.JustCode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TeamCity is a build add-in
 | 
				
			||||||
 | 
					_TeamCity*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DotCover is a Code Coverage Tool
 | 
				
			||||||
 | 
					*.dotCover
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio code coverage results
 | 
				
			||||||
 | 
					*.coverage
 | 
				
			||||||
 | 
					*.coveragexml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NCrunch
 | 
				
			||||||
 | 
					_NCrunch_*
 | 
				
			||||||
 | 
					.*crunch*.local.xml
 | 
				
			||||||
 | 
					nCrunchTemp_*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MightyMoose
 | 
				
			||||||
 | 
					*.mm.*
 | 
				
			||||||
 | 
					AutoTest.Net/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Web workbench (sass)
 | 
				
			||||||
 | 
					.sass-cache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installshield output folder
 | 
				
			||||||
 | 
					[Ee]xpress/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DocProject is a documentation generator add-in
 | 
				
			||||||
 | 
					DocProject/buildhelp/
 | 
				
			||||||
 | 
					DocProject/Help/*.HxT
 | 
				
			||||||
 | 
					DocProject/Help/*.HxC
 | 
				
			||||||
 | 
					DocProject/Help/*.hhc
 | 
				
			||||||
 | 
					DocProject/Help/*.hhk
 | 
				
			||||||
 | 
					DocProject/Help/*.hhp
 | 
				
			||||||
 | 
					DocProject/Help/Html2
 | 
				
			||||||
 | 
					DocProject/Help/html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Click-Once directory
 | 
				
			||||||
 | 
					publish/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Publish Web Output
 | 
				
			||||||
 | 
					*.[Pp]ublish.xml
 | 
				
			||||||
 | 
					*.azurePubxml
 | 
				
			||||||
 | 
					# TODO: Comment the next line if you want to checkin your web deploy settings
 | 
				
			||||||
 | 
					# but database connection strings (with potential passwords) will be unencrypted
 | 
				
			||||||
 | 
					*.pubxml
 | 
				
			||||||
 | 
					*.publishproj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Web App publish settings. Comment the next line if you want to
 | 
				
			||||||
 | 
					# checkin your Azure Web App publish settings, but sensitive information contained
 | 
				
			||||||
 | 
					# in these scripts will be unencrypted
 | 
				
			||||||
 | 
					PublishScripts/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NuGet Packages
 | 
				
			||||||
 | 
					*.nupkg
 | 
				
			||||||
 | 
					# The packages folder can be ignored because of Package Restore
 | 
				
			||||||
 | 
					**/packages/*
 | 
				
			||||||
 | 
					# except build/, which is used as an MSBuild target.
 | 
				
			||||||
 | 
					!**/packages/build/
 | 
				
			||||||
 | 
					# Uncomment if necessary however generally it will be regenerated when needed
 | 
				
			||||||
 | 
					#!**/packages/repositories.config
 | 
				
			||||||
 | 
					# NuGet v3's project.json files produces more ignoreable files
 | 
				
			||||||
 | 
					*.nuget.props
 | 
				
			||||||
 | 
					*.nuget.targets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Build Output
 | 
				
			||||||
 | 
					csx/
 | 
				
			||||||
 | 
					*.build.csdef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Emulator
 | 
				
			||||||
 | 
					ecf/
 | 
				
			||||||
 | 
					rcf/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows Store app package directories and files
 | 
				
			||||||
 | 
					AppPackages/
 | 
				
			||||||
 | 
					BundleArtifacts/
 | 
				
			||||||
 | 
					Package.StoreAssociation.xml
 | 
				
			||||||
 | 
					_pkginfo.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio cache files
 | 
				
			||||||
 | 
					# files ending in .cache can be ignored
 | 
				
			||||||
 | 
					*.[Cc]ache
 | 
				
			||||||
 | 
					# but keep track of directories ending in .cache
 | 
				
			||||||
 | 
					!*.[Cc]ache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Others
 | 
				
			||||||
 | 
					ClientBin/
 | 
				
			||||||
 | 
					~$*
 | 
				
			||||||
 | 
					*.dbmdl
 | 
				
			||||||
 | 
					*.dbproj.schemaview
 | 
				
			||||||
 | 
					*.jfm
 | 
				
			||||||
 | 
					*.pfx
 | 
				
			||||||
 | 
					*.publishsettings
 | 
				
			||||||
 | 
					node_modules/
 | 
				
			||||||
 | 
					orleans.codegen.cs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Since there are multiple workflows, uncomment next line to ignore bower_components
 | 
				
			||||||
 | 
					# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
 | 
				
			||||||
 | 
					#bower_components/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RIA/Silverlight projects
 | 
				
			||||||
 | 
					Generated_Code/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Backup & report files from converting an old project file
 | 
				
			||||||
 | 
					# to a newer Visual Studio version. Backup files are not needed,
 | 
				
			||||||
 | 
					# because we have git ;-)
 | 
				
			||||||
 | 
					_UpgradeReport_Files/
 | 
				
			||||||
 | 
					Backup*/
 | 
				
			||||||
 | 
					UpgradeLog*.XML
 | 
				
			||||||
 | 
					UpgradeLog*.htm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SQL Server files
 | 
				
			||||||
 | 
					*.mdf
 | 
				
			||||||
 | 
					*.ldf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Business Intelligence projects
 | 
				
			||||||
 | 
					*.rdl.data
 | 
				
			||||||
 | 
					*.bim.layout
 | 
				
			||||||
 | 
					*.bim_*.settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Fakes
 | 
				
			||||||
 | 
					FakesAssemblies/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GhostDoc plugin setting file
 | 
				
			||||||
 | 
					*.GhostDoc.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Node.js Tools for Visual Studio
 | 
				
			||||||
 | 
					.ntvs_analysis.dat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 build log
 | 
				
			||||||
 | 
					*.plg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 workspace options file
 | 
				
			||||||
 | 
					*.opt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
 | 
				
			||||||
 | 
					*.vbw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio LightSwitch build output
 | 
				
			||||||
 | 
					**/*.HTMLClient/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.DesktopClient/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.DesktopClient/ModelManifest.xml
 | 
				
			||||||
 | 
					**/*.Server/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.Server/ModelManifest.xml
 | 
				
			||||||
 | 
					_Pvt_Extensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Paket dependency manager
 | 
				
			||||||
 | 
					.paket/paket.exe
 | 
				
			||||||
 | 
					paket-files/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# FAKE - F# Make
 | 
				
			||||||
 | 
					.fake/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JetBrains Rider
 | 
				
			||||||
 | 
					.idea/
 | 
				
			||||||
 | 
					*.sln.iml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CodeRush
 | 
				
			||||||
 | 
					.cr/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Python Tools for Visual Studio (PTVS)
 | 
				
			||||||
 | 
					__pycache__/
 | 
				
			||||||
 | 
					*.pyc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cake - Uncomment if you are using it
 | 
				
			||||||
 | 
					# tools/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### SublimeText ###
 | 
				
			||||||
 | 
					# cache files for sublime text
 | 
				
			||||||
 | 
					*.tmlanguage.cache
 | 
				
			||||||
 | 
					*.tmPreferences.cache
 | 
				
			||||||
 | 
					*.stTheme.cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# workspace files are user-specific
 | 
				
			||||||
 | 
					*.sublime-workspace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# project files should be checked into the repository, unless a significant
 | 
				
			||||||
 | 
					# proportion of contributors will probably not be using SublimeText
 | 
				
			||||||
 | 
					# *.sublime-project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# sftp configuration file
 | 
				
			||||||
 | 
					sftp-config.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Package control specific files
 | 
				
			||||||
 | 
					Package Control.last-run
 | 
				
			||||||
 | 
					Package Control.ca-list
 | 
				
			||||||
 | 
					Package Control.ca-bundle
 | 
				
			||||||
 | 
					Package Control.system-ca-bundle
 | 
				
			||||||
 | 
					Package Control.cache/
 | 
				
			||||||
 | 
					Package Control.ca-certs/
 | 
				
			||||||
 | 
					bh_unicode_properties.cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sublime-github package stores a github token in this file
 | 
				
			||||||
 | 
					# https://packagecontrol.io/packages/sublime-github
 | 
				
			||||||
 | 
					GitHub.sublime-settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Windows ###
 | 
				
			||||||
 | 
					# Windows image file caches
 | 
				
			||||||
 | 
					Thumbs.db
 | 
				
			||||||
 | 
					ehthumbs.db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Folder config file
 | 
				
			||||||
 | 
					Desktop.ini
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Recycle Bin used on file shares
 | 
				
			||||||
 | 
					$RECYCLE.BIN/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows Installer files
 | 
				
			||||||
 | 
					*.cab
 | 
				
			||||||
 | 
					*.msi
 | 
				
			||||||
 | 
					*.msm
 | 
				
			||||||
 | 
					*.msp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows shortcuts
 | 
				
			||||||
 | 
					*.lnk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### macOS ###
 | 
				
			||||||
 | 
					*.DS_Store
 | 
				
			||||||
 | 
					.AppleDouble
 | 
				
			||||||
 | 
					.LSOverride
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Icon must end with two \r
 | 
				
			||||||
 | 
					Icon
 | 
				
			||||||
 | 
					# Thumbnails
 | 
				
			||||||
 | 
					._*
 | 
				
			||||||
 | 
					# Files that might appear in the root of a volume
 | 
				
			||||||
 | 
					.DocumentRevisions-V100
 | 
				
			||||||
 | 
					.fseventsd
 | 
				
			||||||
 | 
					.Spotlight-V100
 | 
				
			||||||
 | 
					.TemporaryItems
 | 
				
			||||||
 | 
					.Trashes
 | 
				
			||||||
 | 
					.VolumeIcon.icns
 | 
				
			||||||
 | 
					.com.apple.timemachine.donotpresent
 | 
				
			||||||
 | 
					# Directories potentially created on remote AFP share
 | 
				
			||||||
 | 
					.AppleDB
 | 
				
			||||||
 | 
					.AppleDesktop
 | 
				
			||||||
 | 
					Network Trash Folder
 | 
				
			||||||
 | 
					Temporary Items
 | 
				
			||||||
 | 
					.apdisk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Emacs ###
 | 
				
			||||||
 | 
					# -*- mode: gitignore; -*-
 | 
				
			||||||
 | 
					\#*\#
 | 
				
			||||||
 | 
					/.emacs.desktop
 | 
				
			||||||
 | 
					/.emacs.desktop.lock
 | 
				
			||||||
 | 
					*.elc
 | 
				
			||||||
 | 
					auto-save-list
 | 
				
			||||||
 | 
					tramp
 | 
				
			||||||
 | 
					.\#*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Org-mode
 | 
				
			||||||
 | 
					.org-id-locations
 | 
				
			||||||
 | 
					*_archive
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# flymake-mode
 | 
				
			||||||
 | 
					*_flymake.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# eshell files
 | 
				
			||||||
 | 
					/eshell/history
 | 
				
			||||||
 | 
					/eshell/lastdir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# elpa packages
 | 
				
			||||||
 | 
					/elpa/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reftex files
 | 
				
			||||||
 | 
					*.rel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# AUCTeX auto folder
 | 
				
			||||||
 | 
					/auto/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# cask packages
 | 
				
			||||||
 | 
					.cask/
 | 
				
			||||||
 | 
					dist/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Flycheck
 | 
				
			||||||
 | 
					flycheck_*.el
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# server auth directory
 | 
				
			||||||
 | 
					/server/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# projectiles files
 | 
				
			||||||
 | 
					.projectile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# directory configuration
 | 
				
			||||||
 | 
					.dir-locals.el
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Intellij+iml ###
 | 
				
			||||||
 | 
					# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
 | 
				
			||||||
 | 
					# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific stuff:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sensitive or high-churn files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Gradle:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Mongo Explorer plugin:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## File-based project format:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Plugin-specific files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# IntelliJ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mpeltonen/sbt-idea plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JIRA plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Crashlytics plugin (for Android Studio and IntelliJ)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Intellij+iml Patch ###
 | 
				
			||||||
 | 
					# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*.iml
 | 
				
			||||||
 | 
					modules.xml
 | 
				
			||||||
 | 
					.idea/misc.xml 
 | 
				
			||||||
 | 
					*.ipr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Linux ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# temporary files which can be created if a process still has a handle open of a deleted file
 | 
				
			||||||
 | 
					.fuse_hidden*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# KDE directory preferences
 | 
				
			||||||
 | 
					.directory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linux trash folder which might appear on any partition or disk
 | 
				
			||||||
 | 
					.Trash-*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# .nfs files are created when an open file is removed but is still being accessed
 | 
				
			||||||
 | 
					.nfs*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### C ###
 | 
				
			||||||
 | 
					# Prerequisites
 | 
				
			||||||
 | 
					*.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Object files
 | 
				
			||||||
 | 
					*.o
 | 
				
			||||||
 | 
					*.ko
 | 
				
			||||||
 | 
					*.elf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linker output
 | 
				
			||||||
 | 
					*.map
 | 
				
			||||||
 | 
					*.exp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Precompiled Headers
 | 
				
			||||||
 | 
					*.gch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Libraries
 | 
				
			||||||
 | 
					*.lib
 | 
				
			||||||
 | 
					*.a
 | 
				
			||||||
 | 
					*.la
 | 
				
			||||||
 | 
					*.lo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Shared objects (inc. Windows DLLs)
 | 
				
			||||||
 | 
					*.dll
 | 
				
			||||||
 | 
					*.so
 | 
				
			||||||
 | 
					*.so.*
 | 
				
			||||||
 | 
					*.dylib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Executables
 | 
				
			||||||
 | 
					*.exe
 | 
				
			||||||
 | 
					*.out
 | 
				
			||||||
 | 
					*.app
 | 
				
			||||||
 | 
					*.i*86
 | 
				
			||||||
 | 
					*.x86_64
 | 
				
			||||||
 | 
					*.hex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Debug files
 | 
				
			||||||
 | 
					*.dSYM/
 | 
				
			||||||
 | 
					*.su
 | 
				
			||||||
 | 
					*.idb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Kernel Module Compile Results
 | 
				
			||||||
 | 
					*.mod*
 | 
				
			||||||
 | 
					*.cmd
 | 
				
			||||||
 | 
					modules.order
 | 
				
			||||||
 | 
					Module.symvers
 | 
				
			||||||
 | 
					Mkfile.old
 | 
				
			||||||
 | 
					dkms.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### C++ ###
 | 
				
			||||||
 | 
					# Prerequisites
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiled Object files
 | 
				
			||||||
 | 
					*.slo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Precompiled Headers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiled Dynamic libraries
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Fortran module files
 | 
				
			||||||
 | 
					*.mod
 | 
				
			||||||
 | 
					*.smod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compiled Static libraries
 | 
				
			||||||
 | 
					*.lai
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Executables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### CMake ###
 | 
				
			||||||
 | 
					CMakeCache.txt
 | 
				
			||||||
 | 
					CMakeFiles
 | 
				
			||||||
 | 
					CMakeScripts
 | 
				
			||||||
 | 
					Makefile
 | 
				
			||||||
 | 
					cmake_install.cmake
 | 
				
			||||||
 | 
					install_manifest.txt
 | 
				
			||||||
 | 
					CTestTestfile.cmake
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Python ###
 | 
				
			||||||
 | 
					# Byte-compiled / optimized / DLL files
 | 
				
			||||||
 | 
					*.py[cod]
 | 
				
			||||||
 | 
					*$py.class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# C extensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Distribution / packaging
 | 
				
			||||||
 | 
					.Python
 | 
				
			||||||
 | 
					env/
 | 
				
			||||||
 | 
					build/
 | 
				
			||||||
 | 
					develop-eggs/
 | 
				
			||||||
 | 
					downloads/
 | 
				
			||||||
 | 
					eggs/
 | 
				
			||||||
 | 
					.eggs/
 | 
				
			||||||
 | 
					lib/
 | 
				
			||||||
 | 
					lib64/
 | 
				
			||||||
 | 
					parts/
 | 
				
			||||||
 | 
					sdist/
 | 
				
			||||||
 | 
					var/
 | 
				
			||||||
 | 
					*.egg-info/
 | 
				
			||||||
 | 
					.installed.cfg
 | 
				
			||||||
 | 
					*.egg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyInstaller
 | 
				
			||||||
 | 
					#  Usually these files are written by a python script from a template
 | 
				
			||||||
 | 
					#  before PyInstaller builds the exe, so as to inject date/other infos into it.
 | 
				
			||||||
 | 
					*.manifest
 | 
				
			||||||
 | 
					*.spec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installer logs
 | 
				
			||||||
 | 
					pip-log.txt
 | 
				
			||||||
 | 
					pip-delete-this-directory.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Unit test / coverage reports
 | 
				
			||||||
 | 
					htmlcov/
 | 
				
			||||||
 | 
					.tox/
 | 
				
			||||||
 | 
					.coverage
 | 
				
			||||||
 | 
					.coverage.*
 | 
				
			||||||
 | 
					.cache
 | 
				
			||||||
 | 
					nosetests.xml
 | 
				
			||||||
 | 
					coverage.xml
 | 
				
			||||||
 | 
					*,cover
 | 
				
			||||||
 | 
					.hypothesis/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Translations
 | 
				
			||||||
 | 
					*.mo
 | 
				
			||||||
 | 
					*.pot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Django stuff:
 | 
				
			||||||
 | 
					local_settings.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Flask stuff:
 | 
				
			||||||
 | 
					instance/
 | 
				
			||||||
 | 
					.webassets-cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Scrapy stuff:
 | 
				
			||||||
 | 
					.scrapy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sphinx documentation
 | 
				
			||||||
 | 
					docs/_build/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyBuilder
 | 
				
			||||||
 | 
					target/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Jupyter Notebook
 | 
				
			||||||
 | 
					.ipynb_checkpoints
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pyenv
 | 
				
			||||||
 | 
					.python-version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# celery beat schedule file
 | 
				
			||||||
 | 
					celerybeat-schedule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# dotenv
 | 
				
			||||||
 | 
					.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# virtualenv
 | 
				
			||||||
 | 
					.venv/
 | 
				
			||||||
 | 
					venv/
 | 
				
			||||||
 | 
					ENV/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Spyder project settings
 | 
				
			||||||
 | 
					.spyderproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Rope project settings
 | 
				
			||||||
 | 
					.ropeproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Java ###
 | 
				
			||||||
 | 
					*.class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# BlueJ files
 | 
				
			||||||
 | 
					*.ctxt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Mobile Tools for Java (J2ME)
 | 
				
			||||||
 | 
					.mtj.tmp/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Package Files #
 | 
				
			||||||
 | 
					*.jar
 | 
				
			||||||
 | 
					*.war
 | 
				
			||||||
 | 
					*.ear
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
 | 
				
			||||||
 | 
					hs_err_pid*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### VisualStudio ###
 | 
				
			||||||
 | 
					## Ignore Visual Studio temporary files, build results, and
 | 
				
			||||||
 | 
					## files generated by popular Visual Studio add-ons.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files (MonoDevelop/Xamarin Studio)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 2015 cache/options directory
 | 
				
			||||||
 | 
					# Uncomment if you have tasks that create the project's static files in wwwroot
 | 
				
			||||||
 | 
					#wwwroot/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MSTest test Results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NUNIT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Results of an ATL Project
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# .NET Core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Chutzpah Test files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual C++ cache files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio profiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TFS 2012 Local Workspace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Guidance Automation Toolkit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ReSharper is a .NET coding add-in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JustCode is a .NET coding add-in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TeamCity is a build add-in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DotCover is a Code Coverage Tool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio code coverage results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NCrunch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MightyMoose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Web workbench (sass)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installshield output folder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DocProject is a documentation generator add-in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Click-Once directory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Publish Web Output
 | 
				
			||||||
 | 
					# TODO: Comment the next line if you want to checkin your web deploy settings
 | 
				
			||||||
 | 
					# but database connection strings (with potential passwords) will be unencrypted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Web App publish settings. Comment the next line if you want to
 | 
				
			||||||
 | 
					# checkin your Azure Web App publish settings, but sensitive information contained
 | 
				
			||||||
 | 
					# in these scripts will be unencrypted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NuGet Packages
 | 
				
			||||||
 | 
					# The packages folder can be ignored because of Package Restore
 | 
				
			||||||
 | 
					# except build/, which is used as an MSBuild target.
 | 
				
			||||||
 | 
					# Uncomment if necessary however generally it will be regenerated when needed
 | 
				
			||||||
 | 
					#!**/packages/repositories.config
 | 
				
			||||||
 | 
					# NuGet v3's project.json files produces more ignoreable files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Build Output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Emulator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows Store app package directories and files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio cache files
 | 
				
			||||||
 | 
					# files ending in .cache can be ignored
 | 
				
			||||||
 | 
					# but keep track of directories ending in .cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Others
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Since there are multiple workflows, uncomment next line to ignore bower_components
 | 
				
			||||||
 | 
					# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
 | 
				
			||||||
 | 
					#bower_components/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RIA/Silverlight projects
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Backup & report files from converting an old project file
 | 
				
			||||||
 | 
					# to a newer Visual Studio version. Backup files are not needed,
 | 
				
			||||||
 | 
					# because we have git ;-)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SQL Server files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Business Intelligence projects
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Fakes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GhostDoc plugin setting file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Node.js Tools for Visual Studio
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 build log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 workspace options file
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio LightSwitch build output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Paket dependency manager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# FAKE - F# Make
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JetBrains Rider
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CodeRush
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Python Tools for Visual Studio (PTVS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cake - Uncomment if you are using it
 | 
				
			||||||
 | 
					# tools/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### VisualStudio Patch ###
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					Individual files may be licensed differently, as noted in those files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MIT License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2016 individual contributors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
				
			||||||
 | 
					of this software and associated documentation files (the "Software"), to deal
 | 
				
			||||||
 | 
					in the Software without restriction, including without limitation the rights
 | 
				
			||||||
 | 
					to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
				
			||||||
 | 
					copies of the Software, and to permit persons to whom the Software is
 | 
				
			||||||
 | 
					furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above copyright notice and this permission notice shall be included in all
 | 
				
			||||||
 | 
					copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
				
			||||||
 | 
					IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
				
			||||||
 | 
					FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
				
			||||||
 | 
					AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
				
			||||||
 | 
					LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
				
			||||||
 | 
					OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
				
			||||||
 | 
					SOFTWARE.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					# Advent of Code 2016
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## About
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These are my solutions to the Advent of Code 2016.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					By default, all code in this project is licensed under the MIT license, 
 | 
				
			||||||
 | 
					copyright the individual contributor(s). Comments in individual files 
 | 
				
			||||||
 | 
					may specify an alternate license as chosen by a particular individual 
 | 
				
			||||||
 | 
					for their code. If not specified, the file is MIT.
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,187 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 1 (part 1)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace adventofcode
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    enum Direction
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        North,
 | 
				
			||||||
 | 
					        East,
 | 
				
			||||||
 | 
					        South,
 | 
				
			||||||
 | 
					        West
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    enum Side
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Left = 'L',
 | 
				
			||||||
 | 
					        Right = 'R'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    class Instruction
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public Side Side { get; set; }
 | 
				
			||||||
 | 
					        public int StepCount { get; set; }
 | 
				
			||||||
 | 
					        public Instruction(Side side, int stepCount)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.Side = side;
 | 
				
			||||||
 | 
					            this.StepCount = stepCount;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    class Point
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int X { get; set; }
 | 
				
			||||||
 | 
					        public int Y { get; set; }
 | 
				
			||||||
 | 
					        public Point(int x, int y)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.X = x;
 | 
				
			||||||
 | 
					            this.Y = y;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    class bscott01
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        List<Instruction> instructions = new List<Instruction>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void ClearInstructions()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            instructions.Clear();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public bool LoadInstructions(string input)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (input.Length == 0)
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach (string s in input.Split(new char[] { ',' }))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                string instruction = s.Trim().ToUpper();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Not a valid instruction length
 | 
				
			||||||
 | 
					                if (instruction.Length < 2)
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Not a valid side
 | 
				
			||||||
 | 
					                if (instruction[0] != 'L' && instruction[0] != 'R')
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Side side = (Side)instruction[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                int stepCount = 0;
 | 
				
			||||||
 | 
					                if(!int.TryParse(instruction.Substring(1), out stepCount))
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                instructions.Add(new Instruction(side, stepCount));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return instructions.Count > 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public int GetDistanceA()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int currentX = 0, currentY = 0;
 | 
				
			||||||
 | 
					            Direction currentDirection = Direction.North;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach (Instruction instruction in instructions)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (instruction.Side == Side.Left)
 | 
				
			||||||
 | 
					                    currentDirection = (int)currentDirection - 1 < 0 ? Direction.West : currentDirection - 1;
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    currentDirection = (int)currentDirection + 1 > 3 ? Direction.North : currentDirection + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                switch(currentDirection)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    case Direction.North:
 | 
				
			||||||
 | 
					                        currentY += instruction.StepCount;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case Direction.East:
 | 
				
			||||||
 | 
					                        currentX += instruction.StepCount;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case Direction.South:
 | 
				
			||||||
 | 
					                        currentY -= instruction.StepCount;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case Direction.West:
 | 
				
			||||||
 | 
					                        currentX -= instruction.StepCount;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return Math.Abs(currentX) + Math.Abs(currentY);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public int GetDistanceB()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int currentX = 0, currentY = 0;
 | 
				
			||||||
 | 
					            Direction currentDirection = Direction.North;
 | 
				
			||||||
 | 
					            List<Point> history = new List<Point>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach (Instruction instruction in instructions)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (instruction.Side == Side.Left)
 | 
				
			||||||
 | 
					                    currentDirection = (int)currentDirection - 1 < 0 ? Direction.West : currentDirection - 1;
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    currentDirection = (int)currentDirection + 1 > 3 ? Direction.North : currentDirection + 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (int i = 0; i < instruction.StepCount; i++)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    switch (currentDirection)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        case Direction.North:
 | 
				
			||||||
 | 
					                            currentY += 1;
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case Direction.East:
 | 
				
			||||||
 | 
					                            currentX += 1;
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case Direction.South:
 | 
				
			||||||
 | 
					                            currentY -= 1;
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case Direction.West:
 | 
				
			||||||
 | 
					                            currentX -= 1;
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    Point point = new Point(currentX, currentY);
 | 
				
			||||||
 | 
					                    if (history.Find(value => value.X == currentX && value.Y == currentY) != null)
 | 
				
			||||||
 | 
					                        return Math.Abs(currentX) + Math.Abs(currentY);
 | 
				
			||||||
 | 
					                   history.Add(point);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            bscott01 test = new bscott01();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // PART 1
 | 
				
			||||||
 | 
					            test.ClearInstructions();
 | 
				
			||||||
 | 
					            test.LoadInstructions("R2, L3");
 | 
				
			||||||
 | 
					            Console.WriteLine("Distance: {0}", test.GetDistanceA());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            test.ClearInstructions();
 | 
				
			||||||
 | 
					            test.LoadInstructions("R2, R2, R2");
 | 
				
			||||||
 | 
					            Console.WriteLine("Distance: {0}", test.GetDistanceA());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            test.ClearInstructions();
 | 
				
			||||||
 | 
					            test.LoadInstructions("R5, L5, R5, R3");
 | 
				
			||||||
 | 
					            Console.WriteLine("Distance: {0}", test.GetDistanceA());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            test.ClearInstructions();
 | 
				
			||||||
 | 
					            test.LoadInstructions("R3, L2, L2, R4, L1, R2, R3, R4, L2, R4, L2, L5, L1, R5, R2, R2, L1, R4, R1, L5, L3, R4, R3, R1, L1, L5, L4, L2, R5, L3, L4, R3, R1, L3, R1, L3, R3, L4, R2, R5, L190, R2, L3, R47, R4, L3, R78, L1, R3, R190, R4, L3, R4, R2, R5, R3, R4, R3, L1, L4, R3, L4, R1, L4, L5, R3, L3, L4, R1, R2, L4, L3, R3, R3, L2, L5, R1, L4, L1, R5, L5, R1, R5, L4, R2, L2, R1, L5, L4, R4, R4, R3, R2, R3, L1, R4, R5, L2, L5, L4, L1, R4, L4, R4, L4, R1, R5, L1, R1, L5, R5, R1, R1, L3, L1, R4, L1, L4, L4, L3, R1, R4, R1, R1, R2, L5, L2, R4, L1, R3, L5, L2, R5, L4, R5, L5, R3, R4, L3, L3, L2, R2, L5, L5, R3, R4, R3, R4, R3, R1");
 | 
				
			||||||
 | 
					            Console.WriteLine("Distance: {0}", test.GetDistanceA());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // PART 2
 | 
				
			||||||
 | 
					            test.ClearInstructions();
 | 
				
			||||||
 | 
					            test.LoadInstructions("R8, R4, R4, R8");
 | 
				
			||||||
 | 
					            Console.WriteLine("Distance: {0}", test.GetDistanceB());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            test.ClearInstructions();
 | 
				
			||||||
 | 
					            test.LoadInstructions("R3, L2, L2, R4, L1, R2, R3, R4, L2, R4, L2, L5, L1, R5, R2, R2, L1, R4, R1, L5, L3, R4, R3, R1, L1, L5, L4, L2, R5, L3, L4, R3, R1, L3, R1, L3, R3, L4, R2, R5, L190, R2, L3, R47, R4, L3, R78, L1, R3, R190, R4, L3, R4, R2, R5, R3, R4, R3, L1, L4, R3, L4, R1, L4, L5, R3, L3, L4, R1, R2, L4, L3, R3, R3, L2, L5, R1, L4, L1, R5, L5, R1, R5, L4, R2, L2, R1, L5, L4, R4, R4, R3, R2, R3, L1, R4, R5, L2, L5, L4, L1, R4, L4, R4, L4, R1, R5, L1, R1, L5, R5, R1, R1, L3, L1, R4, L1, L4, L4, L3, R1, R4, R1, R1, R2, L5, L2, R4, L1, R3, L5, L2, R5, L4, R5, L5, R3, R4, L3, L3, L2, R2, L5, L5, R3, R4, R3, R4, R3, R1");
 | 
				
			||||||
 | 
					            Console.WriteLine("Distance: {0}", test.GetDistanceB());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.ReadLine();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,127 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 2 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace adventofcode
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    enum KeypadType
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Exercise01,
 | 
				
			||||||
 | 
					        Exercise02
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class bscott02
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private int x = 1, y = 1;
 | 
				
			||||||
 | 
					        protected void ResetA()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.x = 1;
 | 
				
			||||||
 | 
					            this.y = 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected void ResetB()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.x = 0;
 | 
				
			||||||
 | 
					            this.y = 2;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string GetCode(string[] input, KeypadType keypadType)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            StringBuilder outputBuffer = new StringBuilder();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (keypadType == KeypadType.Exercise01)
 | 
				
			||||||
 | 
					                ResetA();
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                ResetB();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int i = 0; i < input.Length; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (keypadType == KeypadType.Exercise01)
 | 
				
			||||||
 | 
					                    outputBuffer.Append(GetDigitA(input[i]));
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    outputBuffer.Append(GetDigitB(input[i]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return outputBuffer.ToString();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected string GetDigitA(string input)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (int i = 0; i < input.Length; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                switch(input[i])
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    case 'U':
 | 
				
			||||||
 | 
					                        if (y - 1 > -1) y--;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case 'D':
 | 
				
			||||||
 | 
					                        if (y + 1 < 3) y++;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case 'L':
 | 
				
			||||||
 | 
					                        if (x - 1 > -1) x--;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case 'R':
 | 
				
			||||||
 | 
					                        if (x + 1 < 3) x++;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return (((y * 3) + x) + 1).ToString();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected string GetDigitB(string input)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int[][] map = new int[][]
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                new int[] { 0,  0,  1,  0, 0 },
 | 
				
			||||||
 | 
					                new int[] { 0,  2,  3,  4, 0 },
 | 
				
			||||||
 | 
					                new int[] { 5,  6,  7,  8, 9 },
 | 
				
			||||||
 | 
					                new int[] { 0, 10, 11, 12, 0 },
 | 
				
			||||||
 | 
					                new int[] { 0,  0, 13,  0, 0 }
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int i = 0; i < input.Length; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                switch (input[i])
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    case 'U':
 | 
				
			||||||
 | 
					                        if (y - 1 > -1 && map[y - 1][x] != 0) y--;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case 'D':
 | 
				
			||||||
 | 
					                        if (y + 1 < 5 && map[y + 1][x] != 0) y++;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case 'L':
 | 
				
			||||||
 | 
					                        if (x - 1 > -1 && map[y][x - 1] != 0) x--;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case 'R':
 | 
				
			||||||
 | 
					                        if (x + 1 < 5 && map[y][x + 1] != 0) x++;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return String.Format("{0:X}", map[y][x]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            bscott02 exercise2 = new bscott02();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string[] data = new string[]
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "UUURRRRULRDLRDRRDURDDDLLDLLLULDUDDLDLULUURULRLDLRRLLLRRDRRLDDLLULUDUDDLRDRDUURDLURUURLRULLDDURULRRURDUURLULUUUURDDDDUUDLULRULLLRLLRRRURDLLRLLRRRUURULRDRUUDDDDDLLLRURRURRUURDUURDDRDLULRRLLLDRRRLURRLLURLDRRDDLDLRRLLRDRLLLLDLULDLRRDRRLDDURLULLUDLUDRRDRRLRLULURDRLRLUUUDLRLDLLLURDUDULULDDRUUURLLLDLLDDUDDRURURUDDLUULRDRRRRLDRDDURLUDURDULLDLUDLULDRLRLLRLLLLRURDURLLDRRDRLRUUUUULLLRUDURUDLLLUDLLLLRDLDRDUDRURLUDDUDDURLUUUUDDLLUDLULLLLLDUDLLRLRRDDDULULRLDRLLULDLUDLLURULRDDUURULRDLDLDLRL",
 | 
				
			||||||
 | 
					                "URUUURDULUDLUUUUDDRRRDRRRLDUDLRDRRDRDDLRUULDLLDUDULLLRLDRDRRLDLDLUUDRUULDUDULDUDURURDDURULDLURULRLULDUDDUULDLLLDDURDDRDDURUULUUDRLDDULDRRRRDURRUDLLLURDDDLRULLRDDRDDDDLUUDRDUULRRRRURULDDDLDDRDRRUDRRURUDRDDLDRRRLLURURUULUUDRDULLDRLRDRRDDURDUDLDRLUDRURDURURULDUUURDUULRRRRRUDLLULDDDRLULDDULUDRRRDDRUDRRDLDLRUULLLLRRDRRLUDRUULRDUDRDRRRDDRLLRUUDRLLLUDUDLULUUDULDRRRRDDRURULDULLURDLLLDUUDLLUDRLDURRRLDDDURUDUDURRULDD",
 | 
				
			||||||
 | 
					                "LRUDDULLLULRLUDUDUDRLLUUUULLUDLUUUUDULLUURDLLRDUDLRUDRUDDURURRURUDLLLRLDLUDRRRRRRDLUURLRDDDULRRUDRULRDRDDUULRDDLDULDRRRDDLURRURLLLRURDULLRUUUDDUDUURLRLDDUURLRDRRLURLDRLLUUURDRUUDUUUDRLURUUUDLDRRLRLLRRUURULLLRLLDLLLDULDDLDULDLDDRUDURDDURDUDURDLLLRRDDLULLLUDURLUDDLDLUUDRDRUDUUDLLDDLLLLDRDULRDLDULLRUDDUULDUDLDDDRUURLDRRLURRDDRUUDRUDLLDLULLULUDUDURDDRLRDLRLDRLDDRULLLRUDULDRLRLRULLRLLRRRLLRRRDDRULRUURRLLLRULDLUDRRDDLLLUDDUDDDLURLUDRDLURUUDLLDLULURRLLDURUDDDDRLULRDDLRLDDLRLLDDRRLRDUDUUULRRLRULUDURDUDRLRLRUDUDLLRRRRLRRUDUL",
 | 
				
			||||||
 | 
					                "RULLLLUUUDLLDLLRULLRURRULDDRDLUULDRLLRUDLLRRLRDURLLDUUUUURUUURDLUURRLDDDLRRRRLRULDUDDLURDRRUUDLRRRDLDDUDUDDRUDURURLDULLDLULDLLUDLULRDRLLURRLLDURLDLRDLULUDDULDLDDDDDUURRDRURLDLDULLURDLLDDLLUDLDLDRLRLDLRDRLDLRRUUDRURLUUUDLURUULDUDRDULLDURUDLUUURRRLLDUDUDDUUULLLRUULDLURUDDRLUDRDDLDLLUDUDRRRDDUUULUULLLRLLUURDUUDRUUULULLDLDRUUDURLLUULRLDLUURLLUUDRURDDRLURULDUDUUDRRUUURDULRLDUUDDRURURDRRULDDDRLUDLLUUDURRRLDLRLRDRURLURLLLRLDDLRRLDLDDURDUUDRDRRLDRLULDRLURUUUDDRLLLDDLDURLLLLDRDLDRRUDULURRLULRDRLLUULLRLRDRLLULUURRUDRUDDDLLDURURLURRRDLLDRDLUDRULULULRLDLRRRUUDLULDURLRDRLULRUUURRDDLRUURUDRURUDURURDD",
 | 
				
			||||||
 | 
					                "DURRDLLLDDLLDLLRLULULLRDLDRRDDRDLRULURRDUUDDRLLDDLDRRLRDUDRULDLRURDUUDRDDLLDRRDRUDUDULLDDDDLDRRRLRLRDRDLURRDDLDDDUUDRDRLLLDLUDDDLUULRDRLLLRLLUULUDDDRLDUUUURULRDDURRDRLUURLUDRLRLLLDDLRDDUULRRRRURDLDDDRLDLDRRLLDRDDUDDUURDLDUUDRDLDLDDULULUDDLRDDRLRLDDLUDLLDRLUDUDDRULLRLDLLRULRUURDDRDRDRURDRRLRDLLUDDRRDRRLDDULLLDLUDRRUDLDULDRURRDURLURRLDLRDLRUDLULUDDRULRLLDUURULURULURRLURRUULRULRRRLRDLULRLRLUDURDDRUUURDRLLRRRDDLDRRRULLDLRDRULDRRLRRDLUDDRDDDUUURRLULLDRRUULULLRRRRLDDRDDLUURLLUDLLDUDLULUULUDLLUUURRRUDDDRLLLRDRUUDUUURDRULURRLRDLLUURLRDURULDRRUDURRDDLDRLDRUUDRLLUDLRRU"
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.WriteLine("Exercise 02 - Part 1: {0}", exercise2.GetCode(data, KeypadType.Exercise01));
 | 
				
			||||||
 | 
					            Console.WriteLine("Exercise 02 - Part 2: {0}", exercise2.GetCode(data, KeypadType.Exercise02));
 | 
				
			||||||
 | 
					            Console.ReadLine();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,114 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 7 (Part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace adventofcode
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class bscott07
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public static int GetTLSIPCount(string[] input)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int ipCount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int i = 0; i < input.Length; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                bool insideBracket = false;
 | 
				
			||||||
 | 
					                bool hasMirrorSequence = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (int j = 0; j < input[i].Length - 3; j++)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (input[i][j] == '[')
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        insideBracket = true;
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else if (input[i][j] == ']')
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        insideBracket = false;
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if ((input[i][j] == input[i][j + 3] && input[i][j + 1] == input[i][j + 2])
 | 
				
			||||||
 | 
					                        && (input[i][j] != input[i][j + 1] && input[i][j + 2] != input[i][j + 3]))
 | 
				
			||||||
 | 
					                        if (insideBracket)
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                            hasMirrorSequence = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!insideBracket && hasMirrorSequence)
 | 
				
			||||||
 | 
					                    ipCount++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return ipCount;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static int GetSSLIPCount(string[] input)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int ipCount = 0;
 | 
				
			||||||
 | 
					            for (int i = 0; i < input.Length; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                bool insideBracket = false;
 | 
				
			||||||
 | 
					                List<String> babSequences = new List<string>();
 | 
				
			||||||
 | 
					                List<String> abaSequences = new List<string>();
 | 
				
			||||||
 | 
					                for (int j = 0; j < input[i].Length - 2; j++)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (input[i][j] == '[')
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        insideBracket = true;
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else if (input[i][j] == ']')
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        insideBracket = false;
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (insideBracket)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (input[i][j] == input[i][j + 2] && input[i][j] != input[i][j + 1])
 | 
				
			||||||
 | 
					                            babSequences.Add(input[i].Substring(j + 1, 1) + input[i].Substring(j, 1) + input[i].Substring(j + 1, 1)); // pre flip it
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (input[i][j] == input[i][j + 2] && input[i][j] != input[i][j + 1])
 | 
				
			||||||
 | 
					                            abaSequences.Add(input[i].Substring(j, 3));
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (babSequences.Count > 0 && abaSequences.Count > 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    for (int j = 0; j < abaSequences.Count; j++)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (babSequences.Contains(abaSequences[j]))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            ipCount++;
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return ipCount;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string[] input = File.ReadAllLines("input_day07.txt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 - TLS IP Count: {0}", bscott07.GetTLSIPCount(input));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 2 - SSL IP Count: {0}", bscott07.GetSSLIPCount(input));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.ReadLine();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,144 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 8 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace adventofcode
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class bscott08
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private int _width, _height;
 | 
				
			||||||
 | 
					        private byte[] _screenData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bscott08(int width, int height)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _width = width;
 | 
				
			||||||
 | 
					            _height = height;
 | 
				
			||||||
 | 
					            _screenData = new byte[width * height];
 | 
				
			||||||
 | 
					            Clear();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void Clear()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // clear the screen
 | 
				
			||||||
 | 
					            for (int i = 0; i < _screenData.Length; i++)
 | 
				
			||||||
 | 
					                _screenData[i] = (byte)'.';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void ProcessInstruction(string instruction)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string[] args = instruction.Split(new char[] { ' ' });
 | 
				
			||||||
 | 
					            int width = 0, height = 0, x = 0, y = 0, count = 0;
 | 
				
			||||||
 | 
					            switch (args[0])
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                case "rect":
 | 
				
			||||||
 | 
					                    string[] dimensions = args[1].Split(new char[] { 'x' });
 | 
				
			||||||
 | 
					                    int.TryParse(dimensions[0], out width);
 | 
				
			||||||
 | 
					                    int.TryParse(dimensions[1], out height);
 | 
				
			||||||
 | 
					                    Rect(width, height);
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case "rotate":
 | 
				
			||||||
 | 
					                    if (args[1] == "column")
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        int.TryParse(args[2].Substring(2), out x);
 | 
				
			||||||
 | 
					                        int.TryParse(args[4], out count);
 | 
				
			||||||
 | 
					                        RotateColumn(x, count);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        int.TryParse(args[2].Substring(2), out y);
 | 
				
			||||||
 | 
					                        int.TryParse(args[4], out count);
 | 
				
			||||||
 | 
					                        RotateRow(y, count);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private byte GetPixel(int y, int x)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return _screenData[(y * _width) + x];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void SetPixel(int y, int x, byte value)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _screenData[(y * _width) + x] = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void Rect(int width, int height)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (int y = 0; y < height; y++)
 | 
				
			||||||
 | 
					                for (int x = 0; x < width; x++)
 | 
				
			||||||
 | 
					                    SetPixel(y, x, (byte)'#');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void RotateColumn(int x, int count)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            byte[] tempColumn = new byte[_height];
 | 
				
			||||||
 | 
					            // minipulate temp column
 | 
				
			||||||
 | 
					            for (int y = 0; y < _height; y++)
 | 
				
			||||||
 | 
					                tempColumn[(y + count) % _height] = GetPixel(y, x);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int y = 0; y < _height; y++)
 | 
				
			||||||
 | 
					                SetPixel(y, x, tempColumn[y]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void RotateRow(int y, int count)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            byte[] tempRow = new byte[_width];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // minipulate temp row
 | 
				
			||||||
 | 
					            for (int x = 0; x < _width; x++)
 | 
				
			||||||
 | 
					                tempRow[(x + count) % _width] = GetPixel(y, x);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int x = 0; x < _width; x++)
 | 
				
			||||||
 | 
					                SetPixel(y, x, tempRow[x]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public int GetLitPixels()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int result = 0;
 | 
				
			||||||
 | 
					            for (int i = 0; i < _screenData.Length; i++)
 | 
				
			||||||
 | 
					                if (_screenData[i] != (byte)'.')
 | 
				
			||||||
 | 
					                    result++;
 | 
				
			||||||
 | 
					            return result;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void DumpScreen()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (int y = 0; y < _height; y++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                for (int x = 0; x < _width; x++)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Console.Write((char)GetPixel(y, x));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                Console.Write("\n");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            Console.Write("\n");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            bscott08 day08 = new bscott08(50, 6);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string[] input = File.ReadAllLines("input_day08.txt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (int i = 0; i < input.Length; i++)
 | 
				
			||||||
 | 
					                day08.ProcessInstruction(input[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Part 1 ( don't skim over the instructions >_< )
 | 
				
			||||||
 | 
					            Console.WriteLine("Pixels Lit: {0}\n", day08.GetLitPixels());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Part 2
 | 
				
			||||||
 | 
					            Console.WriteLine("Screen Dump: ");
 | 
				
			||||||
 | 
					            day08.DumpScreen();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.ReadLine();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,141 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 9 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					using System.Text.RegularExpressions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace adventofcode
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class bscott09
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public static long CalcDecompressedLength(string input, bool recursive = false, int level = 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            long decompressedLength = 0;
 | 
				
			||||||
 | 
					            MatchCollection matchCollection = Regex.Matches(input, @"\((\d+)x(\d+)\)");
 | 
				
			||||||
 | 
					            int lastMatchIndex = 0, nextCmdPosition = 0;
 | 
				
			||||||
 | 
					            int length = 0, repeatCount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // nothing to process
 | 
				
			||||||
 | 
					            if (matchCollection.Count == 0 || level > 25)
 | 
				
			||||||
 | 
					                return input.Length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // pre-inline data
 | 
				
			||||||
 | 
					            if (matchCollection[0].Index > 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                nextCmdPosition = matchCollection[0].Index;
 | 
				
			||||||
 | 
					                decompressedLength += matchCollection[0].Index;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // cycle through detected commands, ignore non-commands, include inline data
 | 
				
			||||||
 | 
					            foreach (Match m in matchCollection)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int.TryParse(m.Groups[1].Value, out length);
 | 
				
			||||||
 | 
					                int.TryParse(m.Groups[2].Value, out repeatCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (m.Index >= nextCmdPosition)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // inline data
 | 
				
			||||||
 | 
					                    if (m.Index > nextCmdPosition)
 | 
				
			||||||
 | 
					                        decompressedLength += (m.Index - nextCmdPosition);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    string payload = input.Substring(m.Index + m.Length, length);
 | 
				
			||||||
 | 
					                    long payloadLength = recursive ? CalcDecompressedLength(payload, true, level++) : payload.Length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    decompressedLength += (payloadLength * repeatCount);
 | 
				
			||||||
 | 
					                    lastMatchIndex = m.Index;
 | 
				
			||||||
 | 
					                    nextCmdPosition = (m.Index + m.Length) + length;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // trailing inline data
 | 
				
			||||||
 | 
					            if (lastMatchIndex != nextCmdPosition)
 | 
				
			||||||
 | 
					                decompressedLength += (input.Length - nextCmdPosition);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return decompressedLength;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static string Decompress(string input, bool recursiveDecompress = false, int level = 0, int maxLevel = 25)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            StringBuilder output = new StringBuilder();
 | 
				
			||||||
 | 
					            MatchCollection matchCollection = Regex.Matches(input, @"\((\d+)x(\d+)\)");
 | 
				
			||||||
 | 
					            int lastMatchIndex = 0, nextCmdPosition = 0;
 | 
				
			||||||
 | 
					            int length = 0, repeatCount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // nothing to process or the recursion level is too high
 | 
				
			||||||
 | 
					            if (matchCollection.Count == 0 || level > maxLevel)
 | 
				
			||||||
 | 
					                return input;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // pre-inline data
 | 
				
			||||||
 | 
					            if (matchCollection[0].Index > 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                nextCmdPosition = matchCollection[0].Index;
 | 
				
			||||||
 | 
					                output.Append(input.Substring(0, matchCollection[0].Index));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // cycle through detected commands, ignore non-commands, include inline data
 | 
				
			||||||
 | 
					            foreach (Match m in matchCollection)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int.TryParse(m.Groups[1].Value, out length);
 | 
				
			||||||
 | 
					                int.TryParse(m.Groups[2].Value, out repeatCount);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (m.Index >= nextCmdPosition)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // inline data
 | 
				
			||||||
 | 
					                    if (m.Index > nextCmdPosition)
 | 
				
			||||||
 | 
					                        output.Append(input.Substring(nextCmdPosition, m.Index - nextCmdPosition));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    string payload = input.Substring(m.Index + m.Length, length);
 | 
				
			||||||
 | 
					                    if (recursiveDecompress)
 | 
				
			||||||
 | 
					                        payload = Decompress(payload, true, level++);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    for (int i = 0; i < repeatCount; i++)
 | 
				
			||||||
 | 
					                        output.Append(payload);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    lastMatchIndex = m.Index;
 | 
				
			||||||
 | 
					                    nextCmdPosition = (m.Index + m.Length) + length;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // trailing inline data
 | 
				
			||||||
 | 
					            if (lastMatchIndex != nextCmdPosition)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                output.Append(input.Substring(nextCmdPosition, input.Length - nextCmdPosition));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return output.ToString();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example Length: {0}", bscott09.CalcDecompressedLength("ADVENT"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example Length: {0}", bscott09.CalcDecompressedLength("A(1x5)BC"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example Length: {0}", bscott09.CalcDecompressedLength("(3x3)XYZ"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example Length: {0}", bscott09.CalcDecompressedLength("A(2x2)BCD(2x2)EFG"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example Length: {0}", bscott09.CalcDecompressedLength("(6x1)(1x3)A"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example Length: {0}", bscott09.CalcDecompressedLength("X(8x2)(3x3)ABCY"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example: {0}", bscott09.Decompress("ADVENT"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example: {0}", bscott09.Decompress("A(1x5)BC"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example: {0}", bscott09.Decompress("(3x3)XYZ"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example: {0}", bscott09.Decompress("A(2x2)BCD(2x2)EFG"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example: {0}", bscott09.Decompress("(6x1)(1x3)A"));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Example: {0}", bscott09.Decompress("X(8x2)(3x3)ABCY"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Part 2
 | 
				
			||||||
 | 
					            string input = File.ReadAllText("input_day09.txt").Trim();
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 1 Length: {0}\n", bscott09.CalcDecompressedLength(input));
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 2 Example Length: {0}", bscott09.CalcDecompressedLength("(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN", true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.WriteLine("Part 2 Length: {0}\n", bscott09.CalcDecompressedLength(input, true));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.ReadLine();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,219 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 10 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace adventofcode
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class Bot
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int Index { get; }
 | 
				
			||||||
 | 
					        public int[] Values { get; set; }
 | 
				
			||||||
 | 
					        public string LowDestination { get; set; }
 | 
				
			||||||
 | 
					        public int LowDestinationId { get; set; }
 | 
				
			||||||
 | 
					        public string HighDestination { get; set; }
 | 
				
			||||||
 | 
					        public int HighDestinationId { get; set; }
 | 
				
			||||||
 | 
					        public Bot(int index)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Index = index;
 | 
				
			||||||
 | 
					            Values = new int[2] { -1, -1 };
 | 
				
			||||||
 | 
					            LowDestination = "";
 | 
				
			||||||
 | 
					            LowDestinationId = -1;
 | 
				
			||||||
 | 
					            HighDestination = "";
 | 
				
			||||||
 | 
					            HighDestinationId = -1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bool SetValue(int value)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (this.Values[0] == -1)
 | 
				
			||||||
 | 
					                this.Values[0] = value;
 | 
				
			||||||
 | 
					            else if (this.Values[1] == -1)
 | 
				
			||||||
 | 
					                this.Values[1] = value;
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					                return false; // both values already set?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public bool HasBothValues()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return this.Values[0] > -1 && this.Values[1] > -1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public int GetAndClearLowValue()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int lowValueIndex = this.Values[0] > this.Values[1] ? 1 : 0;
 | 
				
			||||||
 | 
					            int lowValue = this.Values[lowValueIndex];
 | 
				
			||||||
 | 
					            this.Values[lowValueIndex] = -1;
 | 
				
			||||||
 | 
					            return lowValue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public int GetAndClearHighValue()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int highValueIndex = this.Values[0] < this.Values[1] ? 1 : 0;
 | 
				
			||||||
 | 
					            int highValue = this.Values[highValueIndex];
 | 
				
			||||||
 | 
					            this.Values[highValueIndex] = -1;
 | 
				
			||||||
 | 
					            return highValue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override string ToString()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return String.Format("Bot HasBothValues={0}, LowDestination={1}, LowDestinationId={2}, HighDestination={3}, HighDestinationId={4}",
 | 
				
			||||||
 | 
					                this.HasBothValues(), this.LowDestination, this.LowDestinationId, this.HighDestination, this.HighDestinationId);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class ComparisonLogEntry
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public int Index { get; set; }
 | 
				
			||||||
 | 
					        public int ValueA { get; set; }
 | 
				
			||||||
 | 
					        public int ValueB { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public ComparisonLogEntry(int index, int valueA, int valueB)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.Index = index;
 | 
				
			||||||
 | 
					            this.ValueA = valueA;
 | 
				
			||||||
 | 
					            this.ValueB = valueB;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class bscott10
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private Dictionary<int, Bot> bots = new Dictionary<int, Bot>();
 | 
				
			||||||
 | 
					        private Dictionary<int, int> outputs = new Dictionary<int, int>();
 | 
				
			||||||
 | 
					        private List<ComparisonLogEntry> comparisonLog = new List<ComparisonLogEntry>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bscott10()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // precreate all the bots and outputs (pointless robots and outputs shouldn't hurt anything right?)
 | 
				
			||||||
 | 
					            for (int i = 0; i < 1000; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                bots.Add(i, new Bot(i));
 | 
				
			||||||
 | 
					                outputs.Add(i, -1);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Dictionary<int, int> Outputs
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get { return outputs; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public List<ComparisonLogEntry> ComparisonLog
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get { return comparisonLog; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void DumpOutputs()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (int i = 0; i < 1000; i++)
 | 
				
			||||||
 | 
					                if (outputs[i] != -1)
 | 
				
			||||||
 | 
					                    Console.WriteLine($"Output {i} = {outputs[i]}");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public int PerformActions()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int actionsPerformed = 0;
 | 
				
			||||||
 | 
					            foreach (KeyValuePair<int, Bot> bot in bots)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Bot pBot = bot.Value;
 | 
				
			||||||
 | 
					                // we can do something I think....
 | 
				
			||||||
 | 
					                if (pBot.HasBothValues())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    // this is overkill, but i can't think of a better way to have a public interface to fetch a specific bot by
 | 
				
			||||||
 | 
					                    // what comparisons it did.
 | 
				
			||||||
 | 
					                    comparisonLog.Add(new ComparisonLogEntry(bot.Key, pBot.Values[0], pBot.Values[1]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // perform low action
 | 
				
			||||||
 | 
					                    if (pBot.LowDestination == "output")
 | 
				
			||||||
 | 
					                        outputs[pBot.LowDestinationId] = pBot.GetAndClearLowValue();
 | 
				
			||||||
 | 
					                    else if (pBot.LowDestination == "bot")
 | 
				
			||||||
 | 
					                        bots[pBot.LowDestinationId].SetValue(pBot.GetAndClearLowValue());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // perform high action
 | 
				
			||||||
 | 
					                    if (pBot.HighDestination == "output")
 | 
				
			||||||
 | 
					                        outputs[pBot.HighDestinationId] = pBot.GetAndClearHighValue();
 | 
				
			||||||
 | 
					                    else if (pBot.HighDestination == "bot")
 | 
				
			||||||
 | 
					                        bots[pBot.HighDestinationId].SetValue(pBot.GetAndClearHighValue());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    actionsPerformed++;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return actionsPerformed;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public void ProcessInstruction(string instruction)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string[] args = instruction.Split(new char[] { ' ' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            int botId = -1;
 | 
				
			||||||
 | 
					            int value = -1;
 | 
				
			||||||
 | 
					            string lowDest = "";
 | 
				
			||||||
 | 
					            int lowDestId = -1;
 | 
				
			||||||
 | 
					            string highDest = "";
 | 
				
			||||||
 | 
					            int highDestId = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (args[0] == "value")
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int.TryParse(args[1], out value);
 | 
				
			||||||
 | 
					                int.TryParse(args[5], out botId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // set a value.
 | 
				
			||||||
 | 
					                bots[botId].SetValue(value);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (args[0] == "bot")
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int.TryParse(args[1], out botId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                lowDest = args[5];
 | 
				
			||||||
 | 
					                int.TryParse(args[6], out lowDestId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                highDest = args[10];
 | 
				
			||||||
 | 
					                int.TryParse(args[11], out highDestId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                bots[botId].LowDestination = lowDest;
 | 
				
			||||||
 | 
					                bots[botId].LowDestinationId = lowDestId;
 | 
				
			||||||
 | 
					                bots[botId].HighDestination = highDest;
 | 
				
			||||||
 | 
					                bots[botId].HighDestinationId = highDestId;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            bscott10 day10 = new bscott10();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string[] input = File.ReadAllLines("input_day10.txt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // first you process everything
 | 
				
			||||||
 | 
					            for (int i = 0; i < input.Length; i++)
 | 
				
			||||||
 | 
					                day10.ProcessInstruction(input[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // then set everything in motion
 | 
				
			||||||
 | 
					            int actions = day10.PerformActions();
 | 
				
			||||||
 | 
					            while (actions > 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Console.WriteLine($"Performed {actions} actions.");
 | 
				
			||||||
 | 
					                actions = day10.PerformActions();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Part 1
 | 
				
			||||||
 | 
					            foreach (ComparisonLogEntry cle in day10.ComparisonLog)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if ((cle.ValueA == 61 && cle.ValueB == 17) ||
 | 
				
			||||||
 | 
					                    (cle.ValueA == 17 && cle.ValueB == 61))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Console.WriteLine($"Part 1 Answer: Bot {cle.Index}");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Part 2
 | 
				
			||||||
 | 
					            int value = day10.Outputs[0] * day10.Outputs[1] * day10.Outputs[2];
 | 
				
			||||||
 | 
					            Console.WriteLine($"Part 2 Answer: {value}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.ReadLine();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,111 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 12 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.IO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace adventofcode
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    class bscott12
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private Dictionary<string, int> registers = new Dictionary<string, int>();
 | 
				
			||||||
 | 
					        private int pc = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Dictionary<string, int> Registers
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            get { return registers; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bscott12()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (char i = 'a'; i <= 'd'; i++)
 | 
				
			||||||
 | 
					                registers.Add(i.ToString(), 0);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void Reset()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (char i = 'a'; i <= 'd'; i++)
 | 
				
			||||||
 | 
					                registers[i.ToString()] = 0;
 | 
				
			||||||
 | 
					            pc = 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void Process(string[] instructions)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            while(pc < instructions.Length)
 | 
				
			||||||
 | 
					                ProcessInstruction(instructions[pc]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void ProcessInstruction(string instruction)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            string[] arguments = instruction.Split(new char[] { ' ' });
 | 
				
			||||||
 | 
					            int value = 0;
 | 
				
			||||||
 | 
					            bool branch = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            switch (arguments[0])
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                case "cpy":
 | 
				
			||||||
 | 
					                    if (arguments[1][0] >= '0' && arguments[1][0] <= '9')
 | 
				
			||||||
 | 
					                        int.TryParse(arguments[1], out value);
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        value = registers[arguments[1]];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    registers[arguments[2]] = value;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case "inc":
 | 
				
			||||||
 | 
					                    registers[arguments[1]]++;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case "dec":
 | 
				
			||||||
 | 
					                    registers[arguments[1]]--;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                case "jnz":
 | 
				
			||||||
 | 
					                    if (arguments[1][0] >= '0' && arguments[1][0] <= '9')
 | 
				
			||||||
 | 
					                        int.TryParse(arguments[1], out value);
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                        value = registers[arguments[1]];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    int jumpOffset = int.Parse(arguments[2]);
 | 
				
			||||||
 | 
					                    if (value != 0)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        pc = pc + jumpOffset;
 | 
				
			||||||
 | 
					                        branch = true;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(!branch) pc++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            bscott12 day12 = new bscott12();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string[] input = File.ReadAllLines("input_day12.txt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // part 1
 | 
				
			||||||
 | 
					            day12.Process(input);
 | 
				
			||||||
 | 
					            Console.Write("Part 1: ");
 | 
				
			||||||
 | 
					            for (char i = 'a'; i <= 'd'; i++)
 | 
				
			||||||
 | 
					                Console.Write(i.ToString() + " = " + day12.Registers[i.ToString()] + ", ");
 | 
				
			||||||
 | 
					            Console.Write("\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // part 2
 | 
				
			||||||
 | 
					            day12.Reset();
 | 
				
			||||||
 | 
					            day12.Registers["c"] = 1;
 | 
				
			||||||
 | 
					            day12.Process(input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.Write("Part 2: ");
 | 
				
			||||||
 | 
					            for (char i = 'a'; i <= 'd'; i++)
 | 
				
			||||||
 | 
					                Console.Write(i.ToString() + " = " + day12.Registers[i.ToString()] + ", ");
 | 
				
			||||||
 | 
					            Console.Write("\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Console.ReadLine();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,117 @@
 | 
				
			||||||
 | 
					{****************************************************************************
 | 
				
			||||||
 | 
					  Advent of Code 2016
 | 
				
			||||||
 | 
					  Day 6 (part 1 and 2)
 | 
				
			||||||
 | 
					****************************************************************************}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					program bscott06;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{$mode objfpc}{$H+}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uses
 | 
				
			||||||
 | 
					  {$IFDEF UNIX}{$IFDEF UseCThreads}
 | 
				
			||||||
 | 
					  cthreads,
 | 
				
			||||||
 | 
					  {$ENDIF}{$ENDIF}
 | 
				
			||||||
 | 
					  Classes, SysUtils, CustApp
 | 
				
			||||||
 | 
					  { you can add units after this };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  { TAdventOfCodeDay06 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TAdventOfCodeDay06 = class(TCustomApplication)
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					    procedure DoRun; override;
 | 
				
			||||||
 | 
					  public
 | 
				
			||||||
 | 
					    constructor Create(TheOwner: TComponent); override;
 | 
				
			||||||
 | 
					    destructor Destroy; override;
 | 
				
			||||||
 | 
					  end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{ TAdventOfCodeDay06 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					procedure TAdventOfCodeDay06.DoRun;
 | 
				
			||||||
 | 
					var
 | 
				
			||||||
 | 
					  CharCountArrArray: array [0..7, 'a'..'z'] of Integer;
 | 
				
			||||||
 | 
					  Password: array [0..7] of Char;
 | 
				
			||||||
 | 
					  CharCount, I : Integer;
 | 
				
			||||||
 | 
					  J: Char;
 | 
				
			||||||
 | 
					  CurrentLine: String;
 | 
				
			||||||
 | 
					  InputDataFile: text;
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  FillChar (CharCountArrArray,SizeOf(CharCountArrArray),0);
 | 
				
			||||||
 | 
					  FillChar (Password,SizeOf(Password),0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  AssignFile(InputDataFile, 'day6_input.txt');
 | 
				
			||||||
 | 
					  Reset(InputDataFile);
 | 
				
			||||||
 | 
					  while not eof(InputDataFile) do
 | 
				
			||||||
 | 
					  begin
 | 
				
			||||||
 | 
					    readln(InputDataFile, CurrentLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[0, CurrentLine[1]],1);
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[1, CurrentLine[2]],1);
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[2, CurrentLine[3]],1);
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[3, CurrentLine[4]],1);
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[4, CurrentLine[5]],1);
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[5, CurrentLine[6]],1);
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[6, CurrentLine[7]],1);
 | 
				
			||||||
 | 
					    Inc(CharCountArrArray[7, CurrentLine[8]],1);
 | 
				
			||||||
 | 
					  end;
 | 
				
			||||||
 | 
					  CloseFile(InputDataFile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for I := 0 to 7 do
 | 
				
			||||||
 | 
					  begin
 | 
				
			||||||
 | 
					       CharCount := 0;
 | 
				
			||||||
 | 
					       for J := 'a' to 'z' do
 | 
				
			||||||
 | 
					       begin
 | 
				
			||||||
 | 
					         if CharCount < CharCountArrArray[I, J] then
 | 
				
			||||||
 | 
					          begin
 | 
				
			||||||
 | 
					              Password[I] := J;
 | 
				
			||||||
 | 
					              CharCount := CharCountArrArray[I, J];
 | 
				
			||||||
 | 
					          end;
 | 
				
			||||||
 | 
					       end;
 | 
				
			||||||
 | 
					  end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  writeln('Part A Password: ' + Password);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  FillChar (Password,SizeOf(Password),0) ;
 | 
				
			||||||
 | 
					  for I := 0 to 7 do
 | 
				
			||||||
 | 
					  begin
 | 
				
			||||||
 | 
					       CharCount := 0;
 | 
				
			||||||
 | 
					       for J := 'a' to 'z' do
 | 
				
			||||||
 | 
					       begin
 | 
				
			||||||
 | 
					         if (CharCountArrArray[I, J] > 0) and ((CharCount > CharCountArrArray[I, J]) or (CharCount = 0)) then
 | 
				
			||||||
 | 
					          begin
 | 
				
			||||||
 | 
					              Password[I] := J;
 | 
				
			||||||
 | 
					              CharCount := CharCountArrArray[I, J];
 | 
				
			||||||
 | 
					          end;
 | 
				
			||||||
 | 
					       end;
 | 
				
			||||||
 | 
					  end;
 | 
				
			||||||
 | 
					  writeln('Part B Password: ' + Password);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  { add your program here }
 | 
				
			||||||
 | 
					  ReadLn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // stop program loop
 | 
				
			||||||
 | 
					  Terminate;
 | 
				
			||||||
 | 
					end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					constructor TAdventOfCodeDay06.Create(TheOwner: TComponent);
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					  inherited Create(TheOwner);
 | 
				
			||||||
 | 
					  StopOnException:=True;
 | 
				
			||||||
 | 
					end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					destructor TAdventOfCodeDay06.Destroy;
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					  inherited Destroy;
 | 
				
			||||||
 | 
					end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var
 | 
				
			||||||
 | 
					  Application: TAdventOfCodeDay06;
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					  Application:=TAdventOfCodeDay06.Create(nil);
 | 
				
			||||||
 | 
					  Application.Title:='Advent of Code - Day 6';
 | 
				
			||||||
 | 
					  Application.Run;
 | 
				
			||||||
 | 
					  Application.Free;
 | 
				
			||||||
 | 
					end.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,39 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 3 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function isValidTriangle($a, $b, $c) {
 | 
				
			||||||
 | 
						return ($a + $b > $c && $a + $c > $b && $b + $c > $a);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$input = file('day3_input.txt');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$valid_triangle_count = 0;
 | 
				
			||||||
 | 
					foreach($input as $line) {
 | 
				
			||||||
 | 
						$args = array_values(array_filter(explode(' ', $line)));
 | 
				
			||||||
 | 
						if(isValidTriangle((int)$args[0], (int)$args[1], (int)$args[2]))
 | 
				
			||||||
 | 
							$valid_triangle_count++;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Part 1 Count: $valid_triangle_count\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$valid_triangle_count = 0;
 | 
				
			||||||
 | 
					for($i = 0; $i < count($input); $i += 3) {
 | 
				
			||||||
 | 
						$args1 = array_values(array_filter(explode(' ', $input[$i+0])));
 | 
				
			||||||
 | 
						$args2 = array_values(array_filter(explode(' ', $input[$i+1])));
 | 
				
			||||||
 | 
						$args3 = array_values(array_filter(explode(' ', $input[$i+2])));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(isValidTriangle((int)$args1[0], (int)$args2[0], (int)$args3[0]))
 | 
				
			||||||
 | 
							$valid_triangle_count++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(isValidTriangle((int)$args1[1], (int)$args2[1], (int)$args3[1]))
 | 
				
			||||||
 | 
							$valid_triangle_count++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(isValidTriangle((int)$args1[2], (int)$args2[2], (int)$args3[2]))
 | 
				
			||||||
 | 
							$valid_triangle_count++;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Part 2 Count: $valid_triangle_count\n";
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,81 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 4 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function extractRoomInfo($input_line) {
 | 
				
			||||||
 | 
						if(preg_match("/(\S+)-(\d+)\[([^\]]*)\]/", $input_line, $output_array)) {
 | 
				
			||||||
 | 
							return array(
 | 
				
			||||||
 | 
								'room_name' => $output_array[1], 
 | 
				
			||||||
 | 
								'sector_id' => $output_array[2], 
 | 
				
			||||||
 | 
								'checksum' => $output_array[3]
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function generateChecksum($room_name) {
 | 
				
			||||||
 | 
						// calculate char occurrences
 | 
				
			||||||
 | 
						$char_count_array = count_chars(str_replace('-', '', $room_name), 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// sort by occurrence count
 | 
				
			||||||
 | 
						arsort($char_count_array);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// group chars into occurrence count
 | 
				
			||||||
 | 
						$dedupe = array();
 | 
				
			||||||
 | 
						foreach($char_count_array as $char => $occurrence) {
 | 
				
			||||||
 | 
							$dedupe[$occurrence][] = $char;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// cross my fingers and hope this actually works
 | 
				
			||||||
 | 
						$checksum = '';
 | 
				
			||||||
 | 
						foreach($dedupe as $occurrence => $chars) {
 | 
				
			||||||
 | 
							sort($chars);
 | 
				
			||||||
 | 
							for($i = 0; $i < count($chars); $i++) {
 | 
				
			||||||
 | 
								$checksum .= chr($chars[$i]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// cut off the excess and return
 | 
				
			||||||
 | 
						return substr($checksum, 0, 5);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function decryptRoomName($name, $sector_id) {
 | 
				
			||||||
 | 
						$key = $sector_id % 26; // this should work right?
 | 
				
			||||||
 | 
						$a_start = ord('a');
 | 
				
			||||||
 | 
						$output = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for($i = 0; $i < strlen($name); $i++) {
 | 
				
			||||||
 | 
							$a = ord(substr($name, $i, 1));
 | 
				
			||||||
 | 
							if($a == ord('-'))
 | 
				
			||||||
 | 
								$output .= ' ';
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								$output .= chr($a_start + ((($a - $a_start) + $key) % 26));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return $output;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$input = file('day4_input.txt');
 | 
				
			||||||
 | 
					//$input = array("aaaaa-bbb-z-y-x-123[abxyz]", "a-b-c-d-e-f-g-h-987[abcde]", "not-a-real-room-404[oarel]");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Part 1
 | 
				
			||||||
 | 
					$valid_room_sum = 0;
 | 
				
			||||||
 | 
					$valid_rooms = array();
 | 
				
			||||||
 | 
					foreach($input as $line) {
 | 
				
			||||||
 | 
						$room_info = extractRoomInfo($line);
 | 
				
			||||||
 | 
						$generated_checksum = generateChecksum($room_info['room_name']);
 | 
				
			||||||
 | 
						if($generated_checksum == $room_info['checksum']) {
 | 
				
			||||||
 | 
							$valid_rooms[] = $room_info;
 | 
				
			||||||
 | 
							$valid_room_sum += (int)$room_info['sector_id'];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					echo "valid room sum: $valid_room_sum<br />\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Part 2
 | 
				
			||||||
 | 
					foreach($valid_rooms as $room) {
 | 
				
			||||||
 | 
						$decrypted_name = decryptRoomName($room['room_name'], (int)$room['sector_id']);
 | 
				
			||||||
 | 
						echo "room name: $decrypted_name, sector: {$room['sector_id']}<br />\n";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,54 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set_time_limit(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Advent of Code 2016
 | 
				
			||||||
 | 
					 * Day 5 (part 1 and 2)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function calculateHashes($salt, $max = 8) {
 | 
				
			||||||
 | 
						$result = array();
 | 
				
			||||||
 | 
						$count = 0;
 | 
				
			||||||
 | 
						$start = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$cache_file = md5($salt).".cache";
 | 
				
			||||||
 | 
						if(file_exists($cache_file)) {
 | 
				
			||||||
 | 
							$result = file($cache_file);
 | 
				
			||||||
 | 
							if(count($result) >= $max)
 | 
				
			||||||
 | 
								return $result;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for($i = 0; $i < 1000000000; $i++) {
 | 
				
			||||||
 | 
							$hash = md5($salt.$i);
 | 
				
			||||||
 | 
							if(substr($hash, 0, 5) === '00000') {
 | 
				
			||||||
 | 
								$result[$count++] = $hash;
 | 
				
			||||||
 | 
								if($count >= $max)
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						file_put_contents($cache_file, implode("\n", $result));
 | 
				
			||||||
 | 
						return $result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$puzzle_input = 'reyedfim';
 | 
				
			||||||
 | 
					$hashes = calculateHashes($puzzle_input, 30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Part 1
 | 
				
			||||||
 | 
					$password = '';
 | 
				
			||||||
 | 
					for($i = 0; $i < 8; $i++) {
 | 
				
			||||||
 | 
						$password .= substr($hashes[$i], 5, 1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					echo "Step 1 Password: $password\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Part 2
 | 
				
			||||||
 | 
					$password = array_fill(0, 8, '_');
 | 
				
			||||||
 | 
					for($i = 0; $i < count($hashes); $i++) {
 | 
				
			||||||
 | 
						$pos = substr($hashes[$i], 5, 1);
 | 
				
			||||||
 | 
						$char = substr($hashes[$i], 6, 1);
 | 
				
			||||||
 | 
						if (is_numeric($pos) && (int)$pos < 8 && $password[(int)$pos] === '_') 
 | 
				
			||||||
 | 
							$password[(int)$pos] = $char;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					echo "Step 2 Password: ".implode($password);
 | 
				
			||||||
		Loading…
	
		Reference in New Issue