Initial commit
This commit is contained in:
commit
8fd936789f
|
@ -0,0 +1,885 @@
|
|||
|
||||
# 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
|
||||
.gradle
|
||||
|
||||
# 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) 2017 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,24 @@
|
|||
# Advent of Code 2017
|
||||
|
||||
## About
|
||||
|
||||
These are my solutions to the Advent of Code 2017.
|
||||
|
||||
## Author
|
||||
|
||||
Brandon Scott
|
||||
|
||||
## What is Advent of Code?
|
||||
|
||||
[Advent of Code](https://adventofcode.com/) is an Advent calendar of small programming
|
||||
puzzles for a variety of skill sets and skill levels that can be solved in any
|
||||
programming language you like. People use them as a speed contest, interview prep,
|
||||
company training, university coursework, practice problems, or to challenge
|
||||
each other.
|
||||
|
||||
## 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,48 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay1 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 1: Inverse Captcha";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string input = "1122";
|
||||
Console.WriteLine($"Example 1: {CalculateSumPart1(input)}");
|
||||
|
||||
input = "1111";
|
||||
Console.WriteLine($"Example 2: {CalculateSumPart1(input)}");
|
||||
|
||||
input = "1234";
|
||||
Console.WriteLine($"Example 3: {CalculateSumPart1(input)}");
|
||||
|
||||
input = "91212129";
|
||||
Console.WriteLine($"Example 4: {CalculateSumPart1(input)}");
|
||||
|
||||
input = File.ReadAllText("BScottDay1.txt");
|
||||
Console.WriteLine($"Part 1 Answer: {CalculateSumPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {CalculateSumPart2(input)}");
|
||||
}
|
||||
|
||||
static long CalculateSumPart1(string input)
|
||||
{
|
||||
long sum = 0;
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
if (input[i] == input[(i + 1) % input.Length])
|
||||
sum += int.Parse(input[i].ToString());
|
||||
return sum;
|
||||
}
|
||||
|
||||
static long CalculateSumPart2(string input)
|
||||
{
|
||||
long sum = 0;
|
||||
int step = input.Length / 2;
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
if (input[i] == input[(i + step) % input.Length])
|
||||
sum += int.Parse(input[i].ToString());
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
818275977931166178424892653779931342156567268946849597948944469863818248114327524824136924486891794739281668741616818614613222585132742386168687517939432911753846817997473555693821316918473474459788714917665794336753628836231159578734813485687247273288926216976992516314415836985611354682821892793983922755395577592859959966574329787693934242233159947846757279523939217844194346599494858459582798326799512571365294673978955928416955127211624234143497546729348687844317864243859238665326784414349618985832259224761857371389133635711819476969854584123589566163491796442167815899539788237118339218699137497532932492226948892362554937381497389469981346971998271644362944839883953967698665427314592438958181697639594631142991156327257413186621923369632466918836951277519421695264986942261781256412377711245825379412978876134267384793694756732246799739464721215446477972737883445615664755923441441781128933369585655925615257548499628878242122434979197969569971961379367756499884537433839217835728263798431874654317137955175565253555735968376115749641527957935691487965161211853476747758982854811367422656321836839326818976668191525884763294465366151349347633968321457954152621175837754723675485348339261288195865348545793575843874731785852718281311481217515834822185477982342271937155479432673815629144664144538221768992733498856934255518875381672342521819499939835919827166318715849161715775427981485233467222586764392783699273452228728667175488552924399518855743923659815483988899924199449721321589476864161778841352853573584489497263216627369841455165476954483715112127465311353411346132671561568444626828453687183385215975319858714144975174516356117245993696521941589168394574287785233685284294357548156487538175462176268162852746996633977948755296869616778577327951858348313582783675149343562362974553976147259225311183729415381527435926224781181987111454447371894645359797229493458443522549386769845742557644349554641538488252581267341635761715674381775778868374988451463624332123361576518411234438681171864923916896987836734129295354684962897616358722633724198278552339794629939574841672355699222747886785616814449297817352118452284785694551841431869545321438468118
|
|
@ -0,0 +1,94 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay10 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 10: Knot Hash";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string input = File.ReadAllText("BScottDay10.txt");
|
||||
Console.WriteLine($"Part 1 Answer: {KnotHashPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {KnotHashPart2(input)}");
|
||||
|
||||
Console.WriteLine($"Part 2 Example Answer #1 (blank): {KnotHashPart2("")}");
|
||||
Console.WriteLine($"Part 2 Example Answer #2 (AoC 2017): {KnotHashPart2("AoC 2017")}");
|
||||
Console.WriteLine($"Part 2 Example Answer #3 (1,2,3): {KnotHashPart2("1,2,3")}");
|
||||
Console.WriteLine($"Part 2 Example Answer #4 (1,2,4): {KnotHashPart2("1,2,4")}");
|
||||
}
|
||||
|
||||
private int KnotHashPart1(string input)
|
||||
{
|
||||
int[] lengths = Array.ConvertAll(input.Split(','), s => int.Parse(s));
|
||||
byte[] list = new byte[256];
|
||||
int pos = 0, skipSize = 0;
|
||||
|
||||
// initialize list
|
||||
for (int i = 0; i < list.Length; i++)
|
||||
list[i] = (byte)i;
|
||||
|
||||
for (int i = 0; i < lengths.Length; i++)
|
||||
{
|
||||
byte[] buff = new byte[lengths[i]];
|
||||
|
||||
for (int j = 0; j < buff.Length; j++)
|
||||
buff[j] = list[(pos + j) % list.Length];
|
||||
|
||||
Array.Reverse(buff);
|
||||
|
||||
for (int j = 0; j < buff.Length; j++)
|
||||
list[(pos + j) % list.Length] = buff[j];
|
||||
|
||||
pos += (lengths[i] + skipSize) % list.Length; // wrap around
|
||||
skipSize++; // increase skip size
|
||||
}
|
||||
|
||||
return list[0] * list[1];
|
||||
}
|
||||
|
||||
private string KnotHashPart2(string input)
|
||||
{
|
||||
String suffix = Encoding.ASCII.GetString(new byte[] { 17, 31, 73, 47, 23 });
|
||||
byte[] lengths = Encoding.ASCII.GetBytes(input + suffix); //string of bytes and add a suffix
|
||||
byte[] list = new byte[256];
|
||||
byte[] denseHash = new byte[16];
|
||||
int pos = 0, skipSize = 0;
|
||||
|
||||
// initialize list
|
||||
for (int i = 0; i < list.Length; i++)
|
||||
list[i] = (byte)i;
|
||||
|
||||
// 64 rounds of fun
|
||||
for (int x = 0; x < 64; x++)
|
||||
{
|
||||
for (int i = 0; i < lengths.Length; i++)
|
||||
{
|
||||
byte[] buff = new byte[lengths[i]];
|
||||
|
||||
for (int j = 0; j < buff.Length; j++)
|
||||
buff[j] = list[(pos + j) % list.Length];
|
||||
|
||||
Array.Reverse(buff);
|
||||
|
||||
for (int j = 0; j < buff.Length; j++)
|
||||
list[(pos + j) % list.Length] = buff[j];
|
||||
|
||||
pos += (lengths[i] + skipSize) % list.Length; // wrap around
|
||||
skipSize++; // increase skip size
|
||||
}
|
||||
}
|
||||
|
||||
// do the Xor magic
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
for (int j = 0; j < 16; j++)
|
||||
denseHash[i] ^= list[i * 16 + j];
|
||||
}
|
||||
|
||||
return BitConverter.ToString(denseHash).Replace("-", "").ToLower();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
94,84,0,79,2,27,81,1,123,93,218,23,103,255,254,243
|
|
@ -0,0 +1,65 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay11 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 11: Hex Ed";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
Console.WriteLine($"Part 1 Example Answer #1 (ne,ne,ne):\t\t{CalculateDistances("ne,ne,ne").Item1}");
|
||||
Console.WriteLine($"Part 1 Example Answer #2 (ne,ne,sw,sw):\t\t{CalculateDistances("ne,ne,sw,sw").Item1}");
|
||||
Console.WriteLine($"Part 1 Example Answer #3 (ne,ne,s,s):\t\t{CalculateDistances("ne,ne,s,s").Item1}");
|
||||
Console.WriteLine($"Part 1 Example Answer #4 (se,sw,se,sw,sw):\t{CalculateDistances("se,sw,se,sw,sw").Item1}");
|
||||
|
||||
string input = File.ReadAllText("BScottDay11.txt");
|
||||
Console.WriteLine($"Part 1 Answer:\t{CalculateDistances(input).Item1}");
|
||||
Console.WriteLine($"Part 2 Answer:\t{CalculateDistances(input).Item2}");
|
||||
}
|
||||
|
||||
private static Tuple<int,int> CalculateDistances(string input)
|
||||
{
|
||||
string[] commands = input.Split(',');
|
||||
|
||||
int x = 0, y = 0, distance = 0, maxDistance = 0;
|
||||
foreach (string cmd in commands)
|
||||
{
|
||||
switch (cmd)
|
||||
{
|
||||
case "n":
|
||||
y--;
|
||||
break;
|
||||
case "s":
|
||||
y++;
|
||||
break;
|
||||
|
||||
case "ne":
|
||||
x++;
|
||||
break;
|
||||
case "sw":
|
||||
x--;
|
||||
break;
|
||||
|
||||
case "se":
|
||||
y++;
|
||||
x++;
|
||||
break;
|
||||
|
||||
case "nw":
|
||||
y--;
|
||||
x--;
|
||||
break;
|
||||
}
|
||||
|
||||
distance = Math.Max(Math.Abs(y), Math.Max(Math.Abs(x), Math.Abs((x - y) * -1)));
|
||||
|
||||
if (distance > maxDistance)
|
||||
maxDistance = distance;
|
||||
}
|
||||
|
||||
return Tuple.Create(distance,maxDistance);
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,95 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay12 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 12: Digital Plumber";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] exampleInput = new[] {
|
||||
"0 <-> 2",
|
||||
"1 <-> 1",
|
||||
"2 <-> 0, 3, 4",
|
||||
"3 <-> 2, 4",
|
||||
"4 <-> 2, 3, 6",
|
||||
"5 <-> 6",
|
||||
"6 <-> 4, 5"
|
||||
};
|
||||
|
||||
Console.WriteLine($"Part 1 Example Answer: {DigitalPlumberPart1(exampleInput)}");
|
||||
Console.WriteLine($"Part 2 Example Answer: {DigitalPlumberPart2(exampleInput)}");
|
||||
|
||||
string[] input = File.ReadAllLines("BScottDay12.txt");
|
||||
|
||||
Console.WriteLine($"Part 1 Answer: {DigitalPlumberPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {DigitalPlumberPart2(input)}");
|
||||
}
|
||||
|
||||
private int DigitalPlumberPart1(string[] input)
|
||||
{
|
||||
Dictionary<int, int[]> programDictionary = ParseInput(input);
|
||||
List<int> connected = new List<int>();
|
||||
GetConnectedPrograms(programDictionary, connected, 0, 0);
|
||||
return connected.Count;
|
||||
}
|
||||
|
||||
private int DigitalPlumberPart2(string[] input)
|
||||
{
|
||||
Dictionary<int, int[]> programDictionary = ParseInput(input);
|
||||
List<int> connected = new List<int>();
|
||||
int groups = 0;
|
||||
foreach (var programId in programDictionary.Keys)
|
||||
{
|
||||
if (!connected.Contains(programId))
|
||||
{
|
||||
GetConnectedPrograms(programDictionary, connected, programId, 0);
|
||||
groups++;
|
||||
}
|
||||
}
|
||||
return groups;
|
||||
}
|
||||
|
||||
private void GetConnectedPrograms(Dictionary<int, int[]> programDictionary, List<int> connected, int start, int level)
|
||||
{
|
||||
// stack overflow protection
|
||||
if (level > 100)
|
||||
return;
|
||||
|
||||
foreach (var programId in programDictionary[start])
|
||||
{
|
||||
if (!connected.Contains(programId))
|
||||
{
|
||||
connected.Add(programId);
|
||||
GetConnectedPrograms(programDictionary, connected, programId, ++level);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Dictionary<int, int[]> ParseInput(string[] input)
|
||||
{
|
||||
Dictionary<int, int[]> programDictionary = new Dictionary<int, int[]>();
|
||||
Regex regex = new Regex(@"([\d]+) <-> (?:([\d]+)*(?:, )?)*");
|
||||
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
Match match = regex.Match(input[i]);
|
||||
if (match.Success)
|
||||
{
|
||||
List<int> programList = new List<int>();
|
||||
|
||||
foreach (Capture capture in match.Groups[2].Captures)
|
||||
programList.Add(int.Parse(capture.Value));
|
||||
|
||||
programDictionary.Add(int.Parse(match.Groups[1].Value), programList.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
return programDictionary;
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,92 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay13 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 13: Packet Scanners";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] exampleInput = new[] {
|
||||
"0: 3",
|
||||
"1: 2",
|
||||
"4: 4",
|
||||
"6: 4"
|
||||
};
|
||||
|
||||
Console.WriteLine($"Part 1 Example Answer: {PacketScannerPart1(exampleInput)}");
|
||||
Console.WriteLine($"Part 2 Example Answer: {PacketScannerPart2(exampleInput)}");
|
||||
|
||||
string[] input = File.ReadAllLines("BScottDay13.txt");
|
||||
|
||||
Console.WriteLine($"Part 1 Answer: {PacketScannerPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {PacketScannerPart2(input)}");
|
||||
|
||||
}
|
||||
|
||||
private int PacketScannerPart1(string[] input)
|
||||
{
|
||||
Dictionary<int, Layer> firewallList = new Dictionary<int, Layer>();
|
||||
|
||||
foreach (var layer in input)
|
||||
{
|
||||
int[] args = Array.ConvertAll(layer.Split(':'), s => int.Parse(s.Trim()));
|
||||
firewallList.Add(args[0], new Layer(args[0], args[1]));
|
||||
}
|
||||
|
||||
int totalSeverity = 0;
|
||||
foreach (int key in firewallList.Keys)
|
||||
{
|
||||
if (key % (2 * firewallList[key].Range - 2) == 0)
|
||||
totalSeverity += firewallList[key].Severity;
|
||||
}
|
||||
|
||||
return totalSeverity;
|
||||
}
|
||||
|
||||
private int PacketScannerPart2(string[] input)
|
||||
{
|
||||
Dictionary<int, Layer> firewallList = new Dictionary<int, Layer>();
|
||||
|
||||
foreach (var layer in input)
|
||||
{
|
||||
int[] args = Array.ConvertAll(layer.Split(':'), s => int.Parse(s.Trim()));
|
||||
firewallList.Add(args[0], new Layer(args[0], args[1]));
|
||||
}
|
||||
|
||||
for (int delay = 10; delay < int.MaxValue; delay++)
|
||||
{
|
||||
bool isCaught = false;
|
||||
foreach (int key in firewallList.Keys)
|
||||
{
|
||||
if ((key + delay) % (2 * firewallList[key].Range - 2) == 0)
|
||||
{
|
||||
isCaught = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isCaught)
|
||||
return delay;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
class Layer
|
||||
{
|
||||
public int Depth { get; private set; }
|
||||
public int Range { get; private set; }
|
||||
public int Severity => Depth * Range;
|
||||
|
||||
public Layer(int depth, int range)
|
||||
{
|
||||
Depth = depth;
|
||||
Range = range;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
0: 4
|
||||
1: 2
|
||||
2: 3
|
||||
4: 4
|
||||
6: 6
|
||||
8: 5
|
||||
10: 6
|
||||
12: 6
|
||||
14: 6
|
||||
16: 8
|
||||
18: 8
|
||||
20: 9
|
||||
22: 12
|
||||
24: 8
|
||||
26: 8
|
||||
28: 8
|
||||
30: 12
|
||||
32: 12
|
||||
34: 8
|
||||
36: 12
|
||||
38: 10
|
||||
40: 12
|
||||
42: 12
|
||||
44: 10
|
||||
46: 12
|
||||
48: 14
|
||||
50: 12
|
||||
52: 14
|
||||
54: 14
|
||||
56: 12
|
||||
58: 14
|
||||
60: 12
|
||||
62: 14
|
||||
64: 18
|
||||
66: 14
|
||||
68: 14
|
||||
72: 14
|
||||
76: 14
|
||||
82: 14
|
||||
86: 14
|
||||
88: 18
|
||||
90: 14
|
||||
92: 17
|
|
@ -0,0 +1,134 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay14 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 14: Disk Defragmentation";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string input = "flqrgnkx";
|
||||
Console.WriteLine($"Part 1 Example Answer: {DiskDefragmentationPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Example Answer: {DiskDefragmentationPart2(input)}");
|
||||
|
||||
input = "oundnydw";
|
||||
Console.WriteLine($"Part 1 Answer: {DiskDefragmentationPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {DiskDefragmentationPart2(input)}");
|
||||
}
|
||||
|
||||
private int DiskDefragmentationPart1(string input)
|
||||
{
|
||||
byte[][] disk = new byte[128][];
|
||||
for (int i = 0; i < 128; i++)
|
||||
disk[i] = KnotHash($"{input}-{i}");
|
||||
|
||||
int sum = 0;
|
||||
for (int i = 0; i < 128; i++)
|
||||
for (int j = 0; j < 128; j++)
|
||||
sum += disk[i][j];
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
private int DiskDefragmentationPart2(string input)
|
||||
{
|
||||
byte[][] disk = new byte[128][];
|
||||
for (int i = 0; i < 128; i++)
|
||||
disk[i] = KnotHash($"{input}-{i}");
|
||||
|
||||
List<Tuple<int, int>> map = new List<Tuple<int, int>>();
|
||||
for (int i = 0; i < 128; i++)
|
||||
for (int j = 0; j < 128; j++)
|
||||
if (disk[i][j] == 1)
|
||||
map.Add(new Tuple<int, int>(i, j));
|
||||
|
||||
int regions = 0;
|
||||
while (map.Count > 0)
|
||||
{
|
||||
FindRegion(map);
|
||||
regions++;
|
||||
}
|
||||
|
||||
return regions;
|
||||
}
|
||||
|
||||
private void FindRegion(List<Tuple<int, int>> map)
|
||||
{
|
||||
Stack<Tuple<int, int>> stack = new Stack<Tuple<int, int>>();
|
||||
|
||||
stack.Push(map[map.Count - 1]);
|
||||
map.RemoveAt(map.Count - 1);
|
||||
|
||||
int[,] deltas = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
|
||||
while (stack.Count > 0)
|
||||
{
|
||||
Tuple<int, int> fragment = stack.Pop();
|
||||
for (int i = 0; i < deltas.GetLength(0); i++)
|
||||
{
|
||||
int dy = fragment.Item1 + deltas[i, 0];
|
||||
int dx = fragment.Item2 + deltas[i, 1];
|
||||
|
||||
if (dy < 0 || dy >= 128 || dx < 0 || dy >= 128)
|
||||
continue;
|
||||
|
||||
int index = map.FindIndex(eri => eri.Item1 == dy && eri.Item2 == dx);
|
||||
if (index != -1)
|
||||
{
|
||||
stack.Push(map[index]);
|
||||
map.RemoveAt(index);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// from day 10
|
||||
private byte[] KnotHash(string input)
|
||||
{
|
||||
String suffix = Encoding.ASCII.GetString(new byte[] { 17, 31, 73, 47, 23 });
|
||||
byte[] lengths = Encoding.ASCII.GetBytes(input + suffix); //string of bytes and add a suffix
|
||||
byte[] list = new byte[256];
|
||||
byte[] denseHash = new byte[16];
|
||||
int pos = 0, skipSize = 0;
|
||||
|
||||
// initialize list
|
||||
for (int i = 0; i < list.Length; i++)
|
||||
list[i] = (byte)i;
|
||||
|
||||
// 64 rounds of fun
|
||||
for (int x = 0; x < 64; x++)
|
||||
{
|
||||
for (int i = 0; i < lengths.Length; i++)
|
||||
{
|
||||
byte[] buff = new byte[lengths[i]];
|
||||
|
||||
for (int j = 0; j < buff.Length; j++)
|
||||
buff[j] = list[(pos + j) % list.Length];
|
||||
|
||||
for (int j = 0; j < buff.Length; j++)
|
||||
list[(pos + j) % list.Length] = buff[(buff.Length - 1) - j];
|
||||
|
||||
pos += (lengths[i] + skipSize++) % list.Length; // wrap around, increase skipsize
|
||||
}
|
||||
}
|
||||
|
||||
// do the Xor magic
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
for (int j = 0; j < 16; j++)
|
||||
denseHash[i] ^= list[i * 16 + j];
|
||||
}
|
||||
|
||||
byte[] output = new byte[128];
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
output[i * 8 + (7 - j)] = (byte)((denseHash[i] >> j) & 0x1);
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay15 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 15: Dueling Generators";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
int sampleSize = 40000000;
|
||||
int inputA = 679;
|
||||
int inputB = 771;
|
||||
|
||||
Console.WriteLine($"Part 1 Example Answer: {DuelingGeneratorsPart1(sampleSize, 65, 8921)}");
|
||||
Console.WriteLine($"Part 1 Answer: {DuelingGeneratorsPart1(sampleSize, inputA, inputB)}");
|
||||
|
||||
Console.WriteLine($"Part 2 Example Answer: {DuelingGeneratorsPart2(sampleSize, 65, 8921)}");
|
||||
Console.WriteLine($"Part 2 Answer: {DuelingGeneratorsPart2(sampleSize, inputA, inputB)}");
|
||||
}
|
||||
|
||||
private int DuelingGeneratorsPart1(int sampleSize, int generatorA, int generatorB)
|
||||
{
|
||||
int count = 0;
|
||||
for (int i = 0; i < sampleSize; i++)
|
||||
{
|
||||
generatorA = (int)(((ulong) generatorA * 16807ul) % int.MaxValue);
|
||||
generatorB = (int)(((ulong) generatorB * 48271ul) % int.MaxValue);
|
||||
|
||||
if ((generatorA & 0xffff) == (generatorB & 0xffff))
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
private int DuelingGeneratorsPart2(int sampleSize, int generatorA, int generatorB)
|
||||
{
|
||||
int count = 0;
|
||||
List<int> cmpA = new List<int>();
|
||||
List<int> cmpB = new List<int>();
|
||||
|
||||
for (int i = 0; i < sampleSize; i++)
|
||||
{
|
||||
generatorA = (int)(((ulong)generatorA * 16807ul) % int.MaxValue);
|
||||
generatorB = (int)(((ulong)generatorB * 48271ul) % int.MaxValue);
|
||||
|
||||
if (generatorA % 4 == 0) cmpA.Add(generatorA);
|
||||
if (generatorB % 8 == 0) cmpB.Add(generatorB);
|
||||
}
|
||||
|
||||
for (int i = 0; i < Math.Min(cmpA.Count, cmpB.Count); i++)
|
||||
{
|
||||
if ((cmpA[i] & 0xffff) == (cmpB[i] & 0xffff))
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,122 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay16 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 16: Permutation Promenade";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] input = File.ReadAllText("BScottDay16.txt").Split(',');
|
||||
|
||||
Console.WriteLine($"Part 1 Answer: {PermutationPromenadePart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {PermutationPromenadePart2(input)}");
|
||||
}
|
||||
|
||||
private string PermutationPromenadePart1(string[] instructions)
|
||||
{
|
||||
char[] programs = new char[16];
|
||||
|
||||
for (int i = 0; i < programs.Length; i++)
|
||||
programs[i] = (char)('a' + i);
|
||||
|
||||
for (int i = 0; i < instructions.Length; i++)
|
||||
{
|
||||
string[] args = instructions[i].Substring(1).Split('/');
|
||||
int a, b;
|
||||
char tmp;
|
||||
switch (instructions[i][0])
|
||||
{
|
||||
case 's': // Spin
|
||||
int startPos = 16 - int.Parse(args[0]);
|
||||
char[] temp = new char[16];
|
||||
for (int j = 0; j < temp.Length; j++)
|
||||
temp[j] = programs[(j + startPos) % temp.Length];
|
||||
for (int j = 0; j < temp.Length; j++)
|
||||
programs[j] = temp[j];
|
||||
break;
|
||||
|
||||
case 'x': // Exchange
|
||||
a = int.Parse(args[0]);
|
||||
b = int.Parse(args[1]);
|
||||
tmp = programs[b];
|
||||
programs[b] = programs[a];
|
||||
programs[a] = tmp;
|
||||
break;
|
||||
|
||||
case 'p': // Partner
|
||||
a = Array.IndexOf(programs, args[0][0]);
|
||||
b = Array.IndexOf(programs, args[1][0]);
|
||||
tmp = programs[b];
|
||||
programs[b] = programs[a];
|
||||
programs[a] = tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return new String(programs);
|
||||
}
|
||||
|
||||
private string PermutationPromenadePart2(string[] instructions)
|
||||
{
|
||||
char[] programs = new char[16];
|
||||
|
||||
List<string> cache = new List<string>();
|
||||
|
||||
for (int i = 0; i < programs.Length; i++)
|
||||
programs[i] = (char)('a' + i);
|
||||
|
||||
// add initial state to cache
|
||||
cache.Add(new string(programs));
|
||||
|
||||
for (int x = 0; x < 10000; x++)
|
||||
{
|
||||
for (int i = 0; i < instructions.Length; i++)
|
||||
{
|
||||
string[] args = instructions[i].Substring(1).Split('/');
|
||||
char tmp;
|
||||
int a, b;
|
||||
switch (instructions[i][0])
|
||||
{
|
||||
case 's': // Spin
|
||||
int startPos = 16 - int.Parse(args[0]);
|
||||
char[] temp = new char[16];
|
||||
for (int j = 0; j < temp.Length; j++)
|
||||
temp[j] = programs[(j + startPos) % temp.Length];
|
||||
for (int j = 0; j < temp.Length; j++)
|
||||
programs[j] = temp[j];
|
||||
break;
|
||||
|
||||
case 'x': // Exchange
|
||||
a = int.Parse(args[0]);
|
||||
b = int.Parse(args[1]);
|
||||
tmp = programs[b];
|
||||
programs[b] = programs[a];
|
||||
programs[a] = tmp;
|
||||
break;
|
||||
|
||||
case 'p': // Partner
|
||||
a = Array.IndexOf(programs, args[0][0]);
|
||||
b = Array.IndexOf(programs, args[1][0]);
|
||||
tmp = programs[b];
|
||||
programs[b] = programs[a];
|
||||
programs[a] = tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// eventually the same sequence will happen again, and when it does you have
|
||||
// considerably reduced the number of times you actually have to perform the sequence.
|
||||
string s = new string(programs);
|
||||
if (cache.Contains(s))
|
||||
break;
|
||||
cache.Add(s);
|
||||
}
|
||||
|
||||
return cache[1000000000 % cache.Count];
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,51 @@
|
|||
using System;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay17 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 17: Spinlock";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
int input = 355;
|
||||
|
||||
Console.WriteLine($"Part 1 Example Answer: {SpinlockPart1(3, 2017)}");
|
||||
|
||||
Console.WriteLine($"Part 1 Answer: {SpinlockPart1(input, 2017)}");
|
||||
Console.WriteLine($"Part 2 Answer: {SpinlockPart2(input, 50000000)}");
|
||||
}
|
||||
|
||||
private int SpinlockPart1(int input, int count)
|
||||
{
|
||||
int pos = 0, size = 1;
|
||||
int[] buffer = new int[count+1];
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
pos = (pos + input + 1) % size;
|
||||
// move everything over 1
|
||||
for (int j = size - 1; j > pos; j--)
|
||||
buffer[j + 1] = buffer[j];
|
||||
// set value, increase size
|
||||
buffer[pos + 1] = size++;
|
||||
}
|
||||
|
||||
return buffer[Array.IndexOf(buffer, count) + 1];
|
||||
}
|
||||
|
||||
private int SpinlockPart2(int input, int count)
|
||||
{
|
||||
int pos = 0, size = 1;
|
||||
int value = 0;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
pos = (pos + input + 1) % size;
|
||||
if(pos + 1 == 1)
|
||||
value = size;
|
||||
size++;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,251 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay18 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 18: Duet";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] exampleInput = new[]
|
||||
{
|
||||
"set a 1",
|
||||
"add a 2",
|
||||
"mul a a",
|
||||
"mod a 5",
|
||||
"snd a",
|
||||
"set a 0",
|
||||
"rcv a",
|
||||
"jgz a -1",
|
||||
"set a 1",
|
||||
"jgz a -2"
|
||||
};
|
||||
|
||||
Console.WriteLine($"Part 1 Example Answer: {DuetPart1(exampleInput)}");
|
||||
|
||||
string[] exampleInput2 = new[]
|
||||
{
|
||||
"snd 1",
|
||||
"snd 2",
|
||||
"snd p",
|
||||
"rcv a",
|
||||
"rcv b",
|
||||
"rcv c",
|
||||
"rcv d"
|
||||
};
|
||||
|
||||
Console.WriteLine($"Part 2 Example Answer: {DuetPart2(exampleInput2)}");
|
||||
|
||||
string[] input = File.ReadAllLines("BScottDay18.txt");
|
||||
Console.WriteLine($"Part 1 Answer: {DuetPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {DuetPart2(input)}");
|
||||
}
|
||||
|
||||
private long DuetPart1(string[] instructions)
|
||||
{
|
||||
Dictionary<char, long> registers = new Dictionary<char, long>();
|
||||
|
||||
// initialize registers
|
||||
for(char i = 'a'; i <= 'z'; i++)
|
||||
registers.Add(i,0);
|
||||
|
||||
long snd = 0, rcv = 0;
|
||||
|
||||
for(int i = 0; i < instructions.Length; i++)
|
||||
{
|
||||
string[] args = instructions[i].Split(' ');
|
||||
long value = 0;
|
||||
switch (args[0])
|
||||
{
|
||||
case "snd":
|
||||
snd = registers[args[1][0]];
|
||||
break;
|
||||
|
||||
case "set":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] = value;
|
||||
else
|
||||
registers[args[1][0]] = registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "add":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] += value;
|
||||
else
|
||||
registers[args[1][0]] += registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "mul":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] *= value;
|
||||
else
|
||||
registers[args[1][0]] *= registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "mod":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] %= value;
|
||||
else
|
||||
registers[args[1][0]] %= registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "rcv":
|
||||
if (registers[args[1][0]] > 0)
|
||||
rcv = snd;
|
||||
break;
|
||||
|
||||
case "jgz":
|
||||
if (!long.TryParse(args[1], out value))
|
||||
value = registers[args[1][0]];
|
||||
|
||||
if (value > 0)
|
||||
{
|
||||
if (!long.TryParse(args[2], out value))
|
||||
value = registers[args[2][0]];
|
||||
i += (int)(value-1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// recover operation ran
|
||||
if (rcv > 0)
|
||||
break;
|
||||
}
|
||||
return rcv;
|
||||
}
|
||||
|
||||
private long DuetPart2(string[] instructions)
|
||||
{
|
||||
Queue<long> programQueue0 = new Queue<long>();
|
||||
Queue<long> programQueue1 = new Queue<long>();
|
||||
|
||||
Program program0 = new Program(0, instructions, programQueue0, programQueue1);
|
||||
Program program1 = new Program(1, instructions, programQueue1, programQueue0);
|
||||
|
||||
while (!program0.Finished && !program1.Finished)
|
||||
{
|
||||
program0.RunInstruction();
|
||||
program1.RunInstruction();
|
||||
|
||||
if (program0.PendingReceive && program1.PendingReceive)
|
||||
break;
|
||||
}
|
||||
|
||||
return program1.SendCount;
|
||||
}
|
||||
|
||||
class Program
|
||||
{
|
||||
Dictionary<char, long> registers = new Dictionary<char, long>();
|
||||
private long pc = 0;
|
||||
private long sendCount = 0;
|
||||
private string[] instructions;
|
||||
private Queue<long> inputQueue;
|
||||
private Queue<long> outputQueue;
|
||||
private bool pendingReceive = false;
|
||||
private bool finished = false;
|
||||
|
||||
public bool PendingReceive
|
||||
{
|
||||
get { return pendingReceive; }
|
||||
}
|
||||
|
||||
public bool Finished
|
||||
{
|
||||
get { return finished; }
|
||||
}
|
||||
|
||||
public long SendCount
|
||||
{
|
||||
get { return sendCount; }
|
||||
}
|
||||
|
||||
public Program(int programId, string[] instructions, Queue<long> inputQueue, Queue<long> outputQueue)
|
||||
{
|
||||
for (char i = 'a'; i <= 'z'; i++)
|
||||
this.registers.Add(i, 0);
|
||||
|
||||
this.registers['p'] = programId;
|
||||
this.instructions = instructions;
|
||||
this.inputQueue = inputQueue;
|
||||
this.outputQueue = outputQueue;
|
||||
}
|
||||
|
||||
public void RunInstruction()
|
||||
{
|
||||
string[] args = instructions[pc].Split(' ');
|
||||
long value = 0;
|
||||
switch (args[0])
|
||||
{
|
||||
case "snd":
|
||||
sendCount++;
|
||||
if (long.TryParse(args[1], out value))
|
||||
outputQueue.Enqueue(value);
|
||||
else
|
||||
outputQueue.Enqueue(registers[args[1][0]]);
|
||||
break;
|
||||
|
||||
case "set":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] = value;
|
||||
else
|
||||
registers[args[1][0]] = registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "add":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] += value;
|
||||
else
|
||||
registers[args[1][0]] += registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "mul":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] *= value;
|
||||
else
|
||||
registers[args[1][0]] *= registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "mod":
|
||||
if (long.TryParse(args[2], out value))
|
||||
registers[args[1][0]] %= value;
|
||||
else
|
||||
registers[args[1][0]] %= registers[args[2][0]];
|
||||
break;
|
||||
|
||||
case "rcv":
|
||||
if (inputQueue.Count == 0)
|
||||
{
|
||||
pendingReceive = true;
|
||||
return;
|
||||
}
|
||||
|
||||
registers[args[1][0]] = inputQueue.Dequeue();
|
||||
break;
|
||||
|
||||
case "jgz":
|
||||
if (!long.TryParse(args[1], out value))
|
||||
value = registers[args[1][0]];
|
||||
|
||||
if (value > 0)
|
||||
{
|
||||
if (!long.TryParse(args[2], out value))
|
||||
value = registers[args[2][0]];
|
||||
pc += value;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (++pc > instructions.Length)
|
||||
{
|
||||
finished = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
set i 31
|
||||
set a 1
|
||||
mul p 17
|
||||
jgz p p
|
||||
mul a 2
|
||||
add i -1
|
||||
jgz i -2
|
||||
add a -1
|
||||
set i 127
|
||||
set p 735
|
||||
mul p 8505
|
||||
mod p a
|
||||
mul p 129749
|
||||
add p 12345
|
||||
mod p a
|
||||
set b p
|
||||
mod b 10000
|
||||
snd b
|
||||
add i -1
|
||||
jgz i -9
|
||||
jgz a 3
|
||||
rcv b
|
||||
jgz b -1
|
||||
set f 0
|
||||
set i 126
|
||||
rcv a
|
||||
rcv b
|
||||
set p a
|
||||
mul p -1
|
||||
add p b
|
||||
jgz p 4
|
||||
snd a
|
||||
set a b
|
||||
jgz 1 3
|
||||
snd b
|
||||
set f 1
|
||||
add i -1
|
||||
jgz i -11
|
||||
snd a
|
||||
jgz f -16
|
||||
jgz a -19
|
|
@ -0,0 +1,167 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay19 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 19: A Series of Tubes";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
|
||||
string[] input = File.ReadAllLines("BScottDay19.txt");
|
||||
|
||||
char[][] map = new char[input.Length][];
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
map[i] = input[i].ToCharArray();
|
||||
|
||||
Console.WriteLine($"Part 1 Answer: {TubesPart1(map)}");
|
||||
Console.WriteLine($"Part 2 Answer: {TubesPart2(map)}");
|
||||
}
|
||||
|
||||
private const int NORTH = 0;
|
||||
private const int EAST = 1;
|
||||
private const int SOUTH = 2;
|
||||
private const int WEST = 3;
|
||||
|
||||
private string TubesPart1(char[][] map)
|
||||
{
|
||||
int currentX = 0, currentY = 0;
|
||||
int direction = SOUTH;
|
||||
List<char> letters = new List<char>();
|
||||
|
||||
// get entry position
|
||||
currentY = 0; // first row
|
||||
currentX = Array.IndexOf(map[currentY], '|');
|
||||
direction = SOUTH;
|
||||
|
||||
if (currentX == -1)
|
||||
return String.Empty;
|
||||
|
||||
while (true)
|
||||
{
|
||||
switch (direction)
|
||||
{
|
||||
case NORTH:
|
||||
currentY--;
|
||||
break;
|
||||
case EAST:
|
||||
currentX++;
|
||||
break;
|
||||
case SOUTH:
|
||||
currentY++;
|
||||
break;
|
||||
case WEST:
|
||||
currentX--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (currentX < 0 || currentY < 0)
|
||||
break;
|
||||
|
||||
char c = map[currentY][currentX];
|
||||
switch (c)
|
||||
{
|
||||
case ' ':
|
||||
return new string(letters.ToArray());
|
||||
case '-':
|
||||
case '|':
|
||||
break;
|
||||
case '+':
|
||||
direction = FindNextDirection(currentX, currentY, direction, map);
|
||||
break;
|
||||
|
||||
default:
|
||||
letters.Add(c);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return new string(letters.ToArray());
|
||||
}
|
||||
|
||||
private int TubesPart2(char[][] map)
|
||||
{
|
||||
int currentX = 0, currentY = 0;
|
||||
int direction = SOUTH;
|
||||
int distance = 1;
|
||||
|
||||
// get entry position
|
||||
currentY = 0; // first row
|
||||
currentX = Array.IndexOf(map[currentY], '|');
|
||||
direction = SOUTH;
|
||||
|
||||
if (currentX == -1)
|
||||
return 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
switch (direction)
|
||||
{
|
||||
case NORTH:
|
||||
currentY--;
|
||||
break;
|
||||
case EAST:
|
||||
currentX++;
|
||||
break;
|
||||
case SOUTH:
|
||||
currentY++;
|
||||
break;
|
||||
case WEST:
|
||||
currentX--;
|
||||
break;
|
||||
}
|
||||
|
||||
if (currentX < 0 || currentY < 0)
|
||||
break;
|
||||
|
||||
char c = map[currentY][currentX];
|
||||
switch (c)
|
||||
{
|
||||
case ' ':
|
||||
return distance;
|
||||
case '+':
|
||||
direction = FindNextDirection(currentX, currentY, direction, map);
|
||||
break;
|
||||
}
|
||||
|
||||
distance++;
|
||||
}
|
||||
|
||||
return distance;
|
||||
}
|
||||
|
||||
private int FindNextDirection(int x, int y, int currentDirection, char[][] map)
|
||||
{
|
||||
char north = map[y - 1][x];
|
||||
char south = map[y + 1][x];
|
||||
char east = map[y][x + 1];
|
||||
char west = map[y][x - 1];
|
||||
|
||||
switch (currentDirection)
|
||||
{
|
||||
case NORTH:
|
||||
if (east == '-') return EAST;
|
||||
if (west == '-') return WEST;
|
||||
break;
|
||||
case EAST:
|
||||
if (north == '|') return NORTH;
|
||||
if (south == '|') return SOUTH;
|
||||
break;
|
||||
case SOUTH:
|
||||
if (east == '-') return EAST;
|
||||
if (west == '-') return WEST;
|
||||
break;
|
||||
case WEST:
|
||||
if (north == '|') return NORTH;
|
||||
if (south == '|') return SOUTH;
|
||||
break;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,201 @@
|
|||
|
|
||||
+-----------------------------------+ +-+ +-------------------------------------------------------------------------------------------+ +-+
|
||||
| | | | | | | | |
|
||||
+-----------------+ | +-----+ | +-----+ | | +---------------------------------------------|---+ |
|
||||
| | | | | | | | | | |
|
||||
+-------------+ +-+ | | | +---------------+ | | |
|
||||
| | | | | | | | | | |
|
||||
+---------------------------------------------------------------------|---------|-----------+ | | +---------------------|-----+
|
||||
| | | | | | | | | | | | |
|
||||
| | +-----+ +-------------------+ +-+ +-------------------------------------------------------------------------------------------+
|
||||
| | | | | | | | | | | | |
|
||||
| +-------|-------+ | +-|-+ +---|-------------------------------------------------------|---------------------------------------------|---+ |
|
||||
| | | | | | | | | | | | | | |
|
||||
| | | | | +-|-----|---------+ +-----------------------------------------------------------------|-------------------------|---+ |
|
||||
| | | | | | | | | | | | | | | | |
|
||||
| +-----------------------------|---|---|-----|---|-------------------------------------------+ | +-------------------|-------------------------+ +-+ |
|
||||
| | | | | | | | | | | | | | | | | | |
|
||||
| +---------------|-------------|-------|-------------|-----------|-----|-------------------------------------|-----------------------------------|---------------------------+ +-+ |
|
||||
| | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | +---|---+ +-----------+ +-+
|
||||
| | | | | | | | | | | | | | | | | | | | |
|
||||
| | +-------------|---------------------|-------|-----|-----------|-----|---------------------|---------------|---------------|-------+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---|-|---------------------------|---------------|---+ | | +---|-----|-----------------+ | | +---|-------------+ | | | | | +-+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | +-------------------+ +-+ | +-----------------------------------+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +---------------|-------------|---------------|-------|---------|-----|-+ | | | | | | | | | +-----------|-------------+ | | |
|
||||
| | | | | | | | | | | | | | | | P | | | | | | | | | | | |
|
||||
| | | | | | | | | +-|-------------------------|-|---------------|-|---------|-----------|-------|-------|-----------+ | +-------+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-------------+ | | | +---------|---------------|-------|-|-----|-----------------|-|-|---+ | | | | | | | | | | +-----+ | +-+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+-----+ | | | | | | | | +---------------|-----------------|-|-|-------------------------------------------|---|---|---------------------|-------+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +---------------|-------------|---------|-|-----|-------+ | | | | | | +---|-------------+ | | | | | | +-+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | +-------|---------------------|---|-+ +---+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|---|-+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+---------------------|-------------|-----|-----|-|-------|-------|---------------|-|-----|-|-----|---------|---|---|-------------|-+ | | | | +---|---|-------------|-----+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---------+ | | | | | +---|-+ | | | | | | | | | | | | | | | | | +---------|---+ | +---|-+ | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-----------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | +-----------|-----|-----|-----|---|-|-----|---------------|-------|-|-----------------------|---------------------+ | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-|-----------|-----+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +---+ | | | | | | | +-----+ | | +-|-+ +-------------|-|---|-----------|-------|---|---+ | | | | | +-+ | | | +---------+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | +-|-|---|---|-|---------------------|-----|-|---------------------|-----------------|-----|---------+ | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | +---+ | | | | | | | | | | | | | | | | | | +-|-------------------|-----------|-+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----------------|-------|-----------+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | +-----------|-----------------|---|-|-------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | +-------|-|-|---|-----------------|---------|---------------|-+ | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | +---|-------------|---|-|---|---------------|---|-|-----+ | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +---------------|-----------|-----|-+ | | | | | | | | | | | | +-|-----------|-------|---|-|-+ | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | +---|-------------------------+ | +-----|-----------|-------|-----------|-|-|-------|---------------|-+ | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | +-------------|---|-------------|-|---|-|---------+ | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +---------------|-------------|---|-----+ +-------|-------|-----|---------|-----------|---|-|-------------|-|-|-|-----|-------------|-|-|-|-----------|-----|-------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | +---|-----|-----|-----------------+ | | | +---------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | +-+ | | | | | +-----+ | | | | | | | | | | | | | +-|-+ | +-+ | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +-------|-------------------|-----------|---|------------Y--|-------------|---------------|-----|---|-----|---------|---|-----------+ | | | | | | |
|
||||
| | | | X | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | +---------|---------------------------------------|-----|-----------|---|---------|-|-----------+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | +-|-------------------------|-----|-----------|-|-----------|---|-------------|---------|-|---|-|-----------|---------|-|---------------------|-|---------|-------|-----------|-+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | +-|---------|-------------|-|-|-------------|---------|-|-----------------|-------+ | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-----------|-----------------------|-|---+ | +---------------|-------------|---|-|-+ | | | | | | | +-------|---|-----|-|-+ | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | O | | |
|
||||
| | | | | | | | | | | | | | | | | | | +-|-----|-----------------|-|---|-+ | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | +---------|-------|-|---|-----------------------|-|-|-|---+ | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | R | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | +-|---------|-|---------------|-------------|-+ | | | | | | | +-----|-|-|-|-|-------|-|-|-----------|-|-----|-|---+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | +---|-|---+ | +---------|-----------|-----------------|---------|-----------------------|-----|-+ | | | | +---------|---|---+ | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +-----|---------|-|---------------|-------------|-----------|---|-----|-----------|---------|-|---+ +-+ +-----|-|---------------+ | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | W | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | +---|-----|-------|---|---+ | +-|-|---|-------|-|-------|-----|-+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | +-------+ | | | | | | | +-|---------------------|---|-|-|---|-+ | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------|-|---|---|-|-------+ | | +-----+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | +-|-------|---------|-+ | +---+ | | | +-|-----|---------+ +-|-------------+ | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +-|-|-------|---------------|-------|-|-----------------|-------------|---|-----|-----------------|-|-|-|-----|-----------|-----|---|---|---|-|-----------|-----|-|-------------------------+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +-------+ | | | | +-+ +-------|---------|-------------|---|-----------------------|-----|-----|-------|---|-----|-----|---+ | | +---|-+ | | | | | | | | +-------+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | +-----|-------|---+ | | | | | +---+ | | | | | | +---|-|---|-------|---|-----|-|---|---------|-----------+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | +-|-------------|-----------|---------------+ +-|-----|-+ +---|-----|---|-|-------------|---|-+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +---------|-------------|-----------------------------------------------|-----|-------|---|-----|-----------|---|-------|-----|-|---|---+ | | | +-|-|---|---|---------------|-+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +-----------------------|-|-|-----------------------|---|-|-----|-----------|-|-----------------------|-|-------+ | | | +-----|---|-|---|---+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +---+ | | +-|-------------+ | | | | | | | +-----+ | | | | | | | | | | | | | | | | | | | |
|
||||
| | E | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | +-----------+ | +-+ | | | | | | | | | | | | +-+ | | | | | | | | | | | +---|---|-+ |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | +-----------------------|---|-------|-----|-----------------------------------|-|---------------|-------|-----|---|---------|-|-----------+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|---------|---|---------------------|---|-------|-----------------------+ | | +-------------|---------+ | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | +-----------+ | +-----|-----|---+ | +-|-------|-|-----------------|-|---------|-------|-|-------------------|---|-------+ | +-+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|---|---------|-|-|---------|-|-|-----|-----|-|-+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | +-----|-------------|-------------|-----------|-|-|---|---|---------|---|---------|---|-|-----+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | +-----------|-----|-----|---------+ | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-----------------------------------------------|-------|---|-----|-----------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-------------------------------------------------------|-|-------|---+ | | | +-|-----|-------------|-|---|-|---|---------------|-|---|---|-------------|-+ | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | +-|-----------|-----------|-----|---+ | | | | | | | +-----|-|-----------+ | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---|---------------------------------|---|-+ +---|---|-|-------|-|-----------|-|-|--H--------|---|-------------------|---|-|-----------------------+ | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | +-----|-|-|-------|-|---------|-|---------|---|---|-------|---|-------------|-----|-------------------|-----|---------|-|-------|-----|-----+ | | | +-|---+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------+ | | | | +-+ | | | | +-|---|-|-------|---|-------|-|-+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +---------------------|---|-|-----|-------------|-------------------------------|-|-------------|---------|---------------------------|---+ | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | +-----|-----|-------|---|-----------------|-|---|---|-|-----------------------------------|---------|---|-------|---+ | | | | | +-----+ | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | +-|---------------|-+ | | | +-------|---|-----------|-----------+ | | | +---------|-----|---|-------|-|-+ | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | +-------------|---|-------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | +---------|-|-|-------------------------|-----------------|---|-------|-|-------------|-|-----|---------|-----|---------|---|-------|-+ | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|-|-------|-------|-------------|-------|---+ | | | | +-----------+ | | | | | | | | | | | | | | | | | | | | | +-----+ | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-|-----------+ | | | | | | | | | | +-+ | | | | | | | +-|-------+ | | | +-------|---------------|---------|---+ | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | +-----------+ | | | | | | | | | +---|-------------|-----------|-------------|-----------|-|---|---------+ | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | +-|-----+ | | | | | | | | +---------------------|---|-|---|-|---|-------------|-----|---|-----|-------|-|-|---------------|---------------|-----------------|---+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | +-|-------|---|-----------|---------------+ | +---|-|-+ +-+ | | | +-------+ +-+ | | | | | | | +-------+ | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | +-|-|-----------------+ +---+ | | | | | +---|-|---|---------------------|-------|-------------------------------|---|-|-----|---|-------|-+ | | | +---|-----|-+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| | | | | | | | +-|-----|---------|-------------|-|-------------------------|-|-------------|-------------|---------|-----|-|---|---|-----+ | +-|-+ | | | +---+ | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|-|---|-|---------|-------------|---|-----------|---|-----------|-----------------+ | | | +-|---------+ | | | +-----|-----|-|---|-----------|---|-------|---|-|-----+ | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|-|-+ | | | | +-----|-|-------|---------------------------------|-------|-------+ +---------+ +---|-----|---|-|-|---+ | +---------+ | | | | | +-|---+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|-+ +-----|-------------------------|---|-------+ | | | | +---------|-----+ | | +---------------|---|-------|-------|---|-----------|-------------|-----|---+
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +---+ | +---------|---------------------|-----------------------|---|---------------|-----|-----------------+ | | +---------+ | | | | | | | | | | | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
| +-|-|-------|-------+ | | +-----------|---------|-|---|-----------------------|-----|-----------|---------|---|---------|---|-------------------|-------------|-----------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||
+---+ | | | +-------------+ +-----------------------|-+ | | +---|---+ +-----------|-------|-----|-----------|-|-------+ +---|-------+ | +-----------+ | |
|
||||
| | | | | | | | | | | | | | | | | | | | | | |
|
||||
+---+ +-----------+ | | +---------------+ +-+ +-----------------+ | | +-----------|-------------------+ | | | | |
|
||||
| | | | | | | | | | | | |
|
||||
+-----------|-----------------------------------------------------------------|-|-------------|---|-----------------+ +---+ | | | |
|
||||
| | | | | | | | | | | | |
|
||||
+-----------+ +-------------------------------------------------------+ +---N +-+ +-----------------------+ +-------------+ +---+
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay2 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 2: Corruption Checksum";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] input = File.ReadAllLines("BScottDay2.txt");
|
||||
|
||||
Console.WriteLine($"Part 1 Answer: {CalculateChecksumPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {CalculateChecksumPart2(input)}");
|
||||
}
|
||||
|
||||
static long CalculateChecksumPart1(string[] rows)
|
||||
{
|
||||
long checksum = 0;
|
||||
for (int i = 0; i < rows.Length; i++)
|
||||
{
|
||||
int min = int.MaxValue, max = 0;
|
||||
int[] cols = Array.ConvertAll(rows[i].Split(new char[] {'\t'}), s => int.Parse(s));
|
||||
for (int j = 0; j < cols.Length; j++)
|
||||
{
|
||||
if (cols[j] < min)
|
||||
min = cols[j];
|
||||
if (cols[j] > max)
|
||||
max = cols[j];
|
||||
}
|
||||
checksum += Math.Abs(max - min);
|
||||
}
|
||||
return checksum;
|
||||
}
|
||||
|
||||
static long CalculateChecksumPart2(string[] rows)
|
||||
{
|
||||
long checksum = 0;
|
||||
for (int i = 0; i < rows.Length; i++)
|
||||
{
|
||||
int value = 0;
|
||||
int[] cols = Array.ConvertAll(rows[i].Split(new char[] { '\t' }), s => int.Parse(s));
|
||||
for (int j = 0; j < cols.Length; j++)
|
||||
{
|
||||
for (int k = 0; k < cols.Length; k++)
|
||||
{
|
||||
if (cols[j] > cols[k] && (cols[j] % cols[k]) == 0)
|
||||
{
|
||||
value = cols[j] / cols[k];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (value > 0)
|
||||
break;
|
||||
}
|
||||
checksum += value;
|
||||
}
|
||||
return checksum;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
116 1470 2610 179 2161 2690 831 1824 2361 1050 2201 118 145 2275 2625 2333
|
||||
976 220 1129 553 422 950 332 204 1247 1092 1091 159 174 182 984 713
|
||||
84 78 773 62 808 83 1125 1110 1184 145 1277 982 338 1182 75 679
|
||||
3413 3809 3525 2176 141 1045 2342 2183 157 3960 3084 2643 119 108 3366 2131
|
||||
1312 205 343 616 300 1098 870 1008 1140 1178 90 146 980 202 190 774
|
||||
4368 3905 3175 4532 3806 1579 4080 259 2542 221 4395 4464 208 3734 234 4225
|
||||
741 993 1184 285 1062 372 111 118 63 843 325 132 854 105 956 961
|
||||
85 79 84 2483 858 2209 2268 90 2233 1230 2533 322 338 68 2085 1267
|
||||
2688 2022 112 130 1185 103 1847 3059 911 107 2066 1788 2687 2633 415 1353
|
||||
76 169 141 58 161 66 65 225 60 152 62 64 156 199 80 56
|
||||
220 884 1890 597 3312 593 4259 222 113 2244 3798 4757 216 1127 4400 178
|
||||
653 369 216 132 276 102 265 889 987 236 239 807 1076 932 84 864
|
||||
799 739 75 1537 82 228 69 1397 1396 1203 1587 63 313 1718 1375 469
|
||||
1176 112 1407 136 1482 1534 1384 1202 604 851 190 284 1226 113 114 687
|
||||
73 1620 81 1137 812 75 1326 1355 1545 1666 1356 1681 1732 85 128 902
|
||||
571 547 160 237 256 30 496 592 385 576 183 692 192 387 647 233
|
|
@ -0,0 +1,119 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay20 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 20: Particle Swarm";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] input = File.ReadAllLines("BScottDay20.txt");
|
||||
|
||||
Console.WriteLine($"Part 1 Answer: {ParticleSwarmPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {ParticleSwarmPart2(input)}");
|
||||
}
|
||||
|
||||
private List<Particle> LoadParticles(string[] input)
|
||||
{
|
||||
List<Particle> particleList = new List<Particle>();
|
||||
int index = 0;
|
||||
foreach (string s in input)
|
||||
{
|
||||
string[] args = s.Split(new string[] {", "}, StringSplitOptions.None);
|
||||
|
||||
string[] positionArgs = args[0].Substring(3, args[0].Length - 4).Split(',');
|
||||
string[] velocityArgs = args[1].Substring(3, args[1].Length - 4).Split(',');
|
||||
string[] accelerationArgs = args[2].Substring(3, args[2].Length - 4).Split(',');
|
||||
|
||||
particleList.Add(new Particle(
|
||||
index++,
|
||||
new Vector3D(long.Parse(positionArgs[0]), long.Parse(positionArgs[1]), long.Parse(positionArgs[2])),
|
||||
new Vector3D(long.Parse(velocityArgs[0]), long.Parse(velocityArgs[1]), long.Parse(velocityArgs[2])),
|
||||
new Vector3D(long.Parse(accelerationArgs[0]), long.Parse(accelerationArgs[1]), long.Parse(accelerationArgs[2]))
|
||||
));
|
||||
}
|
||||
return particleList;
|
||||
}
|
||||
|
||||
private int ParticleSwarmPart1(string[] input)
|
||||
{
|
||||
List<Particle> particleList = LoadParticles(input);
|
||||
for (int i = 0; i < 2000; i++)
|
||||
{
|
||||
foreach (Particle p in particleList)
|
||||
p.Tick();
|
||||
}
|
||||
|
||||
var test = particleList.ToList().OrderBy(p => p.Position.Distance).First();
|
||||
return test.Index;
|
||||
}
|
||||
|
||||
private int ParticleSwarmPart2(string[] input)
|
||||
{
|
||||
List<Particle> particleList = LoadParticles(input);
|
||||
for (int i = 0; i < 2000; i++)
|
||||
{
|
||||
foreach (Particle p in particleList)
|
||||
p.Tick();
|
||||
|
||||
// finds anything that duplicates, removes anything with that position.
|
||||
particleList.GroupBy(txt => txt.Position.ToString())
|
||||
.Where(grouping => grouping.Count() > 1)
|
||||
.ToList()
|
||||
.ForEach(groupItem => particleList.RemoveAll(item => item.Position.ToString() == groupItem.Key));
|
||||
}
|
||||
|
||||
return particleList.Count;
|
||||
}
|
||||
|
||||
class Vector3D
|
||||
{
|
||||
public long X { get; set; }
|
||||
public long Y { get; set; }
|
||||
public long Z { get; set; }
|
||||
public long Distance => Math.Abs(X) + Math.Abs(Y) + Math.Abs(Z);
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{X},{Y},{Z}";
|
||||
}
|
||||
|
||||
public Vector3D(long x, long y, long z)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
Z = z;
|
||||
}
|
||||
}
|
||||
|
||||
class Particle
|
||||
{
|
||||
public int Index { get; private set; }
|
||||
public Vector3D Position { get; private set; }
|
||||
public Vector3D Velocity { get; private set; }
|
||||
public Vector3D Acceleration { get; private set; }
|
||||
|
||||
public Particle(int index, Vector3D position, Vector3D velocity, Vector3D acceleration)
|
||||
{
|
||||
Index = index;
|
||||
Position = position;
|
||||
Velocity = velocity;
|
||||
Acceleration = acceleration;
|
||||
}
|
||||
|
||||
public void Tick()
|
||||
{
|
||||
Velocity.X += Acceleration.X;
|
||||
Velocity.Y += Acceleration.Y;
|
||||
Velocity.Z += Acceleration.Z;
|
||||
Position.X += Velocity.X;
|
||||
Position.Y += Velocity.Y;
|
||||
Position.Z += Velocity.Z;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,186 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay22 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 22: Sporifica Virus";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] exampleInput = new[]
|
||||
{
|
||||
"..#",
|
||||
"#..",
|
||||
"..."
|
||||
};
|
||||
Console.WriteLine($"Part 1 Example Answer: {SporificaVirusPart1(exampleInput, 10000)}");
|
||||
Console.WriteLine($"Part 2 Example Answer: {SporificaVirusPart2(exampleInput, 10000000)}");
|
||||
|
||||
string[] input = File.ReadAllLines("BScottDay22.txt");
|
||||
Console.WriteLine($"Part 1 Answer: {SporificaVirusPart1(input, 10000)}");
|
||||
Console.WriteLine($"Part 2 Answer: {SporificaVirusPart2(input, 10000000)}");
|
||||
}
|
||||
|
||||
private const int NORTH = 0;
|
||||
private const int EAST = 1;
|
||||
private const int SOUTH = 2;
|
||||
private const int WEST = 3;
|
||||
|
||||
private const int LEFT = 0;
|
||||
private const int RIGHT = 1;
|
||||
private const int REVERSE = 2;
|
||||
|
||||
private char[][] CreateGrid(string[] input)
|
||||
{
|
||||
int expand = 1000;
|
||||
int infiniteGridHeight = input.Length * (expand + 1);
|
||||
int infiniteGridWidth = input[0].Length * (expand + 1);
|
||||
|
||||
// create big grid
|
||||
char[][] grid = new char[infiniteGridHeight][];
|
||||
for (int i = 0; i < infiniteGridHeight; i++)
|
||||
grid[i] = new char[infiniteGridWidth];
|
||||
|
||||
// initialize big grid
|
||||
for (int i = 0; i < infiniteGridHeight; i++)
|
||||
for (int j = 0; j < infiniteGridWidth; j++)
|
||||
grid[i][j] = '.';
|
||||
|
||||
// copy to the center
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
for (int j = 0; j < input[0].Length; j++)
|
||||
grid[i + (input.Length * expand / 2)][j + (input[0].Length * expand / 2)] = input[i][j];
|
||||
|
||||
return grid;
|
||||
}
|
||||
|
||||
private int SporificaVirusPart1(string[] input, int bursts)
|
||||
{
|
||||
char[][] grid = CreateGrid(input);
|
||||
|
||||
int currentX = 0, currentY = 0;
|
||||
int direction = NORTH;
|
||||
int infected = 0;
|
||||
int centerY = (grid.Length / 2);
|
||||
int centerX = (grid[0].Length / 2);
|
||||
|
||||
for (int i = 0; i < bursts; i++)
|
||||
{
|
||||
if (grid[centerY + currentY][centerX + currentX] == '.') // Clean
|
||||
{
|
||||
direction = FindNextDirection(direction, LEFT);
|
||||
grid[centerY + currentY][centerX + currentX] = '#';
|
||||
infected++;
|
||||
}
|
||||
else // Infected
|
||||
{
|
||||
direction = FindNextDirection(direction, RIGHT);
|
||||
grid[centerY + currentY][centerX + currentX] = '.';
|
||||
}
|
||||
|
||||
switch (direction)
|
||||
{
|
||||
case NORTH:
|
||||
currentY--;
|
||||
break;
|
||||
case EAST:
|
||||
currentX++;
|
||||
break;
|
||||
case SOUTH:
|
||||
currentY++;
|
||||
break;
|
||||
case WEST:
|
||||
currentX--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return infected;
|
||||
}
|
||||
|
||||
private int SporificaVirusPart2(string[] input, int bursts)
|
||||
{
|
||||
char[][] grid = CreateGrid(input);
|
||||
|
||||
int currentX = 0, currentY = 0;
|
||||
int direction = NORTH;
|
||||
int infected = 0;
|
||||
|
||||
int centerY = (grid.Length / 2);
|
||||
int centerX = (grid[0].Length / 2);
|
||||
|
||||
for (int i = 0; i < bursts; i++)
|
||||
{
|
||||
if (grid[centerY + currentY][centerX + currentX] == '.') // Clean
|
||||
{
|
||||
direction = FindNextDirection(direction, LEFT);
|
||||
grid[centerY + currentY][centerX + currentX] = 'W';
|
||||
}
|
||||
else if (grid[centerY + currentY][centerX + currentX] == 'W') // Weakened
|
||||
{
|
||||
grid[centerY + currentY][centerX + currentX] = '#';
|
||||
infected++;
|
||||
}
|
||||
else if (grid[centerY + currentY][centerX + currentX] == '#') // Infected
|
||||
{
|
||||
direction = FindNextDirection(direction, RIGHT);
|
||||
grid[centerY + currentY][centerX + currentX] = 'F';
|
||||
}
|
||||
else // Flagged
|
||||
{
|
||||
direction = FindNextDirection(direction, REVERSE);
|
||||
grid[centerY + currentY][centerX + currentX] = '.';
|
||||
}
|
||||
|
||||
switch (direction)
|
||||
{
|
||||
case NORTH:
|
||||
currentY--;
|
||||
break;
|
||||
case EAST:
|
||||
currentX++;
|
||||
break;
|
||||
case SOUTH:
|
||||
currentY++;
|
||||
break;
|
||||
case WEST:
|
||||
currentX--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return infected;
|
||||
}
|
||||
|
||||
private int FindNextDirection(int currentDirection, int turn)
|
||||
{
|
||||
switch (currentDirection)
|
||||
{
|
||||
case NORTH:
|
||||
if (turn == RIGHT) return EAST;
|
||||
if (turn == LEFT) return WEST;
|
||||
if (turn == REVERSE) return SOUTH;
|
||||
break;
|
||||
case EAST:
|
||||
if (turn == LEFT) return NORTH;
|
||||
if (turn == RIGHT) return SOUTH;
|
||||
if (turn == REVERSE) return WEST;
|
||||
break;
|
||||
case SOUTH:
|
||||
if (turn == LEFT) return EAST;
|
||||
if (turn == RIGHT) return WEST;
|
||||
if (turn == REVERSE) return NORTH;
|
||||
break;
|
||||
case WEST:
|
||||
if (turn == RIGHT) return NORTH;
|
||||
if (turn == LEFT) return SOUTH;
|
||||
if (turn == REVERSE) return EAST;
|
||||
break;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#.....##.####.#.#########
|
||||
.###..#..#..####.##....#.
|
||||
..#########...###...####.
|
||||
.##.#.##..#.#..#.#....###
|
||||
...##....###..#.#..#.###.
|
||||
###..#...######.####.#.#.
|
||||
#..###..###..###.###.##..
|
||||
.#.#.###.#.#...####..#...
|
||||
##........##.####..##...#
|
||||
.#.##..#.#....##.##.##..#
|
||||
###......#..##.####.###.#
|
||||
....#..###..#######.#...#
|
||||
#####.....#.##.#..#..####
|
||||
.#.###.#.###..##.#..####.
|
||||
..#..##.###...#######....
|
||||
.#.##.#.#.#.#...###.#.#..
|
||||
##.###.#.#.###.#......#..
|
||||
###..##.#...#....#..####.
|
||||
.#.#.....#..#....##..#..#
|
||||
#####.#.##..#...##..#....
|
||||
##..#.#.#.####.#.##...##.
|
||||
..#..#.#.####...#........
|
||||
###.###.##.#..#.##.....#.
|
||||
.##..##.##...#..#..#.#..#
|
||||
#...####.#.##...#..#.#.##
|
|
@ -0,0 +1,85 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay24 : BScottSolution
|
||||
{
|
||||
private readonly List<Component> _components = new List<Component>();
|
||||
private uint _maxOverallStrength;
|
||||
private uint _maxLength;
|
||||
private uint _maxStrengthAmongLongest;
|
||||
|
||||
public override string Name => "Day 24: Electromagnetic Moat";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] input = {
|
||||
"0/2",
|
||||
"2/2",
|
||||
"2/3",
|
||||
"3/4",
|
||||
"3/5",
|
||||
"0/1",
|
||||
"10/1",
|
||||
"9/10"
|
||||
};
|
||||
|
||||
ProcessInput(input);
|
||||
Console.WriteLine($"Part 1 Example Answer: {_maxOverallStrength}");
|
||||
Console.WriteLine($"Part 2 Example Answer: {_maxStrengthAmongLongest}");
|
||||
|
||||
ProcessInput(File.ReadAllLines("BScottDay24.txt"));
|
||||
Console.WriteLine($"Part 1 Answer: {_maxOverallStrength}");
|
||||
Console.WriteLine($"Part 2 Answer: {_maxStrengthAmongLongest}");
|
||||
}
|
||||
|
||||
private void ProcessInput(string[] input)
|
||||
{
|
||||
_components.Clear();
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
string[] values = input[i].Split('/');
|
||||
_components.Add(new Component(uint.Parse(values[0]), uint.Parse(values[1]), false));
|
||||
}
|
||||
|
||||
_maxOverallStrength = 0;
|
||||
_maxLength = 0;
|
||||
_maxStrengthAmongLongest = 0;
|
||||
|
||||
RecursiveComponentScan(0, 0, 0);
|
||||
}
|
||||
|
||||
private void RecursiveComponentScan(uint ports, uint length, uint strength)
|
||||
{
|
||||
_maxOverallStrength = Math.Max(strength, _maxOverallStrength);
|
||||
_maxLength = Math.Max(length, _maxLength);
|
||||
|
||||
if (length == _maxLength)
|
||||
_maxStrengthAmongLongest = Math.Max(strength, _maxStrengthAmongLongest);
|
||||
|
||||
foreach (var c in _components)
|
||||
{
|
||||
if (c.Used || (c.A != ports && c.B != ports)) continue;
|
||||
c.Used = true;
|
||||
RecursiveComponentScan((c.A == ports) ? c.B : c.A, length + 1, strength + c.A + c.B);
|
||||
c.Used = false;
|
||||
}
|
||||
}
|
||||
|
||||
class Component
|
||||
{
|
||||
public uint A { get; }
|
||||
public uint B { get; }
|
||||
public bool Used { get; set; }
|
||||
|
||||
public Component(uint a, uint b, bool used)
|
||||
{
|
||||
A = a;
|
||||
B = b;
|
||||
Used = used;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
48/5
|
||||
25/10
|
||||
35/49
|
||||
34/41
|
||||
35/35
|
||||
47/35
|
||||
34/46
|
||||
47/23
|
||||
28/8
|
||||
27/21
|
||||
40/11
|
||||
22/50
|
||||
48/42
|
||||
38/17
|
||||
50/33
|
||||
13/13
|
||||
22/33
|
||||
17/29
|
||||
50/0
|
||||
20/47
|
||||
28/0
|
||||
42/4
|
||||
46/22
|
||||
19/35
|
||||
17/22
|
||||
33/37
|
||||
47/7
|
||||
35/20
|
||||
8/36
|
||||
24/34
|
||||
6/7
|
||||
7/43
|
||||
45/37
|
||||
21/31
|
||||
37/26
|
||||
16/5
|
||||
11/14
|
||||
7/23
|
||||
2/23
|
||||
3/25
|
||||
20/20
|
||||
18/20
|
||||
19/34
|
||||
25/46
|
||||
41/24
|
||||
0/33
|
||||
3/7
|
||||
49/38
|
||||
47/22
|
||||
44/15
|
||||
24/21
|
||||
10/35
|
||||
6/21
|
||||
14/50
|
|
@ -0,0 +1,128 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay25 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 25: The Halting Problem";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
TuringMachine machine = new TuringMachine(File.ReadAllLines("BScottDay25.txt"));
|
||||
Console.WriteLine($"Part 1 Answer: {machine.RunPart1()}");
|
||||
}
|
||||
}
|
||||
|
||||
enum InstructionType
|
||||
{
|
||||
Write,
|
||||
Move,
|
||||
Continue
|
||||
}
|
||||
|
||||
class State
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public Dictionary<int, List<Instruction>> ConditionActions { get; set; }
|
||||
|
||||
public State(string id)
|
||||
{
|
||||
Id = id;
|
||||
ConditionActions = new Dictionary<int, List<Instruction>>();
|
||||
}
|
||||
}
|
||||
|
||||
class Instruction
|
||||
{
|
||||
public InstructionType InstructionType { get; set; }
|
||||
public object Value { get; set; }
|
||||
|
||||
public Instruction(InstructionType instructionType, object value)
|
||||
{
|
||||
InstructionType = instructionType;
|
||||
Value = value;
|
||||
}
|
||||
}
|
||||
class TuringMachine
|
||||
{
|
||||
private readonly Dictionary<string, State> _states = new Dictionary<string, State>();
|
||||
private readonly string _initialState = "";
|
||||
private readonly long _checksumSteps = 0;
|
||||
|
||||
public TuringMachine(string[] input)
|
||||
{
|
||||
State currentState = null;
|
||||
int currentCondition = -1;
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
if(input[i].Trim().Length == 0)
|
||||
continue;
|
||||
|
||||
string[] args = input[i].Trim().Replace(".", "").Replace(":", "").Split(' ');
|
||||
|
||||
if (args[0] == "Begin")
|
||||
{
|
||||
_initialState = args[3].Substring(0, 1);
|
||||
}
|
||||
else if (args[0] == "Perform")
|
||||
{
|
||||
_checksumSteps = int.Parse(args[5]);
|
||||
}
|
||||
else if (args[0] == "In")
|
||||
{
|
||||
if (currentState != null)
|
||||
_states.Add(currentState.Id, currentState);
|
||||
currentState = new State(args[2]);
|
||||
}
|
||||
else if (args[0] == "If")
|
||||
{
|
||||
currentCondition = int.Parse(args[5]);
|
||||
currentState?.ConditionActions.Add(currentCondition, new List<Instruction>());
|
||||
}
|
||||
else if (args[0] == "-")
|
||||
{
|
||||
if (args[1] == "Write")
|
||||
currentState?.ConditionActions[currentCondition].Add(new Instruction(InstructionType.Write, int.Parse(args[4])));
|
||||
else if (args[1] == "Move")
|
||||
currentState?.ConditionActions[currentCondition].Add(new Instruction(InstructionType.Move, args[6]));
|
||||
else if (args[1] == "Continue")
|
||||
currentState?.ConditionActions[currentCondition].Add(new Instruction(InstructionType.Continue, args[4]));
|
||||
}
|
||||
}
|
||||
|
||||
// add final state
|
||||
if (currentState != null)
|
||||
_states.Add(currentState.Id, currentState);
|
||||
}
|
||||
|
||||
public long RunPart1()
|
||||
{
|
||||
int[] tape = new int[_checksumSteps];
|
||||
int pos = tape.Length / 2;
|
||||
string state = _initialState;
|
||||
for (int i = 0; i < _checksumSteps; i++)
|
||||
{
|
||||
int value = tape[pos];
|
||||
for (int j = 0; j < _states[state].ConditionActions[value].Count; j++)
|
||||
{
|
||||
switch (_states[state].ConditionActions[value][j].InstructionType)
|
||||
{
|
||||
case InstructionType.Move:
|
||||
pos += ((string)_states[state].ConditionActions[value][j].Value == "left" ? -1 : 1);
|
||||
break;
|
||||
case InstructionType.Write:
|
||||
tape[pos] = (int)_states[state].ConditionActions[value][j].Value;
|
||||
break;
|
||||
case InstructionType.Continue:
|
||||
state = (string) _states[state].ConditionActions[value][j].Value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return tape.Sum();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
Begin in state A.
|
||||
Perform a diagnostic checksum after 12656374 steps.
|
||||
|
||||
In state A:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state B.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state C.
|
||||
|
||||
In state B:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state D.
|
||||
|
||||
In state C:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state D.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the right.
|
||||
- Continue with state C.
|
||||
|
||||
In state D:
|
||||
If the current value is 0:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state B.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the right.
|
||||
- Continue with state E.
|
||||
|
||||
In state E:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state C.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state F.
|
||||
|
||||
In state F:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the left.
|
||||
- Continue with state E.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
|
@ -0,0 +1,108 @@
|
|||
using System;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay3 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 3: Spiral Memory";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
Console.WriteLine($"Part 1 Example Answer #1 (1): {SpiralMemoryPart1(1)}");
|
||||
Console.WriteLine($"Part 1 Example Answer #2 (12): {SpiralMemoryPart1(12)}");
|
||||
Console.WriteLine($"Part 1 Example Answer #3 (23): {SpiralMemoryPart1(23)}");
|
||||
Console.WriteLine($"Part 1 Example Answer #4 (1024): {SpiralMemoryPart1(1024)}");
|
||||
|
||||
int value = 325489; // Puzzle Input
|
||||
Console.WriteLine($"Part 1 Answer: {SpiralMemoryPart1(value)}");
|
||||
Console.WriteLine($"Part 2 Answer: {SpiralMemoryPart2(value)}");
|
||||
}
|
||||
|
||||
static int SpiralMemoryPart1(int value)
|
||||
{
|
||||
Point position = GetPosition(value);
|
||||
return Math.Abs(position.X) + Math.Abs(position.Y);
|
||||
}
|
||||
|
||||
// Unfortunatly I can't take credit for solving this. This was ported and optimized slightly from a C function posted to github.
|
||||
// Included this just for the sake of completion.
|
||||
// Source: https://github.com/vesche/adventofcode-2017/blob/master/day03.c
|
||||
// Integer Sequence: https://oeis.org/A141481/b141481.txt
|
||||
static int SpiralMemoryPart2(int value)
|
||||
{
|
||||
int x = 0, y = 0, dx = 0, dy = -1;
|
||||
int[,] array = new int[1000, 3];
|
||||
int[,] coords = new int[,] { { 1, 0 }, { 1, -1 }, { 0, -1 }, { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 } };
|
||||
|
||||
for (int step = 0; step < 1000; step++)
|
||||
{
|
||||
int total = 0;
|
||||
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
int tx = array[i, 0];
|
||||
int ty = array[i, 1];
|
||||
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
if ((x + coords[j, 0] == tx) && (y + coords[j, 1] == ty))
|
||||
total += array[i, 2];
|
||||
}
|
||||
}
|
||||
|
||||
array[step, 0] = x;
|
||||
array[step, 1] = y;
|
||||
array[step, 2] = (x == 0 && y == 0) ? 1 : total;
|
||||
|
||||
if (total > value)
|
||||
return total;
|
||||
|
||||
if ((x == y) || ((x < 0) && (x == -y)) || ((x > 0) && (x == 1 - y)))
|
||||
{
|
||||
int dxtmp = dx;
|
||||
dx = -dy;
|
||||
dy = dxtmp;
|
||||
}
|
||||
|
||||
x += dx;
|
||||
y += dy;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Inverse ulam spiral coords
|
||||
static Point GetPosition(int n)
|
||||
{
|
||||
double k = Math.Ceiling((Math.Sqrt(n) - 1) / 2);
|
||||
double t = 2 * k + 1;
|
||||
double m = Math.Pow(t, 2);
|
||||
|
||||
t = t - 1;
|
||||
if (n >= m - t)
|
||||
return new Point((int)(k - (m - n)), (int)-k);
|
||||
|
||||
m = m - t;
|
||||
if (n >= m - t)
|
||||
return new Point((int)-k, (int)(-k + (m - n)));
|
||||
|
||||
m = m - t;
|
||||
if (n >= m - t)
|
||||
return new Point((int)(-k + (m - n)), (int)k);
|
||||
|
||||
return new Point((int)k, (int)(k - (m - n - t)));
|
||||
}
|
||||
|
||||
struct Point
|
||||
{
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
|
||||
public Point(int x, int y)
|
||||
{
|
||||
this.X = x;
|
||||
this.Y = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay4 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 4: High-Entropy Passphrases";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] input = File.ReadAllLines("BScottDay4.txt");
|
||||
Console.WriteLine($"Part 1 Answer: {GetValidPassPhrasesPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {GetValidPassPhrasesPart2(input)}");
|
||||
}
|
||||
|
||||
static int GetValidPassPhrasesPart1(string[] input)
|
||||
{
|
||||
int count = 0;
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
string[] passStrings = input[i].Split(new char[] {' '});
|
||||
string[] distinctStrings = passStrings.Distinct().ToArray();
|
||||
if (passStrings.Length == distinctStrings.Length)
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static int GetValidPassPhrasesPart2(string[] input)
|
||||
{
|
||||
int count = 0;
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
string[] passStrings = Array.ConvertAll(input[i].Split(new char[] { ' ' }), s => string.Concat(s.OrderBy(c => c)));
|
||||
string[] distinctStrings = passStrings.Distinct().ToArray();
|
||||
if (passStrings.Length == distinctStrings.Length)
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,512 @@
|
|||
pphsv ojtou brvhsj cer ntfhlra udeh ccgtyzc zoyzmh jum lugbnk
|
||||
vxjnf fzqitnj uyfck blnl impo kxoow nngd worcm bdesehw
|
||||
caibh nfuk kfnu llfdbz uxjty yxjut jcea
|
||||
qiho qif eupwww avyglnj nxzotsu hio lws
|
||||
xjty usocjsh pivk qnknunc yjcgh bwya djw zpyr
|
||||
ycfmfe mgq sjiomg nfzjul bjwkmgu yvsnvgj dcjupu wzz blmn
|
||||
rdowgbt vpwfdoi blzl laghnk gsa vhnpo cztxzlb rtz hvwonhb eciju pfjtbo
|
||||
bqs bqs dbutvgf mmzb izpyud rap izpyud xlzeb mnj hjncs
|
||||
xpu vwp nujcos piu irindir tpmfd umtvlm gznu
|
||||
sfpuxar qcnbte omouazv cnh uaxspfr sepolf rusafpx
|
||||
xbmaf iceyqqq sabpt gliexel muubepe qqiyqce fmrcc eazk obkeonl fmccr kgk
|
||||
apg gbycwe gap pag
|
||||
gagv saqbk lwtllc wnhzz khxsjc
|
||||
lgc alen rlmsp anel gcbvg
|
||||
bujlaz rks rlqf deknmee yrp
|
||||
scqvl weusbc bgvaz vgg cjwsfno vqy zbq aqy tvf bgzav
|
||||
hbki vei fxdwljs myjuba elbsib pvy xxjxgi dtgv
|
||||
linzaeu qbwdke fdg pykw
|
||||
qvtdd aco aav bpu mvkcuc kjfj japgfki jfdl gem hog bdzsiea
|
||||
wpbigkb lzhwba jssjkn qvb kmwu qddv
|
||||
iny osyvqnt tumunzb torq bdeneg wywank poza ipp iggorw
|
||||
tuko mhdbsf vmjdop jomaqpj rcdsud hmgspr lsas nzmwc
|
||||
cirkjq nmjuu xtgejv gtexvj vjcmtqq unjmu
|
||||
xsdmezq xvqjvqp exhygy qahju hvd qadmdh lok
|
||||
wvvys kax rohrrar rwhnvi lhnmefp lsktouy bxilosp
|
||||
wayf diobnl zvu obnidl oibnld
|
||||
cewil ygsf ffzp ruxhu vah lnvwt aef lnnjc kgkb gxtlx feko
|
||||
uti epphrin pywths cpzzh csjei nczhamy gayxmb bdcytq xkx fgmt
|
||||
qvzyuwi dwo swkw bwjdrn dasgd ijgw vzabaop yefyhmc wgij
|
||||
dyg sugrf vid etz weyqg nyntx dwfgwm khon hnzzzn xfyra
|
||||
ofbh bdrsk rdrjj elaxvk jrjdr
|
||||
msxau rsocvx zxdda mxz lknl
|
||||
qktaywx dirpdbf unqnd wbrwkuu fvmqwl emxr big
|
||||
xwz kvsydc ayokjyy qiah omw neo htltxx fxhwqwj colqvbb sxmo ephfkex
|
||||
ncjxoaf fwjkc czmhv ylg axcjofn dvj bzqjku opvcr jiwzucg vmhzc
|
||||
gmmnrt zqar twdwrg qiwwki fcbr lixm hjdwwe moiva
|
||||
roinlxg cxeezve whannk cxeezve pyoj boweioy cpkgxsz
|
||||
qkct qso xlb xyy aellfet rzt cbboow devfb nih fhbfxzi
|
||||
qyc ltxia alixt atilx xtgrv
|
||||
svruz ufvo rvesnxv dik vzurs jjg idk
|
||||
xeudhrg hudn cilo ljplosb
|
||||
kpb oyzvywx vldko qhfkwod bkeutk zqcqug pbriu wqocos
|
||||
qkngzfy whobyri aze jvipdty ocirbep icqwc
|
||||
kzxxlab sjr zhymws xkbx
|
||||
nnxs gkwtld dwhkry snuibq dtdl aicug bhtlfzp qzk jctos
|
||||
regvro mxcq hqof yraucxi jhkol iuxineo pbtnk rfjwc szgjpr ndqqj vfgm
|
||||
yqrfox xoqrfy utbryu utubyr
|
||||
jdubjt wqrl wnk rlqw nwiq pnbn qinw uaff ftdo htfrav
|
||||
rum mur umr tij ovbahl losao imawwpb wadhww tbteyqc
|
||||
napxd kzeiqcp ppgqucm xkityt frq hugrp gjgtt gmuqppc zwqme
|
||||
xyuzs ysch howlzgu dkqppbs nvbiz mks mtxv vivouex uvawq
|
||||
ffe lfsn nlq mpulheq ikcfo wdtz cnwsbph zkib muu
|
||||
bqkxav wtecb lxwdhr kqbavx aqxvbk
|
||||
czwswqx ldkxapd pfwd bdkkj iqohla cwosw ihqpd pcc ckhabbn
|
||||
foiip hau rbqiyhh htm omeubgh symh evfcqg
|
||||
lqx xlq rsgf izu esetis
|
||||
npsrkdj fvulgkw eovw mzr uobcze azb tij ihoer ehori jit wknsqhm
|
||||
gnrksh xwggt oosi bpnmhx qqaa mpmryu jhzyz
|
||||
yad gbexqcr gbexqcr gbexqcr
|
||||
ldca xxhznn twyy ytwy zhxnnx xfmpi
|
||||
floioot kfyh dhibv ezyznar sfg sfg ezyznar
|
||||
cinioim iiocmin ypla aypl
|
||||
mhwcjbz dftuqsy wswop eizbf ptsd
|
||||
ehx mlh nfxgfkz uuw xftmn ptlkbo vsnyo ttwce
|
||||
oexvf orcg cncnkfk comvhl
|
||||
lqewsj lyulrcl efixd qvd fhznqnz yvrkwyi xmhgc vzbp
|
||||
dmr wrxqh thcm giomp rtvl ssc gwq rbklw hcmt fjvud
|
||||
teozhb dmzwfv qkq pvcqfqq
|
||||
hvlebc qqmg repxk zwrjdx ztruwb such tyligs ybg
|
||||
psa rqznokd lgc jstqres yiqt mbiody xazb xjuk dtb
|
||||
lea ncm rnh myzqzwm
|
||||
wjml eums ueflvbr cjpgnl qduunu zfxaai jwlm lprzzg vrn ttetyr sume
|
||||
uwkgeu uiahd plyewgi vveo nwhsitz mcitc uvk zsxehgs sewl
|
||||
lnbdrka sgtivn sozzq mgd vhxfnlr twrfpk
|
||||
gadphmk mbx lmlbrf tsnehnr lawdpm fnima gxgl
|
||||
umty vrn dpow fsnnpjv fsnvnjp nnsvpjf cioaio
|
||||
euu uue zeskmtk hob stekkzm
|
||||
ypqpri qwdju ypriqp iprqyp jnoxqa
|
||||
lkppi ingfxw wlulvp yhwrli nxwigf oyuhq ggfslx
|
||||
kdd ypvr pyvr waw vyrp khqq mamxca bapq gobfm
|
||||
iuq upvdpv zxef bfwns lmq lxswr kpsqo pwde iaaou nsw udy
|
||||
lgzo nil ovgrmt omgtrv jrqp pqrj lit
|
||||
uumyu iiakfj gvdtzz qbux yxn ejs dvlts
|
||||
hcm ghutxq zswi tmyhqef hgxtuq
|
||||
shkhkdk kad seubeax kdl mzu
|
||||
cpykgr skx rfhpor xsk moyhlai ogv ophfrr dxipuuh
|
||||
beyw jvrre opodn zdoajhx fhg ijs drczy drczy hjungq
|
||||
jrzieja gfg yzdn yxm wshibsn fgg
|
||||
xtylh vxscmvp rfymq uzhpyea spxcmvv dlni msj yxhlt
|
||||
eov awql miv miv eov
|
||||
mmvrfbg fjiyf hvqz zpuqmbf fszyuz ldfgni wemfjl fjjpl rbnpy rfb
|
||||
ppzpeh nam ntv xnchtyk hja hpepzp foj bibvx nmmdlff bsrkp
|
||||
qiy qiy umhlnh qiy
|
||||
tyds oepk wae tdsy sdty
|
||||
ukawr rkwau ghtjhm axy
|
||||
wtbjiv btjivw ewaf hwk ttq
|
||||
kdpun myve sqv rhvpy fnjwt puw ujhf thsp nkdadqr
|
||||
vyw wkkpdpy xlgz lmmcuve ncuq lmotk
|
||||
pmsfw vxd jpe qxlyasx ejp gwuv
|
||||
pmgyndm ezofbvx nicbwrw kwnlj yjvnas fdpkfo mqcsyhn pyjpf fbexvzo vkftm erl
|
||||
trmwvk rywuzoz hbidea kicohfz heidab deaibh
|
||||
sogf govd dknpk vxrvk rlm vwhjk
|
||||
xnxbfmw wguzrhd zbmkz piwppa mkbzz xvwrdgy flusfqb
|
||||
cgduq hbnwr xfx mrejb ckw zkbaihf cloow cwk wuvthv iwqctx
|
||||
vugx qbucd gxuv ocb cob
|
||||
ilmet fbelxxz qratdfn unoj hbc duv srmikz
|
||||
vnzuw zgpbqgf uzm thysyxd dinfh bgvr olungg ksd dsetwqz hpg
|
||||
omagsf zpr coa kknx bzithq pewp flvoz xiiq weojqr wpep
|
||||
aagj gcglqt gqcglt xbfx dhdx lbx
|
||||
pljq plxuscw ilh wfk lhi hli fouieyw
|
||||
hvnh zvm aqy dzitirm veq ctux
|
||||
lglhs aqibdii hjbn cfgc qrg pnbntcx owoks ebz
|
||||
jozngde lwne mbo omb fnyzvvj gndozje
|
||||
bbdgc igtdj uhahgp sqduko
|
||||
uuspedu fgnspm ewc slly jbs chl heanm abqijx kadvgxu
|
||||
akfsft skna kusjqr rkqujs
|
||||
erc vrljpu lruvjp lpvjur
|
||||
iors hcdr fsqtcj vop vmn dtqnz tov oscjlw cdrh ctfjsq lrnts
|
||||
fxp mczo sjlcxa mzoc jmsq hcxybow dmrr bcoxhyw
|
||||
aac ewraerq odmxpz aac aac
|
||||
zzio zebmxa szeej poordr gmi owwnnh xfx rzrab lfey jesze
|
||||
akc yyoj vqod drtne
|
||||
joxhvyf ymasnbr omouvq isxdrr
|
||||
qyi ayrkzu jsk vqvvno jkkuxi zufnnwu mrsszdf
|
||||
ocqi htfb tzjna cdt wkzhynm eergf
|
||||
yokzugl usyuqu qvotq uweqyow lygkzuo kpmqmb uglyzok
|
||||
glvshl imqv jrv xlpnsy gcg psj irtiamg wkl
|
||||
bjcpc nvyloa dkkan efj okubpc cxlowm eone kmpny
|
||||
cyxqys nmuaftv gqxj gtvsc
|
||||
beouh dioxiah kizdy hyi cozrray rave fqxmxmj gdm
|
||||
frjz amrsat lxvhzj azhevtu vxlzhj
|
||||
zwmnrk sbk txzrcsj sbk oosgfej cvh zuthibi onvwd sbk nhwpzq
|
||||
gzamt vraw kuk ugayl lyaug bww rwav ijah
|
||||
bdjirxg vifjr rhbxpa oao yrhjxoi pbn
|
||||
navb umesiys yhix phuhu aekkciu nlnsiq wjf idqdwp
|
||||
cmhw rsu urs ziprlfe
|
||||
kyhxitv cgty bnwjyq cygt sgjn pdab imarvhg yjbnqw
|
||||
axaa ejancv yau njpc jvwy bpft kwjvg qzrbvtm diu njpc bpft
|
||||
ambj upe rmqr yudbiqf krudp pqyf
|
||||
tnb mobnpv vep ohxoc cyip wxyccfo jrbi rwsws kls zlv oohxc
|
||||
fjh dmb hlbq bqc jhf kax suz fjjg rkpc
|
||||
wjnn byfirm goeyh xtjmdka
|
||||
tgyfxx hefpxln mveobqr yeo ftfn srt vim vlcu hevoi xtaaff
|
||||
imyql xotcl poql rlueapq bkwykm hlalk bkwykm
|
||||
gkec zff hbmtq rjxjbcf arerlu pvz cdaqi nijmhv uodwjh
|
||||
mpctof mopftc ksfbat sbkatf
|
||||
nvdd jub bvi kyggdbx nwtiok gjt mgsm dbhsn rzibgjm dvdn eqi
|
||||
ysd iirp dfgzza wiyeoou ysd ispkv bcqg wwzqgq xphse
|
||||
ntq ivposb gsd ezl tlkztp lez qyurp vxsmg dgs
|
||||
wijs rydbj onm usiyqzb hwrol giusanb kewukl yziuqbs doojam nom
|
||||
lfacyy xwwast truqtt tzneimn uxsydc ktu eqyaj ndszak
|
||||
ffleooc kikif fohgop aucy moubqxu
|
||||
iaxc pnwexdl ncy vmwm xrqoi wpgftq rofx utyzjuf stdxq twpgfq
|
||||
ppmlp etsvi cjdx poly ynx vfxpslg mqjo qnpsage flpsxvg jwsxiqt
|
||||
lbyhnb kflrpeq ssoti webxr embbjd kbnx ubzqco
|
||||
khhc vwuqzb ebocbko rwmonkz edfqn hzh qhncoq gbwdi wjeg ocwow
|
||||
ghzhd kcxblp lzwkkr gzhdh umk pblcxk
|
||||
wyajtw jiff ouylv sni lwhlrg avqjiis igzx wbl lhrwgl
|
||||
glhh kaxha tqii hwzx rgic kaxha rgyidmt qdgxfl ynjc oibfij
|
||||
bapj bix rjniw ynbql idlvnmt wynpzbl zlpuoix kvn kakwys
|
||||
aldpxxu iojxp rif xbyqtr jffdvy qnrq tqwsdiu
|
||||
ulssco ktbymjw bfj zhkg zgc ctyri
|
||||
ilrmq wfahcgk mrlqi bguad inj
|
||||
cjzc rekuy ifr wfkg sple
|
||||
cvjkp qbmumnp mprg ltmwxxh zpemtyb ozzssfd ksu mgrp
|
||||
nvc sxp mpkxz bhlctq hguaa yrdkm iwsgfg qjssh gobbies hucdh
|
||||
jdxrjw qmo qmo vobhnu
|
||||
dnjib wtjp rfdjqdj skpvrb vkwevb kxxovp
|
||||
fzi kicta zkuvr rfaawv ehklq cfdjsyb tukahwr zkuvr kicta ouq
|
||||
aba ytdguk gqmpn hvxabff hvxabff dckj
|
||||
fna wxyqhxd hvy khsu yypoyy lvvue medheua gim slf drdbeh ikihf
|
||||
jquz wwo wwo ghlz jrbvb jrbvb
|
||||
jwzvkl yjw ouwla yjw ouwla
|
||||
zsvlgyf rzqbtj qygynem ukdgjm lbsyh tmdzp fbcaim eymzr
|
||||
pvw sbs dvsa plmepl pwv ayxk vpw dwt
|
||||
inayadn pnti yzhxk azga gxq aznbciu gjnmyqm
|
||||
isgf ndqmk beyqq ebyqq srtzxo aiiw oqfuwp uoqwfp buejctv pxbk
|
||||
pzl irv tzvzdb wcy eszm ybwiw ycw riizifd iybww
|
||||
btpu cua azzqffy owcr
|
||||
ofwq sqlpzat lozdxlc aevjmpc lcolzxd wbbysn qwfo vcrx gdzgi
|
||||
dbpfmxu ydsxwl ijn svxtop csep ldqeog ffye zcrl soh aclw
|
||||
wyiyyhv vyhiywy obgi hiyywvy
|
||||
ddvaoc lhv spurn rgxyy onjw illvn yryxg xyyrg
|
||||
vid wdttqq kajr myip
|
||||
wolqlue phlunpt dcmmkfm sgxk dmmckmf sfng jlbsntq dxp
|
||||
zmneyho fswj xdgsjc oefwjdi htgxvbd tgqrq xodoa
|
||||
ynw bygqdnh hhmnkuw cojqrke qszzdjo orskwq mdfae asabn
|
||||
vvpm vkj pcxghao caoxphg axhblxb vvmp
|
||||
txox nzy eqn zgir dytsi girz ffa ugjjbzj brob fll
|
||||
kbz pukqbd fiwmuh umwihf bkz dvz
|
||||
vgs vejs vejs vejs mbkyjjy
|
||||
viqmnmu bitkyw nddnk dknnd cldnpp hipub plcdpn fdzzpb mmyomn
|
||||
ndylnfx gozlrx ngptk rnpteb wtacx xmtcjy xldha
|
||||
fey doyxis ampmtr ycqh syw cqhlj hnngx
|
||||
dijf nac tvkq ayo akbj lzmngdm wfxpn bpyvrf cvdqpa
|
||||
zsofz lhho hgat wqskga mnt
|
||||
mylwm zxsd omzpa waz hcrr lxmpq jsw sqtwak pzoma
|
||||
rwhgsgt ysdq ztihici mpwcawv alkqg wsxiwx
|
||||
snldn bcb anjdv cbb awsscc cqxult hjmjew mcycb fdpdg sesrh
|
||||
kukrqm fawafz qdim wyobtqx bnvjnqg dcvqxta yptr nnpu ughldqp duo zafwaf
|
||||
knb yjqb bscpnt nzg sqeu zkahna ttuf nsbtpc ixwit vucwj idix
|
||||
bfqyx xlnpc ijrxu zkqi kjxtahr fgag orusms adi bfqyx bfqyx
|
||||
dqddc ncbv bvfk hefikb dqddc hqjl otpx zfiu
|
||||
ntkv qunrzx eztzure ctt rjo bkdt znvd jwdf gqhf mmhrzgt
|
||||
zeavm hkbf rawqwuf pis dojlkt vnjhmi uvk cufmn qginezd xyut
|
||||
hnidzk chlctc yst pepd dxntbxg vqk daxfpmu wshyddl
|
||||
jgd vesqgo bdyqy igl ahstdm wjtd lrtkjsv tjsj sccxbih esn gkkzj
|
||||
iisiswh jll rhlaf jqwwgfa wmhyo izva vrg zjkak nlxxfer rvhx
|
||||
mkrkd jlqtpy ukstro ktuors wsj ynqpbp kpiyxzv nxeiwg xpzvkiy
|
||||
jbr gnct fwklekg cmfqnm ctn gqobrs kwht
|
||||
pztmjs yiffc kfhsblx yiffc yiffc
|
||||
biezil iiezbl bzeiil smocoju
|
||||
viiigm gmmmk yeiv dxzogro qsmzsur hukzwjn lcle syo mdj uruf rxfseu
|
||||
extchsd adeff ouikoj fyaclr rwwvqsd dooe tcxheds zrdqqhm fdoxv kbxi tlcj
|
||||
aycnydq qlxhka zoi shplo qll
|
||||
bfry lbwckm ltq rbfy gpn vojp ruj dpxcve geq
|
||||
svtvfwh lca lac qia vhwsftv nookdfz xgjiaf yvcdlt
|
||||
aspgqym fryuzhx bbydf tbn bwutsc fqgi zij lmxhog qnmse
|
||||
rbb gsys volnas onvlas lonasv vwjdso lnteapy
|
||||
got iauk kficn jvfuy yvoe jcxwui hyamqx mke mwh jcxwui hyamqx
|
||||
avutfi ggmha dkopc kothnnb syoi xsd wjedywy
|
||||
oziejyz yzeijoz hnthyn knj juuq qujtp kgq bymlnlf yicf
|
||||
zsejuy dybeap hvowmvn okxb yoi epadby cnzjk xfwprzc
|
||||
lacg iiix fblhxvf nrkkol lnafzw qspzsn gvdy ipj zub uouseo
|
||||
evukwkh ycjxxc lptwmf pmd izxdsos zrkavf pgjoy zwokg mpjiej
|
||||
vqw ijwoy eaw wvq svmcq ccxi nyub ynlq eqornax uprt pygfe
|
||||
plue okbbm btvm gba kutn jacjx ysqt lvx pcxxu qcf
|
||||
pyw ffjfudq bvk hsdwdva fjnivhf odbmw krpgrj
|
||||
hziesm bxa dceiwt tmvivjk snl fkh dahsxyx kqlhak lurtk
|
||||
xss sswyxrg yqff dbkx kbxd mpzbmnl bzplnmm
|
||||
uvz pjm ilrol pmj uzct ztcu brhkv
|
||||
heiz jcn syjt zfvlvaq aflvqvz amcjh rxnitw
|
||||
cxl nxvrn vjnz aewtr cxtko nnvcp ltptd adpxt zvjn fntklj
|
||||
aymmm tuirj hzngq zhbh paqs kvpfo aqsp kmo acprw sabrso kdqmp
|
||||
ndqjspv mmhp pndjsvq rti usm
|
||||
ije oad mvelyg jadz ekm dao zdcmv
|
||||
qwww tmwmdbb oxxfoza rgmf eonku brh gcgiuoi ojscn
|
||||
fjedeek ohlax fiydku rbnxpg wfivg cdgs
|
||||
axwbni hojye mwfe oyqknxp whdgfy ihku mbhr gagnz hehagxj
|
||||
hibautd blnayq lnayqb gepml mgpel qunw
|
||||
ircx oeb kujtip zbu ebo cmmn
|
||||
upyqvot wbponp hnn vav avv tvrky omm
|
||||
yzqsnf agbfsw dbxoya sfnqzy hqrxek qsnyzf oagyerm xxhukm
|
||||
xzvk mvcwz oujr hell hoe xexa dqlpqt xdqz ucola hsvv tcmybhl
|
||||
skldxr mzyol ybzyzd jnnxb rxncdy nkpwy fwlnsw omylz oiwieu fshv ngvha
|
||||
jkwqf yxrox hejfoq orxyx
|
||||
rijken xiwf mawqcfu erinjk jsi yyg mmu mdkfqb
|
||||
ornjes krp eornjs enjros pyqp nnwwjl
|
||||
wzd uqqo kyeli tikdle aykdjog uiz rbpnw mjxezf ihiz rlgyg
|
||||
cjm ajqgvkz kfgyy dmczlc mjc kxcm zctyqgh ymsk jwhqfd czpqgan
|
||||
vxkzvco owo qogj uyictoj kfr pyoo ejrru npluynx bvv jhhzu kuciwc
|
||||
eqk pcsly kelu arzgoe trfo fotr cuaax
|
||||
lagonw qvcssqz sdoklh uvovi sfrkmd hnvafj ltg wfjj
|
||||
viwbkm hpwe kzzwrbr axjtlq mznin wwpjg unlwur
|
||||
nuzorgo qfoz ydisca qxdfutv hzg
|
||||
nqgge tobtt hjocx ntyqyi rxzkynw wrnxzyk ciscy trjt ottbt
|
||||
yuii srawx gljxe eteogz kcu jlgxe tjik ktsnp agudqok jwol vfnyv
|
||||
vgicg dhnrmxz sjhozy hlalx rutwq
|
||||
nyoyoje kco hoyam hoyam tta iflud amh gdxcsj vqr fvsqcgv
|
||||
xdmbtph ueen cskerl rxjvpdc
|
||||
nricn addljzg obq rikez igq bxygkmv qmgojou uheubk qor
|
||||
snzd ztusvr vrstzu mceddga hgu
|
||||
vvrbfjg mcdhmsf ldtwl otuna gmjurrx jgrurxm rxmurjg yrioq
|
||||
iotkvo sftfvn vvoit lllju xvlg rdsb ywmdf mzxigu kzq
|
||||
sgqw gqsw lqfu wgqs xpiwou jurgucd azq wgaqpm
|
||||
ijntzi chlnfj yjqatz hjflcn vys ofq oqf oadthe jrfw
|
||||
mmc motjo vcwmod rpaszfk zgkkua bpja vjb htrk
|
||||
bpfvvka kmger mnvvfl hakudy yfprdoo mvnlfv rgmek evnwg
|
||||
mykpu juavkn cecdvi aszbi lxm hmps oaqoif
|
||||
fshizd fsdzhi lvcq hhpb eavwno auqlwz rpv owcdojx amsmf qgnddd
|
||||
pohmcn hlcxk qsesxh rncr
|
||||
fgyrsis ldem avxmnh frpodq oefzn
|
||||
plfpu qdyojz xdrzrjy kpv abkh fge bbnotvp liikmcu czvwl oyh
|
||||
ovha muitw pzy edfjoo fhsxuh dliyruc dikcd cqem ywfy
|
||||
exyry jtzqn tscr qbtxno cikk poqgr tnjzq eofe sxea anlikep kick
|
||||
zcie purpw dmhhms bcdo prwup uprpw wfejgjd
|
||||
kwtjc cmixp dodfwj hcgmmat pkeyspo ubnl ajxvj ffkh xvw
|
||||
nvlgq oduus psufiqg lrwpn dleftn xtllqvf usgz
|
||||
liarf sczsf sczsf wky qtzq qvve qvve
|
||||
cit vtjsh jrhkyvi txj urmq hppx
|
||||
rhblmxn rhblmxn lkgow dylurwc beyk gfcewxj ehpl disoe tjbjy lkgow
|
||||
nbkrm jvk ffux ars agns bebic jzjfm kmnbr gptvtsa ufxf
|
||||
hrlvup jaz tafyr qcgq wkd fiz bgsrx jmtcvo qkbvj
|
||||
eontk djf tiafrng mtwat puainel nyjoh meynxbf eqdw
|
||||
aspvmbx tgzuszm fpj xkl nzpr fjp vnomk byx sbtov tnu utn
|
||||
ldyww gwmiddv hwyh gcgsdit gtgdisc suufl xsw dlwyw
|
||||
sye dgbd wyf ixqzthx dgdb esy
|
||||
nsdgera fqz xwbdgui ngdgbcd bcn qrdxml cwcmxws tncm mqsodj cqgk
|
||||
estayas cocmbpv cdcf vygtswo aplwa estayas
|
||||
ndc ndc wntr sfls sfls
|
||||
gse svv esmi lcdii lnr kemrk gnk ildic blnqy wvn
|
||||
mwlpm awkr sxsudub yauwww hnktbog fpnqc nmxoq yoparu tqjpkug nbipft
|
||||
czwnkk hrodtmx yyzpil ooqjb cvxzfh
|
||||
kwa wak gipak gsgrw
|
||||
jyy fja jjk kuvoqdy urqx
|
||||
doyu chgn gvtxi qjdigvy kxr dizwrjc sll zenl yyblj
|
||||
epxeqih kfi hlog pakk kkiidrh hiufw wuhif baqzxzi bgcd phi jzjdxjp
|
||||
hllhyad sodc nyrtfe kygof hyyqi txddqg wcwxvnt ewqmj wwv
|
||||
vxymuoe caat diqwbo vfruxdf sqniefn hetcbl nvtttu ouesb
|
||||
yvoez pvthzc tdowuci wjijicn fhpmq kfobag yctdwj
|
||||
xaugkb rprkg tidpx pjk tpwwm pbcfhr wmwpt sfynrl iouaw zbnyu
|
||||
auakc culuxg bffg rodyhea ixlmtfb jdurl szoa
|
||||
xgona fjzho buh khbvti ddh mgj ptgaqps
|
||||
dqldupd udpldqd poku gfgpcg zsvk grvk kntx jih uwvxdvq sivk
|
||||
mwdnq wmqdn uzto mdqnw
|
||||
alvfm qxqo thwru xqqo jilnsgs rnonk fwntuby ogbha
|
||||
gvxlxyf cdpv khvpka kgt gshlaa tenb
|
||||
mtgvvxh mrjrsd truk rrerzx tujweaz
|
||||
ozepw gsqkr rtmmc cmrtm
|
||||
spnthg xhlzuu xwcrxz aqqejhh bpzh
|
||||
ectdftk rgp mkp vxp pevriz wkgfkaw vfygj peg gep wjn
|
||||
bksbu ywsszf tsbrps vxicr hfustju ynnlbo
|
||||
sio urbvf ujezjk vkyc ukjezj bvrfu qwwgqmw uqfekvx bzipxus qfumwh
|
||||
druru kycweog ycmef rjyy fkgp
|
||||
rmf ifbip rsztco coju wlr bfbmsug lwr bsufbgm nwmp
|
||||
jjuxtyd yif rkldsvu binq spepa mfg aszm
|
||||
ghilaau ncm sgbavz omzeotz azukf bgjw zqzo gjbw pld
|
||||
gtog iqheik budeu guvljmi
|
||||
qqlj jqql ttk xcxu
|
||||
cfq cfq kpagib dxfxufw hhksbjh gpcp
|
||||
xkeax acnia jjubfc mhot uxlhh gnkj pavta rciondm rkquh xudqian
|
||||
wqhqzg psqh rnnc uujlgq
|
||||
hpjpaoa maa rdndl xewqj nmagwx xewqj hxuyvou xziv rdndl fbxmbz hmfwghy
|
||||
dtwnrca hbfcptw qrmvat sdatx les zwizogq
|
||||
bodiwzg sgoas fsf wgkrn zgbdowi wfkz
|
||||
ngcsg grtao wcfxpyl gngcs fxwycpl fkpt
|
||||
txvngo vxngot tkoap zqjc qzcj oeruix myh ihgdfik qtt
|
||||
rxeh fcbnoo rxeh lve wvoc pmnxej dlcbrh rztt noibg
|
||||
zyvq lwxqu oyjv bvidmf wxuql
|
||||
wzc zcw czw dnhkvrg nzslrf
|
||||
cfgl uwhxu qnsfmt tgyabes mqnq nkitq hmcvxlt qqmn yzmb uomqp
|
||||
lwziur hgmdmv zuvipkp vir apr gfaq zeo dunat mqgafzg
|
||||
prq pqkr xlrw njf ncqni kgpoma cmtklv
|
||||
jwfuc poz opz fuple
|
||||
fgleub lcgnifu lkwo kftbc onvwvdx lukpod xgmh rnj
|
||||
rwqvv ezjmoni llq ekd cdvv kzcci gzsj vuipv fnw
|
||||
rtnua gbnzg kqtogns iozzwc kjpzz kiiurey yzlvzx cpy xrue
|
||||
fexcjmw ebwssx ewbcgwd uwolou nfdhic vupiykn jss djoo xftbkgo
|
||||
idf ipvmez qyevwd wfsjxja dif dig
|
||||
szpbtsa bssaztp sptzasb qppgz odur cpmn wpmg
|
||||
pxn zjmq rbnr azwstzm mln upaqyty nxp oge nlm
|
||||
bfaryqv hag phtvh ypi
|
||||
epeeog lip zqio wuehlnb bau sbd dsb
|
||||
xbrrp sej agrqnpa aarpnqg bnwyi jbn
|
||||
uqmsvd asmuyy czxviw pznnmvc
|
||||
sddwmek wnaea iwphupk sabo
|
||||
cingdks ksh mtyip zltgafm dflkcd wbdnqup uokm gmxpyd libz svv akce
|
||||
qge ewv dkabkmb xcpi nrkmsu mkmb djvamg mhhrwjh
|
||||
krjt etfhm bxzatw zdkvz ehov seyxbw mkiirs plzoplu sogmwb wodfcle
|
||||
qwea adibdp emo homrd pjcrhlc eqaw kqsrp rphjlcc
|
||||
gajzo nwjg qxjra jztcnir ijvjwez avxb afz zyywqz kcszgh elmlkfh
|
||||
lbz ozia bctf bumoji anhil rta xvit
|
||||
ejybire ypjl qevak fzalx mlh qxlei zib
|
||||
xmzas kwojjz ntrnrw nbmxlv mdgxs xjhxg suo zdcrxl qkujisz pxmu
|
||||
eezyd unrtm wyu vhufvto rpb isfcy ygh hgy
|
||||
nszvbzv ebtt memrsva ebtt qwcaq bhbas pvzfbov ppjbdy nszvbzv jabvrp
|
||||
rlo zbmi lugvu yeby
|
||||
tfcd tvl faaq mnural nyarh xnxk ctdf bodz
|
||||
vwdrhc gub bgu fpcovx rcvwhd jukwsue
|
||||
aekrhi lpknnrh bett tkib ioqrap igwnst aekrhi lhha
|
||||
acg mknhazp pcgjuk tajplv
|
||||
masq fyjkn agq qhxbbl qga npzj fme xtihic rntisg iqv aqg
|
||||
ipagh fjth mswztpi iexd cocojy vhqrla joe wrsrmw
|
||||
njztu tsh auqrxca zpp
|
||||
jctn webxi haq irrr qox irrr webxi
|
||||
reaw axmnvd voakf lnz ftbxfh zjyxzl pryfjpv sistgb pov mshs
|
||||
gsy ctsngl ptmnyx vpjx zpvtori pfu ioycdrq
|
||||
aobdtlj osdnrth sgqe geqs qegs
|
||||
oamrlxk ygbb rkamoxl nztl sarbmtj yqupjt plu sbtarmj vpa rxea
|
||||
yvhgp yznko epwpza gqrsod rilukp cglhomj wnaplu ugvdko qdr
|
||||
cggztg ajw gggzct ubmiefj kpa
|
||||
rel lvasbh kobm mdnzla pwnyj ehep gzx nhjdnsg rxa
|
||||
qaz gook rplqwh vsht
|
||||
dhe aneq ivrn awekad ckcbt zsqca ehd rvni oulwfuu
|
||||
oxgzzow wntz tkqaoi oxgzzow lwkdpgy lhd aekjasp tkqaoi dnhaw
|
||||
alxghco cpanoa onjh hyeyebe whxn zfu zozbll gojn
|
||||
zdqulsa dlqsazu zqudals sfedw
|
||||
rydtrsv rrtvysd fvyza drdgh lsfzt blnxr cnxe tslzf iijyds ylcxn
|
||||
cczea nxx kwol kopaza wuvr cyvoo whlicv
|
||||
zbmrwdq tlzbevx jwzpsc uvkwpd bmss rbzblj
|
||||
jogx jgi gji hypmtkg ijg oscjv
|
||||
flkoqja kwmrqv wzehel fvmcfap mkwqvr ivwxg jqfwdvo hweezl
|
||||
vgjg nzucho nuohcz ggvj tmxci
|
||||
fqaqx zeybhtg bxeic lftuqp wzuerz sww qfltxk
|
||||
keiy myrvp blkxcg lncqmsu diittlg fqrf digrel cpwrk ipan dkxb bymlzo
|
||||
owm irygdz pyhj mow wmo
|
||||
noul pbvvt zcv ueqyjl zhetlw lpjfhli
|
||||
felvwb wdykz kyibdz haq qkouj vuav oztyqh
|
||||
dyxo njcr hcuk ysrr pucw qbajztc
|
||||
ooyaz pmt hqwu gjx tmp tpm pwz
|
||||
lyhzajz dfot avyifo kdwka pwypcep kyyw tirlku zdpjmft
|
||||
aexle hfxo dacwvcy xsiotyg cifq ibupshj aktt rzvf pgafj
|
||||
pxubhw ibpm jxtxg iwnssf osbpj
|
||||
exmtfyx blbfg emrunru zkuhoi lfzn zrj unmcece phuppi
|
||||
icomb rmy mvsqqkh zwjubz lumq wekx
|
||||
cmdgs gsr pfhqx pfhqx cmdgs pga
|
||||
rpyf jejc adaiou dutv imbenyu dqw zhebjhu pryf vtxs yprf
|
||||
cxj roprjn rqoh qacagru snxd
|
||||
rczvi hfpl luc yowgj nvavlhw vjudkmv dwu teq
|
||||
klwc cktzh ksnvswl nsgeu xyohp mhs fxnjhm fwrcg rdeadkx cim
|
||||
ounvb vzqje ujctzzk iyy vxck ebtvbqr uswsmcr jveqz qejzv jmi pboq
|
||||
lwffygh mqsh vnnj ufz qhms gqfuxo lurzmu
|
||||
buf psdluck gapwoo wgll sbfavbc lljfvzx cdgo rpt sfvabcb
|
||||
svefr kubbri fervs nboi zkvq
|
||||
jwr vtc zkcpzb kczbzp cdned pzbzkc wigjuak fszgweu odflfek
|
||||
vwdqm khnnj plokjg vnce venc vecn yzxtgb
|
||||
tawl yrhoz tawl yrhoz
|
||||
vvehsl kdhzgme rix rcs btm pxnlsps vlhesv sxpnslp yqjtool
|
||||
eqpyw kpmkcyw wqhglxg ajfzo hbd qvmhy nhokah iisqvad kxuyd fxek
|
||||
jsz txhwhah hxt djnvl srylveu pxp dzmmn epek tzs
|
||||
joyzql jqczueb rtdyw fyc fjirfyn tjcalz joyzql fyc
|
||||
pjrmiz xwnmwns kcqjuut zfgxhdr octwn kqppg zhfgxrd wmwnnxs
|
||||
ema yqxqs aljjo ajloj wozb
|
||||
urgmhiz epqj vhhaxdm ptlsvig qzbmm cumbho lkg gyzmg eaopyzf ncfy mqe
|
||||
ijvwvo oszkees ugvyk hjdj ftip itfp
|
||||
ylfw qutzdj mgqp cyjss yzsdqqi iykvs fyor sthyqp mrjtzee hgo zwqbtgk
|
||||
bkfkns gco bykzc mje dwmkrwt ljegqor yxjxp oaleuu
|
||||
xeltq ggyqis aud frtyxhx iwz wiz fwoxz fozxw
|
||||
zdu nwduqsa nced iphaaxo
|
||||
bqjj oah ezd brhgxrc pmkz kdog exw
|
||||
ihatt hck iepn egemprp wrz wzcuo xjzeaa wku ivjvihh
|
||||
cwkuof bmj qmxd qbtms zgdei bsqmt ssndhw eeenku lcsqy bvvodr
|
||||
tek zsgytci vgoun kwwu
|
||||
jcxvp ijxc buqgix uil zfoku
|
||||
ggndshq bmjeo yqaxtik blspz yofh edaroy
|
||||
ipvtxh ouye elln dllvx iqza nhwf zyfw pvlky
|
||||
iydcx gvarm gvarm wegmiy
|
||||
sfjd liiflle mulboe qywzs tzbns trojl pad mnfcrhb sltb
|
||||
gthqj jvpsof jwlfyeg jwhlfj
|
||||
qckv umzrge gnzc mnr xde
|
||||
gvgxmhv txnait taxint ius iboqdj
|
||||
vsfex kbpvsby qembkb efxvs vhflzvm eaazg dyg bbmekq
|
||||
wxpfk xwfpk xwkpf cjsyi
|
||||
knzg eefq feqe seppop ttxz qnqfn atgsy cch mkjlbwt uyhct
|
||||
quzw jbiw miqehe qvf jyipqh kzcjxyh
|
||||
teuvzf tdtwoi pcuafa cwgjk ccur lgmqv jpjdkk efrnw uloqn dpkjkj lwloeph
|
||||
yaffjy xntstsv gygq sxttvsn tvnstxs
|
||||
cvbmdf pfrfkna wupv van iocb hsiyke obspj ytyfkl hbsqtij hkcw
|
||||
oeddmnu koso mdodeun ybe mhjbmwy ubejz soko yxvuv
|
||||
nylhy ylnyh olb vcdik
|
||||
gsp ilba llnu jjk urbvuma qzypf bkceotg ezxq hyvjngf
|
||||
tfnegyq rue waeif tfnegyq mvqm
|
||||
wvgnsk cpd oib wrdfaz kohwgkc kzzig hogkwck gkizz
|
||||
fecuuyp yfq bvanvxb cjeqwf unw dccr qzh zqu voakj
|
||||
utoazh bjuq kmhcre izmny mirorsy twnl jyoc
|
||||
fnnpd dmr ccgu eqgewc zuqivf
|
||||
kkxiba qdabuen oikaz dnuywmm
|
||||
aogud adugo uzcglpj lucv dgoua mdsqa mvrg
|
||||
lymhv sof hvyml mlvhy nit
|
||||
chu bwxp xpbw ghaix seklnc ola zofnrwt uch
|
||||
wtt abob vblijtd oabb qjws
|
||||
uozrpw kgf gxidxm uehdr fta pqakkrq atf fat woaolk
|
||||
gaee voshd ghlyy emvzlkg cmcgk tuwlsj jwtsul znrta mjieqph glker
|
||||
qiugxas gkg cbzmoz kahs obzzcm
|
||||
puz omcokz gjc heuqb
|
||||
dgndhb wid wdi scwnrjf juaisgo eivaw hgdndb
|
||||
mgcrd hnqg pkpeb vprxcp
|
||||
atlcnzp fyp cpkivxi bzj ypf cqpt bysu
|
||||
pnd jiitmzs csw mxnpck vxutdrs ivipzy cws xiegsy qut
|
||||
txlk avcvbuu hnq yyriq ajyswd urgiwc
|
||||
qgiqut gvblizs giqnfrk tty mvoj wpikl giqnfrk bkdpndu xztmxn hsmqxf
|
||||
llthg zjslki wilj rcyfois bavz hrqxn
|
||||
ytbw hlkl vip skycogy ejiirhx
|
||||
ndmtg bthlbw lsoq cvlvo sqol sqlo bppl sdkbls dtpyzrq vgm
|
||||
psm xpj xjp lqi spm gqirw aglpj
|
||||
htg fcchvyt xffev szdu lieadft
|
||||
nbjo qohgzu vofg vvild dbtyi pdolxn plnoao jxze xlpbxj brajzg
|
||||
urpp jjv lihmvp ivkwdqr sesyp ypbry qok sesyp ivkwdqr was
|
||||
yinepzv qvnzdtf apv ucxo bdioo juga hjfsyl hmowo avc
|
||||
dmiv tplae iiuiaxx tpale pyzkc
|
||||
giwhst mpexd byfyc swuzkc
|
||||
yydkwp xuu vjya kav ujmcxy qrtp zvlk
|
||||
lsvdyn tkw qxu omvlc wwmfvov mrgcoov dhpu tfair hupd zbx njzgwtw
|
||||
zuz rsxc xsrc gdwwf nycsv zzu kcu
|
||||
unlvzv jerqqgm nozma ykbflj qihqkx
|
||||
pctffo begf ivrvy ezru mvqt waocq
|
||||
tubtuk gxkc ikgw bjrird kxjebbh sbjyc yafkd khqajmt aclpmf gqfo yrpf
|
||||
rdt vrxa fyudo myeosb ursflwk
|
||||
wbjras edlbwdp ctobtw jbvtvcd xjgoo cmunxm mjtbpi klovx bypmsab unc
|
||||
xckml uztr htublq vilabvr jdiwus qejxur evfw qqm
|
||||
tzqq tzqq wkb wkb
|
||||
dgmg ljzc dgmg mbmco cgze qsap jccvot uors iiq
|
||||
rwvac woylk dmn teorprx nyuvz hcwwxlj lvej drbjo asjgq
|
||||
ljen tpfl vixcivr guaf lnje waim jlen
|
||||
djgaa janhi adudm yzv zkcb xqw fgvrz
|
||||
kpkjoon ggzx skp rqcsw xgzg zgxg jtf ghc
|
||||
rtnyxo qixfd nphekk mouzk gny fpzquw qgywx rpr gqydze
|
||||
gawdlv vrivoof rte iyp gaih sfzplm
|
||||
csojx wzojode uzy qulr lylmb guvtkwv
|
||||
ovxj aamms ftxo ebckdqw wqvsdci jwfqxks jafrcrn yyomrot
|
||||
qnu jqwr ywudxk qpsez rdc kiyfz iiecf dthxjjb bown
|
||||
typ zxcvjo rip acjhl paaab qhqipg xkguye sbxy pomkvn
|
||||
ofvaegv hgak oafevgv hkemar rqkha grklnsp msvkkku rekahm bxmjnw
|
||||
ahoihju sdyn phi uhz lupbx
|
||||
lavt jef klmq oqyfpf kis nazul ymezxek xpla fxyrfnt
|
||||
nwnagwy hvpjqfg sgm ungfstr gso owqqxjh
|
||||
hey hye ipyrt qxmthg jth wpbr hxgmtq cvfkfux qykdzhk movcfnl vxyoc
|
||||
zsras abnrj fgaczuk ssazr xzf cnxu gns wnqqy dwjh szars
|
||||
uhb zanlvh lvdotkb xekl kcofo
|
||||
lhx iccy ibkjw ciykxaj imsx ehamqlz iwzapxc rhaltv
|
||||
pofit owmpqej vwrobh jvox gdqehss yyxd styu tfkm fiotp
|
||||
ecz mdpoqsv mdpoqsv yxx rexok hcfll yvury hdhcfu juhkvpt rspnfj hxvgdir
|
||||
ohed mtigaoe eodh agmiteo
|
||||
vjvv hfco cppbxtw hawsjxz ovlsq qgs risgwhg auhj
|
||||
togivgg czrtvw ccz wzvtrc bse lsk
|
||||
ndc ndc lrfi iyleol nchx jxpv xdcsfmp nnx wtvq pih tgc
|
||||
hzpf sur zhfp klfmhx lbuidp xiqimnf
|
||||
qddpdk trfxpip pnsowj hidgvnf prur rsrautp aamykfm fysqjmq xwzjane mbmtxhf oqctt
|
||||
lfd eops govslp ultbye vrqai hcjkcf snpape
|
||||
cbok koumkad otpozb pqcs emilpe wpcyvxd bock
|
||||
spjb xkkak anuvk ejoklh nyerw bsjp zxuq vcwitnd xxtjmjg zfgq xkpf
|
||||
juo pmiyoh xxk myphio ogfyf dovlmwm moevao qqxidn
|
|
@ -0,0 +1,45 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay5 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 5: A Maze of Twisty Trampolines, All Alike";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] input = File.ReadAllLines("BScottDay5.txt");
|
||||
Console.WriteLine($"Part 1 Answer: {RunCpuPart1(input)}");
|
||||
Console.WriteLine($"Part 2 Answer: {RunCpuPart2(input)}");
|
||||
}
|
||||
|
||||
static int RunCpuPart1(string[] input)
|
||||
{
|
||||
int[] instructions = Array.ConvertAll(input, s => int.Parse(s));
|
||||
int count = 0, pc = 0;
|
||||
|
||||
do
|
||||
{
|
||||
count++;
|
||||
pc = pc + instructions[pc]++;
|
||||
} while (pc < instructions.Length);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static int RunCpuPart2(string[] input)
|
||||
{
|
||||
int[] instructions = Array.ConvertAll(input, s => int.Parse(s));
|
||||
int count = 0, pc = 0;
|
||||
|
||||
do
|
||||
{
|
||||
count++;
|
||||
pc = pc + (instructions[pc] >= 3 ? instructions[pc]-- : instructions[pc]++);
|
||||
} while (pc < instructions.Length);
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,70 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay6 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 6: Memory Reallocation";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string input = File.ReadAllText("BScottDay6.txt");
|
||||
int[] banks = Array.ConvertAll(input.Split(new char[] { '\t' }), s => int.Parse(s));
|
||||
|
||||
RedistributeMemoryResult redistributeMemoryResult = RedistributeMemory(banks);
|
||||
Console.WriteLine($"Part 1 Answer: {redistributeMemoryResult.ReallocCount}");
|
||||
Console.WriteLine($"Part 2 Answer: {redistributeMemoryResult.RepeatLoopCount}");
|
||||
}
|
||||
|
||||
static RedistributeMemoryResult RedistributeMemory(int[] banks)
|
||||
{
|
||||
bool done = false;
|
||||
int index = Array.IndexOf(banks, banks.Max()); // find largest bank
|
||||
int reallocBlocks = banks[index];
|
||||
int reallocCount = 0, repeatLoopCount =0;
|
||||
Dictionary<string, int> uniqueList = new Dictionary<string, int>();
|
||||
banks[index] = 0;
|
||||
do
|
||||
{
|
||||
for (int i = 0; i < reallocBlocks; i++)
|
||||
{
|
||||
index++;
|
||||
banks[index % banks.Length]++;
|
||||
}
|
||||
|
||||
string banksString = string.Join(",", banks);
|
||||
if (uniqueList.ContainsKey(banksString))
|
||||
{
|
||||
repeatLoopCount = reallocCount - uniqueList[banksString];
|
||||
done = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
uniqueList.Add(banksString, reallocCount);
|
||||
index = Array.IndexOf(banks, banks.Max()); // find largest bank
|
||||
reallocBlocks = banks[index];
|
||||
banks[index] = 0;
|
||||
}
|
||||
|
||||
reallocCount++;
|
||||
} while (!done);
|
||||
|
||||
return new RedistributeMemoryResult(reallocCount, repeatLoopCount);
|
||||
}
|
||||
|
||||
class RedistributeMemoryResult
|
||||
{
|
||||
public int ReallocCount { get; private set; }
|
||||
public int RepeatLoopCount { get; private set; }
|
||||
|
||||
public RedistributeMemoryResult(int reallocCount, int repeatLoopCount)
|
||||
{
|
||||
ReallocCount = reallocCount;
|
||||
RepeatLoopCount = repeatLoopCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
10 3 15 10 5 15 5 15 9 2 5 8 5 2 3 6
|
|
@ -0,0 +1,147 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay7 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 7: Recursive Circus";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
// Sample Problem
|
||||
string[] input = File.ReadAllLines("BScottDay7Sample.txt");
|
||||
|
||||
Node rootNode = ProcessList(input);
|
||||
Console.WriteLine($"Part 1 Example Answer: {rootNode.Name}");
|
||||
|
||||
int weightDifference = FindWeightDifference(rootNode);
|
||||
Node badProgram = FindBadProgram(rootNode);
|
||||
Console.WriteLine("Part 2 Example Answer: " + (badProgram.Weight + weightDifference));
|
||||
|
||||
// Main problem
|
||||
input = File.ReadAllLines("BScottDay7.txt");
|
||||
rootNode = ProcessList(input);
|
||||
Console.WriteLine($"Part 1 Answer: {rootNode.Name}");
|
||||
|
||||
// I have no idea if this convoluted solution will work for other inputs,
|
||||
// but it's printing out the right answer and I am too tired and fed up with this
|
||||
// problem to care if it's not perfect.
|
||||
weightDifference = FindWeightDifference(rootNode);
|
||||
badProgram = FindBadProgram(rootNode);
|
||||
Console.WriteLine("Part 2 Answer: " + (badProgram.Weight + weightDifference));
|
||||
}
|
||||
|
||||
static Node ProcessList(string[] input)
|
||||
{
|
||||
List<string> removalList = new List<string>();
|
||||
Dictionary<string, Node> nodeList = new Dictionary<string, Node>();
|
||||
Regex regex = new Regex(@"([a-z]+) \((\d+)\)(?: -> )?(?:([a-z]+)*(?:, )?)*");
|
||||
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
Match match = regex.Match(input[i]);
|
||||
if (match.Success)
|
||||
{
|
||||
// create a new node
|
||||
Node node = new Node(match.Groups[1].Value, int.Parse(match.Groups[2].Value));
|
||||
// add any sub items
|
||||
if (match.Groups[3].Captures.Count > 0)
|
||||
{
|
||||
foreach (Capture capture in match.Groups[3].Captures)
|
||||
{
|
||||
node.ChildNames.Add(capture.Value);
|
||||
}
|
||||
}
|
||||
nodeList.Add(match.Groups[1].Value, node);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<string, Node> kvpNode in nodeList)
|
||||
{
|
||||
if (kvpNode.Value.ChildNames.Count > 0)
|
||||
{
|
||||
foreach (string s in kvpNode.Value.ChildNames)
|
||||
{
|
||||
if (nodeList.ContainsKey(s))
|
||||
{
|
||||
kvpNode.Value.ChildNodes.Add(nodeList[s]);
|
||||
removalList.Add(s); // a list of nodes to remove from dictionary
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove everything from root colllection that was a child node of something else.
|
||||
// This should leave just 1 node remaining which is the root node.
|
||||
foreach (string key in removalList)
|
||||
nodeList.Remove(key);
|
||||
|
||||
return nodeList.First().Value; // hopefully this is the fully populated root node...
|
||||
}
|
||||
|
||||
static int GetWeight(Node parentNode)
|
||||
{
|
||||
if (parentNode.ChildNodes.Count == 0)
|
||||
return parentNode.Weight;
|
||||
|
||||
int weight = parentNode.Weight;
|
||||
foreach (Node t in parentNode.ChildNodes)
|
||||
weight += GetWeight(t);
|
||||
|
||||
return weight;
|
||||
}
|
||||
/// <summary>
|
||||
/// Finds the weight difference of the inbalance
|
||||
/// </summary>
|
||||
/// <param name="rootNode">The root node of the entire stack</param>
|
||||
/// <returns>The weight difference of the offending program.</returns>
|
||||
static int FindWeightDifference(Node rootNode)
|
||||
{
|
||||
int[] weights = new int[rootNode.ChildNodes.Count];
|
||||
for (int i = 0; i < rootNode.ChildNodes.Count; i++)
|
||||
weights[i] = GetWeight(rootNode.ChildNodes[i]);
|
||||
List<int> result = weights.GroupBy(i => i).OrderBy(g => g.Count()).Select(g => g.Key).ToList();
|
||||
return result.Last() - result.First();
|
||||
}
|
||||
|
||||
static Node FindBadProgram(Node parentNode)
|
||||
{
|
||||
// only find nodes that have at least 3 children to compare
|
||||
if(parentNode.ChildNodes.Count >= 3) {
|
||||
int[] weights = new int[parentNode.ChildNodes.Count];
|
||||
// calulate the weights
|
||||
for (int i = 0; i < parentNode.ChildNodes.Count; i++)
|
||||
weights[i] = GetWeight(parentNode.ChildNodes[i]);
|
||||
// find the least common weight
|
||||
int result = weights.GroupBy(i => i).OrderBy(g => g.Count()).Select(g => g.Key).ToList().First();
|
||||
Node nextNode = parentNode.ChildNodes[Array.IndexOf(weights, result)];
|
||||
if (nextNode.ChildNodes.Count > 0)
|
||||
{
|
||||
// dig into the node with the uncommon weight
|
||||
return FindBadProgram(parentNode.ChildNodes[Array.IndexOf(weights, result)]);
|
||||
}
|
||||
}
|
||||
return parentNode;
|
||||
}
|
||||
|
||||
class Node
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public int Weight { get; set; }
|
||||
public List<Node> ChildNodes { get; set; }
|
||||
public List<string> ChildNames { get; set; }
|
||||
|
||||
public Node(string name, int weight)
|
||||
{
|
||||
Name = name;
|
||||
Weight = weight;
|
||||
ChildNodes = new List<Node>();
|
||||
ChildNames = new List<string>();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
|||
pbga (66)
|
||||
xhth (57)
|
||||
ebii (61)
|
||||
havc (66)
|
||||
ktlj (57)
|
||||
fwft (72) -> ktlj, cntj, xhth
|
||||
qoyq (66)
|
||||
padx (45) -> pbga, havc, qoyq
|
||||
tknk (41) -> ugml, padx, fwft
|
||||
jptl (61)
|
||||
ugml (68) -> gyxo, ebii, jptl
|
||||
gyxo (61)
|
||||
cntj (57)
|
|
@ -0,0 +1,103 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay8 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 8: I Heard You Like Registers";
|
||||
|
||||
private const int ARG_REG = 0;
|
||||
private const int ARG_OP = 1;
|
||||
private const int ARG_VALUE = 2;
|
||||
private const int ARG_KEYWORD = 3;
|
||||
private const int ARG_COND_REG = 4;
|
||||
private const int ARG_COND = 5;
|
||||
private const int ARG_COND_VAL = 6;
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string[] example = new string[]
|
||||
{
|
||||
"b inc 5 if a > 1",
|
||||
"a inc 1 if b < 5",
|
||||
"c dec -10 if a >= 1",
|
||||
"c inc -20 if c == 10"
|
||||
};
|
||||
|
||||
Tuple<int, int> exampleResult = RunCpu(example);
|
||||
Console.WriteLine($"Part 1 Example Answer: {exampleResult.Item1}");
|
||||
Console.WriteLine($"Part 2 Example Answer: {exampleResult.Item2}");
|
||||
|
||||
string[] input = File.ReadAllLines("BScottDay8.txt");
|
||||
|
||||
Tuple<int, int> result = RunCpu(input);
|
||||
Console.WriteLine($"Part 1 Answer: {result.Item1}");
|
||||
Console.WriteLine($"Part 2 Answer: {result.Item2}");
|
||||
}
|
||||
|
||||
static Tuple<int,int> RunCpu(string[] input)
|
||||
{
|
||||
int highestValue = 0;
|
||||
Dictionary<string, int> r = new Dictionary<string, int>();
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
string[] args = input[i].Split(' ');
|
||||
|
||||
// create any missing registers
|
||||
if(!r.ContainsKey(args[ARG_REG]))
|
||||
r.Add(args[ARG_REG], 0);
|
||||
if (!r.ContainsKey(args[ARG_COND_REG]))
|
||||
r.Add(args[ARG_COND_REG], 0);
|
||||
|
||||
// evaluate the condition
|
||||
int x = r[args[ARG_COND_REG]];
|
||||
int y = int.Parse(args[ARG_COND_VAL]);
|
||||
bool cond = false;
|
||||
switch (args[ARG_COND])
|
||||
{
|
||||
case ">":
|
||||
cond = x > y;
|
||||
break;
|
||||
case ">=":
|
||||
cond = x >= y;
|
||||
break;
|
||||
case "==":
|
||||
cond = x == y;
|
||||
break;
|
||||
case "<=":
|
||||
cond = x <= y;
|
||||
break;
|
||||
case "<":
|
||||
cond = x < y;
|
||||
break;
|
||||
case "!=":
|
||||
cond = x != y;
|
||||
break;
|
||||
}
|
||||
|
||||
// execute the operation if the condition is met
|
||||
if (cond)
|
||||
{
|
||||
switch (args[ARG_OP])
|
||||
{
|
||||
case "inc":
|
||||
r[args[ARG_REG]] += int.Parse(args[ARG_VALUE]);
|
||||
break;
|
||||
case "dec":
|
||||
r[args[ARG_REG]] -= int.Parse(args[ARG_VALUE]);
|
||||
break;
|
||||
}
|
||||
|
||||
// keep track of the highest register
|
||||
if (r[args[ARG_REG]] > highestValue)
|
||||
highestValue = r[args[ARG_REG]];
|
||||
}
|
||||
}
|
||||
|
||||
return Tuple.Create(r.OrderByDescending(x => x.Value).First().Value, highestValue);
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,65 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottDay9 : BScottSolution
|
||||
{
|
||||
public override string Name => "Day 9: Stream Processing";
|
||||
|
||||
public override void Run()
|
||||
{
|
||||
string input = File.ReadAllText("BScottDay9.txt");
|
||||
|
||||
Tuple<int, int> processStreamResult = ProcessStream(input);
|
||||
Console.WriteLine($"Part 1 Answer: {processStreamResult.Item1}");
|
||||
Console.WriteLine($"Part 2 Answer: {processStreamResult.Item2}");
|
||||
}
|
||||
|
||||
static Tuple<int, int> ProcessStream(string input)
|
||||
{
|
||||
int total = 0, nestingLevel = 0;
|
||||
Tuple<int, string> filterGarbageResult = FilterGarbage(input);
|
||||
int filteredCount = filterGarbageResult.Item1;
|
||||
string filteredInput = filterGarbageResult.Item2;
|
||||
|
||||
for (int i = 0; i < filteredInput.Length; i++)
|
||||
{
|
||||
if (filteredInput[i] == '{')
|
||||
nestingLevel++;
|
||||
else if (filteredInput[i] == '}')
|
||||
total += nestingLevel--;
|
||||
}
|
||||
|
||||
return Tuple.Create(total, filteredCount);
|
||||
}
|
||||
|
||||
static Tuple<int, string> FilterGarbage(string input)
|
||||
{
|
||||
bool inGarbage = false;
|
||||
StringBuilder filteredInput = new StringBuilder(input.Length);
|
||||
int filteredCount = 0;
|
||||
|
||||
// filter out garbage
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
if (!inGarbage && input[i] == '<')
|
||||
inGarbage = true;
|
||||
else if (input[i] == '>')
|
||||
inGarbage = false;
|
||||
else if (input[i] == '!')
|
||||
i++;
|
||||
else
|
||||
{
|
||||
if (!inGarbage)
|
||||
filteredInput.Append(input[i]);
|
||||
else
|
||||
filteredCount++;
|
||||
}
|
||||
}
|
||||
|
||||
return Tuple.Create(filteredCount, filteredInput.ToString());
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
class BScottProgram
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
// Find all classes inheriting from BScottSolution, create an instance, and execute Run method.
|
||||
foreach (Type t in Assembly.GetAssembly(typeof(BScottSolution)).GetTypes())
|
||||
{
|
||||
if (t.IsSubclassOf(typeof(BScottSolution)))
|
||||
{
|
||||
BScottSolution solution = Activator.CreateInstance(t) as BScottSolution;
|
||||
|
||||
Console.WriteLine("-----------------------------------------------------------");
|
||||
Console.WriteLine(solution.Name);
|
||||
Console.WriteLine("-----------------------------------------------------------");
|
||||
|
||||
solution.Run();
|
||||
|
||||
Console.WriteLine();
|
||||
}
|
||||
}
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AOC2017
|
||||
{
|
||||
abstract class BScottSolution
|
||||
{
|
||||
public abstract string Name { get; }
|
||||
|
||||
public abstract void Run();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
import math
|
||||
|
||||
|
||||
class Coprocessor:
|
||||
def __init__(self, instructions):
|
||||
self.instructions = instructions
|
||||
self.pc = 0
|
||||
self.finished = False
|
||||
self.registers = dict.fromkeys(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], 0)
|
||||
|
||||
def value(self, input_reg):
|
||||
if input_reg.isalpha():
|
||||
return self.registers[input_reg]
|
||||
else:
|
||||
return int(input_reg)
|
||||
|
||||
def is_prime(self, x):
|
||||
prime = False
|
||||
if x > 1:
|
||||
prime = True
|
||||
k = 2
|
||||
n = math.sqrt(x)
|
||||
while k <= n and prime == True:
|
||||
if x % k == 0:
|
||||
prime = False
|
||||
k += 1
|
||||
return prime
|
||||
|
||||
def part1(self):
|
||||
mul_count = 0
|
||||
while not self.finished:
|
||||
args = self.instructions[self.pc].split(' ')
|
||||
if args[0] == 'set':
|
||||
self.registers[args[1]] = self.value(args[2])
|
||||
elif args[0] == 'sub':
|
||||
self.registers[args[1]] -= self.value(args[2])
|
||||
elif args[0] == 'mul':
|
||||
self.registers[args[1]] *= self.value(args[2])
|
||||
mul_count += 1
|
||||
elif args[0] == 'jnz':
|
||||
if self.value(args[1]) != 0:
|
||||
self.pc += self.value(args[2]) - 1
|
||||
|
||||
self.pc += 1
|
||||
if self.pc >= len(self.instructions) or self.pc < 0:
|
||||
self.finished = True
|
||||
|
||||
return mul_count
|
||||
|
||||
def part2(self):
|
||||
primecount = 0
|
||||
start = int(self.instructions[0].split(' ')[2]) * 100 + 100000
|
||||
for i in range(start, start + 17000 + 1, 17):
|
||||
if not self.is_prime(i):
|
||||
primecount += 1
|
||||
|
||||
return primecount
|
||||
|
||||
|
||||
with open("BScottDay23.txt") as f:
|
||||
instructions = f.read().splitlines()
|
||||
|
||||
solution = Coprocessor(instructions)
|
||||
print('Part 1 Answer: ' + str(solution.part1()))
|
||||
print('Part 2 Answer: ' + str(solution.part2()))
|
|
@ -0,0 +1,32 @@
|
|||
set b 67
|
||||
set c b
|
||||
jnz a 2
|
||||
jnz 1 5
|
||||
mul b 100
|
||||
sub b -100000
|
||||
set c b
|
||||
sub c -17000
|
||||
set f 1
|
||||
set d 2
|
||||
set e 2
|
||||
set g d
|
||||
mul g e
|
||||
sub g b
|
||||
jnz g 2
|
||||
set f 0
|
||||
sub e -1
|
||||
set g e
|
||||
sub g b
|
||||
jnz g -8
|
||||
sub d -1
|
||||
set g d
|
||||
sub g b
|
||||
jnz g -13
|
||||
jnz f 2
|
||||
sub h -1
|
||||
set g b
|
||||
sub g c
|
||||
jnz g 2
|
||||
jnz 1 3
|
||||
sub b -17
|
||||
jnz 1 -23
|
Loading…
Reference in New Issue