Python programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


sztanozs
(veterán)
Blog

Masreszt, ahhoz, hogy a path env valtozas eletbe lepjen ujra kell inditani a command line-t.


Hege1234
(addikt)

köszi!

azt már sikerült elérni, hogy amik ott úgy nagyon hosszan egy sorban vannak
oda "beleírja"
ahogy itt van a képen:
[kép1]
viszont valami miatt nálam ez így nem elég hozzá :F

csak, ha így van manuálisan új sorokba írva:
[kép2]
(amúgy script-el lehetne új sorba írni?)

és úgy akkor már működik:
[kép3]


sztanozs
(veterán)
Blog

Nekem ott alapbol minden uj sorban van. Kezzel irtad azt oda be?


Hege1234
(addikt)

nem én írtam egy sorba, és fura is volt így ömlesztve látni

viszont nem gondoltam, hogy problémát okozhatna mert
kb. minden powershell-es line-ba amit találtam a PATH-hoz az elválasztás az ez volt hozzá ;

$env:Path -split ';'

( ha új sorba van írva akkor nem si kerül a végére a ; )


J0shu4M1ll3r
(senior tag)

Sziasztok!
Az alábbi csodálatos háziban kérnék segítséget:
Próbáltam felírni a sorokat, átlókat egyenletként, de bele is zavarodtam, és chatgpt se nagyon segít, vagy nálam vacakol a VS, mert semmi megoldást nem ad vissza.
Mi a jó megközelítése?
Jelenleg itt tartok:
Elneveztem a pontokat betűkkel és beírtam a fix számokat:
1. 1+C+F+H=26
2. 1+D+G+K=26
3. 2+C+D+E=26
4. H+I+7+K=26
5. 2+F+I+L=26
6. E+4+7+L=26
Ezekből kijött pár betűnek a meghatározása, mintha egy nagy egyenletrendszer lenne, de itt elakadtam.
Köszi!


axioma
(veterán)

Szerintem itt brute force [vagy max elagazas-korlatozassal megoldasra ha mar advanced] gondoltak. A 8! nem olyan nagy szam... plane hogy a pythonhoz lib van ami legeneralja a permutaciokat ;-) de gondolom az inkabb a feladat lenyege lenne.

[ Szerkesztve ]


kovisoft
(őstag)

Ha valamilyen backtrack-szerű algoritmust akarsz használni, akkor a számokat ne egyedi változókban tárold, hanem pl. tömbben, és akkor egységesen tudod tölteni őket. A feltételeidet ugyanúgy fel tudod írni pl. 2+X[0]+X[1]+X[2]+X[3]==26 formában,

De talán az axioma által is említett permutáció generálás a legegyszerűbb: az itertools modul permutations([3,5,6,8,9,10,11,12]) függvényével le tudod generálni a maradék nyolc szám összes permutációját, ezek közül kell azokat kiválogatni, ahol minden vonalra teljesül, hogy a számok összege 26.


J0shu4M1ll3r
(senior tag)

Próbálom értelmezni, de nem megy :D
Látnom kéne a teljes kódot, hogy ki tudjam sakkozni, hogy mi miért történik, de azt sem tudom, hogyan fogjak hozzá. :(


sztanozs
(veterán)
Blog

1. szamozd be a cellakat 0-11-ig:
2. csinalj egy teljes permutaciot:
3. meccseld a permutaciot a szabalyra:
doboz[0] == 1
doboz[3] == 4
doboz[5] == 7
doboz[10] == 2

es az z osszegre vonatkozo logika:
doboz[0] + doboz[1] + doboz[11] == 26
doboz[1] + doboz[2] + doboz[3] == 26
doboz[3] + doboz[4] + doboz[5] == 26
doboz[5] + doboz[6] + doboz[7] == 26
doboz[7] + doboz[8] + doboz[9] == 26
doboz[9] + doboz[11] + doboz[11] == 26


kovisoft
(őstag)

Permutációval roppant egyszerű a dolog. Egy ciklusban végigmész a permutations([...]) által visszaadott listán, aminek mindegy eleme egy mondjuk x tömb lesz az aktuális permutációval. Az x tömb a nyolc ismeretlen számot jelöli (x[0]-tól x[7]-ig). Ezekre beteszel 6 darab if-et (olyasmit, mint amit te is felírtál, csak nem egyedi változókkal, hanem a tömb elemeivel), amiben ellenőrzöd az egyes vonalak mentén az összegeket. Ha bármelyik nem 26, akkor continue. A legvégén pedig kiiratod az x-et.

Házi feladatokat nem igazán oldunk meg más helyett, de ha van bármi kód kezdeményed, és elakadsz, akkor szívesen segítünk.

Szerk: Csak egy megjegyzés, hogy ne zavarjunk még jobban össze: én a fix számokat nem vettem bele a permutációba, mint sztanozs. Én csak a 8 ismeretlent permutálnám.

[ Szerkesztve ]


sztanozs
(veterán)
Blog

ja, haromszogeket szamoltam, nem oldalakat, azert nem adott ki eredmenyt :DDD

from itertools import permutations

def szabaly(doboz):
a, d, f, k = 1, 4, 7, 2
b, c, e, g, h, i, j, l = doboz
return 26 == a + b + d + e == c + d + f + g == e +f + h + i == g + h + j + k == i + j + l + a

def print_doboz(doboz):
a, d, f, k = 1, 4, 7, 2
b, c, e, g, h, i, j, l = doboz
print(f" {a:>2}\n"
f"{k:>2} {l:>2} {b:>2} {c:>2}\n"
f" {j:>2} {d:>2}\n"
f"{i:>2} {h:>2} {f:>2} {e:>2}\n"
f" {g:>2}\n")
dobozok = permutations([3, 5, 6, 8, 9, 10, 11, 12])
eredmeny = filter(szabaly, dobozok)
for doboz in eredmeny:
print_doboz(doboz)
print()

[ Szerkesztve ]


J0shu4M1ll3r
(senior tag)

Köszi, valami ilyesmire gondoltam én is, de lehet a == is elmaradt, megnézem.

@ kovisoft:
igen, mert gondolom több megoldás is, lehet, pedig sudokuzni szeretek, de ezen csak pislogtam :D
Nem is kérném, hogy más csinálja meg, pont, hogy meg akarom érteni, hogy mi miért van, de lehet nem fog olyan gyorsan menni, mint gondoltam.
A fix számok kellenek, mert azok adottak, és ezek ismeretében kell kiszámolni a maradék helyekre a lehetséges számokat, így legalább nem lesz 800 megoldás :D

üzenetek