Miként lehetne ezt a rendezést megcsinálni?
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)
Vagy csak én értelmezek valamit félre és úgy kell ahogy csináltam???
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
#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
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
#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.
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;
}
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!