32 / 93
Nov 2017

Wielkie dzięki narbej. Najlepsze jest to, że prosiłam kilka znajomych o przeczytanie w celu wykluczenia literówek i nikt tego nie zauważył (włącznie ze mną). Oczywiście AC. Kod usunęłam. Jeszcze raz dzięki.

20 days later

Proszę o pomoc z zadaniem Liczba na słowo jest jakiś błąd którego nie widzę. Sędzia nie zaliczył.

Dziękuje za wszelkie sugestie.

A sędzia widzi bo ma :eyeglasses: :wink:
Co to jest [ile to jest] “siedemnasie”, ? :wink:

11 days later

Hejo. Czy ma ktoś może jakieś dodatkowe przykłady oprócz ujętych tutaj w temacie ? bo wszystkie przechodzą na ideone, ale nie u sędziego.

98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
40
41
50
51
60
61
70
71
80
81
90
91
100
101
111
121
199
200
222
333
444
555
666
777
888
999
1000
1001
1011
1022
2000
2222
3333
4444
5555
6666
7777
8888
9999
10000
10001
10101
11111
22222
55555
100000
101001
111111
222222
555555
1000000
1000001
1111111
2222222
5555555
10000000
1000000000
1000000001
1001001001
1111111111
2000000000
2002002002
2222222222
5000000000
5005005005
5555555555
1000000000000

out:

jeden
dwa
trzy
cztery
piec
szesc
siedem
osiem
dziewiec
dziesiec
jedenascie
dwanascie
trzynascie
czternascie
pietnascie
szesnascie
siedemnascie
osiemnascie
dziewietnascie
dwadziescia
dwadziescia jeden
dwadziescia dwa
dwadziescia trzy
dwadziescia cztery
dwadziescia piec
dwadziescia szesc
dwadziescia siedem
dwadziescia osiem
dwadziescia dziewiec
trzydziesci 
trzydziesci jeden
czterdziesci 
czterdziesci jeden
piecdziesiat 
piecdziesiat jeden
szescdziesiat 
szescdziesiat jeden
siedemdziesiat 
siedemdziesiat jeden
osiemdziesiat 
osiemdziesiat jeden
dziewiecdziesiat 
dziewiecdziesiat jeden
sto 
sto jeden
sto jedenascie
sto dwadziescia jeden
sto dziewiecdziesiat dziewiec
dwiescie 
dwiescie dwadziescia dwa
trzysta trzydziesci trzy
czterysta czterdziesci cztery
piecset piecdziesiat piec
szescset szescdziesiat szesc
siedemset siedemdziesiat siedem
osiemset osiemdziesiat osiem
dziewiecset dziewiecdziesiat dziewiec
jeden tys. 
jeden tys. jeden
jeden tys. jedenascie
jeden tys. dwadziescia dwa
dwa tys. 
dwa tys. dwiescie dwadziescia dwa
trzy tys. trzysta trzydziesci trzy
cztery tys. czterysta czterdziesci cztery
piec tys. piecset piecdziesiat piec
szesc tys. szescset szescdziesiat szesc
siedem tys. siedemset siedemdziesiat siedem
osiem tys. osiemset osiemdziesiat osiem
dziewiec tys. dziewiecset dziewiecdziesiat dziewiec
dziesiec tys. 
dziesiec tys. jeden
dziesiec tys. sto jeden
jedenascie tys. sto jedenascie
dwadziescia dwa tys. dwiescie dwadziescia dwa
piecdziesiat piec tys. piecset piecdziesiat piec
sto  tys. 
sto jeden tys. jeden
sto jedenascie tys. sto jedenascie
dwiescie dwadziescia dwa tys. dwiescie dwadziescia dwa
piecset piecdziesiat piec tys. piecset piecdziesiat piec
jeden mln. 
jeden mln. jeden
jeden mln. sto jedenascie tys. sto jedenascie
dwa mln. dwiescie dwadziescia dwa tys. dwiescie dwadziescia dwa
piec mln. piecset piecdziesiat piec tys. piecset piecdziesiat piec
dziesiec mln. 
jeden mld. 
jeden mld. jeden
jeden mld. jeden mln. jeden tys. jeden
jeden mld. sto jedenascie mln. sto jedenascie tys. sto jedenascie
dwa mld. 
dwa mld. dwa mln. dwa tys. dwa
dwa mld. dwiescie dwadziescia dwa mln. dwiescie dwadziescia dwa tys. dwiescie dwadziescia dwa
piec mld. 
piec mld. piec mln. piec tys. piec
piec mld. piecset piecdziesiat piec mln. piecset piecdziesiat piec tys. piecset piecdziesiat piec
jeden bln.

jeden
dwa
trzy
cztery
piec
szesc
siedem
osiem
dziewiec
dziesiec
jedenascie
dwanascie
trzynascie
czternascie
pietnascie
szesnascie
siedemnascie
osiemnascie
dziewietnascie
dwadziescia
dwadziescia jeden
dwadziescia dwa
dwadziescia trzy
dwadziescia cztery
dwadziescia piec
dwadziescia szesc
dwadziescia siedem
dwadziescia osiem
dwadziescia dziewiec
trzydziesci
trzydziesci jeden
czterdziesci
czterdziesci jeden
piecdziesiat
piecdziesiat jeden
szescdziesiat
szescdziesiat jeden
siedemdziesiat
siedemdziesiat jeden
osiemdziesiat
osiemdziesiat jeden
dziewiecdziesiat
dziewiecdziesiat jeden
sto
sto jeden
sto jedenascie
sto dwadziescia jeden
sto dziewiecdziesiat dziewiec
dwiescie
dwiescie dwadziescia dwa
trzysta trzydziesci trzy
czterysta czterdziesci cztery
piecset piecdziesiat piec
szescset szescdziesiat szesc
siedemset siedemdziesiat siedem
osiemset osiemdziesiat osiem
dziewiecset dziewiecdziesiat dziewiec
jeden tys.
jeden tys. jeden
jeden tys. jedenascie
jeden tys. dwadziescia dwa
dwa tys.
dwa tys. dwiescie dwadziescia dwa
trzy tys. trzysta trzydziesci trzy
cztery tys. czterysta czterdziesci cztery
piec tys. piecset piecdziesiat piec
szesc tys. szescset szescdziesiat szesc
siedem tys. siedemset siedemdziesiat siedem
osiem tys. osiemset osiemdziesiat osiem
dziewiec tys. dziewiecset dziewiecdziesiat dziewiec
dziesiec tys.
dziesiec tys. jeden
dziesiec tys. sto jeden
jedenascie tys. sto jedenascie
dwadziescia dwa tys. dwiescie dwadziescia dwa
piecdziesiat piec tys. piecset piecdziesiat piec
sto tys.
sto jeden tys. jeden
sto jedenascie tys. sto jedenascie
dwiescie dwadziescia dwa tys. dwiescie dwadziescia dwa
piecset piecdziesiat piec tys. piecset piecdziesiat piec
jeden mln.
jeden mln. jeden
jeden mln. sto jedenascie tys. sto jedenascie
dwa mln. dwiescie dwadziescia dwa tys. dwiescie dwadziescia dwa
piec mln. piecset piecdziesiat piec tys. piecset piecdziesiat piec
dziesiec mln.
jeden mld.
jeden mld. jeden
jeden mld. jeden mln. jeden tys. jeden
jeden mld. sto jedenascie mln. sto jedenascie tys. sto jedenascie
dwa mld.
dwa mld. dwa mln. dwa tys. dwa
dwa mld. dwiescie dwadziescia dwa mln. dwiescie dwadziescia dwa tys. dwiescie dwadziescia dwa
piec mld.
piec mld. piec mln. piec tys. piec
piec mld. piecset piecdziesiat piec mln. piecset piecdziesiat piec tys. piecset piecdziesiat piec
jeden bln.

mój out.

Nawet lepszy, bo nie ma nadmiarowych spacji :slight_smile: Jeśli dalej masz problem to wklej kod, bo chyba nie znajdziemy.

21 days later

Gdyby ktoś mógł spojrzeć i podsunąć przykłady, na których wykłada się następujący kod:

Tu był kod

Kod przetestowany podanym kilka postów wyżej zestawem testowym, po czym sprawdzony na diff-online.com16 (wyniki są identyczne). Usunąłem także wszelkie nadmiarowe spacje, ustawiłem górny limit wprowadzanej liczby na 1 bilion. Kod od początku do końca operuje na stringach i z tego też powodu jest mocno przekombinowany.

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?