import random
def generuj_krajobraz(szerokosc=60, wysokosc=20):
plansza = [[' ' for _ in range(szerokosc)] for _ in range(wysokosc)]
# 1. GENEROWANIE NIEBA (Gwiazdy i Księżyc)
for y in range(8):
for x in range(szerokosc):
if random.random() < 0.04: # Szansa na gwiazdkę
plansza[y][x] = random.choice(['*', '.', '+'])
# Rysowanie księżyca/słońca
kx, ky = szerokosc - 12, 3
ksiezyc = [" ____ ", " / \\ ", "| () |", " \\____/ "]
for i, linia in enumerate(ksiezyc):
for j, znak in enumerate(linia):
if znak != ' ' and 0 <= ky+i < wysokosc and 0 <= kx+j < szerokosc:
plansza[ky+i][kx+j] = znak
# 2. GENEROWANIE GÓR
linia_gor = [10] * szerokosc
h = 10
for x in range(szerokosc):
h += random.choice([-1, 0, 1])
h = max(6, min(12, h)) # Granice wysokości gór
linia_gor[x] = h
plansza[h][x] = '/' if random.random() > 0.5 else '\\'
# Wypełnienie wnętrza gór
for y in range(h + 1, 13):
plansza[y][x] = '#'
# 3. GENEROWANIE LASU (Drzewa przed górami)
for x in range(0, szerokosc, random.choice([2, 3])):
y_ziemia = 13
plansza[y_ziemia-2][x] = '^'
plansza[y_ziemia-1][x-1:x+2] = list('/|\\')
plansza[y_ziemia][x] = '|'
# 4. GENEROWANIE JEZIORA (Odbicie w wodzie)
for y in range(14, wysokosc):
for x in range(szerokosc):
if kx - 2 <= x <= kx + 8 and y % 2 == 0:
plansza[y][x] = '~' # Odbicie księżyca w wodzie
else:
plansza[y][x] = random.choice(['-', ' ', '~'])
# Łączenie i drukowanie krajobrazu
print("=" * szerokosc)
for rzad in plansza:
print(''.join(rzad))
print("=" * szerokosc)
print(" Malowniczy krajobraz generowany proceduralnie w Python 3 ")
if __name__ == "__main__":
generuj_krajobraz()
# your code goes here
aW1wb3J0IHJhbmRvbQoKZGVmIGdlbmVydWpfa3Jham9icmF6KHN6ZXJva29zYz02MCwgd3lzb2tvc2M9MjApOgogICAgcGxhbnN6YSA9IFtbJyAnIGZvciBfIGluIHJhbmdlKHN6ZXJva29zYyldIGZvciBfIGluIHJhbmdlKHd5c29rb3NjKV0KICAgIAogICAgIyAxLiBHRU5FUk9XQU5JRSBOSUVCQSAoR3dpYXpkeSBpIEtzacSZxbx5YykKICAgIGZvciB5IGluIHJhbmdlKDgpOgogICAgICAgIGZvciB4IGluIHJhbmdlKHN6ZXJva29zYyk6CiAgICAgICAgICAgIGlmIHJhbmRvbS5yYW5kb20oKSA8IDAuMDQ6ICAjIFN6YW5zYSBuYSBnd2lhemRrxJkKICAgICAgICAgICAgICAgIHBsYW5zemFbeV1beF0gPSByYW5kb20uY2hvaWNlKFsnKicsICcuJywgJysnXSkKICAgICAgICAgICAgICAgIAogICAgIyBSeXNvd2FuaWUga3NpxJnFvHljYS9zxYJvxYRjYQogICAga3gsIGt5ID0gc3plcm9rb3NjIC0gMTIsIDMKICAgIGtzaWV6eWMgPSBbIiAgX19fXyAgIiwgIiAvICAgIFxcICIsICJ8ICAoKSAgfCIsICIgXFxfX19fLyAiXQogICAgZm9yIGksIGxpbmlhIGluIGVudW1lcmF0ZShrc2llenljKToKICAgICAgICBmb3Igaiwgem5hayBpbiBlbnVtZXJhdGUobGluaWEpOgogICAgICAgICAgICBpZiB6bmFrICE9ICcgJyBhbmQgMCA8PSBreStpIDwgd3lzb2tvc2MgYW5kIDAgPD0ga3graiA8IHN6ZXJva29zYzoKICAgICAgICAgICAgICAgIHBsYW5zemFba3kraV1ba3gral0gPSB6bmFrCgogICAgIyAyLiBHRU5FUk9XQU5JRSBHw5NSCiAgICBsaW5pYV9nb3IgPSBbMTBdICogc3plcm9rb3NjCiAgICBoID0gMTAKICAgIGZvciB4IGluIHJhbmdlKHN6ZXJva29zYyk6CiAgICAgICAgaCArPSByYW5kb20uY2hvaWNlKFstMSwgMCwgMV0pCiAgICAgICAgaCA9IG1heCg2LCBtaW4oMTIsIGgpKSAgIyBHcmFuaWNlIHd5c29rb8WbY2kgZ8OzcgogICAgICAgIGxpbmlhX2dvclt4XSA9IGgKICAgICAgICBwbGFuc3phW2hdW3hdID0gJy8nIGlmIHJhbmRvbS5yYW5kb20oKSA+IDAuNSBlbHNlICdcXCcKICAgICAgICAjIFd5cGXFgm5pZW5pZSB3bsSZdHJ6YSBnw7NyCiAgICAgICAgZm9yIHkgaW4gcmFuZ2UoaCArIDEsIDEzKToKICAgICAgICAgICAgcGxhbnN6YVt5XVt4XSA9ICcjJwoKICAgICMgMy4gR0VORVJPV0FOSUUgTEFTVSAoRHJ6ZXdhIHByemVkIGfDs3JhbWkpCiAgICBmb3IgeCBpbiByYW5nZSgwLCBzemVyb2tvc2MsIHJhbmRvbS5jaG9pY2UoWzIsIDNdKSk6CiAgICAgICAgeV96aWVtaWEgPSAxMwogICAgICAgIHBsYW5zemFbeV96aWVtaWEtMl1beF0gPSAnXicKICAgICAgICBwbGFuc3phW3lfemllbWlhLTFdW3gtMTp4KzJdID0gbGlzdCgnL3xcXCcpCiAgICAgICAgcGxhbnN6YVt5X3ppZW1pYV1beF0gPSAnfCcKCiAgICAjIDQuIEdFTkVST1dBTklFIEpFWklPUkEgKE9kYmljaWUgdyB3b2R6aWUpCiAgICBmb3IgeSBpbiByYW5nZSgxNCwgd3lzb2tvc2MpOgogICAgICAgIGZvciB4IGluIHJhbmdlKHN6ZXJva29zYyk6CiAgICAgICAgICAgIGlmIGt4IC0gMiA8PSB4IDw9IGt4ICsgOCBhbmQgeSAlIDIgPT0gMDoKICAgICAgICAgICAgICAgIHBsYW5zemFbeV1beF0gPSAnficgICMgT2RiaWNpZSBrc2nEmcW8eWNhIHcgd29kemllCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBwbGFuc3phW3ldW3hdID0gcmFuZG9tLmNob2ljZShbJy0nLCAnICcsICd+J10pCgogICAgIyDFgcSFY3plbmllIGkgZHJ1a293YW5pZSBrcmFqb2JyYXp1CiAgICBwcmludCgiPSIgKiBzemVyb2tvc2MpCiAgICBmb3IgcnphZCBpbiBwbGFuc3phOgogICAgICAgIHByaW50KCcnLmpvaW4ocnphZCkpCiAgICBwcmludCgiPSIgKiBzemVyb2tvc2MpCiAgICBwcmludCgiICBNYWxvd25pY3p5IGtyYWpvYnJheiBnZW5lcm93YW55IHByb2NlZHVyYWxuaWUgdyBQeXRob24gMyAgIikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBnZW5lcnVqX2tyYWpvYnJheigpCiMgeW91ciBjb2RlIGdvZXMgaGVyZQ==