Předvánoční slevová akce PHP týden
Pouze tento týden sleva až 80 % na PHP e-learning!
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Avatar
rontoto
Člen
Avatar
rontoto:19. listopadu 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. listopadu 12:52
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20. listopadu 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. listopadu 8:56
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
DarkCoder
Člen
Avatar
Odpovídá na rontoto
DarkCoder:20. listopadu 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. listopadu 12:47
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
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.