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