void SetMovingToWaitLocationInWaitingArea(WaitingArea waitingAreaEnterred) { waitingTarget = waitingAreaEnterred.RegisterPersonForWaiting(this); SetAgentControl(true); //we were getting some people under physics control entering waiting areas and trying to SetDestination nmAgent.SetDestination(waitingTarget); rb.constraints = RigidbodyConstraints.FreezePositionY; //TODO: [this is required to get people who have fallen back to y lock] MEDIUM PRIORITY believe this is what is causing some people to penetrate the platform slightly (they must be reentering at wrong height) }
public void TestApplySeatingPartTwo() { var state0 = LoadInput("input_2_state_0.txt"); var state1 = LoadInput("input_2_state_1.txt"); var state2 = LoadInput("input_2_state_2.txt"); var state3 = LoadInput("input_2_state_3.txt"); var state4 = LoadInput("input_2_state_4.txt"); var state5 = LoadInput("input_2_state_5.txt"); var state6 = LoadInput("input_2_state_6.txt"); var waitingArea = new WaitingArea(state0); waitingArea.State.ShouldBe(state0); waitingArea.ApplySeatingPartTwo(); // Round 1 waitingArea.State.ShouldBe(state1); waitingArea.ApplySeatingPartTwo(); // Round 2 waitingArea.State.ShouldBe(state2); waitingArea.ApplySeatingPartTwo(); // Round 3 waitingArea.State.ShouldBe(state3); waitingArea.ApplySeatingPartTwo(); // Round 4 waitingArea.State.ShouldBe(state4); waitingArea.ApplySeatingPartTwo(); // Round 5 waitingArea.State.ShouldBe(state5); waitingArea.ApplySeatingPartTwo(); // Round 6 waitingArea.State.ShouldBe(state6); waitingArea.ApplySeatingPartTwo(); // Round 7 (should be no change) waitingArea.State.ShouldBe(state6); waitingArea.SeatsTaken.ShouldBe(26); }
public void OnWaitingAreaEnter(WaitingArea waitingAreaEnterred) { WaitingArea desiredWaitingArea = (myTargetTimetableItem != null && myTargetTimetableItem.platform != null) ? myTargetTimetableItem.platform.waitingArea : GameManager.instance.foyer; if (waitingAreaEnterred == desiredWaitingArea) { if (status == PersonStatus.BoardingTrain) //for any people that fall out of train while boarding just register them as passing through { waitingAreaEnterred.RegisterNonWaitingPerson(this); } else if (status == PersonStatus.MovingToPlatform) { status = PersonStatus.ReadyToBoard; if (myTargetTimetableItem != null && myTargetTimetableItem.train != null && myTargetTimetableItem.train.status == Train.TrainStatus.BoardingTime) //if we have entered a platform whilst train is boarding already then call OnTrainBoarding and just register that we are passing through { waitingAreaEnterred.RegisterNonWaitingPerson(this); OnTrainBoardingTime(); } else { SetMovingToWaitLocationInWaitingArea(waitingAreaEnterred); } } else if (status == PersonStatus.MovingToFoyer) { status = PersonStatus.AtFoyer; SetMovingToWaitLocationInWaitingArea(waitingAreaEnterred); } } else { waitingAreaEnterred.RegisterNonWaitingPerson(this); } }
public void TestFiveOrMourSeatsInSight(string filename, int x, int y, bool result) { var area = LoadInput(filename); var waitingArea = new WaitingArea(area); waitingArea.FiveOrMoreSeatsInSight(x, y).ShouldBe(result); }
public void RunSimulation_test() { var initialLayout = GetInitialLayout(); var expected = new[] { new[] { '#', '.', '#', 'L', '.', 'L', '#', '.', '#', '#', }, new[] { '#', 'L', 'L', 'L', '#', 'L', 'L', '.', 'L', '#', }, new[] { 'L', '.', '#', '.', 'L', '.', '.', '#', '.', '.', }, new[] { '#', 'L', '#', '#', '.', '#', '#', '.', 'L', '#', }, new[] { '#', '.', '#', 'L', '.', 'L', 'L', '.', 'L', 'L', }, new[] { '#', '.', '#', 'L', '#', 'L', '#', '.', '#', '#', }, new[] { '.', '.', 'L', '.', 'L', '.', '.', '.', '.', '.', }, new[] { '#', 'L', '#', 'L', '#', '#', 'L', '#', 'L', '#', }, new[] { '#', '.', 'L', 'L', 'L', 'L', 'L', 'L', '.', 'L', }, new[] { '#', '.', '#', 'L', '#', 'L', '#', '.', '#', '#', } }; var subject = new WaitingArea(initialLayout); subject.RunSimulation(); var result = subject.newLayout; Assert.Equal(expected, result); }
public void TestFourOrMoreSeatsOccupiedAround(string filename, int x, int y, bool result) { var area = LoadInput(filename); var waitingArea = new WaitingArea(area); waitingArea.FourOrMoreSeatsOccupiedAround(x, y).ShouldBe(result); }
public void UpdateLayout_WhenPassengersArrive(string layout, string expectedLayout) { var sut = new WaitingArea(layout); sut.AddPassengersWith(new NormalBehaviour()); Assert.Equal(expectedLayout, sut.Layout); }
public void Single_update_test() { var initialLayout = GetInitialLayout(); var expected = new[] { new[] { '#', '.', '#', '#', '.', '#', '#', '.', '#', '#' }, new[] { '#', '#', '#', '#', '#', '#', '#', '.', '#', '#' }, new[] { '#', '.', '#', '.', '#', '.', '.', '#', '.', '.' }, new[] { '#', '#', '#', '#', '.', '#', '#', '.', '#', '#' }, new[] { '#', '.', '#', '#', '.', '#', '#', '.', '#', '#' }, new[] { '#', '.', '#', '#', '#', '#', '#', '.', '#', '#' }, new[] { '.', '.', '#', '.', '#', '.', '.', '.', '.', '.' }, new[] { '#', '#', '#', '#', '#', '#', '#', '#', '#', '#' }, new[] { '#', '.', '#', '#', '#', '#', '#', '#', '.', '#' }, new[] { '#', '.', '#', '#', '#', '#', '#', '.', '#', '#' } }; var subject = new WaitingArea(initialLayout); subject.UpdateLayout(); var result = subject.CurrentLayout; Assert.Equal(expected, result); }
public void SolveFirstPuzzle() { var sut = new WaitingArea(PuzzleData.PUZZLE_DATA); sut.UntilNothingChangesAddPassengersWith(new NormalBehaviour()); Assert.Equal(2334, sut.OccupiedSeats); }
public void Test12() { var layout = @"L.LL.LL.LL LLLLLLL.LL L.L.L..L.. LLLL.LL.LL L.LL.LL.LL L.LLLLL.LL ..L.L..... LLLLLLLLLL L.LLLLLL.L L.LLLLL.LL"; var sut = new WaitingArea(layout); sut.AddPassengersWith(new ShyBehaviour()); Assert.Equal(@"#.##.##.## #######.## #.#.#..#.. ####.##.## #.##.##.## #.#####.## ..#.#..... ########## #.######.# #.#####.##", sut.Layout); }
public void Test18() { const string layout = @"#.L#.L#.L# #LLLLLL.LL L.L.L..#.. ##L#.#L.L# L.L#.LL.L# #.LLLL#.LL ..#.L..... LLL###LLL# #.LLLLL#.L #.L#LL#.L#"; var sut = new WaitingArea(layout); sut.AddPassengersWith(new ShyBehaviour()); Assert.Equal(@"#.L#.L#.L# #LLLLLL.LL L.L.L..#.. ##L#.#L.L# L.L#.LL.L# #.LLLL#.LL ..#.L..... LLL###LLL# #.LLLLL#.L #.L#LL#.L#", sut.Layout); Assert.Equal(26, sut.OccupiedSeats); }
public void TestSeatsTaken(string filename, int seatsTaken) { var area = LoadInput(filename); var waitingArea = new WaitingArea(area); waitingArea.SeatsTaken.ShouldBe(seatsTaken); }
public void TestAnyOccupiedSeatsInSight(string filename, int x, int y, bool result) { var area = LoadInput(filename); var waitingArea = new WaitingArea(area); waitingArea.AnyOccupiedSeatsInSight(x, y).ShouldBe(result); }
public void TestGetInfo(int x, int y, char result) { var area = LoadInput("input_1_state_0.txt"); var waitingArea = new WaitingArea(area); waitingArea.GetInfo(x, y).ShouldBe(result); }
public void Parse_row() { var a = new WaitingArea(".L."); a[0, 0].Should().Be(WaitingArea.Floor); a[0, 1].Should().Be(WaitingArea.EmptySeat); a[0, 2].Should().Be(WaitingArea.Floor); }
void Start() { waitingArea = WaitingAreaTilemap.GetComponent <WaitingArea>(); targetEmptiesParent = new GameObject("Customer target empties"); StartCoroutine(SpawnCycle()); }
public void SolveSecondPuzzle() { var sut = new WaitingArea(PuzzleData.PUZZLE_DATA); sut.UntilNothingChangesAddPassengersWith(new ShyBehaviour()); Assert.Equal(2100, sut.OccupiedSeats); }
public WaitingArea RunRounds(int n) { for (int i = 0; i < n; i++) { var mutations = GetMutations().ToArray(); _initialState = mutations.Aggregate(seed: _initialState, (a, m) => m.Execute(a)); } return(_initialState); }
public void Occupied_seats_calculated_correctly() { var initialLayout = GetInitialLayout(); var subject = new WaitingArea(initialLayout); subject.RunSimulation(); var result = subject.OccupiedSeats; Assert.Equal(37, result); }
public void OnWaitingAreaExit(WaitingArea waitingArea) { if (status != PersonStatus.ReadyToBoard) //fix: when people are moving to their wait location they sometimes have to move out of the platform waiting trigger { waitingArea.UnregisterPerson(this); } if (status != PersonStatus.MovingToPlatform) //fix: do not want people moving out of foyer and onto platform to suddenly go limp { rb.constraints = RigidbodyConstraints.None; } }
void Start() { GameObject signalGO = GetComponentInChildren <Signal> ().gameObject; platformSignalTrigger = signalGO.GetComponent <BoxCollider> (); Vector3 signalPosition = signalGO.transform.localPosition; signalPosition.z = isLeftHanded ? 3.58f : -3.58f; signalGO.transform.localPosition = signalPosition; waitingArea = GetComponent <WaitingArea> (); }
public void Puzzle1_FindOccupiedSeatCount_AfterPatternStabilizes() { var area = new WaitingArea(Input.Day11); bool result; do { result = area.Puzzle1Tick(); } while (result is true); area.OccupiedSeats.Should().Be(2361); }
public void Puzzle2_FindOccupiedSeatCount_WithModifiedAlgorithm() { var area = new WaitingArea(Input.Day11); bool result; do { result = area.Puzzle2Tick(); } while (result is true); area.OccupiedSeats.Should().Be(2119); }
public void WaitingArea_Puzzle1Ticks_HaveCorrectPatternResults(int numTicks, bool expectedTickResult, string expectedGrid) { var area = new WaitingArea(Example); bool?result = null; for (var k = 0; k < numTicks; ++k) { result = area.Puzzle1Tick(); } result.Should().Be(expectedTickResult); area.ToString().Should().Be(expectedGrid); }
public void WaitingArea_Example_Has37SeatsWhenStablePatternIsFound() { var area = new WaitingArea(Example); bool result; do { result = area.Puzzle1Tick(); } while (result is true); area.OccupiedSeats.Should().Be(37); }
public WaitingArea Run() { while (true) { var mutations = GetMutations().ToArray(); if (mutations.IsEmpty()) { return(_initialState); } _initialState = mutations.Aggregate(seed: _initialState, (a, m) => m.Execute(a)); } }
public void TestInitWaitingArea() { var area = LoadInput("input_1_state_0.txt"); var waitingArea = new WaitingArea(area); waitingArea.SizeX.ShouldBe(10); waitingArea.SizeY.ShouldBe(10); waitingArea.GetInfo(0, 0).ShouldBe('L'); waitingArea.GetInfo(9, 9).ShouldBe('L'); waitingArea.GetInfo(0, 9).ShouldBe('L'); waitingArea.GetInfo(9, 0).ShouldBe('L'); waitingArea.GetInfo(9, 6).ShouldBe('.'); }
private void Init() { int h = parser.Lines.Count; int w = parser.Lines[0].Length; area = new WaitingArea(w, h); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { if (parser.Lines[i][j].Equals('L')) { area.SetState(j, i, SeatState.Empty); } } } }
public void CalculateOccupiedSeats_AfterReceivingPassengers() { const string layout = @"#.#L.L#.## #LLL#LL.L# L.#.L..#.. #L##.##.L# #.#L.LL.LL #.#L#L#.## ..L.L..... #L#L##L#L# #.LLLLLL.L #.#L#L#.##"; var sut = new WaitingArea(layout); sut.AddPassengersWith(new NormalBehaviour()); Assert.Equal(37, sut.OccupiedSeats); }
public void ReturnSameLayout_WhenMaximumCombinationsAreReached() { const string layout = @"#.#L.L#.## #LLL#LL.L# L.#.L..#.. #L##.##.L# #.#L.LL.LL #.#L#L#.## ..L.L..... #L#L##L#L# #.LLLLLL.L #.#L#L#.##"; var sut = new WaitingArea(layout); sut.AddPassengersWith(new NormalBehaviour()); Assert.Equal(layout, sut.Layout); }