Kezdőoldal » Számítástechnika » Programozás » Miként lehetne ezt a rendezést...

Miként lehetne ezt a rendezést megcsinálni?

Figyelt kérdés

Adott egy lista tele szavakkal, amiben minden szó csak 1x fordul elő, de előfordulhatnak benne egymásnak anagrammák. A feladat az, hogy rendezzem úgy hogy szóhossz szerint csökkenő sorrendbe, hogy legelőszőr a egymásnak anagrammák és ugyanolyan hosszú szavak, ezután a nem anagrammák, de ugyan olyan hosszú szavak végül pedig azok amiknek nincs anagrammájuk. Az meg van, hogy eldöntsem, hogy anagramma--e azzal nincs gond, csupán a rendezéssel. A IComparable interfésszel próbáltam meg oldani, de nem teljesen jó. Tehát aminek egyáltalán nincs anagrammája az a lista legeslegalján legyen, középen szó hossz szerint csökkenő sorrend de azok amik egyenlő hosszúak csoportosítva, legfelül pedig azok szóhossz szerint csökkenő sorrendben amik anagrammák,DE csoportosítva aszerint hogy mely szónak anagrammái.


Jelenleg így néz ki:

utas

suta

botor //nincs angarammája

korok //nincs angarammája

amorf

forma

tarka //nincs angarammája

farom

elolt

letol

.

.

.

leltek //nincs angarammája

torpan //nincs angarammája

szabja

bajsza

kiadja

ajkaid

lankad

kaland

.

.

.

miniszter

miszerint

kalandtura

hajnalokat

hatoljanak



Én végeredményben azt kellene, hogy amit "//nincs angarammája"-val jelöltem az legalulra kerüljön.

Nem tudom mennyire érthető ez így, mindenesetre itt az eddigi kód:


public void rendez()

{

Szavak.Sort(delegate (string x, string y)

{

if (x.Length > y.Length) return 1;

else if (x.Length == y.Length && anagramma_e(x, y) == false) return -1;

else if (x.Length == y.Length && anagramma_e(x, y) == true) return 0;

else return -2;

});


foreach (var item in Szavak)

{

Console.WriteLine(item);

}

}


(Mivel nem sok kód nem használtam kód-megosztó oldalt)

[link]


Vagy csak én értelmezek valamit félre és úgy kell ahogy csináltam???


2020. ápr. 12. 12:03
1 2
 1/15 anonim ***** válasza:
100%

Szerintem félreértelmezed, sehol nem írja, hogy utolsó kell legyen az anagramma nélküli szó.


A rendezésed szerintem nem jó, kell valami adatszerkezet, ami alapján eldöntöd, hogy melyik szó melyiknek az anagrammája. Szerintem a legegyszerűbb, ha sorba rendezed a betűket a szavakon belül, és ezt hozzáteszed a szóhoz (egy struct vagy class vagy mit tudom én mi van c#-ban).


Ha rendezted a szavakat ez alapján akkor a kiírásnál már csak azt kell eldönteni, hogy mikor milyen whitespace-t raksz közé. Ha szeretnéd, még tovább bonyolíthatod az adatszerkezetet, hogy a kiírás egyszerűbb legyen, de nem sok értelme van.

2020. ápr. 12. 15:15
Hasznos számodra ez a válasz?
 2/15 anonim ***** válasza:
100%
Amit leírtál, az nem egy rendezés. Rendezésnél nem létezik az a szó, hogy "csoportosítva". A rendezés ott kezdődik, hogy bármelyik két elem esetében meg tudod mondani, hogy melyik elem 'nagyobb' a másiknál. Például egy szót nem szóltál arról, hogy a "csoportokon" belül mi a sorrend, hogy az azonos hosszú szavaknál mi a sorrend, csak azt, hogy "csoportban" vannak. Először specifikáld a feladatot úgy, hogy értelme is lgyen, addig ne is próbálj megoldáson gondolkodni.
2020. ápr. 12. 18:43
Hasznos számodra ez a válasz?
 3/15 A kérdező kommentje:

#2 mért ne lenne rendezés? hiszen az egész egy rendező függvény a listának a sort-jával. Leírni meg íért leírtam mert nem tudtam jól megfogalmazni. A lényeg h jelenleg a "rendezés" (idézőjel ha már at mondod nem a, de most nem is a lényeg) azt csinálja h leír egy sót és annak anagrammáit majd eután azok jönnek amik ugyanolyan hosszúak, mint e a szó és ezután jönnek azok a savak ami ettől a szótól rövidebbek de egyáltalán nem anagrammák ÉS majd csak ezután jönnek a "2.féle" anagramma szavak. és így tovább (tudom hogy nem igazán érthető)

Nem tudom mennyire les érthetőbb, de vhogy így kellene:

ANAGRAMMÁK

3 betűsök pl sut tus ust uts stb

4 betűsök pl suta utas tasu tusa tsua stb

5 betűsök pl keksz ekszk kszke skzek stb

6 betűsök

stb

Nem anagrammák, de szóhosszban megegyeznek és 1 csoportba minimum 2 szó tartozik


3 betűsök pl tzg ajk ztu

4 betűsök pl atsk iuhk plku

5 betűsök pl tref jkupu áépuv

6 betűsök

stb


Ezután (tehát a lista legalján) pedig azok szavak jönnek, amik "egyediek" azaz nincs mégegy ilyen hosszú szó, ennél fogva anagramma sincs rá

pl

megszentségteleníthetetlenségeskedéseitekért (tehát 1 db szó ami 44 karakter)

elkelkáposztástalaníthatatlanságoskodásaitokért (tehát 1 db szó ami 47 karakter)


Ha így se érthető (amit nem csodálnék) akkor nem tudom jobban leírni, max a feladatot belinkelni

2020. ápr. 12. 20:59
 4/15 A kérdező kommentje:
Tehát amikor leírt egy 4 betűs anagramma csoportot akkor ne azon 5 betűsek jöjjenek amikben csak annyi közös hogy 5 betű, HANEM azon 5 betűsek melyek anagrammák is ezután AZON 6 betűsek AMIK szintén anagrammák majd ha nincs ilyen több anagramma csoport, MAJD csak akkor jöjjön az összes (tehát legalább 2db) x hosszú szó amik nem anagrammák egymással ezután az összes (szintén legalább 2db) x+1 hosszú. Majd a lista legalján az egyedi savak mert az egyik y hosszú, a másik Z , a lényeg h mind y hosszúból , mind z hosszúból csak 1 db van. Na remélem így már érthető
2020. ápr. 12. 21:23
 5/15 anonim ***** válasza:
29%

2-es jót írt, írj egy rendezés függvény:


Bekér két szót, SZÓ1 és SZÓ2


Ha betűhossz nem azonos, akkor adja vissza, hogy a rövidebb jön előbb.

Ha a betűhossz egyenlő, vizsgáld meg, hogy anagramma-e, ha igen, akkor 0-t adj vissza, ha nem, akkor tök mindegy melyik jön előbb, mondjuk akkor jöjjön előbb az, ami előbb van az abc-ben.


A sort-nak átadod ezt a függvény és így lesz egy rendezett listád betűszám szerint, ahol az anagrammák egymás mellett vannak.


Ezután ezt listát kell kiíratni, méghozzá úgy, hogy végigmész rajta, az első szót leírod.

Ha a második anagrammája, akkor mellé írod, ha nem, akkor új sort nyitsz.

Ha a köv szó hosszabb, mint az előző, akkor teszel egy üres sort és leírod.

Ezzel kész a kiíratás.


Ezzel a módszerrel persze az egyke szavak nem tudni, hogy az anagramma előtt vagy után jönnek-e föl, de ezt nem is kéri a feladat.

Ha az egykéket előre vagy hátra akarod vinni, nyilván az is megoldható, de ez a feladat ezt most nem kérte.

2020. ápr. 13. 11:44
Hasznos számodra ez a válasz?
 6/15 anonim ***** válasza:
100%

#4 Még mindig csoportokról beszélsz. Kérdés

- Mi jön előbb, a suta, vagy az utas?

- Mi jön előbb, a suta és az utas, vagy a karó és a róka?


A rendezés akkor lesz rendezés, ha bármelyik két szót össze tudod hasonlítani. Jelenleg viszont csak azt vázoltad fel, hogy milyen csoportokra bontod a szavakat. De ha csoportosítasz, akkor meg kell tudnod mondani a csoportok között, és a csoportokon belül is a sorrendiséget. Mi alapján rendezed a 3 betűs anagramma csoportokat? Mi alapján rendezed egy anagramma csoport elemeit? Amíg ezekre nincs válasz, addig nem beszélhetünk rendezésről.

2020. ápr. 13. 12:05
Hasznos számodra ez a válasz?
 7/15 A kérdező kommentje:

Köszi a tippeket, így már jobban értem, hogy mért mondtátok hogy nem csoportosítás. Ellenben próbálkoztam, de nem sok eredményre, egyelőre ennyire jutottam, de mivel tudom, hogy nem jó még próbálkozok:


public int rendez(string szo1, string szo2)

{

if (szo1.Length == szo2.Length)

{

if (anagramma_e(szo1, szo2) == true) return 1; else return -1;

}

else if (szo1.Length > szo2.Length) return 1;

else if (szo1.Length < szo2.Length) return -1;

else return 0;

}

2020. ápr. 13. 17:09
 8/15 anonim ***** válasza:
29%

if (anagramma_e(szo1, szo2))-nál adjál vissza 0-t, ha anagramma és -1-et, ha nem.


Az utolsó else ág meg felesleges, mert a hossz vagy =, vagy < vagy > nincs több lehetőség.

2020. ápr. 13. 19:15
Hasznos számodra ez a válasz?
 9/15 A kérdező kommentje:
Igen ezt én is javítottam, azonban az eredmény nem lett sokkal jobb ugyanis pl van a botor szó után a korok jön márpedig lenne a robot szó ami anagrammája, ami pedig majd 10 szóval lejjebb van. Ha úgy jobb felrakhatom valahova az egész kódot feladattal mellékelve, ha úgy könnyebben átlátjátok, egyébként ez lenne az utolsó feladat, a többi már kész.
2020. ápr. 13. 19:56
 10/15 A kérdező kommentje:
2020. ápr. 13. 20:08
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!