From 4f45e0ec6ef76fa468e14d80d6bd1fdfacadc73c Mon Sep 17 00:00:00 2001 From: DerGrumpf Date: Fri, 13 Sep 2024 14:16:12 +0200 Subject: [PATCH] init --- Cactus.py | 77 ++++ Diagonalsort.py | 32 ++ Dinosaur.py | 6 + Generics.py | 166 +++++++++ Main.py | 5 + Maze.py | 33 ++ Polyculture.py | 19 + Pumpkins.py | 24 ++ README.md | 0 Save0 | 1 + Sunflowers.py | 22 ++ __builtins__.py | 974 ++++++++++++++++++++++++++++++++++++++++++++++++ save.json | 1 + 13 files changed, 1360 insertions(+) create mode 100644 Cactus.py create mode 100644 Diagonalsort.py create mode 100644 Dinosaur.py create mode 100644 Generics.py create mode 100644 Main.py create mode 100644 Maze.py create mode 100644 Polyculture.py create mode 100644 Pumpkins.py create mode 100644 README.md create mode 120000 Save0 create mode 100644 Sunflowers.py create mode 100644 __builtins__.py create mode 100644 save.json diff --git a/Cactus.py b/Cactus.py new file mode 100644 index 0000000..15ec980 --- /dev/null +++ b/Cactus.py @@ -0,0 +1,77 @@ +def Cactus(): + size = get_world_size() + init_plant(size, Entities.Cactus) + goto((0,0)) + + field = [] + for y in range(size): + row = [] + for x in range(size): + goto((x,y)) + better_plant(Entities.Cactus) + row.append(measure()) + field.append(row) + + for y in range(size): + curr = field[y] + while not is_sorted(curr): + for x in range(size): + goto((x,y)) + if measure(East) < measure(): + swap(East) + if measure(North) < measure(): + swap(North) + for x in range(size): + goto((x,y)) + curr[x] = measure() + + for i in range(len(field)-1, 0, -1): + quick_print(field[i], is_sorted(field[i])) + +while num_items(Items.Cactus) < 3000: + harvest() + Cactus() + +def diag_sort(mat): + lst = [] + n, m = len(mat), len(mat[0]) + # leftmost column + for i in range(n): + lst.append([i, 0]) + + # rightmost row + for i in range(m): + lst.append([0, i]) + + lst.pop(0) + + for el in lst: + i, j = el[0], el[1] + arr = [] + + # getting the diagonal elements + while i < n and j < m: + arr.append(mat[i][j]) + i, j = i+1, j+1 + + arr = insertion_sort(arr) + + i, j = el[0], el[1] + # setting the element in sorted order + while i < n and j < m: + mat[i][j] = arr.pop(0) + i, j = i+1, j+1 + return mat + + +m1 = [ + [4,5,6], + [9,8,7], + [2,3,1] + ] +for el in m1: + quick_print(el) +m1 = diag_sort(m1) +quick_print("") +for el in m1: + quick_print(el) \ No newline at end of file diff --git a/Diagonalsort.py b/Diagonalsort.py new file mode 100644 index 0000000..c9d31d0 --- /dev/null +++ b/Diagonalsort.py @@ -0,0 +1,32 @@ +def diagonalSort(self, mat: List[List[int]]) -> List[List[int]]: + lst = [] + n, m = len(mat), len(mat[0]) + + # leftmost column + for i in range(n): + lst.append([i, 0]) + + # rightmost row + for i in range(m): + lst.append([0, i]) + + lst.pop(0) + + for x, y in lst: + arr = [] + i, j = x, y + + # getting the diagonal elements + while i < n and j < m: + arr.append(mat[i][j]) + i, j = i+1, j+1 + + arr.sort() # sort the elements + + i, j = x, y + # setting the element in sorted order + while i < n and j < m: + mat[i][j] = arr.pop(0) + i, j = i+1, j+1 + + return mat \ No newline at end of file diff --git a/Dinosaur.py b/Dinosaur.py new file mode 100644 index 0000000..cd8cbaa --- /dev/null +++ b/Dinosaur.py @@ -0,0 +1,6 @@ +trade(Items.Egg, 100) +field = field_grid(get_world_size()) +for cell in field: + goto(cell) + harvest() + use_item(Items.Egg) \ No newline at end of file diff --git a/Generics.py b/Generics.py new file mode 100644 index 0000000..da8f409 --- /dev/null +++ b/Generics.py @@ -0,0 +1,166 @@ +def goto(coord): + x, y = coord[0], coord[1] + yDist = get_pos_y() - y # Positive if drone is north of the target space + xDist = get_pos_x() - x # Positive if drone is east of the target space + halfWorldSize = get_world_size()/2 + + while get_pos_y() != y: + if yDist >= halfWorldSize or (-halfWorldSize <= yDist and yDist < 0): + move(North) + else: + move(South) + + while get_pos_x() != x: + if xDist >= halfWorldSize or (-halfWorldSize < xDist and xDist < 0): + move(East) + else: + move(West) + +def field_grid(size): + field = [] + for x in range(size): + for y in range(size): + field.append((x,y)) + return field + +def field_chess_grid(size, black): + field = [] + for x in range(size): + for y in range(size): + if (x + y) % 2 == black: + field.append((x,y)) + return field + +def field_plant_grid(size, element): + field = {} + for x in range(size): + for y in range(size): + field[(x,y)] = element + return field + +def index(x, y, width): + return x * width + y + +def get_inventory(): + inventory = {} + for item in Items: + inventory[item] = num_items(item) + return inventory + + +def init_plant(size, element): + if element == Entities.Grass: + clear() + do_a_flip() + return + + # generate field + field = field_grid(size) + for cell in field: + goto(cell) + harvest() + better_plant(element) + + +def harvest_field(size): + field = field_grid(size) + for cell in field: + goto(cell) + if can_harvest(): + harvest() + + +def replant(coords, element): + for coord in coords: + goto(coord) + plant(element) + +def is_sorted(arr): + for i in range(len(arr)-1): + if arr[i] > arr[i+1]: + return False + return True + +def check_seeds(): + seeds = [Items.Carrot_Seed, Items.Pumpkin_Seed, Items.Sunflower_Seed, Items.Cactus_Seed] + inventory = get_inventory() + goal = {} + size = get_world_size()*get_world_size() + + for seed in seeds: + diff = abs(inventory[seed] - size) + if diff > size: + goal[seed] = 0 + else: + goal[seed] = diff + + for g in goal: + amount = goal[g] + if amount > 0: + #quick_print("buying", g, amount) + if g == Items.Carrot_Seed: + if num_items(Items.Wood)/12 > amount and num_items(Items.Hay) > amount: + trade(g, amount) + + if g == Items.Pumpkin_Seed: + if num_items(Items.Carrot)/9 > amount: + trade(g, amount) + + if g == Items.Sunflower_Seed: + if num_items(Items.Carrot) > amount: + trade(g, amount) + + if g == Items.Cactus_Seed: + if num_items(Items.Gold) > amount: + trade(g, amount) + +def sum(arr): + count = 0 + for el in arr: + count += el + return count + +def sum_from_dict(d): + count = 0 + for el in d: + count += d[el] + return count + +def better_plant(p): + if p == Entities.Grass or p == Entities.Bush or p == Entities.Tree: + if get_ground_type() != Grounds.Turf: + harvest() + till() + if p == Entities.Carrots or p == Entities.Pumpkin or p == Entities.Sunflower: + check_seeds() + if get_ground_type() != Grounds.Soil: + harvest() + till() + while get_water() < 0.8 and num_items(Items.Water_Tank) > 10: + use_item(Items.Water_Tank) + if num_items(Items.Pumpkin) > 10: + if num_items(Items.Fertilizer) < 1: + trade(Items.Fertilizer) + use_item(Items.Fertilizer) + if p == Entities.Cactus: + check_seeds() + if get_ground_type() != Grounds.Soil: + harvest() + till() + plant(p) + +def insertion_sort(array): + for step in range(1, len(array)): + key = array[step] + j = step - 1 + + # Compare key with each element on the left of it until an element smaller than it is found + # For descending order, change keyarray[j]. + while j >= 0 and key < array[j]: + array[j + 1] = array[j] + j = j - 1 + + # Place key at after the element just smaller than it. + array[j + 1] = key + return array + diff --git a/Main.py b/Main.py new file mode 100644 index 0000000..5193e45 --- /dev/null +++ b/Main.py @@ -0,0 +1,5 @@ +clear() +while True: + #Tree() + #Mixed() + Pumpkin() \ No newline at end of file diff --git a/Maze.py b/Maze.py new file mode 100644 index 0000000..ae9aaad --- /dev/null +++ b/Maze.py @@ -0,0 +1,33 @@ +def start_maze(n_times): + init_maze() + while get_entity_type() != Entities.Hedge and get_entity_type() != Entities.Treasure: + trade(Items.Fertilizer) + use_item(Items.Fertilizer) + for i in range(n_times): + while get_entity_type() == Entities.Treasure: + trade(Items.Fertilizer) + use_item(Items.Fertilizer) + solve_maze() + harvest() + +def solve_maze(): + facing = 0 + directions = [North, East, South, West] + + while get_entity_type() != Entities.Treasure: + x, y = get_pos_x(), get_pos_y() + + move(directions[facing % 4]) + + facing += 1 + if x == get_pos_x() and y == get_pos_y(): + facing += 2 + +def init_maze(): + clear() + harvest() + better_plant(Entities.Bush) + + +while num_items(Items.Gold) < 30000: + start_maze(1) \ No newline at end of file diff --git a/Polyculture.py b/Polyculture.py new file mode 100644 index 0000000..bd5909b --- /dev/null +++ b/Polyculture.py @@ -0,0 +1,19 @@ +def polyculture(): + + field = field_plant_grid(get_world_size(), Entities.Grass) + + for cell in field: + goto(cell) + if get_companion() != None: + c, x, y = get_companion() + field[(x,y)] = c + + p = field[(get_pos_x(), get_pos_y())] + better_plant(p) + + if can_harvest(): + harvest() + +init_plant(get_world_size(), Entities.Grass) +while num_items(Items.Carrot) < 30000: + polyculture() \ No newline at end of file diff --git a/Pumpkins.py b/Pumpkins.py new file mode 100644 index 0000000..7454ac4 --- /dev/null +++ b/Pumpkins.py @@ -0,0 +1,24 @@ +def pumpkin(): + # init field + field = field_plant_grid(get_world_size(), 0) + init_plant(get_world_size(), Entities.Pumpkin) + + while sum_from_dict(field) < get_world_size()*get_world_size(): + for cell in field: + goto(cell) + if get_entity_type() == Entities.Pumpkin: + field[cell] = 1 + + for cell in field: + if field[cell] == 0: + goto(cell) + better_plant(Entities.Pumpkin) + + + harvest() + + +while num_items(Items.Pumpkin) < 100000: + pumpkin() + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Save0 b/Save0 new file mode 120000 index 0000000..492e713 --- /dev/null +++ b/Save0 @@ -0,0 +1 @@ +/storage/SteamLibrary/steamapps/compatdata/2060160/pfx/drive_c/users/steamuser/AppData/LocalLow/TheFarmerWasReplaced/TheFarmerWasReplaced/Saves/Save0 \ No newline at end of file diff --git a/Sunflowers.py b/Sunflowers.py new file mode 100644 index 0000000..44df7ae --- /dev/null +++ b/Sunflowers.py @@ -0,0 +1,22 @@ +def Sunflower(): + field = field_plant_grid(get_world_size(), 0) + + for cell in field: + goto(cell) + better_plant(Entities.Sunflower) + field[cell] = measure() + + m = 15 + while field: + delete = [] + for cell in field: + if field[cell] == m: + goto(cell) + harvest() + delete.append(cell) + for d in delete: + field.pop(d) + m -= 1 + +while num_items(Items.Power) < 10000: + Sunflower() \ No newline at end of file diff --git a/__builtins__.py b/__builtins__.py new file mode 100644 index 0000000..cb865c3 --- /dev/null +++ b/__builtins__.py @@ -0,0 +1,974 @@ +from typing import Any, Optional + + +# ------------------------------------------------------------------------------- +class Items: + @property + def Carrot(self): + """Obtained by harvesting carrots.""" + ... + + @property + def Carrot_Seed(self): + """Used to grow carrots by calling `plant(Entities.Carrots)` on empty soil.""" + ... + + @property + def Empty_Tank(self): + """Empty tanks automatically turn into water tanks over time.""" + ... + + @property + def Fertilizer(self): + """Call `use_item(Items.Fertilizer)` to instantly grow the plant under the drone by 2s.""" + ... + + @property + def Gold(self): + """Found in treasure chests in mazes.""" + ... + + @property + def Hay(self): + """Obtained by cutting grass.""" + ... + + @property + def Power(self): + """Obtained by harvesting sunflowers. The drone automatically uses this to move twice as fast.""" + ... + + @property + def Pumpkin(self): + """Obtained when harvesting pumpkins.""" + ... + + @property + def Pumpkin_Seed(self): + """Used to grow pumpkins by calling `plant(Entities.Pumpkin)` on empty soil.""" + ... + + @property + def Sunflower_Seed(self): + """Used to grow sunflowers by calling `plant(Entities.Sunflower)` on empty soil.""" + ... + + @property + def Water_Tank(self): + """Used to water the ground by calling `use_item(Items.Water_Tank)`.""" + ... + + @property + def Wood(self): + """Obtained from bushes and trees.""" + ... + + @property + def Cactus(self): + """Obtained when harvesting sorted cacti.""" + ... + + @property + def Cactus_Seed(self): + """Used to grow cacti by calling `plant(Entities.Cactus)` on empty soil.""" + ... + + @property + def Egg(self): + """Call `use_item(Items.Egg)` to hatch a majestic dinosaur.""" + ... + + @property + def Bones(self): + """The bones of an ancient creature.""" + ... + + +# ------------------------------------------------------------------------------- +class Entities: + @property + def Grass(self): + """ + Grows automatically. Harvest it to obtain `Items.Hay`. + + Average seconds to grow: 0.5 + Grows on: turf or soil + """ + ... + + @property + def Bush(self): + """ + A small bush that drops `Items.Wood`. + + Average seconds to grow: 4 + Grows on: turf or soil + """ + ... + + @property + def Tree(self): + """ + Trees drop more wood than bushes. They take longer to grow if other trees grow next to them. + + Average seconds to grow: 7 + Grows on: turf or soil + """ + ... + + @property + def Carrots(self): + """ + Carrots! + + Average seconds to grow: 6 + Grows on: soil + """ + ... + + @property + def Pumpkin(self): + """ + Pumpkins grow together when they are next to other fully grown pumpkins. About 1 in 5 pumpkins dies when it grows up. + When you harvest a pumpkin you get `Items.Pumpkin` equal to the number of pumpkins in the mega pumpkin cubed. + + Average seconds to grow: 2 + Grows on: soil + """ + ... + + @property + def Sunflower(self): + """ + Sunflowers collect the power from the sun. Harvesting them will give you `Items.Power` equal to the number of sunflowers in the farm. + If you harvest a sunflower that doesn't have the maximum number of petals all the sunflowers will die. + + Average seconds to grow: 5 + Grows on: soil + """ + ... + + @property + def Cactus(self): + """ + Cacti come in 10 different sizes. When harvested, all cacti on the field will be harvested. Only those that are in sorted order will drop `Items.Cactus`. + + Average seconds to grow: 1 + Grows on: soil + """ + ... + + @property + def Hedge(self): + """Part of the maze. Grow a maze by fertilizing a fully grown bush.""" + ... + + @property + def Treasure(self): + """A treasure that contains gold equal to the side length of the maze in which it is hidden. It can be harvested like a plant.""" + ... + + @property + def Dinosaur(self): + """ + A majestic dinosaur. It moves around randomly but won't move for a while after being measured. Harvesting it harvests all adjacent dinosaurs of the same type and makes them drop `Items.Bones`. + + Average seconds to grow: 0.2 + Grows on: turf or soil + """ + ... + + +# ------------------------------------------------------------------------------- +class Grounds: + @property + def Turf(self): + """The default ground. Grass will automatically grow on it.""" + ... + + @property + def Soil(self): + """Calling `till()` turns the ground into this. Calling `till()` again changes it back to turf.""" + ... + + +# ------------------------------------------------------------------------------- +class Unlocks: + @property + def Trees(self): + """ + Unlock: Unlocks trees. + Upgrade: Increases the yield of bushes and trees. + """ + ... + + @property + def Speed(self): + """Increases the speed of the drone.""" + ... + + @property + def Plant(self): + """Unlocks planting.""" + ... + + @property + def Loops(self): + """Unlocks a simple while loop.""" + ... + + @property + def Senses(self): + """The drone can see what's under it and where it is.""" + ... + + @property + def Expand(self): + """ + Unlock: Expands the farm land and unlocks movement. + Upgrade: Expands the farm. This also clears the farm. + """ + ... + + @property + def Operators(self): + """Arithmetic, comparison and logic operators.""" + ... + + @property + def Pumpkins(self): + """ + Unlock: Pumpkins! + Upgrade: Increases the yield of pumpkins and the cost of pumpkin seeds. + """ + ... + + @property + def Variables(self): + """Assign values to variables.""" + ... + + @property + def Functions(self): + """Define your own functions.""" + ... + + @property + def Watering(self): + """Water the plants to make them grow faster.""" + ... + + @property + def Carrots(self): + """ + Unlock: Till the soil and plant carrots. + Upgrade: Increases the yield of carrots and the cost of carrot seeds. + """ + ... + + @property + def Lists(self): + """Use lists to store lots of values.""" + ... + + @property + def Costs(self): + """Allows access to the cost of things.""" + ... + + @property + def Fertilizer(self): + """Reduces the remaining growing time of the plant under the drone by 2 seconds.""" + ... + + @property + def Mazes(self): + """ + Unlock: A maze with a treasure in the middle. + Upgrade: Increases the gold in treasure chests. + """ + ... + + @property + def Debug(self): + """Tools to help with debugging programs.""" + ... + + @property + def Debug_2(self): + """Functions to temporarily slow down the execution and make the grid smaller.""" + ... + + @property + def Benchmark(): + """Functions to help measure performance.""" + ... + + @property + def Grass(self): + """Increases the yield of grass.""" + ... + + @property + def Multi_Trade(self): + """Trade multiple items at once.""" + ... + + @property + def Auto_Unlock(self): + """Automatically unlock things.""" + ... + + @property + def Polyculture(self): + """Use companion planting to increase the yield.""" + ... + + @property + def Sunflowers(self): + """ + Unlock: Sunflowers and Power. + Upgrade: Increases the power gained from sunflowers. + """ + ... + + @property + def Leaderboard(self): + """Join the leaderboard for the fastest reset time.""" + ... + + @property + def Dictionaries(self): + """Get access to dictionaries and sets.""" + ... + + @property + def Utilities(self): + """Unlocks the `min()`, `max()` and `abs()` functions.""" + ... + + @property + def Cactus(self): + """ + Unlock: Cactus! + Upgrade: Increases the yield of cactus and the cost of cactus seeds.""" + ... + + @property + def Dinosaurs(self): + """ + Unlock: Majestic ancient creatures. + Upgrade: Increases the yield of dinosaurs and the cost of eggs. + """ + ... + + +# ------------------------------------------------------------------------------- +class North: + """ + The direction north, i.e. up. + """ + + +# ------------------------------------------------------------------------------- +class East: + """ + The direction east, i.e. right. + """ + + +# ------------------------------------------------------------------------------- +class South: + """ + The direction south, i.e. down. + """ + + +# ------------------------------------------------------------------------------- +class West: + """ + The direction west, i.e. left. + """ + + +# ------------------------------------------------------------------------------- +def harvest() -> bool: + """ + Harvests the entity under the drone. + If you harvest an entity that can't be harvested, it will be destroyed. + + returns `True` if an entity was removed, `False` otherwise. + + takes the time of `200` operations to execute if an entity was removed, `1` operation otherwise. + + example usage: + ``` + harvest() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def can_harvest() -> bool: + """ + Used to find out if plants are fully grown. + + returns `True` if there is an entity under the drone that is ready to be harvested, `False` otherwise. + + takes the time of `1` operation to execute. + + example usage: + ``` + if can_harvest(): + harvest() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def plant(entity: Entities) -> bool: + """ + Plants the specified `entity` under the drone if it can be planted. + Otherwise it just does nothing. + + returns `True` if it succeeded, `False` otherwise. + + takes the time of `200` operations to execute if it succeeded, `1` operation otherwise. + + example usage: + ``` + plant(Entities.Bush) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def move(direction: North | East | South | West) -> bool: + """ + Moves the drone into the specified `direction` by one tile. + If the drone moves over the edge of the farm it wraps back to the other side of the farm. + + - `East ` = right + - `West ` = left + - `North` = up + - `South` = down + + returns `True` if the drone has moved, `False` otherwise. + + takes the time of `200` operations to execute if the drone has moved, `1` operation otherwise. + + example usage: + ``` + move(North) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def swap(direction: North | East | South | West) -> bool: + """ + Swaps the entity under the drone with the entity next to the drone in the specified `direction`. + - Doesn't work on all entities. + - Also works if one (or both) of the entities are `None`. + + returns `True` if it succeeded, `False` otherwise. + + takes the time of `200` operations to execute on success, `1` operation otherwise. + + example usage: + ``` + swap(North) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def till() -> None: + """ + Tills the ground under the drone into soil. If it's already soil it will change the ground back to turf. + + returns `None` + + takes the time of `200` operations to execute. + + example usage: + ``` + till() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_pos_x() -> float: + """ + Gets the current x position of the drone. + The x position starts at `0` in the `West` and increases in the `East` direction. + + returns a number representing the current x coordinate of the drone. + + takes the time of `1` operation to execute. + + example usage: + ``` + x, y = get_pos_x(), get_pos_y() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_pos_y() -> float: + """ + Gets the current y position of the drone. + The y position starts at `0` in the `South` and increases in the `North` direction. + + returns a number representing the current y coordinate of the drone. + + takes the time of `1` operation to execute. + + example usage: + ``` + x, y = get_pos_x(), get_pos_y() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_world_size() -> float: + """ + Get the current size of the farm. + + returns the side length of the grid in the north to south direction. + + takes the time of `1` operation to execute. + + example usage: + ``` + for i in range(get_world_size()): + move(North) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_entity_type() -> Entities | None: + """ + Find out what kind of entity is under the drone. + + returns `None` if the tile is empty, otherwise returns the type of the entity under the drone. + + takes the time of `1` operation to execute. + + example usage: + ``` + if get_entity_type() == Entities.Grass: + harvest() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_ground_type() -> Grounds: + """ + Find out what kind of ground is under the drone. + + returns the type of the ground under the drone. + + takes the time of `1` operation to execute. + + example usage: + ``` + if get_ground_type() != Grounds.Soil: + till() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_time() -> float: + """ + Get the current game time. + + returns the time in seconds since the start of the game. + + takes the time of `1` operation to execute. + + example usage: + ``` + start = get_time() + + do_something() + + time_passed = get_time() - start + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_op_count() -> float: + """ + Used to measure the number of operations performed. + + returns the number of operations performed since the start of execution. + + takes the time of `1` operation to execute. + + example usage: + ``` + do_something() + + print(get_op_count()) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def trade(item: Items, n: Optional[float] = None) -> bool: + """ + Tries to buy the specified `item`. + If the `item` cannot be bought or you don't have the required resources it simply does nothing. + + overloads: + `trade(item)`: Buy the `item` once. + `trade(item, n)`: If `Unlocks.Multi_Trade` is unlocked, this will buy the `item` `n` times immediately. If you can't afford all `n` items, it won't buy any at all. If `Unlocks.Multi_Trade` is not unlocked, it throws an error. + + returns `True` if it was able to buy the item(s), `False` otherwise. + + takes the time of `200` operations to execute if it succeeded, `1` operation otherwise. + + example usage: + ``` + if num_unlocked(Unlocks.Multi_Trade) > 0: + trade(Items.Carrot_Seed, 10) + else: + for i in range(10): + trade(Items.Carrot_Seed) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def use_item(item: Items) -> bool: + """ + Attempts to use the specified `item`. Can only be used with some items including `Items.Water_Tank`, `Items.Fertilizer` and `Items.Egg`. + + returns `True` if an item was used, `False` otherwise. + + takes the time of `200` operations to execute if it succeeded, `1` operation otherwise. + + example usage: + ``` + use_item(Items.Fertilizer) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_water() -> float: + """ + Get the current water level under the drone. + + returns the water level under the drone as a number between `0` and `1`. + + takes the time of `1` operation to execute. + + example usage: + ``` + if get_water() < 0.5: + use_item(Items.Water_Tank) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def do_a_flip() -> None: + """ + Makes the drone do a flip! This action is not affected by speed upgrades. + + returns `None` + + takes 1s to execute. + + example usage: + ``` + while True: + do_a_flip() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def print(*something: Any) -> None: + """ + Prints `something` into the air above the drone using smoke. This action is not affected by speed upgrades. + Multiple values can be printed at once. + + returns `None` + + takes 1s to execute. + + example usage: + ``` + print('ground:', get_ground_type()) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def set_execution_speed(speed: float) -> None: + """ + Limits the speed at which the program is executed to better see what's happening. + + - A `speed` of `1` is the speed the drone has without any speed upgrades. + - A `speed` of `10` makes the code execute `10` times faster and corresponds to the speed of the drone after `9` speed upgrades. + - A `speed` of `0.5` makes the code execute at half of the speed without speed upgrades. This can be useful to see what the code is doing. + + If `speed` is faster than the execution can currently go it will just go at max speed. + + If `speed` is `0` or negative, the speed is changed back to max speed. + The effect will also stop when the execution stops. + + returns `None` + + takes the time of `200` operations to execute. + + example usage: + ``` + set_execution_speed(1) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def set_farm_size(size: float) -> None: + """ + Limits the size of the farm to better see what's happening. + Also clears the farm and resets the drone position. + - Sets the farm to a `size` x `size` grid. + - The smallest `size` possible is `3`. + - A `size` smaller than `3` will change the grid back to its full size. + - The effect will also stop when the execution stops. + + returns `None` + + takes the time of `200` operations to execute. + + example usage: + ``` + set_farm_size(5) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def num_items(item: Items) -> float: + """ + Find out how much of `item` you currently have. + + returns the number of `item` currently in your inventory. + + takes the time of `1` operation to execute. + + example usage: + ``` + if num_items(Items.Fertilizer) == 0: + trade(Items.Fertilizer) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_cost(thing: Entities | Items | Unlocks) -> dict[Items, float] | None: + """ + Gets the cost of a `thing` + + If `thing` is an item: get the cost of buying it when using `trade(item)`. + If `thing` is an entity: get the seed needed to plant it. + If `thing` is an unlock: get the cost of unlocking it. + + - returns a dictionary with items as keys and numbers as values. Each item is mapped to how much of it is needed. + - returns `None` when used on an upgradeable unlock that is already at the max level. + + takes the time of `1` operation to execute. + + example usage: + ``` + cost = get_cost(Unlocks.Carrots) + for item in cost: + if num_items(item) < cost[item]: + print('not enough items to unlock carrots') + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def clear() -> None: + """ + Removes everything from the farm, and moves the drone back to position `(0,0)`. + + returns `None` + + takes the time of `200` operations to execute. + + example usage: + ``` + clear() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def get_companion() -> list[Entities, float, float] | None: + """ + Get the companion preference of the plant under the drone. + + returns a list of the form `[companion_type, companion_x_position, companion_y_position]` + + takes the time of `1` operation to execute. + + example usage: + ``` + companion = get_companion() + if companion != None: + print(companion) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def unlock(unlock: Unlocks) -> bool: + """ + Has exactly the same effect as clicking the button corresponding to `unlock` in the research tree. + + returns `True` if the unlock was successful, `False` otherwise. + + takes the time of `200` operations to execute if it succeeded, `1` operation otherwise. + + example usage: + ``` + unlock(Unlocks.Carrots) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def num_unlocked(thing: Unlocks | Entities | Grounds | Items) -> float: + """ + Used to check if an unlock, entity, ground or item is already unlocked. + + returns `1` plus the number of times `thing` has been upgraded if `thing` is upgradable. Otherwise returns `1` if `thing` is unlocked, `0` otherwise. + + takes the time of `1` operation to execute. + + example usage: + ``` + if num_unlocked(Unlocks.Multi_Trade) > 0: + trade(Items.Carrot_Seed, 10) + else: + for i in range(10): + trade(Items.Carrot_Seed) + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def measure(direction: Optional[North | East | South | West] = None) -> float | None: + """ + Can measure some values on some entities. The effect of this depends on the entity. + + overloads: + `measure()`: measures the entity under the drone. + `measure(direction)`: measures the neighboring entity in the `direction` of the drone. + + Sunflower: returns the number of petals. + Treasure: returns the next position. + Cactus: returns the size. + Dinosaur: returns the number corresponding to the type. + All other entities: returns `None`. + + takes the time of `1` operation to execute. + + example usage: + ``` + num_petals = measure() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def timed_reset() -> None: + """ + Starts a timed run for the leaderboard. Saves the game before the run and then loads that save afterwards so you can't gain any items during the run. + + returns `None` + + takes the time of `200` operations to execute. + + example usage: + ``` + timed_reset() + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def quick_print(*something: Any) -> None: + """ + Prints a value just like `print()` but it doesn't stop to write it into the air so it can only be found on the output page. + + returns `None` + + takes the time of `1` operations to execute. + + example usage: + ``` + quick_print('hi mom') + ``` + """ + ... + + +# ------------------------------------------------------------------------------- +def random() -> float: + """ + Samples a random number between 0 (inclusive) and 1 (exclusive). + + returns the random number. + + takes the time of `1` operations to execute. + + example usage: + ``` + def random_elem(list): + index = random() * len(list) // 1 + return list[index] + ``` + """ + ... diff --git a/save.json b/save.json new file mode 100644 index 0000000..f73b016 --- /dev/null +++ b/save.json @@ -0,0 +1 @@ +{"items":{"serializeList":[{"name":"wood","nr":208818.0},{"name":"hay","nr":42146.0},{"name":"carrot","nr":22748.0},{"name":"pumpkin_seed","nr":272.0},{"name":"cactus","nr":74.0},{"name":"water_tank","nr":1407.0},{"name":"pumpkin","nr":85996.0},{"name":"sunflower_seed","nr":99.0},{"name":"gold","nr":14625.0},{"name":"carrot_seed","nr":100.0},{"name":"power","nr":10364.728347440716},{"name":"fertilizer","nr":314.0},{"name":"cactus_seed","nr":100.0},{"name":"empty_tank","nr":697.0},{"name":"bones","nr":559.0}]},"dockedFiles":[{"key":"Polyculture","value":"Sunflowers"}],"minimizedFiles":[],"openFilePositions":[{"key":"Generics","value":{"x":3310.22509765625,"y":810.1182861328125}},{"key":"Main","value":{"x":-2144.68115234375,"y":1238.615966796875}},{"key":"Maze","value":{"x":1683.6517333984375,"y":482.90380859375}},{"key":"Polyculture","value":{"x":1183.8134765625,"y":-1198.403564453125}},{"key":"Pumpkins","value":{"x":797.839599609375,"y":-221.3121337890625}},{"key":"Sunflowers","value":{"x":-893.687255859375,"y":-355.6046142578125}},{"key":"Dinosaur","value":{"x":-269.45458984375,"y":16.845458984375}},{"key":"docs2","value":{"x":1402.5185546875,"y":885.140380859375}},{"key":"docs0","value":{"x":-635.0411376953125,"y":751.6536865234375}},{"key":"Cactus","value":{"x":-497.6485595703125,"y":-135.11962890625}}],"openFileSizes":[{"key":"Generics","value":{"x":1139.496337890625,"y":3358.15625}},{"key":"Main","value":{"x":500.0,"y":239.07693481445313}},{"key":"Maze","value":{"x":1165.1561279296875,"y":1040.307373046875}},{"key":"Polyculture","value":{"x":905.2774658203125,"y":925.8458862304688}},{"key":"Pumpkins","value":{"x":1262.934326171875,"y":1383.6915283203125}},{"key":"Sunflowers","value":{"x":1508.768798828125,"y":1469.53759765625}},{"key":"Dinosaur","value":{"x":513.1248779296875,"y":267.6922912597656}},{"key":"docs2","value":{"x":900.0,"y":700.0}},{"key":"docs0","value":{"x":900.0,"y":700.0}},{"key":"Cactus","value":{"x":684.7567138671875,"y":925.8458862304688}}],"openDocPages":[{"key":"docs2","value":"docs/output.md"},{"key":"docs0","value":"docs/unlocks/dinosaurs.md"}],"unlocks":["grass","soil","harvest","pass","return","do_a_flip","turf","hay","loops","while","true","false","break","continue","functions","speed","can_harvest","if","else","elif","plant","wood","bush","entities","clear","expand","for","move","north","south","east","west","senses","get_entity_type","get_ground_type","grounds","get_pos_x","get_pos_y","none","num_items","items","sunflowers","range","get_world_size","operators","and","or","not","carrots","expand_9","carrot","till","can_trade","trade","carrot_seed","variables","assignments","trees","def","polyculture","watering","tree","mazes","debug","print","quick_print","unlocks","pumpkins","pumpkins_10","pumpkin","pumpkin_seed","trees_12","empty_tank","water_tank","use_item","get_water","multi_trade","dictionaries","sunflowers_5","sunflower_seed","sunflower","power","get_active_power","measure","lists","append","remove","pop","insert","len","list","grass_10","get_companion","fertilizer","utilities","min","max","abs","random","carrots_12","auto_unlock","hedge","treasure","gold","dicts","sets","add","dict","set","costs","get_cost","mazes_5","unlock","num_unlocked","benchmark","get_time","get_op_count","debug_2","set_execution_speed","set_farm_size","cactus","dinosaurs","swap","cactus_seed","cactus_2","dinosaurs_1","dinosaur","egg","bones","speed_20"],"grounds":[{"pos":{"x":0,"y":0},"data":"type = soil,water = 0.809482801536844"},{"pos":{"x":0,"y":1},"data":"type = soil,water = 0.817906937597231"},{"pos":{"x":0,"y":2},"data":"type = soil,water = 0.823832296901185"},{"pos":{"x":9,"y":9},"data":"type = soil,water = 0.849376573573664"},{"pos":{"x":9,"y":8},"data":"type = soil,water = 0.849376573573664"},{"pos":{"x":9,"y":7},"data":"type = soil,water = 0.849376573573664"},{"pos":{"x":9,"y":6},"data":"type = soil,water = 0.840882807837928"},{"pos":{"x":9,"y":5},"data":"type = soil,water = 0.770043145805155"},{"pos":{"x":1,"y":0},"data":"type = soil,water = 0.826168623835587"},{"pos":{"x":1,"y":1},"data":"type = soil,water = 0.823832296901185"},{"pos":{"x":1,"y":2},"data":"type = soil,water = 0.832153835253722"},{"pos":{"x":9,"y":4},"data":"type = soil,water = 0.849376573573664"},{"pos":{"x":9,"y":3},"data":"type = soil,water = 0.840882807837928"},{"pos":{"x":9,"y":2},"data":"type = soil,water = 0.762342714347104"},{"pos":{"x":9,"y":1},"data":"type = soil,water = 0.834689941938839"},{"pos":{"x":9,"y":0},"data":"type = soil,water = 0.851750447612198"},{"pos":{"x":2,"y":0},"data":"type = soil,water = 0.842943193383927"},{"pos":{"x":2,"y":1},"data":"type = soil,water = 0.732303369654397"},{"pos":{"x":2,"y":2},"data":"type = soil,water = 0.832153835253722"},{"pos":{"x":8,"y":9},"data":"type = soil,water = 0.770043145805155"},{"pos":{"x":8,"y":8},"data":"type = soil,water = 0.82634304251945"},{"pos":{"x":8,"y":7},"data":"type = soil,water = 0.762342714347104"},{"pos":{"x":8,"y":6},"data":"type = soil,water = 0.836994416262213"},{"pos":{"x":8,"y":5},"data":"type = soil,water = 0.762342714347104"},{"pos":{"x":8,"y":4},"data":"type = soil,water = 0.834800613704716"},{"pos":{"x":8,"y":3},"data":"type = soil,water = 0.762342714347104"},{"pos":{"x":8,"y":2},"data":"type = soil,water = 0.770043145805155"},{"pos":{"x":8,"y":1},"data":"type = soil,water = 0.832473979759548"},{"pos":{"x":8,"y":0},"data":"type = soil,water = 0.839210378441503"},{"pos":{"x":7,"y":9},"data":"type = soil,water = 0.840882807837928"},{"pos":{"x":7,"y":8},"data":"type = soil,water = 0.82634304251945"},{"pos":{"x":7,"y":7},"data":"type = soil,water = 0.835338711159753"},{"pos":{"x":7,"y":6},"data":"type = soil,water = 0.762342714347104"},{"pos":{"x":7,"y":5},"data":"type = soil,water = 0.834689941938839"},{"pos":{"x":7,"y":4},"data":"type = soil,water = 0.762342714347104"},{"pos":{"x":7,"y":3},"data":"type = soil,water = 0.754719287203632"},{"pos":{"x":7,"y":2},"data":"type = soil,water = 0.868482884118144"},{"pos":{"x":7,"y":1},"data":"type = soil,water = 0.828624472099591"},{"pos":{"x":7,"y":0},"data":"type = soil,water = 0.754719287203632"},{"pos":{"x":6,"y":9},"data":"type = soil,water = 0.822510091910518"},{"pos":{"x":6,"y":8},"data":"type = soil,water = 0.754719287203632"},{"pos":{"x":6,"y":7},"data":"type = soil,water = 0.82634304251945"},{"pos":{"x":6,"y":6},"data":"type = soil,water = 0.836994416262213"},{"pos":{"x":6,"y":5},"data":"type = soil,water = 0.828624472099591"},{"pos":{"x":6,"y":4},"data":"type = soil,water = 0.824149239961953"},{"pos":{"x":6,"y":3},"data":"type = soil,water = 0.754719287203632"},{"pos":{"x":6,"y":2},"data":"type = soil,water = 0.824149239961953"},{"pos":{"x":6,"y":1},"data":"type = soil,water = 0.754719287203632"},{"pos":{"x":6,"y":0},"data":"type = soil,water = 0.860058354641288"},{"pos":{"x":5,"y":9},"data":"type = soil,water = 0.832473979759548"},{"pos":{"x":5,"y":8},"data":"type = soil,water = 0.80774867008671"},{"pos":{"x":5,"y":7},"data":"type = soil,water = 0.824149239961953"},{"pos":{"x":5,"y":6},"data":"type = soil,water = 0.814284990991412"},{"pos":{"x":5,"y":5},"data":"type = soil,water = 0.747172094331596"},{"pos":{"x":5,"y":4},"data":"type = soil,water = 0.814284990991412"},{"pos":{"x":5,"y":3},"data":"type = soil,water = 0.747172094331596"},{"pos":{"x":5,"y":2},"data":"type = soil,water = 0.754719287203632"},{"pos":{"x":5,"y":1},"data":"type = soil,water = 0.73970037338828"},{"pos":{"x":5,"y":0},"data":"type = soil,water = 0.851457771094875"},{"pos":{"x":4,"y":9},"data":"type = soil,water = 0.73970037338828"},{"pos":{"x":4,"y":8},"data":"type = soil,water = 0.860058354641288"},{"pos":{"x":4,"y":7},"data":"type = soil,water = 0.84904992883759"},{"pos":{"x":4,"y":6},"data":"type = soil,water = 0.806142141081498"},{"pos":{"x":4,"y":5},"data":"type = soil,water = 0.820338227378595"},{"pos":{"x":4,"y":4},"data":"type = soil,water = 0.818188081491992"},{"pos":{"x":4,"y":3},"data":"type = soil,water = 0.851457771094875"},{"pos":{"x":4,"y":2},"data":"type = soil,water = 0.73970037338828"},{"pos":{"x":4,"y":1},"data":"type = soil,water = 0.806142141081498"},{"pos":{"x":4,"y":0},"data":"type = soil,water = 0.80774867008671"},{"pos":{"x":3,"y":9},"data":"type = soil,water = 0.851457771094875"},{"pos":{"x":3,"y":8},"data":"type = soil,water = 0.73970037338828"},{"pos":{"x":3,"y":7},"data":"type = soil,water = 0.732303369654397"},{"pos":{"x":3,"y":6},"data":"type = soil,water = 0.851457771094875"},{"pos":{"x":3,"y":5},"data":"type = soil,water = 0.73970037338828"},{"pos":{"x":3,"y":4},"data":"type = soil,water = 0.84904992883759"},{"pos":{"x":3,"y":3},"data":"type = soil,water = 0.851457771094875"},{"pos":{"x":3,"y":2},"data":"type = soil,water = 0.811452878209032"},{"pos":{"x":3,"y":1},"data":"type = soil,water = 0.842943193383927"},{"pos":{"x":3,"y":0},"data":"type = soil,water = 0.840559429549214"},{"pos":{"x":2,"y":9},"data":"type = soil,water = 0.840559429549214"},{"pos":{"x":2,"y":8},"data":"type = soil,water = 0.798080719670683"},{"pos":{"x":2,"y":7},"data":"type = soil,water = 0.842943193383927"},{"pos":{"x":2,"y":6},"data":"type = soil,water = 0.73970037338828"},{"pos":{"x":2,"y":5},"data":"type = soil,water = 0.732303369654397"},{"pos":{"x":2,"y":4},"data":"type = soil,water = 0.834513761450087"},{"pos":{"x":2,"y":3},"data":"type = soil,water = 0.832153835253722"},{"pos":{"x":1,"y":9},"data":"type = soil,water = 0.795973361687223"},{"pos":{"x":1,"y":8},"data":"type = soil,water = 0.82591858130481"},{"pos":{"x":1,"y":7},"data":"type = soil,water = 0.840559429549214"},{"pos":{"x":1,"y":6},"data":"type = soil,water = 0.834261193237182"},{"pos":{"x":1,"y":5},"data":"type = soil,water = 0.834513761450087"},{"pos":{"x":1,"y":4},"data":"type = soil,water = 0.832153835253722"},{"pos":{"x":1,"y":3},"data":"type = soil,water = 0.823832296901185"},{"pos":{"x":0,"y":9},"data":"type = soil,water = 0.826168623835587"},{"pos":{"x":0,"y":8},"data":"type = soil,water = 0.834513761450087"},{"pos":{"x":0,"y":7},"data":"type = soil,water = 0.815593973932173"},{"pos":{"x":0,"y":6},"data":"type = soil,water = 0.834513761450087"},{"pos":{"x":0,"y":5},"data":"type = soil,water = 0.823832296901185"},{"pos":{"x":0,"y":4},"data":"type = soil,water = 0.823832296901185"},{"pos":{"x":0,"y":3},"data":"type = soil,water = 0.724980335957853"}],"entities":[]} \ No newline at end of file