Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Program pro vykreslení velkého šestiúhelníku z malých šestiúhelníčků, kde každý malý šestiúhelníček je reprezentován jedním z jedinečných čísel.
- Program si vyžádá délku hrany šestiúhelníku. Poté vypočte, kolik šestiúhelníčků je třeba na sestavení velkého šestiúhelníku z malých šestiúhelníčků tak, aby každá hrana velkého šestiúhelníku měla délku hrany zadanou uživatelem.
- Pro tento počet program vygeneruje seznam jedinečných čísel reprezentujících malé šestiúhelníčky. Tento seznam promíchá.
- Následně vytiskne velký šestiúhelník, kde každý malý šestiúhelníček je reprezentovaný jedním z jedinečných čísel v promíchaném seznamu tak, že začne vlevo nahoře a postupně vyplní všemi čísly ze seznamu celý velký šestiúhelník až doprava dolů.
- """
- import collections
- import math
- import random as rnd
- import itertools as it
- MIN_NUM = 3
- MAX_NUM = 11
- class Pool:
- def __init__(self, minEdge):
- self.edge = minEdge
- self.vNumber = 3 * self.edge * (self.edge - 1) + 1
- self.hight = self.edge * 2 - 1
- self.pool = [x for x in range(1, self.vNumber + 1)]
- def getVavNumber(self, minEdge):
- edge = minEdge
- return 3 * edge * (edge - 1) + 1
- def shuffle_pool(self):
- rnd.shuffle(self.pool)
- def pooling(self):
- num = 0
- while num < len(self.pool):
- yield self.pool[num]
- num += 1
- def print_pool(self):
- ind = 0
- cif = len(str(self.vNumber))
- x = self.pooling()
- CRED = '\033[91m'
- CEND = '\033[0m'
- print()
- for j in range(self.edge, self.hight + 1):
- for k in range(self.edge, self.edge + j):
- numInStr = str(next(x)).zfill(cif)
- if k == self.edge:
- for l in range(self.hight - j, 0, -1):
- print(" ", end="")
- print(f" {numInStr} ", end="")
- if k == self.hight + j - self.edge:
- for l in range(self.hight - j, 0, -1):
- print(" ", end="")
- print("")
- for j in range(self.hight, self.edge, -1):
- for k in range(self.edge, self.edge + j - 1):
- numInStr = str(next(x)).zfill(cif)
- if k == self.edge:
- for l in range(self.hight - j + 1, 0, -1):
- print(" ", end="")
- print(f" {numInStr} ", end="")
- if k == self.hight + j - self.edge - 1:
- for l in range(self.hight - j, 0, -1):
- print(" ", end="")
- print()
- print()
- pass
- class Tips:
- def __init__(self, numOfNumbers):
- self.numOfNumbers = numOfNumbers
- pass
- if __name__ == '__main__':
- print("Vykreslení hexagonu z čísel")
- while True:
- input_message = f"Délka hrany? (zadej číslo od {MIN_NUM} do {MAX_NUM}): "
- myEdge = input(input_message)
- try:
- myEdge = int(myEdge)
- if myEdge >= MIN_NUM and myEdge <= MAX_NUM:
- break
- else:
- print(f"Platné hodnoty jsou čísla {MIN_NUM} až {MAX_NUM} !!! Zkus znovu.")
- except ValueError:
- print(f"Jen čísla {MIN_NUM} až {MAX_NUM} jsou akceptována!")
- o = Pool(myEdge)
- print(f"Vavřincovo číslo pro délku hrany {o.edge}: {o.vNumber}")
- print(f"Vavřincovo číslo pro maximální délku hrany {MAX_NUM}: {o.getVavNumber(MAX_NUM)}")
- print("Před zamícháním: ", o.pool)
- o.shuffle_pool()
- print("Po zamíchání: ", o.pool)
- x = o.pooling()
- for i in range(len(o.pool)):
- print(f"{i+1}. tažené číslo je: {next(x)}")
- o.print_pool()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement