41 / 93
Mar 2018

Przekombinowany czy nie działa dla różnych zakresów danych, które sprawdziłem: JLITOSL.zip14 (133.4 KB)

Jedyna różnica, że mój AC kod zwraca jeden bln. dla liczb większych niż podane jako dopuszczalny zakres. Może tak powinien się zachowywać?

Dla zera tez zwracam pustą linię.

Po co? Pytam się po co? Zamiast skupić się na poprawieniu logiki, czytelności itd zajmujesz się zbędnymi rzeczami. Jeżeli autor zadania napisał, że zakres jest taki i taki, to twój program już nic nie będzie robił [a przecież bez problemu mógłby, po wyrzuceniu zbędnych flag] dla danej np 1000000000111?. Nawet nie wypisze [na stderr] żadnego komunikatu błędu? No proszę cię! wIĘC PO CO W OGÓLE TO SPRAWDZANIE? Wybacz, wcisnął mi się CapsLock :wink: Czemu masz, a właściwie czemu nie masz greenflag i yellowflag w swoim kodzie? :wink: Zupełnie tego nie rozumiem :wink:

No i twój słownik… Przecież tu wystarczy[ą] zwykła[e] tablica[e] string lub char. Np
string Jednosci [ ] = {“zero”, “jeden”, “dwa”, “trzy”,…“dziewiec”, “dziesiec”, “jedenascie”…“dziewietnascie”};
string Dziesiatki [ ] = {“zero”, “dziesiec”, “dwadziescia”…“dziewiecdziesiat”};

string Setki [ ] = {…}

PODSUMOWANIE

Zajmij się uproszczeniem kodu, a nie nadmiarowymi spacjami, czy sprawdzaniem wartości na wejściu. O to, czy w zadaniu są istotne nadmiarowe spacje czy nie, zawsze możesz spytać na forum, ale najczęściej nie ma to znaczenia. Po uzyskaniu AC, możesz “bawić” się w takie upiększanie i poprawianie-wygładzanie kodu. ALe najlepiej napisz program dla siebie a nie na AC, np.: tak, żeby większe od biliona liczby nie były problemem, bo nawet teraz w twoim aktualnym wcale nie są. Wystarczy napisać [skupić się] na programie wypisującym liczby maksymalnie do 999 [1000]. Potem to już tylko dodawanie tys. czy bln. i zrób to bez red, green czy innych flag ;-), tak, aby sprawdzający mógł czytając twój kod sprawdzić i literówkę i bez problemu logikę.

PS
Pod linuxem, porównując dwa pliki, można łatwo ignorować nadmiarowe spacje [lub napisać własny, taki program] np:
diff -b -B plik1 plik2 :

//narbej:~$ diff --help
Składnia: diff [OPCJA]… PLIKI
Porównanie PLIKÓW kolejnymi liniami.

Obowiązkowe argumenty długich opcji są obowiązkowe też dla krótkich.
–normal wynik w postaci zwykłego diff-a (domyślnie)
-q --brief wypisanie wyniku tylko gdy pliki się różnią
-s --report-identical-files informowanie gdy dwa pliki są takie same
-c, -C NUM, --context[=ILE] wypisanie ILU (domyślnie 3) linii kontekstu
–u, -U ILE, --unified=ILE wypisanie najwyżej ILE (domyślnie 3)
linii kontekstu w trybie unified
-e --ed wynik w postaci poleceń ed-a
-n --rcs wynik w postaci diff-a z RCS
-y, --side-by-side wyniki w dwóch kolumnach
-W, --width=ILE wypisanie najwyżej ILE (domyślnie 130) kolumn
–left-column wypisanie tylko lewej kolumny dla wspólnych linii
–suppress-common-lines bez wypisania wspólnych linii

-p, --show-c-function podanie w jakiej funkcji C są zmiany
-F, --show-function-line=WYRREG wypisanie ostatniej linii pasującej do WYRREG
–label ETYKIETA użycie ETYKIETY zamiast nazwy pliku
(może być powtarzane)

-t --expand-tabs rozwinięcie TAB-ów w spacje w wyniku
-T --initial-tab wyrównanie linii przez użycie TAB-ów
–tabsize=ILE TAB-y co ILE (domyślnie 8) kolumn
–suppress-blank-empty bez wypisywania spacji i znaków TAB przed
pustymi liniami
-I --paginate przepuszczenie wyniku przez `pr’ żeby go stronnicować

-r --recursive porównanie podkatalogów rekurencyjnie
-N --new-file traktowanie brakujących plików jak pustych
–unidirectional-new-file traktowanie brakujących pierwszych plików
w pierwszym zestawie jako pustych
–ignore-space-change zignorowanie wielkości liter przy
porównywaniu nazw plików
–no-ignore-file-name-case uwzględnianie wielkości liter przy
porównywaniu nazw plików
-x, --exclude=WZÓR wykluczenie plików pasujących do WZORU
-X, --exclude-from=PLIK pominięcie plików pasujących do wzorców w PLIKU
-S, --starting-file=PLIK zacznij od PLIKU przy porównywaniu katalogów
–from-file=PLIK1 porównanie PLIKU1 z wszystkimi
argumentami; PLIK1 może być katalogiem
–to-file=PLIK2 porównanie wszystkich argumentów
z PLIKIEM2; PLIK2 może być katalogiem

-i --ignore-case ignorowanie różnic między wielkimi i małymi literami
-E --ignore-tab-expansion zignorowanie zmian spowodowanych
rozwinięciem TAB-ów
-Z, --ignore-trailing-space ignore white space at line end
-b --ignore-space-change Zignorowanie zmian ilości znaków odstępu
-w --ignore-all-space zignorowanie znaków odstępu
-B --ignore-blank-lines zignorowanie zmian liczby pustych linii
-I, --ignore-matching-lines=RE zignorowanie zmian w liniach pasujących
do RE

-a --text traktowanie plików jako tekstowych
–strip-trailing-cr pominięcie znaków nowej linii na wejściu

-D, --ifdef=NAZWA wypisanie połączonego pliku dla pokazania
różnic w #ifdef NAZWA' --GTYPE-group-format=FMTG użyciem FMTF do sformatowania grup wejściowych typu GTYPE --line-format=LFMT podobnie, ale z użyciem LFMT do sformatowania linii wejściowych --LTYPE-line-format=FMTL użycie FMTL do sformatowania linii wejściowych typu LTYPE Te opcje formatowania dają dokładną kontrolę nad wynikami diff-a, są uogólnieniem -D/--ifdef. TYPL toold’, new' albounchanged’. TYPG to TYPL albo `changed’.
(Tylko) FMTG może zawierać:
%< linie z PLIKU1
%> linie z PLIKU2
%= linie wspólne dla PLIKU1 i PLIKU2
%[-][SZER][.[DOKŁ]]{doxX}LITERA specyfikacja w stylu printf dla LITERY
LITERY są następujące dla nowej grupy (małe dla starej grupy):
F numer pierwszej linii
L numer ostatniej linii
N ilość linii = L-F+1
E F-1
M L+1 %(A=B?T:E) jeżeli A równa się B, to T, jeżeli nie, to E
(Tylko) LFMT może zawierać:
%L zawartość linii
%l zawartość linii z wyłączeniem znaku nowej linii
%[-][SZER][.[DOKŁ]]{doxX}n specyfikację numeru linii w stylu printf
Zarówno FMTG jak FMTL mogą zawierać:
%% %
%c’Z’ pojedynczy znak Z
%c’\OOO’ znak o kodzie ósemkowym OOO Z znak Z (inne znaki reprezentują same siebie)

-d --minimal usiłowanie znalezienia mniejszego zbioru zmian
–horizon-lines=ILE zostawienie ILE linii wspólnego przedrostka i przyrostka
–speed-large-files założenie: duże pliki i rozrzucone małe zmiany

  --help               wypisanie tej pomocy i zakończenie

-v --version wypisanie informacji o wersji i zakończenie

PLIKI to PLIK1 PLIK2' alboKATALOG1 KATALOG2’ albo KATALOG PLIK...' albo PLIK... KATALOG'. Jeżeli użyta jest opcja --from-file albo --to-file, nie ma ograniczeń co do PLIKU/ÓW. Jeżeli PLIK to-’, czytane jest standardowe wejście.
Status wyjściowy ma wartość 0 gdy pliki wejściowe są takie same, 1 - jeżeli
różne, 2 - jeżeli są problemy.

O błędach programu poinformuj bug-diffutils@gnu.org
O błędach tłumaczenia poinformuj translation-team-pl@lists.sourceforge.net
strona domowa GNU diffutils: http://www.gnu.org/software/diffutils/
Pomoc w używaniu oprogramowania GNU: http://www.gnu.org/gethelp/
knoppix@Microknoppix:~$

Ale gotowych do użycia, programów porównujących, pod linuxem jest dużo więcej.

Po kolejnych kilku próbach finalnie AC.

Co powodowało problem?

Tu był kod

…wystarczyło dorzucić jedną linijkę czyszczącą pośredni string do samych zer.

Oczywiście, że nie. Co więcej, wszystkie podane poprzednio kody także usunąłem.

3 months later

Cześć. Prosiłbym o pomoc w zlikwidowaniu błędu w moim kodzie

Zrobiłem wyjątek jedynie dla liczby 100000 bo wyswietlal sie napis “sto”. Przy innych liczbach wszystko było tak jak należy (sprawdziłem na tescie j4rooo).

Spoj wypluwa “błędną odpowiedź”. Czy to może chodzić o to że input jest stringiem a nie liczbą?

wyjątek zrobiony dla jednego konkretnego przypadku ?

a jeżeli jest ich więcej niż jeden :slight_smile:

Niestety ten blad pojawia sie gdy liczba dziesiatek i jednosci rowne sa 0. np 100.000, 300.432.234, 987.100.239.
wyswietli : sto… trzysta czterysta trzydziesci dwa tys. dwiescie trzydziesci cztery … dziewiecset osiemdziesiat siedem mln. sto dwiescie trzydziesci dziewiec

Ten wyjatek juz usuwam bo tylko wprowadzał chaos :smiley:

Poprawiony kod, aczkolwiek SPOJ wyświetla błąd SIGSEGV. Odpowiedzi wydają się być prawidłowe dla przeprowadzonych testów

Ktoś wie dlaczego pojawia się ten błąd segmentacji? Pozdrawiam

tak, ja wiem - co nie znaczy, że napiszę :slight_smile:

bo to przecież jest proste - robimy na ideone.com14 test referencyjny (czyli ten z 98) i wiemy dla jakiej wartości mamy błąd, potem wystarczy spojrzeć w kod

i uwagi ogólne:

  1. pisząc program, należy pamiętać, że prawdopodobieństwo wystąpienia błędu jest w najlepszym wypadku proporcjonalne do jego długości, a zwiększa się gwałtownie w przypadku nadużywania instrukcji if :slight_smile:

  2. nadmierna oszczędność nie popłaca, rozrzutność też :slight_smile:

Niestety, po usunięciu SIGSEGV jest WA

Nie napiszesz ponieważ… ? Chociaż nakieruj mnie dla jakiej wartości pokazuje błąd, od niedawna uczę się C++ i mogę czegoś nie zauważyć. Robię test na ideone mojego programu, wrzucam do stdin test 98 i pokazują mi się outputy do sto włącznie, reszty brak.

Ok skoro znalazłeś błąd SIGSEGV wiesz jak naprawić błąd z WA?

skoro sto jest, a następnej wartości nie ma, to chyba oczywiste :slight_smile:

a WA nie miałem czasu się zająć, może po 22

Udało się odnaleźć błędy. Co prawda SIGSEGVa już nie ma, jest tak jak mówiłeś… błędna odpowiedź.

Poprawiony kod

Co może być nie tak? :roll_eyes:

gratulacje :slight_smile:

pousuwaj linki do twojego programu, niech inni też samodzielnie rozwiązują

9 months later

Witam, ja także mam problem z tym zadaniem. Przechodzi wszystkie podane wyżej testy, a dostaję WA.
Proszę o jakąś wskazówkę albo test, którego nie przechodzi mój program.
Mój kod: tu był kod

usuń link do kodu, jest zbyt bliski AC :slight_smile:

podpowiedź wysyłam na priv

4 months later

witam,
na ideon wszystko śmiga a wywala mi błąd kompilacji ?? nie widzę błędu…

jeżeli klikniesz na tekst błąd kompilacji - to zobaczysz, co chce od ciebie kompilator
zaś problem bierze się stąd, że ustawienia kompilatora C++ 4.3.2 są nieco inne na spoj-u i ideone.com5