Add 2015
This commit is contained in:
parent
c7deb3c71d
commit
ddf5ec2274
56 changed files with 6756 additions and 1 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,2 @@
|
|||
*.xcodeproj/**/xcuserdata/
|
||||
xcuserdata/
|
||||
.DS_Store
|
||||
|
|
663
2015/2015.xcodeproj/project.pbxproj
Normal file
663
2015/2015.xcodeproj/project.pbxproj
Normal file
|
@ -0,0 +1,663 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 55;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
260EAFB027004F2300842D82 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260EAFAF27004F2300842D82 /* main.swift */; };
|
||||
260EAFBB2700573200842D82 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 260EAFBA2700573200842D82 /* main.swift */; };
|
||||
26780D6326F7733C00C44D54 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26780D6226F7733C00C44D54 /* main.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
260EAFAB27004F2300842D82 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
260EAFB62700573200842D82 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
26780D5D26F7733C00C44D54 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
260EAFAD27004F2300842D82 /* Day14 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day14; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
260EAFAF27004F2300842D82 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||
260EAFB82700573200842D82 /* Day16 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day16; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
260EAFBA2700573200842D82 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||
26780D5F26F7733C00C44D54 /* Day13 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day13; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
26780D6226F7733C00C44D54 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
260EAFAA27004F2300842D82 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
260EAFB52700573200842D82 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
26780D5C26F7733C00C44D54 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
260EAFAE27004F2300842D82 /* Day14 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
260EAFAF27004F2300842D82 /* main.swift */,
|
||||
);
|
||||
path = Day14;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
260EAFB92700573200842D82 /* Day16 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
260EAFBA2700573200842D82 /* main.swift */,
|
||||
);
|
||||
path = Day16;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
26780D5226F7712800C44D54 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
26780D6126F7733C00C44D54 /* Day13 */,
|
||||
260EAFAE27004F2300842D82 /* Day14 */,
|
||||
260EAFB92700573200842D82 /* Day16 */,
|
||||
26780D6026F7733C00C44D54 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
26780D6026F7733C00C44D54 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
26780D5F26F7733C00C44D54 /* Day13 */,
|
||||
260EAFAD27004F2300842D82 /* Day14 */,
|
||||
260EAFB82700573200842D82 /* Day16 */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
26780D6126F7733C00C44D54 /* Day13 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
26780D6226F7733C00C44D54 /* main.swift */,
|
||||
);
|
||||
path = Day13;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
260EAFAC27004F2300842D82 /* Day14 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 260EAFB327004F2300842D82 /* Build configuration list for PBXNativeTarget "Day14" */;
|
||||
buildPhases = (
|
||||
260EAFA927004F2300842D82 /* Sources */,
|
||||
260EAFAA27004F2300842D82 /* Frameworks */,
|
||||
260EAFAB27004F2300842D82 /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Day14;
|
||||
productName = Day14;
|
||||
productReference = 260EAFAD27004F2300842D82 /* Day14 */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
260EAFB72700573200842D82 /* Day16 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 260EAFBC2700573200842D82 /* Build configuration list for PBXNativeTarget "Day16" */;
|
||||
buildPhases = (
|
||||
260EAFB42700573200842D82 /* Sources */,
|
||||
260EAFB52700573200842D82 /* Frameworks */,
|
||||
260EAFB62700573200842D82 /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Day16;
|
||||
productName = Day16;
|
||||
productReference = 260EAFB82700573200842D82 /* Day16 */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
26780D5E26F7733C00C44D54 /* Day13 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 26780D6426F7733C00C44D54 /* Build configuration list for PBXNativeTarget "Day13" */;
|
||||
buildPhases = (
|
||||
26780D5B26F7733C00C44D54 /* Sources */,
|
||||
26780D5C26F7733C00C44D54 /* Frameworks */,
|
||||
26780D5D26F7733C00C44D54 /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Day13;
|
||||
productName = Day13;
|
||||
productReference = 26780D5F26F7733C00C44D54 /* Day13 */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
26780D5326F7712800C44D54 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = 1;
|
||||
LastSwiftUpdateCheck = 1300;
|
||||
LastUpgradeCheck = 1300;
|
||||
TargetAttributes = {
|
||||
260EAFAC27004F2300842D82 = {
|
||||
CreatedOnToolsVersion = 13.0;
|
||||
};
|
||||
260EAFB72700573200842D82 = {
|
||||
CreatedOnToolsVersion = 13.0;
|
||||
};
|
||||
26780D5E26F7733C00C44D54 = {
|
||||
CreatedOnToolsVersion = 13.0;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 26780D5626F7712800C44D54 /* Build configuration list for PBXProject "2015" */;
|
||||
compatibilityVersion = "Xcode 13.0";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 26780D5226F7712800C44D54;
|
||||
productRefGroup = 26780D6026F7733C00C44D54 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
26780D5E26F7733C00C44D54 /* Day13 */,
|
||||
260EAFAC27004F2300842D82 /* Day14 */,
|
||||
260EAFB72700573200842D82 /* Day16 */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
260EAFA927004F2300842D82 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
260EAFB027004F2300842D82 /* main.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
260EAFB42700573200842D82 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
260EAFBB2700573200842D82 /* main.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
26780D5B26F7733C00C44D54 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
26780D6326F7733C00C44D54 /* main.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
260EAFB127004F2300842D82 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.3;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
260EAFB227004F2300842D82 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.3;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
260EAFBD2700573200842D82 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.3;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
260EAFBE2700573200842D82 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.3;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
26780D5726F7712800C44D54 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
26780D5826F7712800C44D54 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
26780D6526F7733C00C44D54 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.3;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
26780D6626F7733C00C44D54 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.3;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
260EAFB327004F2300842D82 /* Build configuration list for PBXNativeTarget "Day14" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
260EAFB127004F2300842D82 /* Debug */,
|
||||
260EAFB227004F2300842D82 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
260EAFBC2700573200842D82 /* Build configuration list for PBXNativeTarget "Day16" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
260EAFBD2700573200842D82 /* Debug */,
|
||||
260EAFBE2700573200842D82 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
26780D5626F7712800C44D54 /* Build configuration list for PBXProject "2015" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
26780D5726F7712800C44D54 /* Debug */,
|
||||
26780D5826F7712800C44D54 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
26780D6426F7733C00C44D54 /* Build configuration list for PBXNativeTarget "Day13" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
26780D6526F7733C00C44D54 /* Debug */,
|
||||
26780D6626F7733C00C44D54 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 26780D5326F7712800C44D54 /* Project object */;
|
||||
}
|
7
2015/2015.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/2015.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
BIN
2015/Day1.playground/Contents.o
Normal file
BIN
2015/Day1.playground/Contents.o
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
4
2015/Day1.playground/contents.xcplayground
Normal file
4
2015/Day1.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day1.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day1.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
23
2015/Day10.playground/Contents.swift
Normal file
23
2015/Day10.playground/Contents.swift
Normal file
|
@ -0,0 +1,23 @@
|
|||
func step(_ input: String) -> String {
|
||||
var position = input.startIndex
|
||||
var output = ""
|
||||
while position < input.endIndex {
|
||||
let next = input[position...].firstIndex(where: { $0 != input[position] }) ?? input.endIndex
|
||||
|
||||
let distance = input.distance(from: position, to: next)
|
||||
|
||||
output += "\(distance)\(input[position])"
|
||||
|
||||
position = next
|
||||
}
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
var current = "1321131112"
|
||||
for _ in 0..<50 {
|
||||
current = step(current)
|
||||
}
|
||||
current
|
||||
current.count
|
||||
|
4
2015/Day10.playground/contents.xcplayground
Normal file
4
2015/Day10.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day10.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day10.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
80
2015/Day11.playground/Contents.swift
Normal file
80
2015/Day11.playground/Contents.swift
Normal file
|
@ -0,0 +1,80 @@
|
|||
extension String {
|
||||
func increment() -> String {
|
||||
var ascii = map { $0.asciiValue! }
|
||||
|
||||
var carry: UInt8 = 0
|
||||
for index in ascii.indices.reversed() {
|
||||
let next = ascii[index] + 1
|
||||
if next > UInt8(ascii: "z") {
|
||||
carry = 1
|
||||
ascii[index] = UInt8(ascii: "a")
|
||||
} else {
|
||||
ascii[index] = next
|
||||
carry = 0
|
||||
}
|
||||
|
||||
if carry == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if carry != 0 {
|
||||
ascii.insert(UInt8(ascii: "a") + carry - 1, at: 0)
|
||||
}
|
||||
|
||||
return String(ascii.map { Character(UnicodeScalar($0)) })
|
||||
}
|
||||
|
||||
var isValid: Bool {
|
||||
containsStraight &&
|
||||
!containsForbidden &&
|
||||
containsTwoPair
|
||||
}
|
||||
|
||||
var containsForbidden: Bool {
|
||||
contains { $0 == "i" || $0 == "o" || $0 == "l" }
|
||||
}
|
||||
|
||||
var containsStraight: Bool {
|
||||
for i in indices.dropLast(2) {
|
||||
let next = index(after: i)
|
||||
let next2 = index(after: next)
|
||||
|
||||
let value = self.unicodeScalars[i].value
|
||||
let value2 = UnicodeScalar(value + 1)
|
||||
let value3 = UnicodeScalar(value + 2)
|
||||
|
||||
if self.unicodeScalars[next] == value2 && self.unicodeScalars[next2] == value3 {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
var containsTwoPair: Bool {
|
||||
var firstPair: Character? = nil
|
||||
for i in indices.dropLast() {
|
||||
let next = index(after: i)
|
||||
|
||||
guard self[i] == self[next] else { continue }
|
||||
|
||||
if firstPair == nil {
|
||||
firstPair = self[i]
|
||||
} else if firstPair != self[i] {
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let start = "hxbxwxba"
|
||||
|
||||
var password = start
|
||||
repeat {
|
||||
password = password.increment()
|
||||
} while !password.isValid
|
||||
password
|
||||
|
4
2015/Day11.playground/contents.xcplayground
Normal file
4
2015/Day11.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day11.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day11.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
6
2015/Day11.playground/timeline.xctimeline
Normal file
6
2015/Day11.playground/timeline.xctimeline
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Timeline
|
||||
version = "3.0">
|
||||
<TimelineItems>
|
||||
</TimelineItems>
|
||||
</Timeline>
|
25
2015/Day12.playground/Contents.swift
Normal file
25
2015/Day12.playground/Contents.swift
Normal file
File diff suppressed because one or more lines are too long
4
2015/Day12.playground/contents.xcplayground
Normal file
4
2015/Day12.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day12.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day12.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
188
2015/Day13/main.swift
Normal file
188
2015/Day13/main.swift
Normal file
|
@ -0,0 +1,188 @@
|
|||
import Foundation
|
||||
|
||||
let input = """
|
||||
Alice would lose 2 happiness units by sitting next to Bob.
|
||||
Alice would lose 62 happiness units by sitting next to Carol.
|
||||
Alice would gain 65 happiness units by sitting next to David.
|
||||
Alice would gain 21 happiness units by sitting next to Eric.
|
||||
Alice would lose 81 happiness units by sitting next to Frank.
|
||||
Alice would lose 4 happiness units by sitting next to George.
|
||||
Alice would lose 80 happiness units by sitting next to Mallory.
|
||||
Bob would gain 93 happiness units by sitting next to Alice.
|
||||
Bob would gain 19 happiness units by sitting next to Carol.
|
||||
Bob would gain 5 happiness units by sitting next to David.
|
||||
Bob would gain 49 happiness units by sitting next to Eric.
|
||||
Bob would gain 68 happiness units by sitting next to Frank.
|
||||
Bob would gain 23 happiness units by sitting next to George.
|
||||
Bob would gain 29 happiness units by sitting next to Mallory.
|
||||
Carol would lose 54 happiness units by sitting next to Alice.
|
||||
Carol would lose 70 happiness units by sitting next to Bob.
|
||||
Carol would lose 37 happiness units by sitting next to David.
|
||||
Carol would lose 46 happiness units by sitting next to Eric.
|
||||
Carol would gain 33 happiness units by sitting next to Frank.
|
||||
Carol would lose 35 happiness units by sitting next to George.
|
||||
Carol would gain 10 happiness units by sitting next to Mallory.
|
||||
David would gain 43 happiness units by sitting next to Alice.
|
||||
David would lose 96 happiness units by sitting next to Bob.
|
||||
David would lose 53 happiness units by sitting next to Carol.
|
||||
David would lose 30 happiness units by sitting next to Eric.
|
||||
David would lose 12 happiness units by sitting next to Frank.
|
||||
David would gain 75 happiness units by sitting next to George.
|
||||
David would lose 20 happiness units by sitting next to Mallory.
|
||||
Eric would gain 8 happiness units by sitting next to Alice.
|
||||
Eric would lose 89 happiness units by sitting next to Bob.
|
||||
Eric would lose 69 happiness units by sitting next to Carol.
|
||||
Eric would lose 34 happiness units by sitting next to David.
|
||||
Eric would gain 95 happiness units by sitting next to Frank.
|
||||
Eric would gain 34 happiness units by sitting next to George.
|
||||
Eric would lose 99 happiness units by sitting next to Mallory.
|
||||
Frank would lose 97 happiness units by sitting next to Alice.
|
||||
Frank would gain 6 happiness units by sitting next to Bob.
|
||||
Frank would lose 9 happiness units by sitting next to Carol.
|
||||
Frank would gain 56 happiness units by sitting next to David.
|
||||
Frank would lose 17 happiness units by sitting next to Eric.
|
||||
Frank would gain 18 happiness units by sitting next to George.
|
||||
Frank would lose 56 happiness units by sitting next to Mallory.
|
||||
George would gain 45 happiness units by sitting next to Alice.
|
||||
George would gain 76 happiness units by sitting next to Bob.
|
||||
George would gain 63 happiness units by sitting next to Carol.
|
||||
George would gain 54 happiness units by sitting next to David.
|
||||
George would gain 54 happiness units by sitting next to Eric.
|
||||
George would gain 30 happiness units by sitting next to Frank.
|
||||
George would gain 7 happiness units by sitting next to Mallory.
|
||||
Mallory would gain 31 happiness units by sitting next to Alice.
|
||||
Mallory would lose 32 happiness units by sitting next to Bob.
|
||||
Mallory would gain 95 happiness units by sitting next to Carol.
|
||||
Mallory would gain 91 happiness units by sitting next to David.
|
||||
Mallory would lose 66 happiness units by sitting next to Eric.
|
||||
Mallory would lose 75 happiness units by sitting next to Frank.
|
||||
Mallory would lose 99 happiness units by sitting next to George.
|
||||
"""
|
||||
|
||||
let regex = try! NSRegularExpression(pattern: #"^([a-z]+) would (gain|lose) (\d+) happiness units by sitting next to ([a-z]+)\.$"#, options: [.anchorsMatchLines, .caseInsensitive])
|
||||
|
||||
let matches = regex.matches(in: input, options: [])
|
||||
|
||||
var scores: [Substring: [Substring: Int]] = [:]
|
||||
|
||||
for match in matches {
|
||||
let parts = match.matches(in: input)
|
||||
let personA = parts[1]
|
||||
let sign = parts[2] == "gain" ? 1 : -1
|
||||
let points = sign * Int(parts[3])!
|
||||
let personB = parts[4]
|
||||
|
||||
scores[personA, default: [:]][personB] = points
|
||||
}
|
||||
|
||||
func scoreFor(_ a: Substring, _ b: Substring) -> Int {
|
||||
if a == "me" || b == "me" {
|
||||
return 0
|
||||
}
|
||||
|
||||
return scores[a]![b]! + scores[b]![a]!
|
||||
}
|
||||
|
||||
extension Collection where Element: Equatable {
|
||||
func permutations() -> [[Element]] {
|
||||
if count == 0 {
|
||||
return []
|
||||
}
|
||||
|
||||
if count == 1 {
|
||||
return [[self[self.startIndex]]]
|
||||
}
|
||||
|
||||
var result: [[Element]] = []
|
||||
for element in self {
|
||||
let rest = self.filter { $0 != element }
|
||||
result.append(contentsOf: rest.permutations().map {
|
||||
[element] + $0
|
||||
})
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
func calculateScore(_ order: [Substring]) -> Int {
|
||||
var current = order.first!
|
||||
var score = 0
|
||||
for next in order.dropFirst() {
|
||||
score += scoreFor(current, next)
|
||||
current = next
|
||||
}
|
||||
score += scoreFor(current, order.first!)
|
||||
return score
|
||||
}
|
||||
|
||||
let maxScore = scores.keys.permutations().map {
|
||||
calculateScore($0)
|
||||
}.max()!
|
||||
|
||||
print(maxScore)
|
||||
|
||||
let maxScoreWithMe = (["me"] + Array(scores.keys)).permutations().map {
|
||||
calculateScore($0)
|
||||
}.max()!
|
||||
|
||||
print("Including me:", maxScoreWithMe)
|
||||
|
||||
extension NSRegularExpression {
|
||||
func matches(in string: String, options: NSRegularExpression.MatchingOptions = []) -> [NSTextCheckingResult] {
|
||||
let range = NSRange(string.startIndex..., in: string)
|
||||
return matches(in: input, options: options, range: range)
|
||||
}
|
||||
}
|
||||
|
||||
extension NSTextCheckingResult {
|
||||
struct Matches: BidirectionalCollection {
|
||||
typealias Element = Substring
|
||||
|
||||
struct Index: Comparable {
|
||||
let position: Int
|
||||
|
||||
static func <(lhs: Index, rhs: Index) -> Bool {
|
||||
return lhs.position < rhs.position
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func index(after i: Index) -> Index {
|
||||
Index(position: i.position + 1)
|
||||
}
|
||||
|
||||
func index(before i: Index) -> Index {
|
||||
Index(position: i.position - 1)
|
||||
}
|
||||
|
||||
|
||||
let result: NSTextCheckingResult
|
||||
let wholeString: String
|
||||
|
||||
var startIndex: Index { Index(position: 0) }
|
||||
var endIndex: Index { Index(position: result.numberOfRanges) }
|
||||
|
||||
subscript(position: Index) -> Element {
|
||||
let range = Range(result.range(at: position.position), in: wholeString)!
|
||||
return wholeString[range]
|
||||
}
|
||||
|
||||
subscript(name: String) -> Element? {
|
||||
let range = result.range(withName: name)
|
||||
guard range.lowerBound != NSNotFound, let range = Range(range, in: wholeString) else { return nil }
|
||||
return wholeString[range]
|
||||
}
|
||||
}
|
||||
|
||||
func matches(in string: String) -> Matches {
|
||||
.init(result: self, wholeString: string)
|
||||
}
|
||||
}
|
||||
|
||||
extension NSTextCheckingResult.Matches.Index: ExpressibleByIntegerLiteral {
|
||||
init(integerLiteral value: Int) {
|
||||
self.position = value
|
||||
}
|
||||
|
||||
}
|
82
2015/Day14.playground/Contents.swift
Normal file
82
2015/Day14.playground/Contents.swift
Normal file
|
@ -0,0 +1,82 @@
|
|||
import Foundation
|
||||
|
||||
let regex = try! NSRegularExpression(pattern: #"^([a-z]+) can fly (\d+) km/s for (\d+) seconds, but then must rest for (\d+) seconds.$"#, options: [.caseInsensitive, .anchorsMatchLines])
|
||||
|
||||
struct Reindeer {
|
||||
var name: String
|
||||
var flySpeed: Int
|
||||
var flyDuration: Int
|
||||
var restDuration: Int
|
||||
|
||||
var duration: Int
|
||||
var resting: Bool = false
|
||||
var distance: Int = 0
|
||||
var points: Int = 0
|
||||
|
||||
mutating func step() {
|
||||
duration -= 1
|
||||
if !resting {
|
||||
distance += flySpeed
|
||||
}
|
||||
|
||||
if duration == 0 {
|
||||
resting.toggle()
|
||||
duration = resting ? restDuration : flyDuration
|
||||
}
|
||||
}
|
||||
|
||||
static func parse(_ input: String) -> [Reindeer] {
|
||||
let matches = regex.matches(in: input, options: [], range: NSRange(input.startIndex..., in: input))
|
||||
return matches.map { Reindeer(match: $0, in: input) }
|
||||
}
|
||||
|
||||
init(match: NSTextCheckingResult, in string: String) {
|
||||
name = String(match.string(index: 1, in: string))
|
||||
flySpeed = Int(match.string(index: 2, in: string))!
|
||||
flyDuration = Int(match.string(index: 3, in: string))!
|
||||
restDuration = Int(match.string(index: 4, in: string))!
|
||||
|
||||
duration = flyDuration
|
||||
}
|
||||
}
|
||||
|
||||
extension NSTextCheckingResult {
|
||||
func string(index: Int, in string: String) -> Substring {
|
||||
let range = Range(self.range(at: index), in: string)!
|
||||
return string[range]
|
||||
}
|
||||
}
|
||||
|
||||
let input = """
|
||||
Vixen can fly 19 km/s for 7 seconds, but then must rest for 124 seconds.
|
||||
Rudolph can fly 3 km/s for 15 seconds, but then must rest for 28 seconds.
|
||||
Donner can fly 19 km/s for 9 seconds, but then must rest for 164 seconds.
|
||||
Blitzen can fly 19 km/s for 9 seconds, but then must rest for 158 seconds.
|
||||
Comet can fly 13 km/s for 7 seconds, but then must rest for 82 seconds.
|
||||
Cupid can fly 25 km/s for 6 seconds, but then must rest for 145 seconds.
|
||||
Dasher can fly 14 km/s for 3 seconds, but then must rest for 38 seconds.
|
||||
Dancer can fly 3 km/s for 16 seconds, but then must rest for 37 seconds.
|
||||
Prancer can fly 25 km/s for 6 seconds, but then must rest for 143 seconds.
|
||||
"""
|
||||
|
||||
|
||||
var group = Reindeer.parse(input)
|
||||
|
||||
for _ in 0..<2503 {
|
||||
for i in group.indices {
|
||||
group[i].step()
|
||||
}
|
||||
|
||||
let lead = group.map(\.distance).max()!
|
||||
|
||||
for i in group.indices where group[i].distance == lead {
|
||||
group[i].points += 1
|
||||
}
|
||||
}
|
||||
|
||||
group
|
||||
|
||||
group
|
||||
.sorted { $0.points > $1.points }
|
||||
.first
|
||||
|
4
2015/Day14.playground/contents.xcplayground
Normal file
4
2015/Day14.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day14.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day14.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
6
2015/Day14.playground/timeline.xctimeline
Normal file
6
2015/Day14.playground/timeline.xctimeline
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Timeline
|
||||
version = "3.0">
|
||||
<TimelineItems>
|
||||
</TimelineItems>
|
||||
</Timeline>
|
36
2015/Day14/main.swift
Normal file
36
2015/Day14/main.swift
Normal file
|
@ -0,0 +1,36 @@
|
|||
|
||||
/*
|
||||
Sugar: capacity 3, durability 0, flavor 0, texture -3, calories 2
|
||||
Sprinkles: capacity -3, durability 3, flavor 0, texture 0, calories 9
|
||||
Candy: capacity -1, durability 0, flavor 4, texture 0, calories 1
|
||||
Chocolate: capacity 0, durability 0, flavor -2, texture 2, calories 8
|
||||
*/
|
||||
|
||||
var score = 0
|
||||
var scoreFor500 = 0
|
||||
|
||||
for a in 0...100 {
|
||||
for b in 0...(100-a) {
|
||||
for c in 0...(100-a-b) {
|
||||
for d in 0...(100-a-b-c) where a + b + c + d == 100 {
|
||||
let capacity = 3 * a - 3 * b - c
|
||||
let durability = 3 * b
|
||||
let flavor = 4 * c - 2 * d
|
||||
let texture = -3 * a + 2 * d
|
||||
let calories = 2 * a + 9 * b + c + 8 * d
|
||||
|
||||
let currentScore = max(0,capacity) * max(0,durability) * max(0,flavor) * max(0,texture)
|
||||
if currentScore > score {
|
||||
score = currentScore
|
||||
}
|
||||
|
||||
|
||||
if calories == 500, currentScore > scoreFor500 {
|
||||
scoreFor500 = currentScore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print(score, scoreFor500)
|
571
2015/Day16/main.swift
Normal file
571
2015/Day16/main.swift
Normal file
|
@ -0,0 +1,571 @@
|
|||
import Foundation
|
||||
|
||||
let input = """
|
||||
Sue 1: children: 1, cars: 8, vizslas: 7
|
||||
Sue 2: akitas: 10, perfumes: 10, children: 5
|
||||
Sue 3: cars: 5, pomeranians: 4, vizslas: 1
|
||||
Sue 4: goldfish: 5, children: 8, perfumes: 3
|
||||
Sue 5: vizslas: 2, akitas: 7, perfumes: 6
|
||||
Sue 6: vizslas: 0, akitas: 1, perfumes: 2
|
||||
Sue 7: perfumes: 8, cars: 4, goldfish: 10
|
||||
Sue 8: perfumes: 7, children: 2, cats: 1
|
||||
Sue 9: pomeranians: 3, goldfish: 10, trees: 10
|
||||
Sue 10: akitas: 7, trees: 8, pomeranians: 4
|
||||
Sue 11: goldfish: 1, perfumes: 4, cars: 6
|
||||
Sue 12: samoyeds: 6, trees: 6, perfumes: 2
|
||||
Sue 13: akitas: 10, pomeranians: 0, vizslas: 2
|
||||
Sue 14: cars: 2, perfumes: 3, children: 4
|
||||
Sue 15: goldfish: 2, children: 8, cars: 5
|
||||
Sue 16: goldfish: 9, cars: 0, vizslas: 5
|
||||
Sue 17: cats: 5, trees: 6, perfumes: 6
|
||||
Sue 18: cars: 0, perfumes: 8, pomeranians: 7
|
||||
Sue 19: trees: 2, goldfish: 5, perfumes: 4
|
||||
Sue 20: akitas: 4, vizslas: 4, trees: 0
|
||||
Sue 21: pomeranians: 7, trees: 0, goldfish: 10
|
||||
Sue 22: cars: 4, vizslas: 0, perfumes: 3
|
||||
Sue 23: vizslas: 8, trees: 1, akitas: 2
|
||||
Sue 24: children: 7, trees: 0, akitas: 1
|
||||
Sue 25: goldfish: 3, akitas: 2, trees: 2
|
||||
Sue 26: pomeranians: 4, vizslas: 4, samoyeds: 2
|
||||
Sue 27: cars: 0, trees: 8, akitas: 5
|
||||
Sue 28: perfumes: 6, cats: 0, cars: 2
|
||||
Sue 29: trees: 7, akitas: 1, vizslas: 1
|
||||
Sue 30: perfumes: 9, cars: 9, trees: 10
|
||||
Sue 31: pomeranians: 5, akitas: 9, samoyeds: 1
|
||||
Sue 32: pomeranians: 10, vizslas: 5, goldfish: 5
|
||||
Sue 33: vizslas: 2, akitas: 3, trees: 7
|
||||
Sue 34: goldfish: 10, perfumes: 0, samoyeds: 7
|
||||
Sue 35: akitas: 6, cats: 7, perfumes: 10
|
||||
Sue 36: pomeranians: 8, vizslas: 7, akitas: 6
|
||||
Sue 37: goldfish: 2, cars: 10, children: 7
|
||||
Sue 38: goldfish: 2, perfumes: 3, cars: 7
|
||||
Sue 39: trees: 9, vizslas: 10, cars: 5
|
||||
Sue 40: goldfish: 1, pomeranians: 0, trees: 2
|
||||
Sue 41: trees: 2, goldfish: 6, vizslas: 3
|
||||
Sue 42: akitas: 1, cars: 3, vizslas: 3
|
||||
Sue 43: akitas: 1, pomeranians: 1, vizslas: 3
|
||||
Sue 44: goldfish: 7, akitas: 3, vizslas: 10
|
||||
Sue 45: akitas: 8, samoyeds: 8, goldfish: 2
|
||||
Sue 46: trees: 0, vizslas: 4, cars: 9
|
||||
Sue 47: cars: 9, trees: 10, perfumes: 4
|
||||
Sue 48: akitas: 0, vizslas: 5, perfumes: 4
|
||||
Sue 49: goldfish: 9, trees: 1, cars: 4
|
||||
Sue 50: goldfish: 2, perfumes: 5, cars: 2
|
||||
Sue 51: samoyeds: 1, goldfish: 2, perfumes: 7
|
||||
Sue 52: cars: 0, perfumes: 4, goldfish: 8
|
||||
Sue 53: goldfish: 9, vizslas: 2, akitas: 9
|
||||
Sue 54: trees: 1, goldfish: 9, children: 5
|
||||
Sue 55: cars: 0, akitas: 5, trees: 4
|
||||
Sue 56: trees: 4, samoyeds: 5, children: 9
|
||||
Sue 57: children: 0, vizslas: 8, cars: 3
|
||||
Sue 58: trees: 4, pomeranians: 5, akitas: 5
|
||||
Sue 59: vizslas: 10, cats: 3, children: 2
|
||||
Sue 60: cats: 6, vizslas: 2, cars: 2
|
||||
Sue 61: akitas: 1, vizslas: 0, children: 4
|
||||
Sue 62: akitas: 4, trees: 9, children: 10
|
||||
Sue 63: pomeranians: 6, vizslas: 6, cars: 4
|
||||
Sue 64: perfumes: 8, pomeranians: 1, children: 8
|
||||
Sue 65: perfumes: 3, goldfish: 6, trees: 5
|
||||
Sue 66: goldfish: 10, akitas: 8, vizslas: 4
|
||||
Sue 67: vizslas: 10, samoyeds: 3, trees: 2
|
||||
Sue 68: samoyeds: 4, cars: 7, perfumes: 3
|
||||
Sue 69: perfumes: 2, goldfish: 0, trees: 2
|
||||
Sue 70: trees: 8, vizslas: 7, akitas: 6
|
||||
Sue 71: cars: 2, children: 7, perfumes: 3
|
||||
Sue 72: cars: 1, akitas: 9, perfumes: 0
|
||||
Sue 73: vizslas: 4, akitas: 7, cars: 5
|
||||
Sue 74: samoyeds: 3, cars: 3, akitas: 2
|
||||
Sue 75: trees: 2, cars: 1, vizslas: 7
|
||||
Sue 76: samoyeds: 9, perfumes: 1, trees: 6
|
||||
Sue 77: trees: 6, perfumes: 10, cars: 7
|
||||
Sue 78: trees: 0, children: 8, vizslas: 5
|
||||
Sue 79: vizslas: 0, trees: 0, samoyeds: 1
|
||||
Sue 80: trees: 6, goldfish: 8, perfumes: 0
|
||||
Sue 81: samoyeds: 8, pomeranians: 6, akitas: 5
|
||||
Sue 82: vizslas: 6, perfumes: 9, akitas: 4
|
||||
Sue 83: cats: 0, vizslas: 3, pomeranians: 10
|
||||
Sue 84: cars: 4, perfumes: 6, samoyeds: 5
|
||||
Sue 85: vizslas: 7, trees: 5, goldfish: 7
|
||||
Sue 86: goldfish: 2, trees: 2, vizslas: 1
|
||||
Sue 87: trees: 6, goldfish: 10, pomeranians: 4
|
||||
Sue 88: vizslas: 1, akitas: 0, perfumes: 8
|
||||
Sue 89: goldfish: 8, akitas: 3, vizslas: 7
|
||||
Sue 90: vizslas: 9, akitas: 7, perfumes: 9
|
||||
Sue 91: children: 7, cars: 7, trees: 9
|
||||
Sue 92: vizslas: 10, akitas: 8, goldfish: 1
|
||||
Sue 93: goldfish: 7, vizslas: 2, pomeranians: 0
|
||||
Sue 94: cats: 2, samoyeds: 6, pomeranians: 3
|
||||
Sue 95: samoyeds: 4, children: 4, pomeranians: 10
|
||||
Sue 96: pomeranians: 9, cats: 1, goldfish: 3
|
||||
Sue 97: trees: 1, akitas: 6, goldfish: 1
|
||||
Sue 98: vizslas: 7, akitas: 2, perfumes: 7
|
||||
Sue 99: pomeranians: 6, perfumes: 2, trees: 1
|
||||
Sue 100: cars: 3, children: 9, trees: 10
|
||||
Sue 101: children: 0, perfumes: 0, vizslas: 3
|
||||
Sue 102: cars: 4, goldfish: 5, children: 2
|
||||
Sue 103: pomeranians: 3, perfumes: 7, cats: 8
|
||||
Sue 104: akitas: 0, perfumes: 5, vizslas: 5
|
||||
Sue 105: akitas: 7, vizslas: 2, samoyeds: 8
|
||||
Sue 106: goldfish: 7, perfumes: 0, cats: 8
|
||||
Sue 107: cats: 6, pomeranians: 9, cars: 6
|
||||
Sue 108: akitas: 3, vizslas: 10, cats: 5
|
||||
Sue 109: akitas: 10, perfumes: 2, cars: 7
|
||||
Sue 110: goldfish: 7, pomeranians: 1, trees: 1
|
||||
Sue 111: akitas: 10, samoyeds: 6, vizslas: 6
|
||||
Sue 112: cats: 6, akitas: 7, trees: 9
|
||||
Sue 113: akitas: 1, trees: 9, vizslas: 8
|
||||
Sue 114: vizslas: 2, cats: 1, cars: 4
|
||||
Sue 115: akitas: 0, trees: 5, goldfish: 7
|
||||
Sue 116: goldfish: 2, trees: 10, akitas: 2
|
||||
Sue 117: cars: 4, goldfish: 10, perfumes: 5
|
||||
Sue 118: cars: 5, perfumes: 6, trees: 0
|
||||
Sue 119: perfumes: 5, vizslas: 1, cats: 0
|
||||
Sue 120: perfumes: 8, akitas: 9, vizslas: 4
|
||||
Sue 121: samoyeds: 2, vizslas: 7, perfumes: 6
|
||||
Sue 122: children: 6, trees: 9, perfumes: 2
|
||||
Sue 123: cars: 7, akitas: 0, pomeranians: 0
|
||||
Sue 124: akitas: 7, cats: 8, vizslas: 5
|
||||
Sue 125: goldfish: 3, trees: 1, cars: 4
|
||||
Sue 126: cars: 4, perfumes: 3, akitas: 0
|
||||
Sue 127: children: 10, vizslas: 5, akitas: 9
|
||||
Sue 128: akitas: 3, samoyeds: 2, cats: 8
|
||||
Sue 129: cats: 8, akitas: 1, vizslas: 8
|
||||
Sue 130: trees: 4, cars: 6, perfumes: 6
|
||||
Sue 131: akitas: 7, perfumes: 6, goldfish: 9
|
||||
Sue 132: akitas: 6, vizslas: 7, trees: 1
|
||||
Sue 133: akitas: 5, vizslas: 7, children: 9
|
||||
Sue 134: cars: 8, goldfish: 4, pomeranians: 4
|
||||
Sue 135: samoyeds: 1, pomeranians: 6, akitas: 4
|
||||
Sue 136: perfumes: 10, goldfish: 1, cars: 3
|
||||
Sue 137: cars: 3, samoyeds: 6, vizslas: 7
|
||||
Sue 138: samoyeds: 10, akitas: 3, perfumes: 4
|
||||
Sue 139: perfumes: 10, vizslas: 2, goldfish: 7
|
||||
Sue 140: samoyeds: 7, cars: 1, trees: 2
|
||||
Sue 141: children: 6, cats: 5, cars: 9
|
||||
Sue 142: cats: 0, trees: 1, akitas: 10
|
||||
Sue 143: samoyeds: 4, cars: 0, children: 7
|
||||
Sue 144: trees: 0, cars: 4, perfumes: 8
|
||||
Sue 145: goldfish: 7, cars: 5, trees: 1
|
||||
Sue 146: perfumes: 7, cars: 7, goldfish: 0
|
||||
Sue 147: trees: 2, goldfish: 7, vizslas: 5
|
||||
Sue 148: samoyeds: 8, perfumes: 1, trees: 0
|
||||
Sue 149: vizslas: 2, samoyeds: 5, trees: 0
|
||||
Sue 150: akitas: 4, perfumes: 4, pomeranians: 2
|
||||
Sue 151: trees: 2, cars: 0, goldfish: 10
|
||||
Sue 152: goldfish: 7, vizslas: 0, trees: 0
|
||||
Sue 153: children: 9, cats: 0, pomeranians: 10
|
||||
Sue 154: cars: 6, goldfish: 10, akitas: 5
|
||||
Sue 155: perfumes: 9, trees: 2, akitas: 3
|
||||
Sue 156: pomeranians: 9, perfumes: 5, cars: 9
|
||||
Sue 157: akitas: 0, trees: 2, cars: 7
|
||||
Sue 158: goldfish: 10, trees: 8, akitas: 7
|
||||
Sue 159: akitas: 5, trees: 10, cars: 10
|
||||
Sue 160: akitas: 3, trees: 5, cars: 8
|
||||
Sue 161: samoyeds: 2, cars: 7, perfumes: 4
|
||||
Sue 162: cars: 6, vizslas: 10, pomeranians: 5
|
||||
Sue 163: cars: 10, perfumes: 6, vizslas: 9
|
||||
Sue 164: pomeranians: 7, cars: 4, vizslas: 2
|
||||
Sue 165: goldfish: 9, vizslas: 3, trees: 1
|
||||
Sue 166: goldfish: 1, samoyeds: 3, trees: 1
|
||||
Sue 167: vizslas: 4, goldfish: 7, cats: 5
|
||||
Sue 168: children: 1, cars: 5, samoyeds: 7
|
||||
Sue 169: trees: 1, samoyeds: 3, goldfish: 6
|
||||
Sue 170: goldfish: 2, cars: 3, perfumes: 9
|
||||
Sue 171: cars: 4, goldfish: 0, trees: 6
|
||||
Sue 172: cats: 8, perfumes: 6, trees: 1
|
||||
Sue 173: akitas: 9, goldfish: 7, cars: 10
|
||||
Sue 174: vizslas: 2, trees: 0, akitas: 1
|
||||
Sue 175: perfumes: 3, vizslas: 8, akitas: 4
|
||||
Sue 176: perfumes: 0, akitas: 6, goldfish: 3
|
||||
Sue 177: perfumes: 6, children: 1, goldfish: 10
|
||||
Sue 178: cars: 5, vizslas: 3, children: 10
|
||||
Sue 179: perfumes: 3, trees: 8, cats: 9
|
||||
Sue 180: perfumes: 8, vizslas: 4, trees: 7
|
||||
Sue 181: perfumes: 7, vizslas: 9, samoyeds: 4
|
||||
Sue 182: vizslas: 9, trees: 4, pomeranians: 4
|
||||
Sue 183: trees: 9, cars: 3, goldfish: 5
|
||||
Sue 184: perfumes: 2, cars: 4, vizslas: 3
|
||||
Sue 185: children: 10, akitas: 10, cats: 9
|
||||
Sue 186: cars: 5, samoyeds: 0, trees: 0
|
||||
Sue 187: trees: 2, goldfish: 3, cars: 4
|
||||
Sue 188: goldfish: 3, vizslas: 1, cats: 6
|
||||
Sue 189: trees: 2, pomeranians: 10, cars: 7
|
||||
Sue 190: perfumes: 10, akitas: 3, samoyeds: 0
|
||||
Sue 191: cats: 5, vizslas: 6, akitas: 6
|
||||
Sue 192: samoyeds: 5, trees: 1, perfumes: 8
|
||||
Sue 193: pomeranians: 0, akitas: 9, cats: 0
|
||||
Sue 194: trees: 1, goldfish: 0, perfumes: 10
|
||||
Sue 195: perfumes: 2, akitas: 7, cars: 5
|
||||
Sue 196: perfumes: 5, samoyeds: 8, cars: 1
|
||||
Sue 197: vizslas: 2, pomeranians: 9, trees: 1
|
||||
Sue 198: trees: 8, vizslas: 6, children: 8
|
||||
Sue 199: pomeranians: 4, cars: 7, vizslas: 5
|
||||
Sue 200: trees: 0, perfumes: 10, akitas: 10
|
||||
Sue 201: cats: 9, akitas: 4, vizslas: 0
|
||||
Sue 202: goldfish: 9, pomeranians: 9, cats: 6
|
||||
Sue 203: cars: 5, perfumes: 5, trees: 2
|
||||
Sue 204: pomeranians: 7, children: 2, akitas: 6
|
||||
Sue 205: samoyeds: 7, pomeranians: 7, children: 6
|
||||
Sue 206: trees: 1, cars: 1, pomeranians: 4
|
||||
Sue 207: goldfish: 2, perfumes: 5, trees: 0
|
||||
Sue 208: perfumes: 2, samoyeds: 4, trees: 1
|
||||
Sue 209: cars: 8, perfumes: 6, goldfish: 9
|
||||
Sue 210: perfumes: 4, cars: 8, samoyeds: 3
|
||||
Sue 211: perfumes: 2, cars: 8, trees: 9
|
||||
Sue 212: trees: 7, perfumes: 2, akitas: 5
|
||||
Sue 213: children: 3, goldfish: 5, vizslas: 0
|
||||
Sue 214: akitas: 6, goldfish: 0, children: 0
|
||||
Sue 215: trees: 8, akitas: 3, goldfish: 1
|
||||
Sue 216: goldfish: 6, perfumes: 8, akitas: 3
|
||||
Sue 217: children: 7, trees: 2, vizslas: 6
|
||||
Sue 218: goldfish: 8, samoyeds: 4, pomeranians: 6
|
||||
Sue 219: goldfish: 8, samoyeds: 0, children: 9
|
||||
Sue 220: perfumes: 1, cars: 8, vizslas: 6
|
||||
Sue 221: perfumes: 9, cars: 10, children: 10
|
||||
Sue 222: perfumes: 9, vizslas: 1, trees: 0
|
||||
Sue 223: goldfish: 1, akitas: 2, vizslas: 8
|
||||
Sue 224: samoyeds: 8, akitas: 7, vizslas: 4
|
||||
Sue 225: goldfish: 1, cars: 4, perfumes: 10
|
||||
Sue 226: goldfish: 9, trees: 4, perfumes: 5
|
||||
Sue 227: vizslas: 5, trees: 4, goldfish: 7
|
||||
Sue 228: cars: 1, cats: 10, perfumes: 4
|
||||
Sue 229: vizslas: 8, cars: 10, akitas: 4
|
||||
Sue 230: cats: 1, children: 8, vizslas: 3
|
||||
Sue 231: perfumes: 7, cats: 6, samoyeds: 7
|
||||
Sue 232: cars: 3, children: 9, perfumes: 7
|
||||
Sue 233: vizslas: 1, samoyeds: 2, children: 2
|
||||
Sue 234: trees: 1, samoyeds: 8, children: 2
|
||||
Sue 235: trees: 6, akitas: 9, goldfish: 7
|
||||
Sue 236: children: 10, trees: 0, samoyeds: 8
|
||||
Sue 237: pomeranians: 4, trees: 1, goldfish: 2
|
||||
Sue 238: vizslas: 4, akitas: 2, cars: 0
|
||||
Sue 239: goldfish: 9, cars: 10, perfumes: 4
|
||||
Sue 240: perfumes: 3, vizslas: 6, trees: 6
|
||||
Sue 241: pomeranians: 6, akitas: 4, trees: 2
|
||||
Sue 242: cars: 8, perfumes: 5, children: 7
|
||||
Sue 243: trees: 4, perfumes: 7, cars: 3
|
||||
Sue 244: perfumes: 6, akitas: 1, vizslas: 7
|
||||
Sue 245: akitas: 3, perfumes: 9, samoyeds: 0
|
||||
Sue 246: pomeranians: 3, vizslas: 9, samoyeds: 1
|
||||
Sue 247: cars: 0, goldfish: 7, cats: 2
|
||||
Sue 248: trees: 5, goldfish: 6, perfumes: 3
|
||||
Sue 249: trees: 0, pomeranians: 7, perfumes: 9
|
||||
Sue 250: cars: 9, trees: 1, goldfish: 10
|
||||
Sue 251: perfumes: 3, cars: 8, trees: 7
|
||||
Sue 252: cars: 5, akitas: 7, trees: 8
|
||||
Sue 253: perfumes: 7, akitas: 3, trees: 8
|
||||
Sue 254: goldfish: 8, samoyeds: 1, vizslas: 7
|
||||
Sue 255: perfumes: 3, cars: 4, children: 6
|
||||
Sue 256: perfumes: 9, trees: 8, children: 7
|
||||
Sue 257: trees: 8, children: 6, cars: 4
|
||||
Sue 258: vizslas: 1, trees: 10, goldfish: 9
|
||||
Sue 259: vizslas: 5, trees: 6, goldfish: 9
|
||||
Sue 260: trees: 0, goldfish: 6, cars: 7
|
||||
Sue 261: cars: 1, perfumes: 4, goldfish: 9
|
||||
Sue 262: cars: 7, goldfish: 9, cats: 9
|
||||
Sue 263: cars: 0, children: 5, goldfish: 8
|
||||
Sue 264: cars: 2, akitas: 8, trees: 0
|
||||
Sue 265: perfumes: 9, children: 8, samoyeds: 7
|
||||
Sue 266: cats: 1, children: 1, vizslas: 10
|
||||
Sue 267: vizslas: 8, children: 2, trees: 6
|
||||
Sue 268: akitas: 10, vizslas: 3, cats: 2
|
||||
Sue 269: children: 4, goldfish: 1, cats: 6
|
||||
Sue 270: vizslas: 5, cars: 9, akitas: 9
|
||||
Sue 271: vizslas: 5, children: 4, akitas: 3
|
||||
Sue 272: cars: 1, goldfish: 0, vizslas: 0
|
||||
Sue 273: goldfish: 10, samoyeds: 1, akitas: 2
|
||||
Sue 274: goldfish: 10, children: 2, pomeranians: 0
|
||||
Sue 275: children: 0, vizslas: 1, samoyeds: 6
|
||||
Sue 276: children: 1, vizslas: 3, samoyeds: 1
|
||||
Sue 277: perfumes: 4, cats: 6, children: 10
|
||||
Sue 278: pomeranians: 7, goldfish: 3, cars: 4
|
||||
Sue 279: perfumes: 5, goldfish: 9, trees: 7
|
||||
Sue 280: goldfish: 6, trees: 5, perfumes: 8
|
||||
Sue 281: cars: 2, akitas: 1, vizslas: 7
|
||||
Sue 282: vizslas: 4, akitas: 3, children: 8
|
||||
Sue 283: pomeranians: 8, akitas: 9, vizslas: 4
|
||||
Sue 284: samoyeds: 10, trees: 10, pomeranians: 2
|
||||
Sue 285: akitas: 9, perfumes: 7, goldfish: 6
|
||||
Sue 286: akitas: 2, vizslas: 7, goldfish: 10
|
||||
Sue 287: pomeranians: 8, cars: 6, samoyeds: 5
|
||||
Sue 288: pomeranians: 1, trees: 0, goldfish: 0
|
||||
Sue 289: trees: 10, samoyeds: 1, children: 0
|
||||
Sue 290: cats: 10, samoyeds: 6, trees: 0
|
||||
Sue 291: vizslas: 9, trees: 6, goldfish: 5
|
||||
Sue 292: cats: 4, perfumes: 8, cars: 3
|
||||
Sue 293: goldfish: 10, perfumes: 10, cats: 0
|
||||
Sue 294: cats: 7, trees: 6, akitas: 4
|
||||
Sue 295: vizslas: 8, cars: 1, akitas: 6
|
||||
Sue 296: vizslas: 5, akitas: 10, trees: 1
|
||||
Sue 297: pomeranians: 8, samoyeds: 5, vizslas: 4
|
||||
Sue 298: perfumes: 10, children: 5, vizslas: 2
|
||||
Sue 299: cars: 10, akitas: 7, cats: 5
|
||||
Sue 300: trees: 1, perfumes: 7, cars: 7
|
||||
Sue 301: cars: 9, vizslas: 1, perfumes: 3
|
||||
Sue 302: perfumes: 9, vizslas: 1, akitas: 5
|
||||
Sue 303: akitas: 9, trees: 1, goldfish: 10
|
||||
Sue 304: children: 10, vizslas: 6, pomeranians: 8
|
||||
Sue 305: trees: 3, goldfish: 6, cats: 9
|
||||
Sue 306: cars: 5, perfumes: 9, vizslas: 5
|
||||
Sue 307: children: 0, goldfish: 7, trees: 2
|
||||
Sue 308: trees: 9, samoyeds: 4, cars: 0
|
||||
Sue 309: cats: 8, vizslas: 2, perfumes: 3
|
||||
Sue 310: cars: 6, pomeranians: 6, vizslas: 6
|
||||
Sue 311: vizslas: 6, akitas: 7, cats: 10
|
||||
Sue 312: trees: 0, goldfish: 7, cars: 0
|
||||
Sue 313: perfumes: 5, akitas: 5, cars: 2
|
||||
Sue 314: akitas: 10, vizslas: 3, samoyeds: 8
|
||||
Sue 315: cars: 3, perfumes: 1, goldfish: 8
|
||||
Sue 316: pomeranians: 6, goldfish: 9, perfumes: 1
|
||||
Sue 317: goldfish: 4, akitas: 6, cars: 2
|
||||
Sue 318: perfumes: 8, vizslas: 8, akitas: 0
|
||||
Sue 319: akitas: 10, cars: 5, vizslas: 6
|
||||
Sue 320: vizslas: 4, akitas: 3, cats: 4
|
||||
Sue 321: goldfish: 4, akitas: 8, cars: 8
|
||||
Sue 322: pomeranians: 5, vizslas: 7, cats: 1
|
||||
Sue 323: perfumes: 1, trees: 6, goldfish: 0
|
||||
Sue 324: goldfish: 6, trees: 10, cars: 10
|
||||
Sue 325: akitas: 2, samoyeds: 6, trees: 9
|
||||
Sue 326: vizslas: 4, akitas: 7, cars: 9
|
||||
Sue 327: children: 3, perfumes: 4, cars: 1
|
||||
Sue 328: akitas: 9, perfumes: 6, cars: 10
|
||||
Sue 329: perfumes: 2, goldfish: 0, trees: 1
|
||||
Sue 330: vizslas: 10, pomeranians: 7, goldfish: 6
|
||||
Sue 331: trees: 3, vizslas: 8, cars: 3
|
||||
Sue 332: akitas: 2, cats: 1, goldfish: 8
|
||||
Sue 333: cars: 6, trees: 2, vizslas: 0
|
||||
Sue 334: samoyeds: 7, cars: 7, trees: 3
|
||||
Sue 335: cats: 7, children: 1, perfumes: 8
|
||||
Sue 336: akitas: 5, goldfish: 10, vizslas: 5
|
||||
Sue 337: cats: 3, vizslas: 0, akitas: 10
|
||||
Sue 338: perfumes: 8, cars: 1, trees: 8
|
||||
Sue 339: cars: 4, samoyeds: 8, children: 2
|
||||
Sue 340: goldfish: 9, pomeranians: 1, samoyeds: 1
|
||||
Sue 341: akitas: 3, trees: 0, goldfish: 2
|
||||
Sue 342: perfumes: 4, vizslas: 8, pomeranians: 9
|
||||
Sue 343: akitas: 4, cars: 5, goldfish: 4
|
||||
Sue 344: samoyeds: 5, cats: 4, trees: 0
|
||||
Sue 345: samoyeds: 4, cars: 8, akitas: 2
|
||||
Sue 346: akitas: 3, vizslas: 10, perfumes: 10
|
||||
Sue 347: goldfish: 10, akitas: 4, cars: 1
|
||||
Sue 348: perfumes: 10, cats: 4, vizslas: 5
|
||||
Sue 349: akitas: 2, vizslas: 4, cars: 7
|
||||
Sue 350: akitas: 5, vizslas: 5, cars: 6
|
||||
Sue 351: vizslas: 8, perfumes: 6, cars: 3
|
||||
Sue 352: cars: 10, vizslas: 0, goldfish: 10
|
||||
Sue 353: cars: 10, perfumes: 5, children: 7
|
||||
Sue 354: vizslas: 6, akitas: 3, samoyeds: 9
|
||||
Sue 355: akitas: 2, perfumes: 7, cars: 10
|
||||
Sue 356: cars: 10, perfumes: 7, children: 6
|
||||
Sue 357: akitas: 4, cars: 8, trees: 1
|
||||
Sue 358: trees: 2, cars: 1, goldfish: 2
|
||||
Sue 359: vizslas: 5, cars: 9, trees: 4
|
||||
Sue 360: perfumes: 4, akitas: 3, cars: 3
|
||||
Sue 361: children: 3, akitas: 2, cats: 5
|
||||
Sue 362: cars: 8, cats: 4, akitas: 10
|
||||
Sue 363: cats: 2, trees: 1, vizslas: 4
|
||||
Sue 364: vizslas: 2, pomeranians: 5, samoyeds: 9
|
||||
Sue 365: samoyeds: 2, akitas: 7, goldfish: 9
|
||||
Sue 366: goldfish: 8, trees: 7, cats: 2
|
||||
Sue 367: perfumes: 2, vizslas: 6, trees: 5
|
||||
Sue 368: cars: 5, samoyeds: 0, perfumes: 6
|
||||
Sue 369: samoyeds: 10, trees: 10, vizslas: 1
|
||||
Sue 370: trees: 2, vizslas: 3, cars: 4
|
||||
Sue 371: akitas: 6, pomeranians: 2, cats: 4
|
||||
Sue 372: trees: 2, perfumes: 3, goldfish: 9
|
||||
Sue 373: vizslas: 5, children: 0, pomeranians: 6
|
||||
Sue 374: trees: 1, vizslas: 8, perfumes: 10
|
||||
Sue 375: cars: 0, akitas: 6, children: 0
|
||||
Sue 376: akitas: 1, vizslas: 0, trees: 0
|
||||
Sue 377: samoyeds: 10, cats: 5, pomeranians: 0
|
||||
Sue 378: goldfish: 3, pomeranians: 7, cats: 7
|
||||
Sue 379: perfumes: 0, cats: 0, trees: 8
|
||||
Sue 380: perfumes: 4, samoyeds: 1, akitas: 7
|
||||
Sue 381: akitas: 4, pomeranians: 2, children: 4
|
||||
Sue 382: vizslas: 9, akitas: 4, trees: 10
|
||||
Sue 383: trees: 1, vizslas: 10, akitas: 6
|
||||
Sue 384: trees: 3, akitas: 8, goldfish: 3
|
||||
Sue 385: goldfish: 6, perfumes: 2, children: 9
|
||||
Sue 386: children: 10, akitas: 7, goldfish: 7
|
||||
Sue 387: goldfish: 3, vizslas: 10, perfumes: 5
|
||||
Sue 388: children: 4, trees: 0, cars: 2
|
||||
Sue 389: trees: 0, cats: 3, goldfish: 10
|
||||
Sue 390: samoyeds: 9, pomeranians: 0, cats: 6
|
||||
Sue 391: samoyeds: 10, trees: 3, akitas: 4
|
||||
Sue 392: akitas: 9, goldfish: 10, perfumes: 7
|
||||
Sue 393: goldfish: 6, cars: 2, akitas: 9
|
||||
Sue 394: trees: 4, goldfish: 9, vizslas: 7
|
||||
Sue 395: vizslas: 4, samoyeds: 1, goldfish: 6
|
||||
Sue 396: vizslas: 5, cats: 0, samoyeds: 1
|
||||
Sue 397: goldfish: 7, cats: 0, trees: 7
|
||||
Sue 398: cars: 10, akitas: 1, vizslas: 7
|
||||
Sue 399: samoyeds: 10, cats: 6, goldfish: 6
|
||||
Sue 400: cats: 6, samoyeds: 0, trees: 2
|
||||
Sue 401: trees: 1, children: 4, goldfish: 2
|
||||
Sue 402: cats: 8, vizslas: 4, children: 3
|
||||
Sue 403: cars: 9, perfumes: 8, pomeranians: 2
|
||||
Sue 404: goldfish: 8, trees: 2, cars: 5
|
||||
Sue 405: perfumes: 1, pomeranians: 5, vizslas: 5
|
||||
Sue 406: perfumes: 6, trees: 2, pomeranians: 6
|
||||
Sue 407: trees: 0, goldfish: 6, cars: 6
|
||||
Sue 408: trees: 0, samoyeds: 7, goldfish: 9
|
||||
Sue 409: samoyeds: 10, goldfish: 6, pomeranians: 0
|
||||
Sue 410: perfumes: 5, vizslas: 6, trees: 0
|
||||
Sue 411: goldfish: 2, trees: 2, pomeranians: 0
|
||||
Sue 412: pomeranians: 4, perfumes: 8, cats: 8
|
||||
Sue 413: vizslas: 4, cars: 5, akitas: 1
|
||||
Sue 414: perfumes: 2, trees: 8, goldfish: 7
|
||||
Sue 415: akitas: 3, trees: 1, perfumes: 3
|
||||
Sue 416: cars: 7, trees: 1, perfumes: 8
|
||||
Sue 417: cars: 5, goldfish: 5, trees: 1
|
||||
Sue 418: cars: 9, goldfish: 4, samoyeds: 2
|
||||
Sue 419: pomeranians: 8, akitas: 1, goldfish: 6
|
||||
Sue 420: cars: 0, cats: 0, children: 8
|
||||
Sue 421: akitas: 10, goldfish: 1, vizslas: 8
|
||||
Sue 422: children: 8, vizslas: 6, samoyeds: 10
|
||||
Sue 423: samoyeds: 3, goldfish: 10, vizslas: 8
|
||||
Sue 424: cars: 3, children: 7, goldfish: 4
|
||||
Sue 425: cars: 9, perfumes: 9, goldfish: 8
|
||||
Sue 426: akitas: 5, trees: 10, vizslas: 10
|
||||
Sue 427: vizslas: 10, cars: 3, akitas: 7
|
||||
Sue 428: cats: 6, perfumes: 5, goldfish: 10
|
||||
Sue 429: goldfish: 7, trees: 5, vizslas: 10
|
||||
Sue 430: perfumes: 3, trees: 7, cars: 3
|
||||
Sue 431: cars: 2, vizslas: 1, akitas: 6
|
||||
Sue 432: pomeranians: 8, perfumes: 5, cars: 3
|
||||
Sue 433: children: 8, cars: 0, perfumes: 7
|
||||
Sue 434: samoyeds: 0, vizslas: 9, akitas: 10
|
||||
Sue 435: akitas: 3, vizslas: 8, cats: 4
|
||||
Sue 436: goldfish: 5, trees: 8, samoyeds: 8
|
||||
Sue 437: cars: 10, samoyeds: 9, goldfish: 7
|
||||
Sue 438: samoyeds: 5, akitas: 7, perfumes: 9
|
||||
Sue 439: goldfish: 10, perfumes: 5, cars: 0
|
||||
Sue 440: pomeranians: 1, samoyeds: 9, children: 4
|
||||
Sue 441: vizslas: 4, perfumes: 2, cats: 5
|
||||
Sue 442: trees: 0, pomeranians: 3, cars: 7
|
||||
Sue 443: akitas: 0, cars: 2, vizslas: 10
|
||||
Sue 444: children: 1, akitas: 9, trees: 0
|
||||
Sue 445: cars: 5, perfumes: 7, goldfish: 9
|
||||
Sue 446: akitas: 0, perfumes: 1, vizslas: 2
|
||||
Sue 447: vizslas: 7, perfumes: 0, cars: 5
|
||||
Sue 448: vizslas: 6, goldfish: 10, trees: 0
|
||||
Sue 449: cars: 7, vizslas: 7, trees: 3
|
||||
Sue 450: pomeranians: 4, akitas: 4, vizslas: 8
|
||||
Sue 451: cats: 4, perfumes: 8, children: 3
|
||||
Sue 452: samoyeds: 8, akitas: 9, cars: 1
|
||||
Sue 453: cars: 8, akitas: 5, vizslas: 2
|
||||
Sue 454: vizslas: 9, perfumes: 4, akitas: 4
|
||||
Sue 455: akitas: 3, goldfish: 2, vizslas: 6
|
||||
Sue 456: cars: 4, perfumes: 5, goldfish: 10
|
||||
Sue 457: trees: 9, pomeranians: 4, goldfish: 10
|
||||
Sue 458: pomeranians: 1, perfumes: 9, children: 6
|
||||
Sue 459: samoyeds: 0, goldfish: 8, vizslas: 6
|
||||
Sue 460: cars: 10, goldfish: 8, samoyeds: 8
|
||||
Sue 461: akitas: 8, goldfish: 9, vizslas: 2
|
||||
Sue 462: cars: 1, vizslas: 2, akitas: 8
|
||||
Sue 463: goldfish: 2, akitas: 4, samoyeds: 10
|
||||
Sue 464: children: 5, perfumes: 5, cars: 5
|
||||
Sue 465: perfumes: 9, trees: 0, samoyeds: 6
|
||||
Sue 466: akitas: 5, goldfish: 3, cats: 6
|
||||
Sue 467: perfumes: 3, goldfish: 0, trees: 4
|
||||
Sue 468: goldfish: 2, children: 4, trees: 1
|
||||
Sue 469: cars: 0, perfumes: 8, children: 7
|
||||
Sue 470: vizslas: 8, cats: 5, samoyeds: 9
|
||||
Sue 471: pomeranians: 7, trees: 2, goldfish: 3
|
||||
Sue 472: goldfish: 8, akitas: 4, perfumes: 5
|
||||
Sue 473: perfumes: 2, pomeranians: 3, cars: 8
|
||||
Sue 474: samoyeds: 0, akitas: 7, pomeranians: 6
|
||||
Sue 475: vizslas: 7, perfumes: 1, trees: 6
|
||||
Sue 476: vizslas: 3, samoyeds: 1, perfumes: 10
|
||||
Sue 477: cars: 6, perfumes: 5, vizslas: 2
|
||||
Sue 478: pomeranians: 1, goldfish: 3, akitas: 7
|
||||
Sue 479: goldfish: 10, trees: 0, cars: 3
|
||||
Sue 480: cats: 3, akitas: 5, vizslas: 8
|
||||
Sue 481: pomeranians: 5, vizslas: 2, trees: 3
|
||||
Sue 482: cars: 8, samoyeds: 10, goldfish: 10
|
||||
Sue 483: pomeranians: 3, vizslas: 6, goldfish: 5
|
||||
Sue 484: perfumes: 7, vizslas: 4, akitas: 7
|
||||
Sue 485: goldfish: 1, trees: 0, perfumes: 10
|
||||
Sue 486: goldfish: 6, perfumes: 0, akitas: 10
|
||||
Sue 487: cats: 2, akitas: 10, trees: 1
|
||||
Sue 488: akitas: 1, goldfish: 3, cars: 7
|
||||
Sue 489: goldfish: 3, akitas: 6, vizslas: 6
|
||||
Sue 490: goldfish: 8, perfumes: 2, akitas: 2
|
||||
Sue 491: trees: 4, vizslas: 8, perfumes: 6
|
||||
Sue 492: cars: 9, perfumes: 3, cats: 0
|
||||
Sue 493: trees: 3, vizslas: 6, goldfish: 7
|
||||
Sue 494: trees: 8, samoyeds: 1, perfumes: 5
|
||||
Sue 495: children: 9, akitas: 8, vizslas: 4
|
||||
Sue 496: vizslas: 2, pomeranians: 1, perfumes: 7
|
||||
Sue 497: trees: 2, akitas: 4, vizslas: 6
|
||||
Sue 498: akitas: 8, pomeranians: 7, trees: 0
|
||||
Sue 499: perfumes: 6, goldfish: 3, vizslas: 7
|
||||
Sue 500: cars: 1, perfumes: 6, vizslas: 1
|
||||
"""
|
||||
|
||||
let scanner = Scanner(string: input)
|
||||
scanner.charactersToBeSkipped = .whitespaces
|
||||
|
||||
var sues: [[String: Int]] = []
|
||||
|
||||
while !scanner.isAtEnd {
|
||||
var current : [String: Int] = [:]
|
||||
guard scanner.scanString("Sue") != nil,
|
||||
let number = scanner.scanInt(),
|
||||
scanner.scanString(":") != nil else {
|
||||
preconditionFailure()
|
||||
}
|
||||
repeat {
|
||||
guard let name = scanner.scanUpToString(":"),
|
||||
scanner.scanString(":") != nil,
|
||||
let count = scanner.scanInt() else {
|
||||
preconditionFailure()
|
||||
}
|
||||
current[name] = count
|
||||
} while scanner.scanString(",") != nil
|
||||
guard scanner.isAtEnd || scanner.scanString("\n") != nil else {
|
||||
preconditionFailure()
|
||||
}
|
||||
sues.append(current)
|
||||
assert(sues.count == number)
|
||||
}
|
||||
|
||||
/*
|
||||
children: 3
|
||||
cats: 7
|
||||
samoyeds: 2
|
||||
pomeranians: 3
|
||||
akitas: 0
|
||||
vizslas: 0
|
||||
goldfish: 5
|
||||
trees: 3
|
||||
cars: 2
|
||||
perfumes: 1
|
||||
*/
|
||||
|
||||
extension Dictionary where Key == String, Value == Int {
|
||||
func matches(_ key: String, count: Int) -> Bool {
|
||||
//self[key] == nil || self[key] == count
|
||||
guard let available = self[key] else { return true }
|
||||
switch key {
|
||||
case "cats", "trees": return count < available
|
||||
case "pomeranians", "goldfish": return count > available
|
||||
default: return count == available
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let possible = sues.enumerated().filter {
|
||||
$0.element.matches("children", count: 3) &&
|
||||
$0.element.matches("cats", count: 7) &&
|
||||
$0.element.matches("samoyeds", count: 2) &&
|
||||
$0.element.matches("pomeranians", count: 3) &&
|
||||
$0.element.matches("akitas", count: 0) &&
|
||||
$0.element.matches("vizslas", count: 0) &&
|
||||
$0.element.matches("goldfish", count: 5) &&
|
||||
$0.element.matches("trees", count: 3) &&
|
||||
$0.element.matches("cars", count: 2) &&
|
||||
$0.element.matches("perfumes", count: 1)
|
||||
}
|
||||
|
||||
print(possible)
|
57
2015/Day17.swift
Normal file
57
2015/Day17.swift
Normal file
|
@ -0,0 +1,57 @@
|
|||
let input = [
|
||||
43,
|
||||
3,
|
||||
4,
|
||||
10,
|
||||
21,
|
||||
44,
|
||||
4,
|
||||
6,
|
||||
47,
|
||||
41,
|
||||
34,
|
||||
17,
|
||||
17,
|
||||
44,
|
||||
36,
|
||||
31,
|
||||
46,
|
||||
9,
|
||||
27,
|
||||
38,
|
||||
]
|
||||
|
||||
var minLength = Int.max
|
||||
var minCount = 0
|
||||
|
||||
func combinations(input: [Int], goal: Int, match: [Int] = []) -> Int {
|
||||
if goal == 0 {
|
||||
print("Found", match)
|
||||
|
||||
if match.count < minLength {
|
||||
minLength = match.count
|
||||
minCount = 1
|
||||
} else if match.count == minLength {
|
||||
minCount += 1
|
||||
}
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
guard !input.isEmpty else {
|
||||
return 0
|
||||
}
|
||||
|
||||
var result = 0
|
||||
for (index, value) in input.enumerated() {
|
||||
if value <= goal {
|
||||
var next = Array(input[(index + 1)...])
|
||||
result += combinations(input: next, goal: goal - value, match: match + [value])
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
print(combinations(input: input.sorted(by: >), goal: 150))
|
||||
|
||||
print(minCount)
|
153
2015/Day18.swift
Normal file
153
2015/Day18.swift
Normal file
|
@ -0,0 +1,153 @@
|
|||
let input = """
|
||||
#...##......#......##.##..#...##......##.#.#.###.#.#..#..#......####..#......###.#.#....#..##..###..\
|
||||
####..#.#...#....#.#####.##.##.#..#.......#....#.##...###.###..#.#.#........#..#.#.##...##..#.####.#\
|
||||
...#..##...#.#.###.#.###..#.##.####.###...#...........#.###..##.#.##.#.###...#.#..###....#.###.#..#.\
|
||||
.#...##...####.#..#.....#..#...#.#.##...#...##..#.#.###....#..###.....##..#.###..###.....##..###...#\
|
||||
..##.#####....##..#.#..##.##..######...#..###.######.....#..##...#.#..##..##..#..#..#..##.#.#.#.#...\
|
||||
.###.###.###...##...##..###..##.###.#.....##..##.#.#########...##..##.#..##.#..##..####..#.#.#.#####\
|
||||
#.#####..###.###.##.##.#...#.#.#.#..#.###...#..##.###.#...####.#..#.#.....###..#..####..#.#.#...##..\
|
||||
....#...##.....#....####.##.#.###..#.#.##..#.#...##.###.###..#.##..#.#.##..##..#.##.###..#.#.###.###\
|
||||
##.##...#.##...#.#..#.#..#...###...###.#..#..#.#####..###.#......#.....###.#####.#.#..#.#.#.##..#.#.\
|
||||
#.#..#.....#.....##.#..##...###..##...##...###.#.###.#..#.#.###...##..##..#.###...#.#######.#...#.#.\
|
||||
#.#.....####.#..#.##...#.##....#####.###.#.....#####....###..#........##..####...#...#.###....#..###\
|
||||
##.#.##..#.#.##.#.....##.#.....###.####.#..######.....####.#.#..##.#.##...#..#.#.....#.####.#.......\
|
||||
#..#..#.#..#.######.##..##.####.....##.#.##.#.######..#.#....#.#...#.#..#..#.#.###.#..#.#.#..#...###\
|
||||
####..####.#.#.###.....#.#.#.##..#.##.##.##.#..##..##.#.##.....#.#..#.####.....###.#..#.####.#.#..##\
|
||||
###.##..##.#.##..#..##...#.#####.##.#....##.####.#.##....#..###.#.#.##...#.....#.#.#.#.#..##.#.#..#.\
|
||||
......#..####...##.##...#.##.##...##..#..##.###..#...#..##...#.#....###.####...#.##.###.#.##.####.##\
|
||||
..#...#####.#.#..#.##....#..#...#..####.....###...##.###....#..#.###...#........#.#.##..#..#.#.....#\
|
||||
#######.#.#.###.###..######.##..#####.##.###.###....####.#..##.##...###.#..############.#.##....##.#\
|
||||
#.#...##.###.#.###..#.#.#.#.#.#..##..####.#..##.....#.##..#.##...##.#..##..#.#.#....##....##.#..#.#.\
|
||||
..#.#.####.....###..#######.#.#.#.#...##.#####.....##...##...##.###..######.###..#...####.#..###.###\
|
||||
.#.##....#.#.##..##.#.##.##..######...#.....#..#.#.#.#.....#.#..##.#.#.......#######....#.......#...\
|
||||
..###.##.##..##....#.###...#.....##..##......###...##..###.##...##.###.#.#.#.###.###.#.#...###..#...\
|
||||
.##.#.#...#...##.#.#...#..#..#.#...##.#.##...##..#....#.#..##.#..#.#..#.#.....#..#.#...#######.#.##.\
|
||||
...####....#.###.#..###..##...##..#.#.#.###...#..##.##.##..##.#...#..#.##.....#.#........#..#.#.####\
|
||||
.....##..###...#....#.#.#.#...###.###...#.#...#.#.####....#..####...###..#..######..##.##..###.#####\
|
||||
#####.##..#....###.###....##.....#.#..#....#.#####.##.#.####.#.##...#..###...###..##...#.###.#####..\
|
||||
###.##..........########.######....####.###.#..##...#.##.####.#.....##..#####..###...#####.....#.#.#\
|
||||
##..#####.##.#.#####.#.##.##..#.##....########.#####.#...#.###.##...#.###.#.#..#....##.#..#...#.#.#.\
|
||||
.##.#....#..#...#..#####..#..##.#......#..#....########...#..#...#.....####.#...##...#.###.#.#..##.#\
|
||||
.##.##.#.##.#.##...#.#.#..##.##.###.#..##..#...###.##.###.#####.#.###..#..###.#...#.###.#...#..#.#.#\
|
||||
.#..#..#.#..#..###..#....###.####.##.#.###.#.##.###.#.##.###.###...###...###.#...####...#.##.##.#.#.\
|
||||
###..##...###...#..##.#..#.#...##....###.##.##..#####....###..#..#....#..###.###.#...#.##...#.#.#..#\
|
||||
#....#.......##.....#.##...#..#.###.#.##..##..#.##..#.###..##.##...#####.#..#####..#####..#####....#\
|
||||
.####.####....###..###.#.##.####.##.#...####.#.###.#.....#...####..#####.###..#.#.###.##.##...##..#.\
|
||||
####..##...##.########...##..###..#..###.##.#.#.#........#.#####.#...#.###.####.#..####..#.#.#....##\
|
||||
###.#..#...###.#..#..#.###...##..###.##.#.#...#..#...####..##....#.#..#..##.#.#...#####.###.#..#.#.#\
|
||||
...##....#.###.#.#..##...##.###.#..#..#......#...#.#..####.#.##..######.####.#...#..#..#..##.#.#.##.\
|
||||
##.####.#...#..#.#.##..##.#.#.###..##...####......#..######.#......#.##.#....##...###.#.#..#......##\
|
||||
#.....#...#######.##.#..#.#...###.#..#.####....#.#.##.#.##...###..#...#.###.##..#.###..#.##...#####.\
|
||||
#####.##...#..#.#.#.......#.##..#####..#####...###..##.#.#..###.#.#####.####..#.#..##...#.##...#.###\
|
||||
.##.#..#######.###.#.####.....##...#.##.#.#..#...##....####......######.#..######.....##########.##.\
|
||||
##...#.#..#.##.###.#.#.#.##.###.##..##.##.##...#.#..###.#######..#.....#####..#....######.#..##..###\
|
||||
.#.#.###.....#..##..#.#..##..#.###...###.#..##...#...#.#####.#.#####..###.#..#...##..#.#..#..####...\
|
||||
.#......##..#.....####.###....##.###.....###.##........#.###.##..#..#.#######.#.######..##..###.....\
|
||||
..##.#.#..#.##...#.###.###...######..#..#.#..#....###.#.#....#..........#...##.##.##.#..##..#.#####.\
|
||||
###.###.#..#.##..##.#..#..##.....##.....#..#######.#..#.#.#.####.###..###.#.#..#.##.##.####.###.####\
|
||||
#.#.#..#....########.#..#..#...##..#.##..#.#..##..####...##.....#.##.#.#...########..#.###.#..#.#.##\
|
||||
.##.....#...#.#...##.##....###...##..#.####...#..#.#..#..#.##..#.###.##.####.##..####.....##.#.....#\
|
||||
....####.#.##.#.##.#..##.#.######.##.####..#...####.#..###.#.#..#..##.#.#.....##.#####.#.####...#.#.\
|
||||
#..#####.#####.....##....######..##....#..#.#.###.#####.....##.##.####.#...##...#.##.#.#####.##.#...\
|
||||
##.####..###.#....#...#.#.#.#.###.#####.#.####..####...####......##..#..#..#.#.##...########....#...\
|
||||
.###.#.#.#.#..####.##.#..######..#.#.###.....#.#......#.#.#.#..####.##...##.#####.#.##..##..#..#.#..\
|
||||
.....###...#...#.####.###.#.#.#.#.....#....#.####.###.##.##.##.#######......#.####......#....##.....\
|
||||
##..#..#.#.##..#...#..##.##.##..###.#....##.##....####.#.##.###....#.##.#.#.##...##.###...#..#..####\
|
||||
...#.#..##..##.#...##.##...#.#......#.#.##..###....####.##...#.#.###.#..#..#.####..##..##..#####.###\
|
||||
.##.##..##########.##...#.##.####.#.#######.##.#.##.##..#...##....########.###..##.##.##.#..##.#.#.#\
|
||||
#####.#....#.##..#.....#......##.##..#.##.###..##.......###..##.#.###.##.###....####.#..#.###..#.#.#\
|
||||
.#...#..#.##....##....#...####....#...#..#...####...########.###.#..##.#.#.##..###..#.#.###.....##.#\
|
||||
##..##.....###......#..###.##.####.##.####.#.#....#..#...#..#.#..#.###.#...#...#..##.##...#..#######\
|
||||
.....##..###..##...#####.#.#.....###.#.#..####...#.#.#..#..####..##.#..###.####.#....##..###....#..#\
|
||||
#.#.##.#....#.#####.#....##...#...##...##....#.#.......#....#..#...###.###.#.####..####....#.##.#.#.\
|
||||
..##...##..###.#.#.##.#..#....#.#.....##.###.#.###.###.....#...#.#..#######.#####..#.###...##......#\
|
||||
#......###..#....#.#..#.###.##.#...##..###.####.#.#....#.##..#.###..##.#..#####..##.###.....#..###..\
|
||||
##.#.##..##.###.#..##.....#.##.....###....##.####.######.#...#..###....#.#...#.##.....###....#..#.#.\
|
||||
.##.#.#.#.##..#.#.#..##..#.###.####....#..###.######..####.#.....###.##..#...###.#..######.##.#.##..\
|
||||
...##.####.#..##.#####.##.#...##..#..#...#.#.#.#####...#....#..###...#..#....#.#.##.#.######.#..####\
|
||||
..#.#.#.#...#.######.#.....#..#.#..###....#.#.########...#....#.#.##..#...##...#.#..#.#.###....##...\
|
||||
#####..#..##..#..##..#..#.#.##.#....#####.####.##.#.###..##..##....#.....#.#####.#...#.#####.##.#.#.\
|
||||
#.#..#####...####.###.###.....####.###.....##...##...#..#..#######.#.##....##..####.....##...#..#..#\
|
||||
#.#.###.#.#..##..#....#.#...#.#.##.##..#.##.....##...#.#..##.......##.#.###..#####.#.##....#.##.....\
|
||||
...#.......#....#.#.####.#.###.###..#....#..##.#..####........#.##..#...#.#...###.#..#.#.#...#...#..\
|
||||
...##.#####.##.#.###.##.##.#.##..##.#.#.#.#.#.##.#..##...##.#.#..#..##.##.#####.#.###...#####..#..#.\
|
||||
#######.#..#..#....##.#.#..####.#..#..###...#..#.......###.#.#.####....#.###...#.#.###.#.#.#.#..###.\
|
||||
..##.##.#.##.###....###.##.#.###.#...#....#.####..###..###.#.#..#...##.#.#.#..##.###..###.#.##...###\
|
||||
######..######..##..##.#.#.##.##.#..##..#.#.#.##..#.#...#...#.#.#..######.#..#.#.######..#......##.#\
|
||||
#.#####.....#.......#########..###.##...#...##.#.#..#...#####...#...#..#.###.#..#.#...###.#.#.#...#.\
|
||||
#....##....###...##.##.#...##.........##.#.#..#.#.##.#.######.#####..#..###.###.#...#.#.##.######...\
|
||||
#.#...###.#.###.##.#.######.#######.###.##..#.#.#...######.##.####.##..#.#.#.#......##..##.........#\
|
||||
..###..##....#.....##...#.#.###.#.#.....##.#...###.####.#...#...##..##.#.#.####..###...######....#.#\
|
||||
..###.#.##.####.#..#.##....##..#####....#..##.##.#..#######...#.####...##.#.#.##.........#....#....#\
|
||||
.##.#...#.####..#.#...#.##..######.##..##.#.###.##..###.###....##..#.##.##..##.#...###.##.##.###....\
|
||||
#...###.###.#..#....#.......#..#.....###..#.###.##.##....#.####.#.####.##..##..#..#.....#....##.#.#.\
|
||||
.##.#..#..#.##.......#.####.#######.....#.##.##.#.....#.#..#....######.#..###.##.##.....#.####..##.#\
|
||||
###..#.###.#..####.....##....#..####....#.##.##..#...######.#########...#.#....##...###.#..#.##...#.\
|
||||
#..###..##..#.#.##.###.#.#.##...###.#...##.##..#.###....###..#.#...#.###..######.#..#.###..#..#..#.#\
|
||||
.#........##.#.###..###.#.#.##.....##.##.#.#...##..#.##....###..#.#.#.#.##....#.##..#.#...###...#...\
|
||||
####.####..#....#.#.#..#..##.......##.####...###.##..#.#.##.#..##..######.......##.#.##..#...#.....#\
|
||||
..#..#..###..##.##..######.#..###..###.#.##..##.#..#####.#.#.#.##..#.##..##.##......####.#..........\
|
||||
...##.##..###.#...###....#.#.#.#.....#.##.....##...#...#......####...##.##....##.#..#.####.#..###.#.\
|
||||
..#.....####.#.###.#####..#..###..#..#.#...#####...###.###....#.###..#...#..#..#.#..#.##..##.#.#....\
|
||||
..##.#####...###.###.........#....##.####.##..#.#..#.#...#...##.##.##..#.#.##.########......#####...\
|
||||
...###.#.#..#...#.###.###.......##.###.#..#.##########...#..#.#.#.##.#.###...######..#.#...###.##...\
|
||||
.#.#.#######.#..##.##..##...#...####...#..#####.#..##...###.#.#...#.##...#......#..##.####..#.....##\
|
||||
.##.##.#.#......#######..###.....##.#.##..###......#....####...#.###.#.##.#........#..#....##.....##\
|
||||
#...#.###.#.##...##.####....#...#.###..#.#.....#.#....#.#.#.##...#.#..#####.#.#..#..#..#....#...####\
|
||||
.....##...###......#####..##.##.##...##.#.#####..##...#.#.#.#.###...###.##.####..#.#..#.#..#.####.##\
|
||||
#..#..##.#.##.#.##.#.#.#..###....###.##.#.##.#...#.#..#...#....###.#..#.#.######.#...####..#..##.#.#\
|
||||
#..#.#..#...###.#..##.#...#...##.#......#...#..#..####..##.....#.###...#.#..#.#....#.#####.##.###...\
|
||||
###....#.#..#.#..###..#.##......#...#..#..##.#..###..##..#..#.####..#...########..##.#.##.#.#.#...#.\
|
||||
.#.#.##.##.###..#...#.#....#..#.##..#.#.#.#.##.##.#####...#........####..###..####.#####..#.##.#.##.
|
||||
""".utf8
|
||||
|
||||
let on = UInt8(ascii: "#")
|
||||
let off = UInt8(ascii: ".")
|
||||
|
||||
func step(input: [UInt8]) -> [UInt8] {
|
||||
assert(input.count == 100 * 100)
|
||||
var result: [UInt8] = []
|
||||
result.reserveCapacity(input.count)
|
||||
|
||||
func isOn(_ x: Int, _ y: Int) -> Bool {
|
||||
return input[x + y * 100] == on
|
||||
}
|
||||
|
||||
for y in 0..<100 {
|
||||
for x in 0..<100 {
|
||||
var onCount = 0
|
||||
for i in -1...1 where (0..<100).contains(i+y) {
|
||||
for j in -1...1 where (0..<100).contains(x+j) && !(i == 0 && j == 0) {
|
||||
if isOn(x + j, y + i) {
|
||||
onCount += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (x, y) == (0, 0) || (x, y) == (0, 99) || (x, y) == (99, 0) || (x, y) == (99, 99) {
|
||||
result.append(on)
|
||||
} else if isOn(x, y) {
|
||||
result.append((onCount == 2 || onCount == 3) ? on : off)
|
||||
} else {
|
||||
result.append(onCount == 3 ? on : off)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
var current = Array(input)
|
||||
current[0] = on
|
||||
current[99] = on
|
||||
current[99 * 100 + 0] = on
|
||||
current[99 * 100 + 99] = on
|
||||
|
||||
for _ in 0..<100 {
|
||||
current = step(input: current)
|
||||
}
|
||||
|
||||
let count = current.lazy.filter { $0 == on }.count
|
||||
|
||||
print("\(count) lights on")
|
1049
2015/Day2.playground/Contents.swift
Normal file
1049
2015/Day2.playground/Contents.swift
Normal file
File diff suppressed because it is too large
Load diff
4
2015/Day2.playground/contents.xcplayground
Normal file
4
2015/Day2.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day2.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day2.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
37
2015/Day3.playground/Contents.swift
Normal file
37
2015/Day3.playground/Contents.swift
Normal file
File diff suppressed because one or more lines are too long
4
2015/Day3.playground/contents.xcplayground
Normal file
4
2015/Day3.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day3.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day3.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
24
2015/Day4.playground/Contents.swift
Normal file
24
2015/Day4.playground/Contents.swift
Normal file
|
@ -0,0 +1,24 @@
|
|||
import CryptoKit
|
||||
import Foundation
|
||||
|
||||
func md5(_ string: String) -> String {
|
||||
let digest = Insecure.MD5.hash(data: Data(string.utf8))
|
||||
digest.withUnsafeBytes { ptr in
|
||||
ptr[0] + ptr[1]
|
||||
}
|
||||
digest.pref
|
||||
return digest.reduce("") {
|
||||
$0 + String($1, radix: 16)
|
||||
}
|
||||
}
|
||||
|
||||
let key = "abcdef"
|
||||
|
||||
var iterator = (0...).lazy.map { ($0, md5("\(key)\($0)")) }
|
||||
.filter { $0.1.hasPrefix("00000" ) }
|
||||
.makeIterator()
|
||||
|
||||
iterator.next()
|
||||
|
||||
|
||||
|
4
2015/Day4.playground/contents.xcplayground
Normal file
4
2015/Day4.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day4.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day4.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
1122
2015/Day5.playground/Contents.swift
Normal file
1122
2015/Day5.playground/Contents.swift
Normal file
File diff suppressed because it is too large
Load diff
4
2015/Day5.playground/contents.xcplayground
Normal file
4
2015/Day5.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day5.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day5.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
422
2015/Day6.playground/Contents.swift
Normal file
422
2015/Day6.playground/Contents.swift
Normal file
|
@ -0,0 +1,422 @@
|
|||
import Foundation
|
||||
|
||||
struct Range {
|
||||
var minX, minY: Int
|
||||
var maxX, maxY: Int
|
||||
}
|
||||
|
||||
enum Command {
|
||||
case on(Range)
|
||||
case off(Range)
|
||||
case toggle(Range)
|
||||
}
|
||||
|
||||
struct Lights {
|
||||
static let size = 1000
|
||||
var grid: [Bool] = .init(repeating: false, count: Self.size * Self.size)
|
||||
|
||||
|
||||
mutating func setRange(_ range: Range, to on: Bool) {
|
||||
var start = range.minY * Self.size + range.minX
|
||||
let width = range.maxX - range.minX
|
||||
|
||||
for _ in range.minY...range.maxY {
|
||||
grid[start...start + width] = .init(repeating: on, count: width)
|
||||
start += Self.size
|
||||
}
|
||||
}
|
||||
|
||||
mutating func toggle(_ range: Range) {
|
||||
var start = range.minY * Self.size + range.minX
|
||||
let width = range.maxX - range.minX
|
||||
|
||||
for _ in range.minY...range.maxY {
|
||||
for index in start ... start+width {
|
||||
grid[index].toggle()
|
||||
}
|
||||
start += Self.size
|
||||
}
|
||||
}
|
||||
|
||||
var onCount: Int {
|
||||
grid.reduce(0) { $0 + ($1 ? 1 : 0) }
|
||||
}
|
||||
}
|
||||
|
||||
enum ParseError: Error {
|
||||
case expectedCoordinate
|
||||
case expected(String)
|
||||
case expectedVerb
|
||||
}
|
||||
|
||||
extension Scanner {
|
||||
func readCommand() throws -> Command {
|
||||
let verb = try readVerb()
|
||||
let range = try readRange()
|
||||
|
||||
switch verb {
|
||||
case .turnOn: return .on(range)
|
||||
case .turnOff: return .off(range)
|
||||
case .toggle: return .toggle(range)
|
||||
}
|
||||
}
|
||||
|
||||
enum Verb: String, CaseIterable {
|
||||
case turnOn = "turn on"
|
||||
case turnOff = "turn off"
|
||||
case toggle = "toggle"
|
||||
}
|
||||
|
||||
func readVerb() throws -> Verb {
|
||||
for verb in Verb.allCases {
|
||||
if scanString(verb.rawValue) != nil {
|
||||
return verb
|
||||
}
|
||||
}
|
||||
|
||||
throw ParseError.expectedVerb
|
||||
}
|
||||
|
||||
func readRange() throws -> Range {
|
||||
let first = try readCoordinates()
|
||||
try expect("through")
|
||||
let second = try readCoordinates()
|
||||
|
||||
return Range(minX: first.x, minY: first.y, maxX: second.x, maxY: second.y)
|
||||
}
|
||||
|
||||
func expect(_ string: String) throws {
|
||||
if scanString(string) == nil {
|
||||
throw ParseError.expected(string)
|
||||
}
|
||||
}
|
||||
|
||||
func readCoordinates() throws -> (x: Int, y: Int) {
|
||||
guard let x = scanInt(),
|
||||
scanString(",") != nil,
|
||||
let y = scanInt()
|
||||
else {
|
||||
throw ParseError.expectedCoordinate
|
||||
}
|
||||
|
||||
return (x, y)
|
||||
}
|
||||
}
|
||||
|
||||
let input = """
|
||||
turn on 887,9 through 959,629
|
||||
turn on 454,398 through 844,448
|
||||
turn off 539,243 through 559,965
|
||||
turn off 370,819 through 676,868
|
||||
turn off 145,40 through 370,997
|
||||
turn off 301,3 through 808,453
|
||||
turn on 351,678 through 951,908
|
||||
toggle 720,196 through 897,994
|
||||
toggle 831,394 through 904,860
|
||||
toggle 753,664 through 970,926
|
||||
turn off 150,300 through 213,740
|
||||
turn on 141,242 through 932,871
|
||||
toggle 294,259 through 474,326
|
||||
toggle 678,333 through 752,957
|
||||
toggle 393,804 through 510,976
|
||||
turn off 6,964 through 411,976
|
||||
turn off 33,572 through 978,590
|
||||
turn on 579,693 through 650,978
|
||||
turn on 150,20 through 652,719
|
||||
turn off 782,143 through 808,802
|
||||
turn off 240,377 through 761,468
|
||||
turn off 899,828 through 958,967
|
||||
turn on 613,565 through 952,659
|
||||
turn on 295,36 through 964,978
|
||||
toggle 846,296 through 969,528
|
||||
turn off 211,254 through 529,491
|
||||
turn off 231,594 through 406,794
|
||||
turn off 169,791 through 758,942
|
||||
turn on 955,440 through 980,477
|
||||
toggle 944,498 through 995,928
|
||||
turn on 519,391 through 605,718
|
||||
toggle 521,303 through 617,366
|
||||
turn off 524,349 through 694,791
|
||||
toggle 391,87 through 499,792
|
||||
toggle 562,527 through 668,935
|
||||
turn off 68,358 through 857,453
|
||||
toggle 815,811 through 889,828
|
||||
turn off 666,61 through 768,87
|
||||
turn on 27,501 through 921,952
|
||||
turn on 953,102 through 983,471
|
||||
turn on 277,552 through 451,723
|
||||
turn off 64,253 through 655,960
|
||||
turn on 47,485 through 734,977
|
||||
turn off 59,119 through 699,734
|
||||
toggle 407,898 through 493,955
|
||||
toggle 912,966 through 949,991
|
||||
turn on 479,990 through 895,990
|
||||
toggle 390,589 through 869,766
|
||||
toggle 593,903 through 926,943
|
||||
toggle 358,439 through 870,528
|
||||
turn off 649,410 through 652,875
|
||||
turn on 629,834 through 712,895
|
||||
toggle 254,555 through 770,901
|
||||
toggle 641,832 through 947,850
|
||||
turn on 268,448 through 743,777
|
||||
turn off 512,123 through 625,874
|
||||
turn off 498,262 through 930,811
|
||||
turn off 835,158 through 886,242
|
||||
toggle 546,310 through 607,773
|
||||
turn on 501,505 through 896,909
|
||||
turn off 666,796 through 817,924
|
||||
toggle 987,789 through 993,809
|
||||
toggle 745,8 through 860,693
|
||||
toggle 181,983 through 731,988
|
||||
turn on 826,174 through 924,883
|
||||
turn on 239,228 through 843,993
|
||||
turn on 205,613 through 891,667
|
||||
toggle 867,873 through 984,896
|
||||
turn on 628,251 through 677,681
|
||||
toggle 276,956 through 631,964
|
||||
turn on 78,358 through 974,713
|
||||
turn on 521,360 through 773,597
|
||||
turn off 963,52 through 979,502
|
||||
turn on 117,151 through 934,622
|
||||
toggle 237,91 through 528,164
|
||||
turn on 944,269 through 975,453
|
||||
toggle 979,460 through 988,964
|
||||
turn off 440,254 through 681,507
|
||||
toggle 347,100 through 896,785
|
||||
turn off 329,592 through 369,985
|
||||
turn on 931,960 through 979,985
|
||||
toggle 703,3 through 776,36
|
||||
toggle 798,120 through 908,550
|
||||
turn off 186,605 through 914,709
|
||||
turn off 921,725 through 979,956
|
||||
toggle 167,34 through 735,249
|
||||
turn on 726,781 through 987,936
|
||||
toggle 720,336 through 847,756
|
||||
turn on 171,630 through 656,769
|
||||
turn off 417,276 through 751,500
|
||||
toggle 559,485 through 584,534
|
||||
turn on 568,629 through 690,873
|
||||
toggle 248,712 through 277,988
|
||||
toggle 345,594 through 812,723
|
||||
turn off 800,108 through 834,618
|
||||
turn off 967,439 through 986,869
|
||||
turn on 842,209 through 955,529
|
||||
turn on 132,653 through 357,696
|
||||
turn on 817,38 through 973,662
|
||||
turn off 569,816 through 721,861
|
||||
turn on 568,429 through 945,724
|
||||
turn on 77,458 through 844,685
|
||||
turn off 138,78 through 498,851
|
||||
turn on 136,21 through 252,986
|
||||
turn off 2,460 through 863,472
|
||||
turn on 172,81 through 839,332
|
||||
turn on 123,216 through 703,384
|
||||
turn off 879,644 through 944,887
|
||||
toggle 227,491 through 504,793
|
||||
toggle 580,418 through 741,479
|
||||
toggle 65,276 through 414,299
|
||||
toggle 482,486 through 838,931
|
||||
turn off 557,768 through 950,927
|
||||
turn off 615,617 through 955,864
|
||||
turn on 859,886 through 923,919
|
||||
turn on 391,330 through 499,971
|
||||
toggle 521,835 through 613,847
|
||||
turn on 822,787 through 989,847
|
||||
turn on 192,142 through 357,846
|
||||
turn off 564,945 through 985,945
|
||||
turn off 479,361 through 703,799
|
||||
toggle 56,481 through 489,978
|
||||
turn off 632,991 through 774,998
|
||||
toggle 723,526 through 945,792
|
||||
turn on 344,149 through 441,640
|
||||
toggle 568,927 through 624,952
|
||||
turn on 621,784 through 970,788
|
||||
toggle 665,783 through 795,981
|
||||
toggle 386,610 through 817,730
|
||||
toggle 440,399 through 734,417
|
||||
toggle 939,201 through 978,803
|
||||
turn off 395,883 through 554,929
|
||||
turn on 340,309 through 637,561
|
||||
turn off 875,147 through 946,481
|
||||
turn off 945,837 through 957,922
|
||||
turn off 429,982 through 691,991
|
||||
toggle 227,137 through 439,822
|
||||
toggle 4,848 through 7,932
|
||||
turn off 545,146 through 756,943
|
||||
turn on 763,863 through 937,994
|
||||
turn on 232,94 through 404,502
|
||||
turn off 742,254 through 930,512
|
||||
turn on 91,931 through 101,942
|
||||
toggle 585,106 through 651,425
|
||||
turn on 506,700 through 567,960
|
||||
turn off 548,44 through 718,352
|
||||
turn off 194,827 through 673,859
|
||||
turn off 6,645 through 509,764
|
||||
turn off 13,230 through 821,361
|
||||
turn on 734,629 through 919,631
|
||||
toggle 788,552 through 957,972
|
||||
toggle 244,747 through 849,773
|
||||
turn off 162,553 through 276,887
|
||||
turn off 569,577 through 587,604
|
||||
turn off 799,482 through 854,956
|
||||
turn on 744,535 through 909,802
|
||||
toggle 330,641 through 396,986
|
||||
turn off 927,458 through 966,564
|
||||
toggle 984,486 through 986,913
|
||||
toggle 519,682 through 632,708
|
||||
turn on 984,977 through 989,986
|
||||
toggle 766,423 through 934,495
|
||||
turn on 17,509 through 947,718
|
||||
turn on 413,783 through 631,903
|
||||
turn on 482,370 through 493,688
|
||||
turn on 433,859 through 628,938
|
||||
turn off 769,549 through 945,810
|
||||
turn on 178,853 through 539,941
|
||||
turn off 203,251 through 692,433
|
||||
turn off 525,638 through 955,794
|
||||
turn on 169,70 through 764,939
|
||||
toggle 59,352 through 896,404
|
||||
toggle 143,245 through 707,320
|
||||
turn off 103,35 through 160,949
|
||||
toggle 496,24 through 669,507
|
||||
turn off 581,847 through 847,903
|
||||
turn on 689,153 through 733,562
|
||||
turn on 821,487 through 839,699
|
||||
turn on 837,627 through 978,723
|
||||
toggle 96,748 through 973,753
|
||||
toggle 99,818 through 609,995
|
||||
turn on 731,193 through 756,509
|
||||
turn off 622,55 through 813,365
|
||||
turn on 456,490 through 576,548
|
||||
turn on 48,421 through 163,674
|
||||
turn off 853,861 through 924,964
|
||||
turn off 59,963 through 556,987
|
||||
turn on 458,710 through 688,847
|
||||
toggle 12,484 through 878,562
|
||||
turn off 241,964 through 799,983
|
||||
turn off 434,299 through 845,772
|
||||
toggle 896,725 through 956,847
|
||||
turn on 740,289 through 784,345
|
||||
turn off 395,840 through 822,845
|
||||
turn on 955,224 through 996,953
|
||||
turn off 710,186 through 957,722
|
||||
turn off 485,949 through 869,985
|
||||
turn on 848,209 through 975,376
|
||||
toggle 221,241 through 906,384
|
||||
turn on 588,49 through 927,496
|
||||
turn on 273,332 through 735,725
|
||||
turn on 505,962 through 895,962
|
||||
toggle 820,112 through 923,143
|
||||
turn on 919,792 through 978,982
|
||||
toggle 489,461 through 910,737
|
||||
turn off 202,642 through 638,940
|
||||
turn off 708,953 through 970,960
|
||||
toggle 437,291 through 546,381
|
||||
turn on 409,358 through 837,479
|
||||
turn off 756,279 through 870,943
|
||||
turn off 154,657 through 375,703
|
||||
turn off 524,622 through 995,779
|
||||
toggle 514,221 through 651,850
|
||||
toggle 808,464 through 886,646
|
||||
toggle 483,537 through 739,840
|
||||
toggle 654,769 through 831,825
|
||||
turn off 326,37 through 631,69
|
||||
turn off 590,570 through 926,656
|
||||
turn off 881,913 through 911,998
|
||||
turn on 996,102 through 998,616
|
||||
turn off 677,503 through 828,563
|
||||
turn on 860,251 through 877,441
|
||||
turn off 964,100 through 982,377
|
||||
toggle 888,403 through 961,597
|
||||
turn off 632,240 through 938,968
|
||||
toggle 731,176 through 932,413
|
||||
turn on 5,498 through 203,835
|
||||
turn on 819,352 through 929,855
|
||||
toggle 393,813 through 832,816
|
||||
toggle 725,689 through 967,888
|
||||
turn on 968,950 through 969,983
|
||||
turn off 152,628 through 582,896
|
||||
turn off 165,844 through 459,935
|
||||
turn off 882,741 through 974,786
|
||||
turn off 283,179 through 731,899
|
||||
toggle 197,366 through 682,445
|
||||
turn on 106,309 through 120,813
|
||||
toggle 950,387 through 967,782
|
||||
turn off 274,603 through 383,759
|
||||
turn off 155,665 through 284,787
|
||||
toggle 551,871 through 860,962
|
||||
turn off 30,826 through 598,892
|
||||
toggle 76,552 through 977,888
|
||||
turn on 938,180 through 994,997
|
||||
toggle 62,381 through 993,656
|
||||
toggle 625,861 through 921,941
|
||||
turn on 685,311 through 872,521
|
||||
turn on 124,934 through 530,962
|
||||
turn on 606,379 through 961,867
|
||||
turn off 792,735 through 946,783
|
||||
turn on 417,480 through 860,598
|
||||
toggle 178,91 through 481,887
|
||||
turn off 23,935 through 833,962
|
||||
toggle 317,14 through 793,425
|
||||
turn on 986,89 through 999,613
|
||||
turn off 359,201 through 560,554
|
||||
turn off 729,494 through 942,626
|
||||
turn on 204,143 through 876,610
|
||||
toggle 474,97 through 636,542
|
||||
turn off 902,924 through 976,973
|
||||
turn off 389,442 through 824,638
|
||||
turn off 622,863 through 798,863
|
||||
turn on 840,622 through 978,920
|
||||
toggle 567,374 through 925,439
|
||||
turn off 643,319 through 935,662
|
||||
toggle 185,42 through 294,810
|
||||
turn on 47,124 through 598,880
|
||||
toggle 828,303 through 979,770
|
||||
turn off 174,272 through 280,311
|
||||
turn off 540,50 through 880,212
|
||||
turn on 141,994 through 221,998
|
||||
turn on 476,695 through 483,901
|
||||
turn on 960,216 through 972,502
|
||||
toggle 752,335 through 957,733
|
||||
turn off 419,713 through 537,998
|
||||
toggle 772,846 through 994,888
|
||||
turn on 881,159 through 902,312
|
||||
turn off 537,651 through 641,816
|
||||
toggle 561,947 through 638,965
|
||||
turn on 368,458 through 437,612
|
||||
turn on 290,149 through 705,919
|
||||
turn on 711,918 through 974,945
|
||||
toggle 916,242 through 926,786
|
||||
toggle 522,272 through 773,314
|
||||
turn on 432,897 through 440,954
|
||||
turn off 132,169 through 775,380
|
||||
toggle 52,205 through 693,747
|
||||
toggle 926,309 through 976,669
|
||||
turn off 838,342 through 938,444
|
||||
turn on 144,431 through 260,951
|
||||
toggle 780,318 through 975,495
|
||||
turn off 185,412 through 796,541
|
||||
turn on 879,548 through 892,860
|
||||
turn on 294,132 through 460,338
|
||||
turn on 823,500 through 899,529
|
||||
turn off 225,603 through 483,920
|
||||
toggle 717,493 through 930,875
|
||||
toggle 534,948 through 599,968
|
||||
turn on 522,730 through 968,950
|
||||
turn off 102,229 through 674,529
|
||||
"""
|
||||
|
||||
let scanner = Scanner(string: input)
|
||||
|
||||
var grid = Lights()
|
||||
while !scanner.isAtEnd {
|
||||
let command = try scanner.readCommand()
|
||||
switch command {
|
||||
case let .on(range): grid.setRange(range, to: true)
|
||||
case let .off(range): grid.setRange(range, to: false)
|
||||
case let .toggle(range): grid.toggle(range)
|
||||
}
|
||||
}
|
||||
|
||||
grid.onCount
|
||||
|
4
2015/Day6.playground/contents.xcplayground
Normal file
4
2015/Day6.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day6.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day6.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
291
2015/Day6/Day6.xcodeproj/project.pbxproj
Normal file
291
2015/Day6/Day6.xcodeproj/project.pbxproj
Normal file
|
@ -0,0 +1,291 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 55;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
2628B52326EDF9EE00ECED43 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2628B52226EDF9EE00ECED43 /* main.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
2628B51D26EDF9EE00ECED43 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
2628B51F26EDF9EE00ECED43 /* Day6 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day6; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2628B52226EDF9EE00ECED43 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
2628B51C26EDF9EE00ECED43 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
2628B51626EDF9EE00ECED43 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2628B52126EDF9EE00ECED43 /* Day6 */,
|
||||
2628B52026EDF9EE00ECED43 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2628B52026EDF9EE00ECED43 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2628B51F26EDF9EE00ECED43 /* Day6 */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2628B52126EDF9EE00ECED43 /* Day6 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2628B52226EDF9EE00ECED43 /* main.swift */,
|
||||
);
|
||||
path = Day6;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
2628B51E26EDF9EE00ECED43 /* Day6 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2628B52626EDF9EE00ECED43 /* Build configuration list for PBXNativeTarget "Day6" */;
|
||||
buildPhases = (
|
||||
2628B51B26EDF9EE00ECED43 /* Sources */,
|
||||
2628B51C26EDF9EE00ECED43 /* Frameworks */,
|
||||
2628B51D26EDF9EE00ECED43 /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Day6;
|
||||
productName = Day6;
|
||||
productReference = 2628B51F26EDF9EE00ECED43 /* Day6 */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
2628B51726EDF9EE00ECED43 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = 1;
|
||||
LastSwiftUpdateCheck = 1300;
|
||||
LastUpgradeCheck = 1300;
|
||||
TargetAttributes = {
|
||||
2628B51E26EDF9EE00ECED43 = {
|
||||
CreatedOnToolsVersion = 13.0;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 2628B51A26EDF9EE00ECED43 /* Build configuration list for PBXProject "Day6" */;
|
||||
compatibilityVersion = "Xcode 13.0";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 2628B51626EDF9EE00ECED43;
|
||||
productRefGroup = 2628B52026EDF9EE00ECED43 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
2628B51E26EDF9EE00ECED43 /* Day6 */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
2628B51B26EDF9EE00ECED43 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2628B52326EDF9EE00ECED43 /* main.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
2628B52426EDF9EE00ECED43 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.5;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2628B52526EDF9EE00ECED43 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.5;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
2628B52726EDF9EE00ECED43 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 722B335UM5;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2628B52826EDF9EE00ECED43 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 722B335UM5;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
2628B51A26EDF9EE00ECED43 /* Build configuration list for PBXProject "Day6" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2628B52426EDF9EE00ECED43 /* Debug */,
|
||||
2628B52526EDF9EE00ECED43 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
2628B52626EDF9EE00ECED43 /* Build configuration list for PBXNativeTarget "Day6" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2628B52726EDF9EE00ECED43 /* Debug */,
|
||||
2628B52826EDF9EE00ECED43 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 2628B51726EDF9EE00ECED43 /* Project object */;
|
||||
}
|
7
2015/Day6/Day6.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day6/Day6.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
433
2015/Day6/Day6/main.swift
Normal file
433
2015/Day6/Day6/main.swift
Normal file
|
@ -0,0 +1,433 @@
|
|||
import Foundation
|
||||
import CoreGraphics
|
||||
import ImageIO
|
||||
|
||||
struct Range {
|
||||
var minX, minY: Int
|
||||
var maxX, maxY: Int
|
||||
}
|
||||
|
||||
enum Command {
|
||||
case on(Range)
|
||||
case off(Range)
|
||||
case toggle(Range)
|
||||
}
|
||||
|
||||
struct Lights {
|
||||
static let size = 1000
|
||||
var grid: [Int8] = .init(repeating: 0, count: Self.size * Self.size)
|
||||
|
||||
|
||||
mutating func changeRange(_ range: Range, by: Int8) {
|
||||
var start = range.minY * Self.size + range.minX
|
||||
let width = range.maxX - range.minX
|
||||
|
||||
for _ in range.minY...range.maxY {
|
||||
for index in start ... start+width {
|
||||
grid[index] = max(0, grid[index] + by)
|
||||
}
|
||||
start += Self.size
|
||||
}
|
||||
}
|
||||
|
||||
var brightness: Int {
|
||||
grid.reduce(0) { $0 + Int($1) }
|
||||
}
|
||||
}
|
||||
|
||||
enum ParseError: Error {
|
||||
case expectedCoordinate
|
||||
case expected(String)
|
||||
case expectedVerb
|
||||
}
|
||||
|
||||
extension Scanner {
|
||||
func readCommand() throws -> Command {
|
||||
let verb = try readVerb()
|
||||
let range = try readRange()
|
||||
|
||||
switch verb {
|
||||
case .turnOn: return .on(range)
|
||||
case .turnOff: return .off(range)
|
||||
case .toggle: return .toggle(range)
|
||||
}
|
||||
}
|
||||
|
||||
enum Verb: String, CaseIterable {
|
||||
case turnOn = "turn on"
|
||||
case turnOff = "turn off"
|
||||
case toggle = "toggle"
|
||||
}
|
||||
|
||||
func readVerb() throws -> Verb {
|
||||
for verb in Verb.allCases {
|
||||
if scanString(verb.rawValue) != nil {
|
||||
return verb
|
||||
}
|
||||
}
|
||||
|
||||
throw ParseError.expectedVerb
|
||||
}
|
||||
|
||||
func readRange() throws -> Range {
|
||||
let first = try readCoordinates()
|
||||
try expect("through")
|
||||
let second = try readCoordinates()
|
||||
|
||||
return Range(minX: first.x, minY: first.y, maxX: second.x, maxY: second.y)
|
||||
}
|
||||
|
||||
func expect(_ string: String) throws {
|
||||
if scanString(string) == nil {
|
||||
throw ParseError.expected(string)
|
||||
}
|
||||
}
|
||||
|
||||
func readCoordinates() throws -> (x: Int, y: Int) {
|
||||
guard let x = scanInt(),
|
||||
scanString(",") != nil,
|
||||
let y = scanInt()
|
||||
else {
|
||||
throw ParseError.expectedCoordinate
|
||||
}
|
||||
|
||||
return (x, y)
|
||||
}
|
||||
}
|
||||
|
||||
let input = """
|
||||
turn on 887,9 through 959,629
|
||||
turn on 454,398 through 844,448
|
||||
turn off 539,243 through 559,965
|
||||
turn off 370,819 through 676,868
|
||||
turn off 145,40 through 370,997
|
||||
turn off 301,3 through 808,453
|
||||
turn on 351,678 through 951,908
|
||||
toggle 720,196 through 897,994
|
||||
toggle 831,394 through 904,860
|
||||
toggle 753,664 through 970,926
|
||||
turn off 150,300 through 213,740
|
||||
turn on 141,242 through 932,871
|
||||
toggle 294,259 through 474,326
|
||||
toggle 678,333 through 752,957
|
||||
toggle 393,804 through 510,976
|
||||
turn off 6,964 through 411,976
|
||||
turn off 33,572 through 978,590
|
||||
turn on 579,693 through 650,978
|
||||
turn on 150,20 through 652,719
|
||||
turn off 782,143 through 808,802
|
||||
turn off 240,377 through 761,468
|
||||
turn off 899,828 through 958,967
|
||||
turn on 613,565 through 952,659
|
||||
turn on 295,36 through 964,978
|
||||
toggle 846,296 through 969,528
|
||||
turn off 211,254 through 529,491
|
||||
turn off 231,594 through 406,794
|
||||
turn off 169,791 through 758,942
|
||||
turn on 955,440 through 980,477
|
||||
toggle 944,498 through 995,928
|
||||
turn on 519,391 through 605,718
|
||||
toggle 521,303 through 617,366
|
||||
turn off 524,349 through 694,791
|
||||
toggle 391,87 through 499,792
|
||||
toggle 562,527 through 668,935
|
||||
turn off 68,358 through 857,453
|
||||
toggle 815,811 through 889,828
|
||||
turn off 666,61 through 768,87
|
||||
turn on 27,501 through 921,952
|
||||
turn on 953,102 through 983,471
|
||||
turn on 277,552 through 451,723
|
||||
turn off 64,253 through 655,960
|
||||
turn on 47,485 through 734,977
|
||||
turn off 59,119 through 699,734
|
||||
toggle 407,898 through 493,955
|
||||
toggle 912,966 through 949,991
|
||||
turn on 479,990 through 895,990
|
||||
toggle 390,589 through 869,766
|
||||
toggle 593,903 through 926,943
|
||||
toggle 358,439 through 870,528
|
||||
turn off 649,410 through 652,875
|
||||
turn on 629,834 through 712,895
|
||||
toggle 254,555 through 770,901
|
||||
toggle 641,832 through 947,850
|
||||
turn on 268,448 through 743,777
|
||||
turn off 512,123 through 625,874
|
||||
turn off 498,262 through 930,811
|
||||
turn off 835,158 through 886,242
|
||||
toggle 546,310 through 607,773
|
||||
turn on 501,505 through 896,909
|
||||
turn off 666,796 through 817,924
|
||||
toggle 987,789 through 993,809
|
||||
toggle 745,8 through 860,693
|
||||
toggle 181,983 through 731,988
|
||||
turn on 826,174 through 924,883
|
||||
turn on 239,228 through 843,993
|
||||
turn on 205,613 through 891,667
|
||||
toggle 867,873 through 984,896
|
||||
turn on 628,251 through 677,681
|
||||
toggle 276,956 through 631,964
|
||||
turn on 78,358 through 974,713
|
||||
turn on 521,360 through 773,597
|
||||
turn off 963,52 through 979,502
|
||||
turn on 117,151 through 934,622
|
||||
toggle 237,91 through 528,164
|
||||
turn on 944,269 through 975,453
|
||||
toggle 979,460 through 988,964
|
||||
turn off 440,254 through 681,507
|
||||
toggle 347,100 through 896,785
|
||||
turn off 329,592 through 369,985
|
||||
turn on 931,960 through 979,985
|
||||
toggle 703,3 through 776,36
|
||||
toggle 798,120 through 908,550
|
||||
turn off 186,605 through 914,709
|
||||
turn off 921,725 through 979,956
|
||||
toggle 167,34 through 735,249
|
||||
turn on 726,781 through 987,936
|
||||
toggle 720,336 through 847,756
|
||||
turn on 171,630 through 656,769
|
||||
turn off 417,276 through 751,500
|
||||
toggle 559,485 through 584,534
|
||||
turn on 568,629 through 690,873
|
||||
toggle 248,712 through 277,988
|
||||
toggle 345,594 through 812,723
|
||||
turn off 800,108 through 834,618
|
||||
turn off 967,439 through 986,869
|
||||
turn on 842,209 through 955,529
|
||||
turn on 132,653 through 357,696
|
||||
turn on 817,38 through 973,662
|
||||
turn off 569,816 through 721,861
|
||||
turn on 568,429 through 945,724
|
||||
turn on 77,458 through 844,685
|
||||
turn off 138,78 through 498,851
|
||||
turn on 136,21 through 252,986
|
||||
turn off 2,460 through 863,472
|
||||
turn on 172,81 through 839,332
|
||||
turn on 123,216 through 703,384
|
||||
turn off 879,644 through 944,887
|
||||
toggle 227,491 through 504,793
|
||||
toggle 580,418 through 741,479
|
||||
toggle 65,276 through 414,299
|
||||
toggle 482,486 through 838,931
|
||||
turn off 557,768 through 950,927
|
||||
turn off 615,617 through 955,864
|
||||
turn on 859,886 through 923,919
|
||||
turn on 391,330 through 499,971
|
||||
toggle 521,835 through 613,847
|
||||
turn on 822,787 through 989,847
|
||||
turn on 192,142 through 357,846
|
||||
turn off 564,945 through 985,945
|
||||
turn off 479,361 through 703,799
|
||||
toggle 56,481 through 489,978
|
||||
turn off 632,991 through 774,998
|
||||
toggle 723,526 through 945,792
|
||||
turn on 344,149 through 441,640
|
||||
toggle 568,927 through 624,952
|
||||
turn on 621,784 through 970,788
|
||||
toggle 665,783 through 795,981
|
||||
toggle 386,610 through 817,730
|
||||
toggle 440,399 through 734,417
|
||||
toggle 939,201 through 978,803
|
||||
turn off 395,883 through 554,929
|
||||
turn on 340,309 through 637,561
|
||||
turn off 875,147 through 946,481
|
||||
turn off 945,837 through 957,922
|
||||
turn off 429,982 through 691,991
|
||||
toggle 227,137 through 439,822
|
||||
toggle 4,848 through 7,932
|
||||
turn off 545,146 through 756,943
|
||||
turn on 763,863 through 937,994
|
||||
turn on 232,94 through 404,502
|
||||
turn off 742,254 through 930,512
|
||||
turn on 91,931 through 101,942
|
||||
toggle 585,106 through 651,425
|
||||
turn on 506,700 through 567,960
|
||||
turn off 548,44 through 718,352
|
||||
turn off 194,827 through 673,859
|
||||
turn off 6,645 through 509,764
|
||||
turn off 13,230 through 821,361
|
||||
turn on 734,629 through 919,631
|
||||
toggle 788,552 through 957,972
|
||||
toggle 244,747 through 849,773
|
||||
turn off 162,553 through 276,887
|
||||
turn off 569,577 through 587,604
|
||||
turn off 799,482 through 854,956
|
||||
turn on 744,535 through 909,802
|
||||
toggle 330,641 through 396,986
|
||||
turn off 927,458 through 966,564
|
||||
toggle 984,486 through 986,913
|
||||
toggle 519,682 through 632,708
|
||||
turn on 984,977 through 989,986
|
||||
toggle 766,423 through 934,495
|
||||
turn on 17,509 through 947,718
|
||||
turn on 413,783 through 631,903
|
||||
turn on 482,370 through 493,688
|
||||
turn on 433,859 through 628,938
|
||||
turn off 769,549 through 945,810
|
||||
turn on 178,853 through 539,941
|
||||
turn off 203,251 through 692,433
|
||||
turn off 525,638 through 955,794
|
||||
turn on 169,70 through 764,939
|
||||
toggle 59,352 through 896,404
|
||||
toggle 143,245 through 707,320
|
||||
turn off 103,35 through 160,949
|
||||
toggle 496,24 through 669,507
|
||||
turn off 581,847 through 847,903
|
||||
turn on 689,153 through 733,562
|
||||
turn on 821,487 through 839,699
|
||||
turn on 837,627 through 978,723
|
||||
toggle 96,748 through 973,753
|
||||
toggle 99,818 through 609,995
|
||||
turn on 731,193 through 756,509
|
||||
turn off 622,55 through 813,365
|
||||
turn on 456,490 through 576,548
|
||||
turn on 48,421 through 163,674
|
||||
turn off 853,861 through 924,964
|
||||
turn off 59,963 through 556,987
|
||||
turn on 458,710 through 688,847
|
||||
toggle 12,484 through 878,562
|
||||
turn off 241,964 through 799,983
|
||||
turn off 434,299 through 845,772
|
||||
toggle 896,725 through 956,847
|
||||
turn on 740,289 through 784,345
|
||||
turn off 395,840 through 822,845
|
||||
turn on 955,224 through 996,953
|
||||
turn off 710,186 through 957,722
|
||||
turn off 485,949 through 869,985
|
||||
turn on 848,209 through 975,376
|
||||
toggle 221,241 through 906,384
|
||||
turn on 588,49 through 927,496
|
||||
turn on 273,332 through 735,725
|
||||
turn on 505,962 through 895,962
|
||||
toggle 820,112 through 923,143
|
||||
turn on 919,792 through 978,982
|
||||
toggle 489,461 through 910,737
|
||||
turn off 202,642 through 638,940
|
||||
turn off 708,953 through 970,960
|
||||
toggle 437,291 through 546,381
|
||||
turn on 409,358 through 837,479
|
||||
turn off 756,279 through 870,943
|
||||
turn off 154,657 through 375,703
|
||||
turn off 524,622 through 995,779
|
||||
toggle 514,221 through 651,850
|
||||
toggle 808,464 through 886,646
|
||||
toggle 483,537 through 739,840
|
||||
toggle 654,769 through 831,825
|
||||
turn off 326,37 through 631,69
|
||||
turn off 590,570 through 926,656
|
||||
turn off 881,913 through 911,998
|
||||
turn on 996,102 through 998,616
|
||||
turn off 677,503 through 828,563
|
||||
turn on 860,251 through 877,441
|
||||
turn off 964,100 through 982,377
|
||||
toggle 888,403 through 961,597
|
||||
turn off 632,240 through 938,968
|
||||
toggle 731,176 through 932,413
|
||||
turn on 5,498 through 203,835
|
||||
turn on 819,352 through 929,855
|
||||
toggle 393,813 through 832,816
|
||||
toggle 725,689 through 967,888
|
||||
turn on 968,950 through 969,983
|
||||
turn off 152,628 through 582,896
|
||||
turn off 165,844 through 459,935
|
||||
turn off 882,741 through 974,786
|
||||
turn off 283,179 through 731,899
|
||||
toggle 197,366 through 682,445
|
||||
turn on 106,309 through 120,813
|
||||
toggle 950,387 through 967,782
|
||||
turn off 274,603 through 383,759
|
||||
turn off 155,665 through 284,787
|
||||
toggle 551,871 through 860,962
|
||||
turn off 30,826 through 598,892
|
||||
toggle 76,552 through 977,888
|
||||
turn on 938,180 through 994,997
|
||||
toggle 62,381 through 993,656
|
||||
toggle 625,861 through 921,941
|
||||
turn on 685,311 through 872,521
|
||||
turn on 124,934 through 530,962
|
||||
turn on 606,379 through 961,867
|
||||
turn off 792,735 through 946,783
|
||||
turn on 417,480 through 860,598
|
||||
toggle 178,91 through 481,887
|
||||
turn off 23,935 through 833,962
|
||||
toggle 317,14 through 793,425
|
||||
turn on 986,89 through 999,613
|
||||
turn off 359,201 through 560,554
|
||||
turn off 729,494 through 942,626
|
||||
turn on 204,143 through 876,610
|
||||
toggle 474,97 through 636,542
|
||||
turn off 902,924 through 976,973
|
||||
turn off 389,442 through 824,638
|
||||
turn off 622,863 through 798,863
|
||||
turn on 840,622 through 978,920
|
||||
toggle 567,374 through 925,439
|
||||
turn off 643,319 through 935,662
|
||||
toggle 185,42 through 294,810
|
||||
turn on 47,124 through 598,880
|
||||
toggle 828,303 through 979,770
|
||||
turn off 174,272 through 280,311
|
||||
turn off 540,50 through 880,212
|
||||
turn on 141,994 through 221,998
|
||||
turn on 476,695 through 483,901
|
||||
turn on 960,216 through 972,502
|
||||
toggle 752,335 through 957,733
|
||||
turn off 419,713 through 537,998
|
||||
toggle 772,846 through 994,888
|
||||
turn on 881,159 through 902,312
|
||||
turn off 537,651 through 641,816
|
||||
toggle 561,947 through 638,965
|
||||
turn on 368,458 through 437,612
|
||||
turn on 290,149 through 705,919
|
||||
turn on 711,918 through 974,945
|
||||
toggle 916,242 through 926,786
|
||||
toggle 522,272 through 773,314
|
||||
turn on 432,897 through 440,954
|
||||
turn off 132,169 through 775,380
|
||||
toggle 52,205 through 693,747
|
||||
toggle 926,309 through 976,669
|
||||
turn off 838,342 through 938,444
|
||||
turn on 144,431 through 260,951
|
||||
toggle 780,318 through 975,495
|
||||
turn off 185,412 through 796,541
|
||||
turn on 879,548 through 892,860
|
||||
turn on 294,132 through 460,338
|
||||
turn on 823,500 through 899,529
|
||||
turn off 225,603 through 483,920
|
||||
toggle 717,493 through 930,875
|
||||
toggle 534,948 through 599,968
|
||||
turn on 522,730 through 968,950
|
||||
turn off 102,229 through 674,529
|
||||
"""
|
||||
|
||||
let scanner = Scanner(string: input)
|
||||
|
||||
extension Range {
|
||||
var size: Int {
|
||||
(maxX - minX + 1) * (maxY - minY + 1)
|
||||
}
|
||||
}
|
||||
|
||||
var totalBrightness = 0
|
||||
|
||||
var grid = Lights()
|
||||
while !scanner.isAtEnd {
|
||||
let command = try scanner.readCommand()
|
||||
switch command {
|
||||
case let .on(range):
|
||||
grid.changeRange(range, by: 1)
|
||||
|
||||
case let .off(range):
|
||||
grid.changeRange(range, by: -1)
|
||||
|
||||
case let .toggle(range):
|
||||
grid.changeRange(range, by: 2)
|
||||
}
|
||||
}
|
||||
|
||||
print(grid.brightness)
|
||||
|
||||
let image = CGImage(width: Lights.size, height: Lights.size, bitsPerComponent: 8, bitsPerPixel: 8, bytesPerRow: Lights.size, space: .init(name: CGColorSpace.linearGray)!, bitmapInfo: .init(rawValue: 0), provider: .init(dataInfo: nil, data: &grid.grid, size: grid.grid.count, releaseData: { _, _, _ in })!, decode: nil, shouldInterpolate: false, intent: .defaultIntent)
|
||||
|
||||
let dest = CGImageDestinationCreateWithURL(URL(fileURLWithPath: "test.png") as CFURL, kUTTypePNG, 1, nil)!
|
||||
CGImageDestinationAddImage(dest, image!, nil)
|
||||
CGImageDestinationFinalize(dest)
|
||||
|
291
2015/Day7/Day7.xcodeproj/project.pbxproj
Normal file
291
2015/Day7/Day7.xcodeproj/project.pbxproj
Normal file
|
@ -0,0 +1,291 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 55;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
2628B53626EE043900ECED43 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2628B53526EE043900ECED43 /* main.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
2628B53026EE043900ECED43 /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
2628B53226EE043900ECED43 /* Day7 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day7; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2628B53526EE043900ECED43 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
2628B52F26EE043900ECED43 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
2628B52926EE043900ECED43 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2628B53426EE043900ECED43 /* Day7 */,
|
||||
2628B53326EE043900ECED43 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2628B53326EE043900ECED43 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2628B53226EE043900ECED43 /* Day7 */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2628B53426EE043900ECED43 /* Day7 */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2628B53526EE043900ECED43 /* main.swift */,
|
||||
);
|
||||
path = Day7;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
2628B53126EE043900ECED43 /* Day7 */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2628B53926EE043900ECED43 /* Build configuration list for PBXNativeTarget "Day7" */;
|
||||
buildPhases = (
|
||||
2628B52E26EE043900ECED43 /* Sources */,
|
||||
2628B52F26EE043900ECED43 /* Frameworks */,
|
||||
2628B53026EE043900ECED43 /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Day7;
|
||||
productName = Day7;
|
||||
productReference = 2628B53226EE043900ECED43 /* Day7 */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
2628B52A26EE043900ECED43 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = 1;
|
||||
LastSwiftUpdateCheck = 1300;
|
||||
LastUpgradeCheck = 1300;
|
||||
TargetAttributes = {
|
||||
2628B53126EE043900ECED43 = {
|
||||
CreatedOnToolsVersion = 13.0;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 2628B52D26EE043900ECED43 /* Build configuration list for PBXProject "Day7" */;
|
||||
compatibilityVersion = "Xcode 13.0";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 2628B52926EE043900ECED43;
|
||||
productRefGroup = 2628B53326EE043900ECED43 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
2628B53126EE043900ECED43 /* Day7 */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
2628B52E26EE043900ECED43 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2628B53626EE043900ECED43 /* main.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
2628B53726EE043900ECED43 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.5;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2628B53826EE043900ECED43 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 11.5;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
2628B53A26EE043900ECED43 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 722B335UM5;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2628B53B26EE043900ECED43 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
DEVELOPMENT_TEAM = 722B335UM5;
|
||||
ENABLE_HARDENED_RUNTIME = YES;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
2628B52D26EE043900ECED43 /* Build configuration list for PBXProject "Day7" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2628B53726EE043900ECED43 /* Debug */,
|
||||
2628B53826EE043900ECED43 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
2628B53926EE043900ECED43 /* Build configuration list for PBXNativeTarget "Day7" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2628B53A26EE043900ECED43 /* Debug */,
|
||||
2628B53B26EE043900ECED43 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 2628B52A26EE043900ECED43 /* Project object */;
|
||||
}
|
7
2015/Day7/Day7.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day7/Day7.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
531
2015/Day7/Day7/main.swift
Normal file
531
2015/Day7/Day7/main.swift
Normal file
|
@ -0,0 +1,531 @@
|
|||
import Foundation
|
||||
|
||||
enum EvaluationError: Error {
|
||||
case signalMissing(String)
|
||||
case circularDefinition(String)
|
||||
}
|
||||
|
||||
protocol Context {
|
||||
func evaluate(_ signal: String) throws -> UInt16
|
||||
}
|
||||
|
||||
enum Ref {
|
||||
case value(UInt16)
|
||||
case signal(String)
|
||||
|
||||
func evaluate(context: Context) throws -> UInt16 {
|
||||
switch self {
|
||||
case .value(let value): return value
|
||||
case .signal(let name): return try context.evaluate(name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum Signal {
|
||||
case value(Ref)
|
||||
case and(Ref, Ref)
|
||||
case leftShift(Ref, amount: Int)
|
||||
case rightShift(Ref, amount: Int)
|
||||
case not(Ref)
|
||||
case or(Ref, Ref)
|
||||
|
||||
func evaluate(context: Context) throws -> UInt16 {
|
||||
switch self {
|
||||
case .value(let value): return try value.evaluate(context: context)
|
||||
case .and(let a, let b): return try a.evaluate(context: context) & b.evaluate(context: context)
|
||||
case .or(let a, let b): return try a.evaluate(context: context) | b.evaluate(context: context)
|
||||
case .not(let other): return try ~other.evaluate(context: context)
|
||||
case .leftShift(let other, amount: let amount): return try other.evaluate(context: context) << amount
|
||||
case .rightShift(let other, amount: let amount): return try other.evaluate(context: context) >> amount
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
enum ParseError: Error {
|
||||
case expected(String)
|
||||
case nameExpected
|
||||
case intExpected
|
||||
case operatorExpected
|
||||
}
|
||||
|
||||
extension Scanner {
|
||||
func expect(_ string: String) throws {
|
||||
guard scanString(string) != nil else {
|
||||
throw ParseError.expected(string)
|
||||
}
|
||||
}
|
||||
|
||||
func circuit() throws -> [String: Signal] {
|
||||
var result: [String: Signal] = [:]
|
||||
while !isAtEnd {
|
||||
let (signal, name) = try connection()
|
||||
result[name] = signal
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func connection() throws -> (Signal, String) {
|
||||
let signal = try signal()
|
||||
try expect("->")
|
||||
let name = try name()
|
||||
|
||||
return (signal, name)
|
||||
}
|
||||
|
||||
func signal() throws -> Signal {
|
||||
if scanString("NOT") != nil {
|
||||
let signal = try ref()
|
||||
return .not(signal)
|
||||
}
|
||||
|
||||
let firstOperand = try ref()
|
||||
|
||||
if let op = binaryOperator() {
|
||||
let secondOperand = try ref()
|
||||
switch op {
|
||||
case .and: return .and(firstOperand, secondOperand)
|
||||
case .or: return .or(firstOperand, secondOperand)
|
||||
}
|
||||
}
|
||||
|
||||
if let (shift, amount) = try shiftOperator() {
|
||||
switch shift {
|
||||
case .left: return .leftShift(firstOperand, amount: amount)
|
||||
case .right: return .rightShift(firstOperand, amount: amount)
|
||||
}
|
||||
}
|
||||
|
||||
return .value(firstOperand)
|
||||
|
||||
}
|
||||
|
||||
enum BinaryOperator: String, CaseIterable {
|
||||
case and = "AND"
|
||||
case or = "OR"
|
||||
}
|
||||
|
||||
func oneOf<T>() -> T? where T: RawRepresentable, T: CaseIterable, T.RawValue == String {
|
||||
for item in T.allCases {
|
||||
if scanString(item.rawValue) != nil {
|
||||
return item
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func binaryOperator() -> BinaryOperator? {
|
||||
oneOf()
|
||||
}
|
||||
|
||||
|
||||
enum Shift: String, CaseIterable {
|
||||
case left = "LSHIFT"
|
||||
case right = "RSHIFT"
|
||||
}
|
||||
|
||||
func shiftOperator() throws -> (Shift, Int)? {
|
||||
guard let direction: Shift = oneOf() else { return nil }
|
||||
guard let amount = scanInt() else {
|
||||
throw ParseError.intExpected
|
||||
}
|
||||
return (direction, amount)
|
||||
}
|
||||
|
||||
func ref() throws -> Ref {
|
||||
if let int = scanInt() {
|
||||
return .value(UInt16(int))
|
||||
}
|
||||
|
||||
return try .signal(name())
|
||||
}
|
||||
|
||||
func name() throws -> String {
|
||||
guard let name = scanCharacters(from: .letters) else {
|
||||
throw ParseError.nameExpected
|
||||
}
|
||||
|
||||
return name
|
||||
}
|
||||
}
|
||||
|
||||
let input = """
|
||||
af AND ah -> ai
|
||||
NOT lk -> ll
|
||||
hz RSHIFT 1 -> is
|
||||
NOT go -> gp
|
||||
du OR dt -> dv
|
||||
x RSHIFT 5 -> aa
|
||||
at OR az -> ba
|
||||
eo LSHIFT 15 -> es
|
||||
ci OR ct -> cu
|
||||
b RSHIFT 5 -> f
|
||||
fm OR fn -> fo
|
||||
NOT ag -> ah
|
||||
v OR w -> x
|
||||
g AND i -> j
|
||||
an LSHIFT 15 -> ar
|
||||
1 AND cx -> cy
|
||||
jq AND jw -> jy
|
||||
iu RSHIFT 5 -> ix
|
||||
gl AND gm -> go
|
||||
NOT bw -> bx
|
||||
jp RSHIFT 3 -> jr
|
||||
hg AND hh -> hj
|
||||
bv AND bx -> by
|
||||
er OR es -> et
|
||||
kl OR kr -> ks
|
||||
et RSHIFT 1 -> fm
|
||||
e AND f -> h
|
||||
u LSHIFT 1 -> ao
|
||||
he RSHIFT 1 -> hx
|
||||
eg AND ei -> ej
|
||||
bo AND bu -> bw
|
||||
dz OR ef -> eg
|
||||
dy RSHIFT 3 -> ea
|
||||
gl OR gm -> gn
|
||||
da LSHIFT 1 -> du
|
||||
au OR av -> aw
|
||||
gj OR gu -> gv
|
||||
eu OR fa -> fb
|
||||
lg OR lm -> ln
|
||||
e OR f -> g
|
||||
NOT dm -> dn
|
||||
NOT l -> m
|
||||
aq OR ar -> as
|
||||
gj RSHIFT 5 -> gm
|
||||
hm AND ho -> hp
|
||||
ge LSHIFT 15 -> gi
|
||||
jp RSHIFT 1 -> ki
|
||||
hg OR hh -> hi
|
||||
lc LSHIFT 1 -> lw
|
||||
km OR kn -> ko
|
||||
eq LSHIFT 1 -> fk
|
||||
1 AND am -> an
|
||||
gj RSHIFT 1 -> hc
|
||||
aj AND al -> am
|
||||
gj AND gu -> gw
|
||||
ko AND kq -> kr
|
||||
ha OR gz -> hb
|
||||
bn OR by -> bz
|
||||
iv OR jb -> jc
|
||||
NOT ac -> ad
|
||||
bo OR bu -> bv
|
||||
d AND j -> l
|
||||
bk LSHIFT 1 -> ce
|
||||
de OR dk -> dl
|
||||
dd RSHIFT 1 -> dw
|
||||
hz AND ik -> im
|
||||
NOT jd -> je
|
||||
fo RSHIFT 2 -> fp
|
||||
hb LSHIFT 1 -> hv
|
||||
lf RSHIFT 2 -> lg
|
||||
gj RSHIFT 3 -> gl
|
||||
ki OR kj -> kk
|
||||
NOT ak -> al
|
||||
ld OR le -> lf
|
||||
ci RSHIFT 3 -> ck
|
||||
1 AND cc -> cd
|
||||
NOT kx -> ky
|
||||
fp OR fv -> fw
|
||||
ev AND ew -> ey
|
||||
dt LSHIFT 15 -> dx
|
||||
NOT ax -> ay
|
||||
bp AND bq -> bs
|
||||
NOT ii -> ij
|
||||
ci AND ct -> cv
|
||||
iq OR ip -> ir
|
||||
x RSHIFT 2 -> y
|
||||
fq OR fr -> fs
|
||||
bn RSHIFT 5 -> bq
|
||||
0 -> c
|
||||
14146 -> b
|
||||
d OR j -> k
|
||||
z OR aa -> ab
|
||||
gf OR ge -> gg
|
||||
df OR dg -> dh
|
||||
NOT hj -> hk
|
||||
NOT di -> dj
|
||||
fj LSHIFT 15 -> fn
|
||||
lf RSHIFT 1 -> ly
|
||||
b AND n -> p
|
||||
jq OR jw -> jx
|
||||
gn AND gp -> gq
|
||||
x RSHIFT 1 -> aq
|
||||
ex AND ez -> fa
|
||||
NOT fc -> fd
|
||||
bj OR bi -> bk
|
||||
as RSHIFT 5 -> av
|
||||
hu LSHIFT 15 -> hy
|
||||
NOT gs -> gt
|
||||
fs AND fu -> fv
|
||||
dh AND dj -> dk
|
||||
bz AND cb -> cc
|
||||
dy RSHIFT 1 -> er
|
||||
hc OR hd -> he
|
||||
fo OR fz -> ga
|
||||
t OR s -> u
|
||||
b RSHIFT 2 -> d
|
||||
NOT jy -> jz
|
||||
hz RSHIFT 2 -> ia
|
||||
kk AND kv -> kx
|
||||
ga AND gc -> gd
|
||||
fl LSHIFT 1 -> gf
|
||||
bn AND by -> ca
|
||||
NOT hr -> hs
|
||||
NOT bs -> bt
|
||||
lf RSHIFT 3 -> lh
|
||||
au AND av -> ax
|
||||
1 AND gd -> ge
|
||||
jr OR js -> jt
|
||||
fw AND fy -> fz
|
||||
NOT iz -> ja
|
||||
c LSHIFT 1 -> t
|
||||
dy RSHIFT 5 -> eb
|
||||
bp OR bq -> br
|
||||
NOT h -> i
|
||||
1 AND ds -> dt
|
||||
ab AND ad -> ae
|
||||
ap LSHIFT 1 -> bj
|
||||
br AND bt -> bu
|
||||
NOT ca -> cb
|
||||
NOT el -> em
|
||||
s LSHIFT 15 -> w
|
||||
gk OR gq -> gr
|
||||
ff AND fh -> fi
|
||||
kf LSHIFT 15 -> kj
|
||||
fp AND fv -> fx
|
||||
lh OR li -> lj
|
||||
bn RSHIFT 3 -> bp
|
||||
jp OR ka -> kb
|
||||
lw OR lv -> lx
|
||||
iy AND ja -> jb
|
||||
dy OR ej -> ek
|
||||
1 AND bh -> bi
|
||||
NOT kt -> ku
|
||||
ao OR an -> ap
|
||||
ia AND ig -> ii
|
||||
NOT ey -> ez
|
||||
bn RSHIFT 1 -> cg
|
||||
fk OR fj -> fl
|
||||
ce OR cd -> cf
|
||||
eu AND fa -> fc
|
||||
kg OR kf -> kh
|
||||
jr AND js -> ju
|
||||
iu RSHIFT 3 -> iw
|
||||
df AND dg -> di
|
||||
dl AND dn -> do
|
||||
la LSHIFT 15 -> le
|
||||
fo RSHIFT 1 -> gh
|
||||
NOT gw -> gx
|
||||
NOT gb -> gc
|
||||
ir LSHIFT 1 -> jl
|
||||
x AND ai -> ak
|
||||
he RSHIFT 5 -> hh
|
||||
1 AND lu -> lv
|
||||
NOT ft -> fu
|
||||
gh OR gi -> gj
|
||||
lf RSHIFT 5 -> li
|
||||
x RSHIFT 3 -> z
|
||||
b RSHIFT 3 -> e
|
||||
he RSHIFT 2 -> hf
|
||||
NOT fx -> fy
|
||||
jt AND jv -> jw
|
||||
hx OR hy -> hz
|
||||
jp AND ka -> kc
|
||||
fb AND fd -> fe
|
||||
hz OR ik -> il
|
||||
ci RSHIFT 1 -> db
|
||||
fo AND fz -> gb
|
||||
fq AND fr -> ft
|
||||
gj RSHIFT 2 -> gk
|
||||
cg OR ch -> ci
|
||||
cd LSHIFT 15 -> ch
|
||||
jm LSHIFT 1 -> kg
|
||||
ih AND ij -> ik
|
||||
fo RSHIFT 3 -> fq
|
||||
fo RSHIFT 5 -> fr
|
||||
1 AND fi -> fj
|
||||
1 AND kz -> la
|
||||
iu AND jf -> jh
|
||||
cq AND cs -> ct
|
||||
dv LSHIFT 1 -> ep
|
||||
hf OR hl -> hm
|
||||
km AND kn -> kp
|
||||
de AND dk -> dm
|
||||
dd RSHIFT 5 -> dg
|
||||
NOT lo -> lp
|
||||
NOT ju -> jv
|
||||
NOT fg -> fh
|
||||
cm AND co -> cp
|
||||
ea AND eb -> ed
|
||||
dd RSHIFT 3 -> df
|
||||
gr AND gt -> gu
|
||||
ep OR eo -> eq
|
||||
cj AND cp -> cr
|
||||
lf OR lq -> lr
|
||||
gg LSHIFT 1 -> ha
|
||||
et RSHIFT 2 -> eu
|
||||
NOT jh -> ji
|
||||
ek AND em -> en
|
||||
jk LSHIFT 15 -> jo
|
||||
ia OR ig -> ih
|
||||
gv AND gx -> gy
|
||||
et AND fe -> fg
|
||||
lh AND li -> lk
|
||||
1 AND io -> ip
|
||||
kb AND kd -> ke
|
||||
kk RSHIFT 5 -> kn
|
||||
id AND if -> ig
|
||||
NOT ls -> lt
|
||||
dw OR dx -> dy
|
||||
dd AND do -> dq
|
||||
lf AND lq -> ls
|
||||
NOT kc -> kd
|
||||
dy AND ej -> el
|
||||
1 AND ke -> kf
|
||||
et OR fe -> ff
|
||||
hz RSHIFT 5 -> ic
|
||||
dd OR do -> dp
|
||||
cj OR cp -> cq
|
||||
NOT dq -> dr
|
||||
kk RSHIFT 1 -> ld
|
||||
jg AND ji -> jj
|
||||
he OR hp -> hq
|
||||
hi AND hk -> hl
|
||||
dp AND dr -> ds
|
||||
dz AND ef -> eh
|
||||
hz RSHIFT 3 -> ib
|
||||
db OR dc -> dd
|
||||
hw LSHIFT 1 -> iq
|
||||
he AND hp -> hr
|
||||
NOT cr -> cs
|
||||
lg AND lm -> lo
|
||||
hv OR hu -> hw
|
||||
il AND in -> io
|
||||
NOT eh -> ei
|
||||
gz LSHIFT 15 -> hd
|
||||
gk AND gq -> gs
|
||||
1 AND en -> eo
|
||||
NOT kp -> kq
|
||||
et RSHIFT 5 -> ew
|
||||
lj AND ll -> lm
|
||||
he RSHIFT 3 -> hg
|
||||
et RSHIFT 3 -> ev
|
||||
as AND bd -> bf
|
||||
cu AND cw -> cx
|
||||
jx AND jz -> ka
|
||||
b OR n -> o
|
||||
be AND bg -> bh
|
||||
1 AND ht -> hu
|
||||
1 AND gy -> gz
|
||||
NOT hn -> ho
|
||||
ck OR cl -> cm
|
||||
ec AND ee -> ef
|
||||
lv LSHIFT 15 -> lz
|
||||
ks AND ku -> kv
|
||||
NOT ie -> if
|
||||
hf AND hl -> hn
|
||||
1 AND r -> s
|
||||
ib AND ic -> ie
|
||||
hq AND hs -> ht
|
||||
y AND ae -> ag
|
||||
NOT ed -> ee
|
||||
bi LSHIFT 15 -> bm
|
||||
dy RSHIFT 2 -> dz
|
||||
ci RSHIFT 2 -> cj
|
||||
NOT bf -> bg
|
||||
NOT im -> in
|
||||
ev OR ew -> ex
|
||||
ib OR ic -> id
|
||||
bn RSHIFT 2 -> bo
|
||||
dd RSHIFT 2 -> de
|
||||
bl OR bm -> bn
|
||||
as RSHIFT 1 -> bl
|
||||
ea OR eb -> ec
|
||||
ln AND lp -> lq
|
||||
kk RSHIFT 3 -> km
|
||||
is OR it -> iu
|
||||
iu RSHIFT 2 -> iv
|
||||
as OR bd -> be
|
||||
ip LSHIFT 15 -> it
|
||||
iw OR ix -> iy
|
||||
kk RSHIFT 2 -> kl
|
||||
NOT bb -> bc
|
||||
ci RSHIFT 5 -> cl
|
||||
ly OR lz -> ma
|
||||
z AND aa -> ac
|
||||
iu RSHIFT 1 -> jn
|
||||
cy LSHIFT 15 -> dc
|
||||
cf LSHIFT 1 -> cz
|
||||
as RSHIFT 3 -> au
|
||||
cz OR cy -> da
|
||||
kw AND ky -> kz
|
||||
lx -> a
|
||||
iw AND ix -> iz
|
||||
lr AND lt -> lu
|
||||
jp RSHIFT 5 -> js
|
||||
aw AND ay -> az
|
||||
jc AND je -> jf
|
||||
lb OR la -> lc
|
||||
NOT cn -> co
|
||||
kh LSHIFT 1 -> lb
|
||||
1 AND jj -> jk
|
||||
y OR ae -> af
|
||||
ck AND cl -> cn
|
||||
kk OR kv -> kw
|
||||
NOT cv -> cw
|
||||
kl AND kr -> kt
|
||||
iu OR jf -> jg
|
||||
at AND az -> bb
|
||||
jp RSHIFT 2 -> jq
|
||||
iv AND jb -> jd
|
||||
jn OR jo -> jp
|
||||
x OR ai -> aj
|
||||
ba AND bc -> bd
|
||||
jl OR jk -> jm
|
||||
b RSHIFT 1 -> v
|
||||
o AND q -> r
|
||||
NOT p -> q
|
||||
k AND m -> n
|
||||
as RSHIFT 2 -> at
|
||||
"""
|
||||
|
||||
class Evaluator: Context {
|
||||
var program: [String: Signal]
|
||||
var stack: [String] = []
|
||||
|
||||
init(_ program: [String: Signal]) {
|
||||
self.program = program
|
||||
}
|
||||
|
||||
func evaluate(_ signal: String) throws -> UInt16 {
|
||||
guard !stack.contains(signal) else {
|
||||
throw EvaluationError.circularDefinition(signal)
|
||||
}
|
||||
stack.append(signal)
|
||||
defer { stack.removeLast() }
|
||||
|
||||
guard let def = program[signal] else { throw EvaluationError.signalMissing(signal) }
|
||||
let result = try def.evaluate(context: self)
|
||||
|
||||
program[signal] = .value(.value(result))
|
||||
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
let scanner = Scanner(string: input)
|
||||
var circuit = try scanner.circuit()
|
||||
let evaluator = Evaluator(circuit)
|
||||
let a = try evaluator.evaluate("a")
|
||||
print(a)
|
||||
|
||||
circuit["b"] = .value(.value(a))
|
||||
|
||||
let otherEvaluator = Evaluator(circuit)
|
||||
let newA = try otherEvaluator.evaluate("a")
|
||||
|
||||
print(newA)
|
393
2015/Day8.playground/Contents.swift
Normal file
393
2015/Day8.playground/Contents.swift
Normal file
|
@ -0,0 +1,393 @@
|
|||
let input = #"""
|
||||
"sjdivfriyaaqa\xd2v\"k\"mpcu\"yyu\"en"
|
||||
"vcqc"
|
||||
"zbcwgmbpijcxu\"yins\"sfxn"
|
||||
"yumngprx"
|
||||
"bbdj"
|
||||
"czbggabkzo\"wsnw\"voklp\"s"
|
||||
"acwt"
|
||||
"aqttwnsohbzian\"evtllfxwkog\"cunzw"
|
||||
"ugvsgfv"
|
||||
"xlnillibxg"
|
||||
"kexh\"pmi"
|
||||
"syvugow"
|
||||
"m\"ktqnw"
|
||||
"yrbajyndte\\rm"
|
||||
"f\"kak\x70sn\xc4kjri"
|
||||
"yxthr"
|
||||
"alvumfsjni\"kohg"
|
||||
"trajs\x5brom\xf1yoijaumkem\"\"tahlzs"
|
||||
"\"oedr\"pwdbnnrc"
|
||||
"qsmzhnx\""
|
||||
"\"msoytqimx\\tbklqz"
|
||||
"mjdfcgwdshrehgs"
|
||||
"\"rivyxahf\""
|
||||
"ciagc\x04bp"
|
||||
"xkfc"
|
||||
"xrgcripdu\x4c\xc4gszjhrvumvz\"mngbirb"
|
||||
"gvmae\"yiiujoqvr\"mkxmgbbut\"u"
|
||||
"ih"
|
||||
"ncrqlejehs"
|
||||
"mkno\x43pcfdukmemycp"
|
||||
"uanzoqxkpsksbvdnkji\"feamp"
|
||||
"axoufpnbx\\ao\x61pfj\"b"
|
||||
"dz\\ztawzdjy"
|
||||
"ihne\"enumvswypgf"
|
||||
"\"dgazthrphbshdo\\vuqoiy\""
|
||||
"dlnmptzt\\zahwpylc\\b\"gmslrqysk"
|
||||
"mhxznyzcp"
|
||||
"rebr\"amvxw\x5fmbnfpkkeghlntavj"
|
||||
"lades\x47ncgdof\"\"jmbbk"
|
||||
"dwxuis\xa5wdkx\\z\"admgnoddpgkt\\zs"
|
||||
"g\\k\x27qsl\x34hwfglcdxqbeclt\xca\\"
|
||||
"lhyjky\\m\"pvnm\\xmynpxnlhndmahjl"
|
||||
"c\"uxabbgorrpprw\"xas\\vefkxioqpt"
|
||||
"rfrvjxpevcmma\x71gtfipo"
|
||||
"fgh\"kcwoqwfnjgdlzfclprg\"q"
|
||||
"onxnwykrba"
|
||||
"hkkg\x60f\"tjzsanpvarzgkfipl"
|
||||
"\"aintes\"ofq\"juiaqlqxmvpe\\a"
|
||||
"wiyczzs\"ciwk"
|
||||
"mfqeu"
|
||||
"v\xe1z\x7ftzalmvdmncfivrax\\rjwq"
|
||||
"k\"vtg"
|
||||
"exhrtdugeml\xf0"
|
||||
"behnchkpld"
|
||||
"mhgxy\"mfcrg\xc5gnp\"\"osqhj"
|
||||
"rlvjy"
|
||||
"awe"
|
||||
"ctwy"
|
||||
"vt"
|
||||
"\x54t"
|
||||
"zugfmmfomz"
|
||||
"cv\"cvcvfaada\x04fsuqjinbfh\xa9cq\xd2c\"d"
|
||||
"oj"
|
||||
"xazanf\"wbmcrn"
|
||||
"\\\\zkisyjpbzandqikqjqvee"
|
||||
"dpsnbzdwnxk\\v"
|
||||
"sj\"tuupr\\oyoh"
|
||||
"myvkgnw\x81q\xaaokt\\emgejbsyvxcl\\\xee"
|
||||
"ejeuqvunjcirdkkpt\"nlns"
|
||||
"twmlvwxyvfyqqzu"
|
||||
"\"xwtzdp\x98qkcis\"dm\\\"ep\"xyykq"
|
||||
"vvcq\\expok"
|
||||
"wgukjfanjgpdjb"
|
||||
"\"mjcjajnxy\\dcpc"
|
||||
"wdvgnecw\\ab\x44klceduzgsvu"
|
||||
"dqtqkukr\"iacngufbqkdpxlwjjt"
|
||||
"\"xj\"\x66qofsqzkoah"
|
||||
"nptiwwsqdep"
|
||||
"gsnlxql\x30mjl"
|
||||
"yeezwokjwrhelny\""
|
||||
"bjauamn\\izpmzqqasid"
|
||||
"tvjdbkn\"tiziw\x82r"
|
||||
"w"
|
||||
"xwoakbbnjnypnaa\xa9wft\"slrmoqkl"
|
||||
"vwxtnlvaaasyruykgygrvpiopzygf\"vq"
|
||||
"qdancvnvmhlmpj\\isdxs"
|
||||
"xzc\\elw"
|
||||
"b\"wxeqvy\"qf\"g\xcaoklsucwicyw\"dovr"
|
||||
"yomlvvjdbngz\"rly\"afr"
|
||||
"bfb\"x\"aweuwbwmoa\x13\"t\"zhr"
|
||||
"\"dmfoxb\"qvpjzzhykt\xd2\"\"ryhxi"
|
||||
"psqef\"yu\\qiflie\"\x79w"
|
||||
"arzewkej\"lqmh\\sayyusxxo\\"
|
||||
"vuvvp"
|
||||
"hc\"lg\x6bcpupsewzklai\"l"
|
||||
"cjdfygc\"auorqybnuqghsh\x10"
|
||||
"j"
|
||||
"wqjexk\"eyq\\lbroqhk\\dqzsqk"
|
||||
"dws\"ru\"dvxfiwapif\"oqwzmle"
|
||||
"agcykg\\jt\\vzklqjvknoe"
|
||||
"kksd\"jmslja\\z\"y\\b\xaagpyojct"
|
||||
"nnpipxufvbfpoz\"jno"
|
||||
"dtw"
|
||||
"xlolvtahvgqkx\\dgnhj\\spsclpcxv\\"
|
||||
"mxea\\mbjpi"
|
||||
"lgbotkk\"zmxh\\\\qji\"jszulnjsxkqf"
|
||||
"lwckmhwhx\"gmftlb\x91am"
|
||||
"xxdxqyxth"
|
||||
"\"lmqhwkjxmvayxy"
|
||||
"tf"
|
||||
"qy"
|
||||
"wdqmwxdztax\"m\"\x09\x11xdxmfwxmtqgwvf"
|
||||
"\xcbnazlf\"ghziknszmsrahaf"
|
||||
"e\x6aupmzhxlvwympgjjpdvo\"kylfa"
|
||||
"\x81vhtlillb\xactgoatva"
|
||||
"dvnlgr"
|
||||
"f"
|
||||
"xg\xfacwizsadgeclm"
|
||||
"vnnrzbtw\"\\prod\\djbyppngwayy\""
|
||||
"lrt\xf4jahwvfz"
|
||||
"aqpnjtom\"ymkak\\dadfybqrso\\fwv"
|
||||
"gz\"aac\"mrbk\"ktommrojraqh"
|
||||
"wycamwoecsftepfnlcdkm"
|
||||
"nrhddblbuzlqsl\x9cben"
|
||||
"vckxhyqkmqmdseazcykrbysm"
|
||||
"sil\xbbtevmt\"gvrvybui\"faw\"j"
|
||||
"cjex\\tp\x45pzf"
|
||||
"asjobvtxszfodgf\"ibftg"
|
||||
"gkyjyjdrxdcllnh\"sjcibenrdnxv"
|
||||
"oswsdpjyxpbwnqbcpl\"yrdvs\\zq"
|
||||
"\"\"tyowzc\\fycbp\"jbwrbvgui"
|
||||
"cbpcabqkdgzmpgcwjtrchxp"
|
||||
"iyrzfh\x45gw\"fdlfpiaap\x31xqq"
|
||||
"evgksznidz"
|
||||
"b\\w\\"
|
||||
"loufizbiy\x57aim\"bgk"
|
||||
"qjfyk"
|
||||
"g\"anmloghvgr\x07zwqougqhdz"
|
||||
"usbbmwcxd\\bdgg"
|
||||
"htitqcpczml"
|
||||
"eke\\cqvpexqqk\"to\"tqmljrpn\xe6lji\""
|
||||
"g\xd2ifdsej"
|
||||
"h\"sk\"haajajpagtcqnzrfqn\xe6btzo"
|
||||
"wfkuffdxlvm\\cvlyzlbyunclhmpp"
|
||||
"myaavh\"spue"
|
||||
"hqvez\x68d\"eo\"eaioh"
|
||||
"s\"qd\"oyxxcglcdnuhk"
|
||||
"ilqvar"
|
||||
"srh"
|
||||
"puuifxrfmpc\"bvalwi\x2blu\\"
|
||||
"yywlbutufzysbncw\\nqsfbhpz\"mngjq"
|
||||
"zbl\\jfcuop"
|
||||
"hjdouiragzvxsqkreup\\"
|
||||
"qi"
|
||||
"ckx\\funlj\xa7ahi"
|
||||
"k"
|
||||
"ufrcnh\"ajteit"
|
||||
"cqv\"bgjozjj\x60x\xa8yhvmdvutchjotyuz"
|
||||
"hkuiet\"oku\x8cfhumfpasl"
|
||||
"\"\\sbe\x4d"
|
||||
"vhknazqt"
|
||||
"eyyizvzcahgflvmoowvs\\jhvygci"
|
||||
"kki\x3ewcefkgtjap\"xtpxh\"lzepoqj"
|
||||
"wvtk"
|
||||
"\"ynet"
|
||||
"zh\\obk\"otagx\x59txfzf"
|
||||
"ocowhxlx\xe6zqg\x63wx\\tclkhq\\vmaze"
|
||||
"w\"cf"
|
||||
"qpniprnrzrnvykghqnalr"
|
||||
"jctcqra\"\x05dhlydpqamorqjsijt\\xjdgt"
|
||||
"sig"
|
||||
"qhlbidbflwxe\"xljbwls\x20vht"
|
||||
"irmrebfla\xefsg\"j"
|
||||
"nep"
|
||||
"hjuvsqlizeqobepf"
|
||||
"guzbcdp\"obyh"
|
||||
"\"mjagins\xf9tqykaxy\""
|
||||
"knvsdnmtr\"zervsb"
|
||||
"hzuy"
|
||||
"zza\"k\"buapb\\elm\xfeya"
|
||||
"lrqar\"dfqwkaaqifig\"uixjsz"
|
||||
"\"azuo\x40rmnlhhluwsbbdb\x32pk\\yu\"pbcf"
|
||||
"dplkdyty"
|
||||
"rfoyciebwlwphcycmguc"
|
||||
"ivnmmiemhgytmlprq\\eh"
|
||||
"lhkyzaaothfdhmbpsqd\\yyw"
|
||||
"tnlzifupcjcaj"
|
||||
"\\qiyirsdrfpmu\\\x15xusifaag"
|
||||
"\\lcomf\\s"
|
||||
"uramjivcirjhqcqcg"
|
||||
"kkbaklbxfxikffnuhtu\xc6t\"d"
|
||||
"n\xefai"
|
||||
"\"toy\"bnbpevuzoc\"muywq\"gz\"grbm"
|
||||
"\"muu\\wt"
|
||||
"\\srby\"ee"
|
||||
"erf\"gvw\"swfppf"
|
||||
"pbqcgtn\"iuianhcdazfvmidn\\nslhxdf"
|
||||
"uxbp"
|
||||
"up\\mgrcyaegiwmjufn"
|
||||
"nulscgcewj\\dvoyvhetdegzhs\""
|
||||
"masv\"k\\rzrb"
|
||||
"qtx\x79d\"xdxmbxrvhj"
|
||||
"fid\\otpkgjlh\"qgsvexrckqtn\xf4"
|
||||
"tagzu"
|
||||
"bvl\\\"noseec"
|
||||
"\\xgicuuh"
|
||||
"w\"a\"npemf"
|
||||
"sxp"
|
||||
"nsmpktic\x8awxftscdcvijjobnq\"gjd"
|
||||
"uks\"\"jxvyvfezz\"aynxoev\"cuoav"
|
||||
"m"
|
||||
"lkvokj"
|
||||
"vkfam\"yllr\"q\x92o\x4ebecnvhshhqe\\"
|
||||
"efdxcjkjverw"
|
||||
"lmqzadwhfdgmep\x02tzfcbgrbfekhat"
|
||||
"cpbk\x9azqegbpluczssouop\x36ztpuoxsw"
|
||||
"cqwoczxdd\"erdjka"
|
||||
"cwvqnjgbw\\fxdlby"
|
||||
"mvtm"
|
||||
"lt\"bbqzpumplkg"
|
||||
"ntd\xeeuwweucnuuslqfzfq"
|
||||
"y\xabl\"dbebxjrlbmuoo\\\x1au"
|
||||
"qjoqx\\a"
|
||||
"pu\"ekdnfpmly\xbago\""
|
||||
"fjhhdy"
|
||||
"arl"
|
||||
"xcywisim\"bwuwf\"\"raepeawwjub"
|
||||
"pbe"
|
||||
"dbnqfpzyaumxtqnd\xc5dcqrkwyop"
|
||||
"ojv\x40vtkwgkqepm\x8bzft\\vedrry"
|
||||
"wggqkfbwqumsgajqwphjec\"mstxpwz"
|
||||
"zjkbem"
|
||||
"icpfqxbelxazlls"
|
||||
"pvpqs\\abcmtyielugfgcv\"tjxapxqxnx"
|
||||
"oqddwlvmtv\"\x39lyybylfb\"jmngnpjrdw"
|
||||
"gisgbve"
|
||||
"\"aglg"
|
||||
"y\"\"ss\xafvhxlrjv"
|
||||
"qbgqjsra"
|
||||
"ihshbjgqpdcljpmdwdprwloy"
|
||||
"djja\\wcdn\"svkrgpqn\"uz\"hc\x43hj"
|
||||
"cbjm"
|
||||
"pnn"
|
||||
"pqvh\"noh"
|
||||
"\"\\fdktlp"
|
||||
"ncea"
|
||||
"pqgzphiyy"
|
||||
"\xbedovhxuipaohlcvkwtxwmpz\"ckaif\"r"
|
||||
"arjuzbjowqciunfwgxtph\"vlhy\"n"
|
||||
"c"
|
||||
"nrpdxunulgudqzlhtae"
|
||||
"iefheu\"uru\""
|
||||
"aqijysxuijud\"np\\opbichhudil\xbesum"
|
||||
"pfpevmtstl\"lde\"bzr\"vspdxs"
|
||||
"vparfbdjwvzsocpnzhp"
|
||||
"g\x4ffxaarafrsjthq\\\xc1rw"
|
||||
"ng\\rqx\\gwpzucbh\xafl"
|
||||
"rw\"nf\\dna"
|
||||
"jkkeahxurxla\\g\xb3czrlsyimmwcwthr"
|
||||
"twaailoypu\"oas\"kpuuyedlaw\\\xb0vzt"
|
||||
"hznex\\gdiqvtugi"
|
||||
"imdibsunjeswhk"
|
||||
"ta\\icileuzpxro\"cfmv\"mzp"
|
||||
"coykr\x57luiysucfaflmilhlehmvzeiepo"
|
||||
"u\x3dfh\xd4yt"
|
||||
"piw\x1bz\"eowy\"vfk\"wqiekw"
|
||||
"gan\"y"
|
||||
"p\"bevidoazcznr\"hddxuuq\""
|
||||
"bwzucczznutbxe"
|
||||
"z\"viqgyqjisior\\iecosmjbknol"
|
||||
"dmlpcglcfkfsctxydjvayhymv\x3c\\gp"
|
||||
"bfvkqrintbbvgfv"
|
||||
"xlzntrgdck\"cprc\xadczyarbznqmuhxyuh"
|
||||
"uqdxnuwioc\"kdytxq\\ig"
|
||||
"xrafmucpmfi"
|
||||
"vr\"hltmfrge"
|
||||
"eonf\"nt\\wtcnsocs"
|
||||
"j\xb7xoslyjeyjksplkqixncgkylkw"
|
||||
"njw\"pefgfbez\x9axshdmplxzquqe"
|
||||
"di\x58bvptfsafirpc"
|
||||
"l\x1fkco"
|
||||
"x"
|
||||
"mprndo\"n"
|
||||
"psegit"
|
||||
"svbdnkkuuqs\"sqxu\"oqcyz\"aizashk"
|
||||
"cwkljukxer\\\"\\nff\"esjwiyaoy"
|
||||
"ilxrkgbjjxpvhdtq\"cpiuoofdnkpp"
|
||||
"hlngi\"ulxep\\qohtmqnqjb\"rkgerho"
|
||||
"gxws\"bcgm\"p"
|
||||
"bv\"mds\\zhfusiepgrz\\b\x32fscdzz"
|
||||
"l\xfampwtme\x69qvxnx\"\"\xc4jruuymjxrpsv"
|
||||
"qqmxhrn"
|
||||
"xziq\\\x18ybyv\x9am\"neacoqjzytertisysza"
|
||||
"aqcbvlvcrzceeyx\\j\"\"x"
|
||||
"yjuhhb"
|
||||
"\x5em\"squulpy"
|
||||
"dpbntplgmwb"
|
||||
"utsgfkm\\vbftjknlktpthoeo"
|
||||
"ccxjgiocmuhf\"ycnh"
|
||||
"lltj\"kbbxi"
|
||||
"""#
|
||||
|
||||
extension String {
|
||||
var lines: AnySequence<Substring> {
|
||||
AnySequence(sequence(state: self[...]) { rest in
|
||||
guard !rest.isEmpty else { return nil }
|
||||
|
||||
if let lineEnd = rest.firstIndex(where: \.isNewline) {
|
||||
|
||||
let result = rest[..<lineEnd]
|
||||
rest = rest[rest.index(after: lineEnd)...]
|
||||
return result
|
||||
} else {
|
||||
let result = rest
|
||||
rest = ""
|
||||
return result
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
enum Mode {
|
||||
case regular
|
||||
case escapeStart
|
||||
case hexDigit1
|
||||
case hexDigit2
|
||||
}
|
||||
|
||||
extension StringProtocol {
|
||||
|
||||
func decodedLength() -> Int {
|
||||
guard hasPrefix(#"""#), hasSuffix(#"""#) else {
|
||||
preconditionFailure()
|
||||
}
|
||||
|
||||
var count = 0
|
||||
var mode = Mode.regular
|
||||
|
||||
for char in dropFirst().dropLast() {
|
||||
switch mode {
|
||||
case .regular where char == "\\":
|
||||
mode = .escapeStart
|
||||
|
||||
case .regular:
|
||||
count += 1
|
||||
|
||||
case .escapeStart where char == "x":
|
||||
mode = .hexDigit1
|
||||
|
||||
case .escapeStart:
|
||||
count += 1
|
||||
mode = .regular
|
||||
|
||||
case .hexDigit1:
|
||||
mode = .hexDigit2
|
||||
|
||||
case .hexDigit2:
|
||||
mode = .regular
|
||||
count += 1
|
||||
}
|
||||
}
|
||||
|
||||
return count
|
||||
}
|
||||
}
|
||||
|
||||
let result: Int = input.lines
|
||||
.map { $0.count - $0.decodedLength() }
|
||||
.reduce(0) { $0 + $1 }
|
||||
|
||||
extension StringProtocol {
|
||||
func encode() -> String {
|
||||
var result = #"""#
|
||||
|
||||
for char in self {
|
||||
switch char {
|
||||
case #"""#: result += #"\""#
|
||||
case "\\": result += "\\\\"
|
||||
default: result.append(char)
|
||||
}
|
||||
}
|
||||
|
||||
result += #"""#
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
let result2: Int = input.lines
|
||||
.map { $0.encode().count - $0.count }
|
||||
.reduce(0) { $0 + $1 }
|
4
2015/Day8.playground/contents.xcplayground
Normal file
4
2015/Day8.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day8.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day8.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
69
2015/Day9.playground/Contents.swift
Normal file
69
2015/Day9.playground/Contents.swift
Normal file
|
@ -0,0 +1,69 @@
|
|||
var input: [(from: String, to: String, distance: Int)] = [
|
||||
("Tristram", "AlphaCentauri", 34),
|
||||
("Tristram", "Snowdin", 100),
|
||||
("Tristram", "Tambi", 63),
|
||||
("Tristram", "Faerun", 108),
|
||||
("Tristram", "Norrath", 111),
|
||||
("Tristram", "Straylight", 89),
|
||||
("Tristram", "Arbre", 132),
|
||||
("AlphaCentauri", "Snowdin", 4),
|
||||
("AlphaCentauri", "Tambi", 79),
|
||||
("AlphaCentauri", "Faerun", 44),
|
||||
("AlphaCentauri", "Norrath", 147),
|
||||
("AlphaCentauri", "Straylight", 133),
|
||||
("AlphaCentauri", "Arbre", 74),
|
||||
("Snowdin", "Tambi", 105),
|
||||
("Snowdin", "Faerun", 95),
|
||||
("Snowdin", "Norrath", 48),
|
||||
("Snowdin", "Straylight", 88),
|
||||
("Snowdin", "Arbre", 7),
|
||||
("Tambi", "Faerun", 68),
|
||||
("Tambi", "Norrath", 134),
|
||||
("Tambi", "Straylight", 107),
|
||||
("Tambi", "Arbre", 40),
|
||||
("Faerun", "Norrath", 11),
|
||||
("Faerun", "Straylight", 66),
|
||||
("Faerun", "Arbre", 144),
|
||||
("Norrath", "Straylight", 115),
|
||||
("Norrath", "Arbre", 135),
|
||||
("Straylight", "Arbre", 127),
|
||||
]
|
||||
|
||||
var distances: [String: [String: Int]] = input.reduce(into: [:]) { result, input in
|
||||
let (from, to, distance) = input
|
||||
|
||||
result[from, default: [:]][to] = distance
|
||||
result[to, default: [:]][from] = distance
|
||||
}
|
||||
|
||||
func totalDistance(route: [String]) -> Int {
|
||||
var distance = 0
|
||||
var current = route[0]
|
||||
for place in route.dropFirst() {
|
||||
distance += distances[current]![place]!
|
||||
current = place
|
||||
}
|
||||
|
||||
return distance
|
||||
}
|
||||
|
||||
func combinations(_ s: Set<String>) -> [[String]] {
|
||||
if s.count <= 2 {
|
||||
return [Array(s)]
|
||||
}
|
||||
|
||||
return s.reduce([]) { result, first in
|
||||
let rest = s.subtracting([first])
|
||||
|
||||
return result + combinations(rest).map { sub in
|
||||
var result = [first]
|
||||
result.append(contentsOf: sub)
|
||||
return result
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
combinations(Set(distances.keys))
|
||||
.map { totalDistance(route: $0) }
|
||||
.max()
|
||||
|
4
2015/Day9.playground/contents.xcplayground
Normal file
4
2015/Day9.playground/contents.xcplayground
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<playground version='5.0' target-platform='ios' buildActiveScheme='true' importAppTypes='true'>
|
||||
<timeline fileName='timeline.xctimeline'/>
|
||||
</playground>
|
7
2015/Day9.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
2015/Day9.playground/playground.xcworkspace/contents.xcworkspacedata
generated
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:">
|
||||
</FileRef>
|
||||
</Workspace>
|
Loading…
Add table
Reference in a new issue