IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
rontoto
Člen
Avatar
rontoto:19.11.2019 12:52

Ahoj,Mám problém, dělám na osmisměrce, vstupem jsou 2 soubory na řádce
v jednom je osmisměrka, v druhém slova, které má program najít
výstupem má být slovo, souřadnice, kde slovo začíná a směr(shora nebo zleva), všechno funguje, jenže potřebuji,aby se slova vypisovala v pořadí, v jakém jsou napsána v souboru číslo 2

soubor s osmisměrkou:
xmuinjekci
evelkochov
cadvouhrac
feminizaci
pyzlanpbik
ldvojlinky
osvrhloubd
dqldrvandy
yevergreen
olympskout

soubor se slovy:
dvojlinky
feminizaci
velkochov
dvouhra
olympskou
plody
dyn
rab
svrhlou
np
jo
lordem
velko
injekci
skout
mva
vandy
dvou
evergreen
ech
zla
kb
un
hrr
aj
ona

Zkusil jsem: tady mám zdroják

find_words(fi­le_inputs, words):
with open(file_inputs) as file:
for line in file:
line = line.replace('\n', '')
line = line.lower()
words.append(line)

def get_search_bo­ard(file_input­s, search_board):
with open(file_inputs) as file:
for line in file:
if len(line) > 6:
line = line.lower()
search_board += line
length = search_board.in­dex('\n') + 1
return search_board, length

def main():
words = []
search_board = ''
z = input().split()
file_input = z[0]
file_inputs = z[1]
find_words(fi­le_inputs, words)
search_board, length = get_search_bo­ard(file_input, search_board)
lines = {}

lines["1"] = []

letters = [(letter, divmod(index, length))
for index, letter in enumerate(sear­ch_board)]

lines['0'] = letters

for i in range(length):
for j in range(i, len(letters), length):
lines["1"].ap­pend(letters[j])

for direction, tuple in lines.items():
string = ''.join([i[0] for i in tuple])
for word in words:
if word in string:
coordinates = tuple[string.in­dex(word)][1]
print(word,co­ordinates[0], coordinates[1], direction)

main()

Chci docílit: výstup je tento:
plody 4 0 1
dyn 6 9 1
rab 2 7 1
jo 0 5 1
lordem 4 3 1
mva 0 1 1
ech 0 6 1
kb 5 8 1
un 6 7 1
hrr 6 4 1
aj 4 4 1
ona 2 4 1
dvojlinky 5 1 0
feminizaci 3 0 0
velkochov 1 1 0
dvouhra 2 2 0
olympskou 9 0 0
svrhlou 6 1 0
np 4 5 0
velko 1 1 0
injekci 0 3 0
skout 9 5 0
vandy 7 5 0
dvou 2 2 0
evergreen 8 1 0
zla 4 2 0

ale potřebuji tento:

dvojlinky 5 1 0
feminizaci 3 0 0
velkochov 1 1 0
dvouhra 2 2 0
olympskou 9 0 0
plody 4 0 1
dyn 6 9 1
rab 2 7 1
svrhlou 6 9 0
np 4 5 0
jo 0 5 1
lordem 4 3 1
velko 1 1 0
injekci 0 3 0
skout 9 5 0
mva 0 1 1
vandy 7 5 0
dvou 2 2 0
evergreen 8 1 0
ech 0 6 1
zla 4 2 0
kb 5 8 1
un 6 7 1
hrr 6 4 1
aj 4 4 1
ona 2 4 1

 
Odpovědět
19.11.2019 12:52
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20.11.2019 8:56

google = format python code online
https://codebeautify.org/…r-beautifier
oznacim, ctrl+c, kliknu do okna, ctrl+v, kliknu formatuj, a zkopiruji to zpet sem, oznacim, kliknu na tlacitko

</>

def find_words(file_inputs, words):
    with open(file_inputs) as file:
    for line in file:
    line = line.replace('\n', '')
    line = line.lower()
    words.append(line)

def get_search_board(file_inputs, search_board):
    with open(file_inputs) as file:
        for line in file:
        if len(line) > 6:
            line = line.lower()
        search_board += line
        length = search_board.index('\n') + 1
    return search_board, length

def main():
    words = []
    search_board = ''
    z = input().split()
    file_input = z[0]
    file_inputs = z[1]
    find_words(file_inputs, words)
    search_board, length = get_search_board(file_input, search_board)
    lines = {}
    lines["1"] = []
    letters = [ (letter, divmod(index, length)) for index, letter in enumerate(search_board) ]
    lines['0'] = letters

    for i in range(length):
        for j in range(i, len(letters), length):
            lines["1"].append(letters[j])

    for direction, tuple in lines.items():
        string = ''.join([i[0] for i in tuple])
        for word in words:
            if word in string:
                coordinates = tuple[string.index(word)][1]
                print(word, coordinates[0], coordinates[1], direction)

main() find_words(file_inputs, words):
    with open(file_inputs) as file:
        for line in file:
            line = line.replace('\n', '')
            line = line.lower()
            words.append(line)

def get_search_board(file_inputs, search_board):
    with open(file_inputs) as file:
        for line in file:
            if len(line) > 6:
                line = line.lower()
        search_board += line
        length = search_board.index('\n') + 1
       return search_board, length

def main():
    words = []
search_board = ''
z = input().split()
file_input = z[0]
file_inputs = z[1]
find_words(file_inputs, words)
search_board, length = get_search_board(file_input, search_board)
lines = {}

lines["1"] = []

letters = [(letter, divmod(index, length))
    for index, letter in enumerate(search_board)
]

lines['0'] = letters

for i in range(length):
    for j in range(i, len(letters), length):
    lines["1"].append(letters[j])

for direction, tuple in lines.items():
    string = ''.join([i[0]
        for i in tuple
    ])
for word in words:
    if word in string:
    coordinates = tuple[string.index(word)][1]
print(word, coordinates[0], coordinates[1], direction)

main()

... uz mne to dal nebavi formatovat. PY kod bez puvodniho formatovani je nepouzitelny, protoze neobsahuje zavorky pro oznaceni zacatku a konce bloku. Zkus si najit chybu sam. :)

Podle mne neukladas spravne poradi v jakem to prislo. Spis vyhledavas, ktere slovo nejlepe vyhovuje tomu v seznamu.
Prvne bych si nacetl obsah obou souboru do promene. A dal v kodu by se slovo file uz nemelo vyskytovat. Uz jen z duvodu, ze se ti zjednodusi kod.

 
Nahoru Odpovědět
20.11.2019 8:56
Avatar
DarkCoder
Člen
Avatar
Odpovídá na rontoto
DarkCoder:20.11.2019 12:47

Vždyť na tom není nic těžkého. Načti si obsah prvního souboru do 2D znakového pole. Jelikož nepracuješ se všemi řetězci z druhého souboru současně, můžeš je načítat postupně jeden po druhém a ušetřit paměť. Poté aplikovat vyhledávací mechanismus a výsledek vypsat. To opakujes dokud neni konec druhého souboru. Pokud chceš mít aplikaci o něco rychlejší ale na úkor větší spotřebované paměti, tak si načti celý obsah druhého souboru tak jak Ti radil Peter.

Nahoru Odpovědět
20.11.2019 12:47
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.