Kezdőoldal » Számítástechnika » Programozás » Lenne olyan vállalkozó szellem...

Lenne olyan vállalkozó szellemű lélek, aki segítene eme algoritmusos-programozós feladatban?

Figyelt kérdés

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. :-)



2021. júl. 23. 20:29
1 2
 11/20 A kérdező kommentje:
A cég nevét nem tudom, megoszthatom-e, ezt így ide most nem írnám ki, ha nem haragszol :)
2021. júl. 23. 23:11
 12/20 A kérdező kommentje:
De az tuti, hogy Te egy zseni vagy, ha tudod ennek a megoldását, mert én elég sokat ültem felette, de nem jutottam előbbre. :D
2021. júl. 23. 23:12
 13/20 anonim ***** válasza:
Python3-ban én megoldásom : [link]
2021. júl. 24. 01:15
Hasznos számodra ez a válasz?
 14/20 anonim ***** válasza:

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 :

[link]

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.

2021. júl. 24. 12:05
Hasznos számodra ez a válasz?
 15/20 A kérdező kommentje:

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!

2021. júl. 25. 21:07
 16/20 A kérdező kommentje:
Még csak most jutottam oda, hogy a #8 -as hozzászóló által írt algoritmust is megnézzem. Ez teljesen jó, legalábbis nem találtam olyan "s" értéket, amire ne adna helyes "k" -t. Profi. Köszi. :-) Tanultam Tőletek. :-)
2021. júl. 25. 23:26
 17/20 anonim ***** válasza:
0%

"mert én elég sokat ültem felette, de nem jutottam előbbre."


Ezt teszi a diploma hiánya

2021. júl. 25. 23:36
Hasznos számodra ez a válasz?
 18/20 anonim ***** válasza:

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!

[link]

(Teljesen brute force módszer.)

2021. júl. 27. 00:22
Hasznos számodra ez a válasz?
 19/20 A kérdező kommentje:
Szia! Megnéztem az új verziód is, ügyes! Így már nem találtam olyan példát, amire ne lenne jó. Ha cégem lenne, én Téged is felvennélek fejlesztőnek (ha nem küldted volna ezt az új verziód, akkor is). És köszi ismét, hogy ennyi energiát ebbe beletettél, tanultam Tőled, mint a #8 -as hozzászólótól is. Respect Nektek.
2021. júl. 28. 13:42
 20/20 anonim ***** válasza:

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.

2021. júl. 30. 23:31
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!