1 / 24
Jul 2018

Chciałem pomóc i przy okazji sam rozwiązać to zadanie i się zaciąłem. Czy ja dobrze rozumiem, że:

  1. Najpierw powinienem zatroszczyć się o to by wyjściowy tekst był jak najkrótszy
  2. Następnie dopiero podzielić go tak by było jak najwięcej sylab trójliterowych

Czyli ten out dla danych z zadania:

zawody w
programow-
aniu czas-
em wymaga-
ja rozwia-
zywania
zadan

jest nieprawidłowy tylko i wyłącznie ze względu, że w tej samej długości tekstu można walnąć więcej trójsylab?
(Ten out ma dokładnie taką samą długość co out z zadania)

Jeżeli tak to mam test, którego nie przechodzisz, ale nie jestem właśnie pewny czy dobrze rozumiem warunki akceptacji.

przy dzieleniu na sylaby masz najpierw zrobić tak dużo jak sie da sylab trzyliterowych, a dopiero na końcu uzupełnić jedną lub dwoma sylabami dwuliterowymi, przynajmniej tak zrozumiałam treść. Dlatego twój out jest zły bo prawidłowy podział to cza-sem … Daj test , zobaczę :slight_smile: a może ktoś z zaliczeniem coś powie też :slight_smile:

Zastanawiam się czy do takiego testu:

10
mial ja na wiosce pieska mial ja go

Odpowiedź powinna być (jak u Ciebie)

mial ja
na wiosce
pieska
mial ja
go

czy też

mial ja
na wio-
sce pieska
mial ja
go

i dlaczego :slight_smile:

Nawet jeżeli wydłuży to out. Tak?

polskie litery zabierz :slight_smile: one kodowane są inaczej i na nich mój program zdecydowanie sie rozsypuje, ale w treści jest że alfabet angielski :slight_smile:

oj, już zamieniłem, bo sobie w Pythonie robię i tam jest to nieważne. To teraz trzeba sprawdzić.

mieści sie w 10 znakach więc po co go dzielić ?

u mnie po poprawkach w dzieleniu na sylaby jest taka odpowiedź, a spoj daje “przekroczenie czasu zamiast WA”

mial ja na
wiosce
pieska mi-
al ja go

Tak że dzięki za test, błąd znaleziony, oby jedyny, zobaczy sie po przyśpieszeniu :smiley:

no tak… to ja też nie miałem “mial ja na” więc to nasz wspólny błąd i nie zauważyłem.

U mnie to było ze względu na polskie litery, a błąd w podziale na sylaby tylko dwuliterowe

Ok, coś pozmieniałem. To teraz powiedz mi dlaczego:

mial ja na
wiosce
pieska mi-
al ja go

a nie:

mial ja na
wiosce pi-
eska mial
ja go

(ten drugi to mój out)

"Każdy wyraz dzielimy w taki sposób, aby składał się z maksymalnej liczby sylab trzyliterowych, przy czym sylaby trzyliterowe zawsze występują na początku. "
czyli jeżeli możemy wydzielić sylaby trzyliterowe - robimy to. Więc “pieska” dzielimy na pie-ska, a nie pi-es-ka

Da sie to zrobić na stringach (typ string) czy są za wolne?

Typ string nie jest specjalnie wolniejszy od tablicy char. To tylko niektóre operacje na stringach są wolne. Jakie operacje? Pomyśl sama. Jeżeli chcesz rozciągnąć albo skurczyć stringi :wink: to co się dzieje? Pewnie [jeżeli używasz] kopjujesz/[kupujesz ;-)] je nowe.

Konkludując, tak, można na stringach, ale bez delete, insert, [może size] itd. i ewentualnie bez uzyskania 0.00, ale też bez tle.

Można też pokombinować z Rope.

Uff… wymęczyłam, trzeba by przerobić kod na coś bardziej strawnego, ale trochę później, obecnie mam dość tego zadania :slight_smile:

Może i można, ale podpowiedź takiej kombinacji nie dotyczy pytania Juli.

Panuje takie nieuzasadnione stereotypowe myślenie - stringi [C++] są za wolne w zastosowaniach. Ale jeżeli tak to porównujemy je do czegoś, co jest [dużo] szybsze. Ale w takim razie użyjmy w tym czymś szybszym, w tablicach char [stringi C] takich samych opetracji, jakich używamy w stringach C++, np append, delete, insert i po przetestowaniu dopiero wtedy możemy wyciągać wnioski co jest szybsze a co wolniejsze.

Okazuje się, dzięki komentarzowi @tarpauwatratar, że jest rope, ale w tym zadaniu, ja używam stringów tylko do wczytywania kolejnych wyrazów i natychmiastowego ich obrabiania i wypisywania, więc te wszystkie dodatkowe operacje i rope są dla mnie nieprzydatne. Jeżeli jednak ktoś lubi kombinować …

Błąd, chociaż sam też tak często mam. Jednak po AC może warto “powalczyć” o strawność kodu. Może lepiej nawet nie poprawiać go, a napisać zupełnie na nowo, na świeżo, póki pamiętasz o co chodzi w tym zadaniu i pamiętasz jak je zrobić.

BTW
Używając klasy string w C++, udało mi się uzyskać 0.00 [bez rope]. Użyłem string’a tylko do wczytywania kolejnych wyrazów, a potem używałem już jak zwykłej tablicy char [+wskaźniki]. Dodatkowo:

ios::sync_with_stdio(0);

string wyraz;
wyraz.reserve(1000+2);

a wypisywanie printf i putchar.