Lenne olyan vállalkozó szellemű lélek, aki segítene eme algoritmusos-programozós feladatban?
Java nyelvben próbálkoztam a megoldással, de a probléma jellegéből adódóan ez nem fontos. A probléma (feladat) az volna, hogy van egy függvényünknek egy String és egy int típusú paramétere.
A String (továbbiakban 's' változó) + és - jelekből állhat csak, tehát pl. s = "+-+--"; Az int -et később írom, hogy micsoda. Tehát van a fenti "s" sztringünk, a "+-+--". Ezt egységekre kell bontanunk, a legutolsó karaktertől elkezdve és utána mindig egy előtte lévő karaktert hozzáadva, képződnek az egységek, és maga a teljes sztring is egy egység; tehát ezek lesznek az egységek: "-" , "--" , "+--" , "-+--" , "+-+--" , összesen tehát 5 egység ennél a példánál (sztring-nél). És minden egységnél meg lehet határozni azt a számértéket, amit a + és - jelek "összeadása" eredményez. A + jel ugye +1 -et, a - jel -1 -et képvisel, így a fenti egységek eme bizonyos számértékei ezek lesznek: "-" -nál -1 lesz, "--" -nál (-1) + (-1) = -2, "+--" -nál (+1) + (-1) + (-1) = -1, és így tovább rendre a hátralévők: -2, -1.
Tehát látjuk, hogy az egységek eme fajta számértéke lehet pozitív és negatív szám is (a példánkban ugye csak negatív, de lehetne pozitív is). És itt jön képbe a bemenő paraméterként megadott int típus (továbbiakban "k" változó), mert ez adja meg, hogy hány db negatív előjelű egységnek kell szerepelnie az "s" sztringben. A fenti példában ugye mind az 5 egység negatív előjelű, ezért 5 db negatív előjelű egységünk van, de ha a "k" paraméter mondjuk 3 lenne, akkor úgy kéne átalakítani az "s" változót, hogy abban az egységek közül tényleg csak 3 db legyen negatív előjelű, a többi pozitív legyen. Ehhez tehát át kell alakítanunk a fenti "s" sztringet. Tetszőlegesen lehet a - jelekből + -t, és a + jelekből - -t csinálni. Egy ilyen átalakítás úgymond 1 db lépésnek (átalakításnak) számít. És a kérdés az, hogy mennyi az a legkevesebb lépés, amit el kell végeznünk az "s" változón ahhoz, hogy a "k" számnak megfelelő mennyiségű negatív előjelű egységünk legyen ebben a módosított "s" változóban (ha kell rajta módosítani). És fontos, hogy a legkevesebb ilyen lépésszám kell. Tehát ezt a lépésszámot (átalakításszámot) kellene a függvényünknek int értékként visszaadnia.
Hát ez volna a nagy-nagy kihívás! Bizony, szerintem ez nem egyszerű. Nekem legalábbis nem sikerült megcsinálni...bárkinek valami meglátás, esetleg bárki meg tudja ezt oldani? Meg lehet egyáltalán oldani? :-D (bár ez egy állásinterjú első körének feladata volt igazából, tehát valószínűleg meg lehet valahogy oldani :-D).
Bármilyen meglátást, segítséget nagyon szívesen veszek és nagyon nagyon köszönök - mert még ha nem is jutottam tovább, de tökre szeretnék fejlődni, és érteni, egy ilyet hogy lehetne megcsinálni..még egyszer millió hála és respect a gondolkodó és alkotó elméknek, akik foglalkoznak ezzel, akár eljuttok az eredményig, akár nem, én nagyon köszönöm. :-)
Engem se vettek volna fel, nem fogtam fel a feladatot. Csak - jelből lehet csinálni + jelet és így is mindig van megoldás abból indultam ki hibásan.
Magas időkomplexitású algoritmus, de triviális, brute force :
Ha el nem toltam megint valamit akkor ez a jó, szóljatok ha hibás! (Minden féle hülyeség ellenőrzést hogy k nem lehet negatív stb. nem raktam bele, azt az ezt hívó függvénynek kell ellenőrizni vegyük úgy.) Visszaadom nem csak a legkevesebb módosítás számát, hanem magát a módosított string-et is, szándékosan írtam bele nem feladat, de így informatívabb. A return (-1,'') -el elvileg sosem tér vissza.
Szia! Megnéztem mindkét verziód! :-) Nagyon nagyon köszönöm, hogy foglalkoztál vele! Szinte már majdnem tökéletes, de van, amire nem ad "okés" megoldást, pl. ha az "s" értéke ez: "++", és a "k" értéke 2, akkor (-1, '') -el tér vissza. Kiírattam print -ekkel mikor milyen értékek képződnek a solve függvényen belül (pl. a combinations vagy a combinations_with_replacement hatására), és szerintem a combinations_with_replacement([-1,1],r) nem vizsgál minden esetet, mert ha pl. veszünk két indexet, mondjuk 7,8 , és ezekre alkalmazzuk a combinations_with_replacement([-1,1],r) -et, akkor csak ez a 3 eset keletkezik (mint az összes többi 2 db index esetén, azaz amikor r = 2):
[-1, -1], [-1, 1], [1, 1], és kimarad az [1, -1], pedig számít a sorrend, azaz hogy a 7-es vagy a 8-as index-e az 1 vagy -1. Szerintem csak ezt a részt kéne korrigálni, de én Python -ban nem vagyok otthon és Te ezt jobban fogod tudni, de Java -ban meg fogom csinálni a Te gondolatmeneted mentén, és aztán meglátjuk meg tudom-e csinálni. :-D
Szóval nagy-nagy köszönetem Neked, hálás vagyok, sokat segítettél!! És ügyes vagy, hogy így gyakorlatilag elsőre szinte kész megoldásod lett!
"mert én elég sokat ültem felette, de nem jutottam előbbre."
Ezt teszi a diploma hiánya
Igen nem azt csinálja a combinations_with_replacement mint amit elvártam tőle. Az elemek sorrendje között nincs meg az összes permutáció hanem mindegyik "mintára" csak 1 van. A példában : [link]
Van pl ABC,3 bemenettel végig iterálva van közte olyan eset is hogy : 2 darab A és 1 darab B van ebből az AAB eset van , de lehetne még az ABA és BAA is.
Saját generátort is csinálhattam volna rá, de használtam a már implementáltat. Viszont ez esetben csináltam a my_combinations-t hogy azt csinálja amit kell erre is, ha tudtok előre implementáltat ami benne van a python3-ba és ezt csinálja akkor szóljatok! Még az is hiba volt hogy r-nek egyel nagyobb tartományt kell bejárnia, azaz ha r az s-nek tömbindexe lenne akkor túlindexelné pont.
Így is nézd meg!
(Teljesen brute force módszer.)
Köszönöm."...ha tudtok előre implementáltat..." A product amit kerestem az itertools modulból : [link]
Régen még használtam is.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!