Day 17
This commit is contained in:
parent
92e0895ed2
commit
3ba710552d
2 changed files with 170 additions and 0 deletions
|
@ -19,6 +19,8 @@
|
||||||
263CCF6A276606010061B353 /* day11.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263CCF69276606010061B353 /* day11.swift */; };
|
263CCF6A276606010061B353 /* day11.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263CCF69276606010061B353 /* day11.swift */; };
|
||||||
263CCF782766066D0061B353 /* day12.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263CCF76276606670061B353 /* day12.swift */; };
|
263CCF782766066D0061B353 /* day12.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263CCF76276606670061B353 /* day12.swift */; };
|
||||||
263CCF79276606730061B353 /* common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269BE5CB2762A08800871C85 /* common.swift */; };
|
263CCF79276606730061B353 /* common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269BE5CB2762A08800871C85 /* common.swift */; };
|
||||||
|
263D3E33276DDA6600B0AC5B /* day17.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263D3E32276DDA6600B0AC5B /* day17.swift */; };
|
||||||
|
263D3E34276DDA7000B0AC5B /* common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269BE5CB2762A08800871C85 /* common.swift */; };
|
||||||
265112972767D16D009B7607 /* day13.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265112962767D16D009B7607 /* day13.swift */; };
|
265112972767D16D009B7607 /* day13.swift in Sources */ = {isa = PBXBuildFile; fileRef = 265112962767D16D009B7607 /* day13.swift */; };
|
||||||
265112982767D171009B7607 /* common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269BE5CB2762A08800871C85 /* common.swift */; };
|
265112982767D171009B7607 /* common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269BE5CB2762A08800871C85 /* common.swift */; };
|
||||||
269BE5BC2762959C00871C85 /* day8part2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269BE5BB2762959B00871C85 /* day8part2.swift */; };
|
269BE5BC2762959C00871C85 /* day8part2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 269BE5BB2762959B00871C85 /* day8part2.swift */; };
|
||||||
|
@ -95,6 +97,15 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 1;
|
runOnlyForDeploymentPostprocessing = 1;
|
||||||
};
|
};
|
||||||
|
263D3E29276DDA5400B0AC5B /* CopyFiles */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = /usr/share/man/man1/;
|
||||||
|
dstSubfolderSpec = 0;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 1;
|
||||||
|
};
|
||||||
2651128D2767D15A009B7607 /* CopyFiles */ = {
|
2651128D2767D15A009B7607 /* CopyFiles */ = {
|
||||||
isa = PBXCopyFilesBuildPhase;
|
isa = PBXCopyFilesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
@ -148,6 +159,8 @@
|
||||||
263CCF69276606010061B353 /* day11.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = day11.swift; sourceTree = "<group>"; };
|
263CCF69276606010061B353 /* day11.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = day11.swift; sourceTree = "<group>"; };
|
||||||
263CCF6F2766065B0061B353 /* Day12 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day12; sourceTree = BUILT_PRODUCTS_DIR; };
|
263CCF6F2766065B0061B353 /* Day12 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day12; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
263CCF76276606670061B353 /* day12.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = day12.swift; sourceTree = "<group>"; };
|
263CCF76276606670061B353 /* day12.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = day12.swift; sourceTree = "<group>"; };
|
||||||
|
263D3E2B276DDA5400B0AC5B /* Day17 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day17; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
263D3E32276DDA6600B0AC5B /* day17.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = day17.swift; sourceTree = "<group>"; };
|
||||||
2651128F2767D15A009B7607 /* Day13 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day13; sourceTree = BUILT_PRODUCTS_DIR; };
|
2651128F2767D15A009B7607 /* Day13 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day13; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
265112962767D16D009B7607 /* day13.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = day13.swift; sourceTree = "<group>"; };
|
265112962767D16D009B7607 /* day13.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = day13.swift; sourceTree = "<group>"; };
|
||||||
269BE5B42762958800871C85 /* Day8Part2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day8Part2; sourceTree = BUILT_PRODUCTS_DIR; };
|
269BE5B42762958800871C85 /* Day8Part2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Day8Part2; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
@ -209,6 +222,13 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
263D3E28276DDA5400B0AC5B /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
2651128C2767D15A009B7607 /* Frameworks */ = {
|
2651128C2767D15A009B7607 /* Frameworks */ = {
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
@ -243,6 +263,7 @@
|
||||||
263BA594275E974800839C92 = {
|
263BA594275E974800839C92 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
263D3E32276DDA6600B0AC5B /* day17.swift */,
|
||||||
26EA5DFF276BA680003E0305 /* day16.swift */,
|
26EA5DFF276BA680003E0305 /* day16.swift */,
|
||||||
26155467276A6D0A00374D18 /* day15.swift */,
|
26155467276A6D0A00374D18 /* day15.swift */,
|
||||||
26155459276A6C2C00374D18 /* day14.swift */,
|
26155459276A6C2C00374D18 /* day14.swift */,
|
||||||
|
@ -273,6 +294,7 @@
|
||||||
26155452276A6C1C00374D18 /* Day14 */,
|
26155452276A6C1C00374D18 /* Day14 */,
|
||||||
26155460276A6CF700374D18 /* Day15 */,
|
26155460276A6CF700374D18 /* Day15 */,
|
||||||
26EA5DF7276BA668003E0305 /* Day16 */,
|
26EA5DF7276BA668003E0305 /* Day16 */,
|
||||||
|
263D3E2B276DDA5400B0AC5B /* Day17 */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -399,6 +421,23 @@
|
||||||
productReference = 263CCF6F2766065B0061B353 /* Day12 */;
|
productReference = 263CCF6F2766065B0061B353 /* Day12 */;
|
||||||
productType = "com.apple.product-type.tool";
|
productType = "com.apple.product-type.tool";
|
||||||
};
|
};
|
||||||
|
263D3E2A276DDA5400B0AC5B /* Day17 */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 263D3E31276DDA5400B0AC5B /* Build configuration list for PBXNativeTarget "Day17" */;
|
||||||
|
buildPhases = (
|
||||||
|
263D3E27276DDA5400B0AC5B /* Sources */,
|
||||||
|
263D3E28276DDA5400B0AC5B /* Frameworks */,
|
||||||
|
263D3E29276DDA5400B0AC5B /* CopyFiles */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = Day17;
|
||||||
|
productName = Day17;
|
||||||
|
productReference = 263D3E2B276DDA5400B0AC5B /* Day17 */;
|
||||||
|
productType = "com.apple.product-type.tool";
|
||||||
|
};
|
||||||
2651128E2767D15A009B7607 /* Day13 */ = {
|
2651128E2767D15A009B7607 /* Day13 */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 265112952767D15A009B7607 /* Build configuration list for PBXNativeTarget "Day13" */;
|
buildConfigurationList = 265112952767D15A009B7607 /* Build configuration list for PBXNativeTarget "Day13" */;
|
||||||
|
@ -504,6 +543,10 @@
|
||||||
263CCF6E2766065B0061B353 = {
|
263CCF6E2766065B0061B353 = {
|
||||||
CreatedOnToolsVersion = 13.1;
|
CreatedOnToolsVersion = 13.1;
|
||||||
};
|
};
|
||||||
|
263D3E2A276DDA5400B0AC5B = {
|
||||||
|
CreatedOnToolsVersion = 13.2;
|
||||||
|
LastSwiftMigration = 1320;
|
||||||
|
};
|
||||||
2651128E2767D15A009B7607 = {
|
2651128E2767D15A009B7607 = {
|
||||||
CreatedOnToolsVersion = 13.1;
|
CreatedOnToolsVersion = 13.1;
|
||||||
LastSwiftMigration = 1310;
|
LastSwiftMigration = 1310;
|
||||||
|
@ -544,6 +587,7 @@
|
||||||
26155451276A6C1C00374D18 /* Day14 */,
|
26155451276A6C1C00374D18 /* Day14 */,
|
||||||
2615545F276A6CF700374D18 /* Day15 */,
|
2615545F276A6CF700374D18 /* Day15 */,
|
||||||
26EA5DF6276BA668003E0305 /* Day16 */,
|
26EA5DF6276BA668003E0305 /* Day16 */,
|
||||||
|
263D3E2A276DDA5400B0AC5B /* Day17 */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
@ -612,6 +656,15 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
263D3E27276DDA5400B0AC5B /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
263D3E34276DDA7000B0AC5B /* common.swift in Sources */,
|
||||||
|
263D3E33276DDA6600B0AC5B /* day17.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
2651128B2767D15A009B7607 /* Sources */ = {
|
2651128B2767D15A009B7607 /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
@ -985,6 +1038,43 @@
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
263D3E2F276DDA5400B0AC5B /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = 722B335UM5;
|
||||||
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/../Frameworks",
|
||||||
|
"@loader_path/../Frameworks",
|
||||||
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 12.1;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
263D3E30276DDA5400B0AC5B /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEVELOPMENT_TEAM = 722B335UM5;
|
||||||
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/../Frameworks",
|
||||||
|
"@loader_path/../Frameworks",
|
||||||
|
);
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 12.1;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
265112932767D15A009B7607 /* Debug */ = {
|
265112932767D15A009B7607 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
@ -1176,6 +1266,15 @@
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
|
263D3E31276DDA5400B0AC5B /* Build configuration list for PBXNativeTarget "Day17" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
263D3E2F276DDA5400B0AC5B /* Debug */,
|
||||||
|
263D3E30276DDA5400B0AC5B /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
265112952767D15A009B7607 /* Build configuration list for PBXNativeTarget "Day13" */ = {
|
265112952767D15A009B7607 /* Build configuration list for PBXNativeTarget "Day13" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
|
|
71
day17.swift
Normal file
71
day17.swift
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
@main
|
||||||
|
struct Day17: Puzzle {
|
||||||
|
func run() {
|
||||||
|
var maxHeight: Int = 0
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
for speedX in 1..<300 {
|
||||||
|
for speedY in -600..<300 {
|
||||||
|
if case .hit(let height) = run(vx: speedX, vy: speedY) {
|
||||||
|
maxHeight = max(height, maxHeight)
|
||||||
|
count += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print("Part 1:", maxHeight)
|
||||||
|
print("Part 2:", count)
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Result {
|
||||||
|
case tooFar
|
||||||
|
case tooShort
|
||||||
|
case hit(height: Int)
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Vector: Hashable {
|
||||||
|
var x: Int
|
||||||
|
var y: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
func run(vx: Int, vy: Int) -> Result {
|
||||||
|
var state = State(vx: vx, vy: vy)
|
||||||
|
while state.x <= xMax && state.y >= yMin {
|
||||||
|
state.step()
|
||||||
|
if xMin...xMax ~= state.x && yMin...yMax ~= state.y {
|
||||||
|
return .hit(height: state.maxHeight)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if state.x > xMax {
|
||||||
|
return .tooFar
|
||||||
|
}
|
||||||
|
|
||||||
|
return .tooShort
|
||||||
|
}
|
||||||
|
|
||||||
|
struct State {
|
||||||
|
var vx: Int
|
||||||
|
var vy: Int
|
||||||
|
var x: Int = 0
|
||||||
|
var y: Int = 0
|
||||||
|
var maxHeight = 0
|
||||||
|
|
||||||
|
mutating func step() {
|
||||||
|
if y > maxHeight {
|
||||||
|
maxHeight = y
|
||||||
|
}
|
||||||
|
|
||||||
|
x += vx
|
||||||
|
y += vy
|
||||||
|
vx -= vx.signum()
|
||||||
|
vy -= 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// target area: x=138..184, y=-125..-71
|
||||||
|
let xMin = 138
|
||||||
|
let xMax = 184
|
||||||
|
let yMin = -125
|
||||||
|
let yMax = -71
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue