1 / 21
Jan 2017

FR_05_02 - Moc hasła
Witam czy ktoś potrafiłby mi wytłumaczyć co jest nie tak w tym zadaniu wszystkie testy przechodzi lecz niestety po wysłaniu dochodzi do 4 sędziego i pisze błędna odpowiedź.

Oto mój kod.

#include <iostream>
using namespace std;
int czysilne(string wyraz)
{
    int duzelitery=0,malelitery=0,cyfry=0,symbolespacje=0;
    int zwrot;
    for(int i=0;i<wyraz.length();i++)
    {
        if(wyraz[i]>=65&&wyraz[i]<=90)
        {
            duzelitery=1;
        }
        if(wyraz[i]>=97&&wyraz[i]<=122)
        {
            malelitery=1;
        }
        if(wyraz[i]>=49&&wyraz[i]<=57)
        {
            cyfry=1;
        }
        else{symbolespacje=1;}

    }
    if(duzelitery==1&&malelitery==1&&cyfry==1&&symbolespacje==1)
    {
        zwrot=1;
    }
    else{zwrot=0;}
    return zwrot;







}

int main()
{
    int ile;
    cin>>ile;
    cin.get();


    while(ile--)
    {


    string wyraz; int funkcjaczysil,dlugosc;

    getline(cin,wyraz);
    dlugosc=wyraz.length();
    if(dlugosc>=8)
    {
    funkcjaczysil=czysilne(wyraz);
    if(funkcjaczysil==1)
    {
        cout<<wyraz<<endl;
    }



    }

    }





}

Twój program pomija zero . Dla takich prawidłowych danych :

AAAAAAAAAa0!

Nie wypisuje ich na wyjściu .

Ja w tym zadaniu mam wszystkie 256 kodów przypisanych do odpowiedniej kategorii ( tak na wszelki wypadek ) .

dziękuje kompletnie nie zauważyłem tego,lecz niestety dalej wyrzuca błędną odpowiedź:frowning:

6
Zzzzzzzzzzz 0
Aaaaaaaaaa*8
Bbbbbbbbbbbbb^7
Ccccccccccccccccc~9
Ddddddddddddddddd(9
Eeeeeeeeeeeeeee9

Masz dwa błędy :
1. 5 pierwszych prawidłowych ( silnych ) haseł . Twój program twierdzi że wszystkie są prawidłowe .
2. Program wczytuje o jedna linie za mało .

if ....
if ...
else ..

W takim przypadku [powyżej] else "związane" jest tylko z ostatnim if'em. Prawidłowo:

if ...
else if ....
else ... /**

Zamiast:
if(wyraz[i]>=65&&wyraz[i]<=90)
lepiej
if (wyraz[i] >= 'A' && wyraz[i] <= 'Z')
ale to i tak nie zwalnia z podstawowej wiedzy i znajomości tablicy ASCII i wiedzy, że liczby, to:
'0' ... '9'
a nie
'1' .. '9' <--- ale to już podobno poprawiłeś?

=======
/** w zadaniu [w kodzie] jest oczywiście więcej tych ifów.

Udało się zadanko zaakceptowane.
Mam podstawowa wiedze i znajomośc tablicy ASCII a to z tym 0 to był głupi błąd nie wynikający z braku wiedzy te rady co do if i else bardzo się przydały bo nie wiedziałem o tym a teraz zostałem uświadomiony ,że w wielu moich kodach mam taki błąd.
Dziękuje za pomoc :slight_smile:

27 days later

Męczyłem się. Meczyłem się bo zadanie daje bardzo dziwne rzeczy na lini. otóż najwyraźniej podaje nul jako jeden z elementów hasła. Dlatego moja uwaga aby sobie poradzić bez zbytnich cierpień.
Wczytać pierwszą linie także jako string potem użyć sscanf aby zrobić z tego liczbę następnie wczytywac linie i sprawdzać je aż dojdziemy do znaku nowej lini broń Boże używać strlen. tablica 10k wystarczyła.

Pozdrawiam. (Samo zadanie jest dosć proste, ale to co wchodzi na linii jest dyskusyjne)

W haśle może być każdy znak ascii - oprócz End od Line . Według mnie w szczególności może być kilka takich znaków - pewno autor zadania miał natchnienie i wymyślił złośliwe testy .

No niby jaki każdy!?

  1. Wielkie litery: A, B, C, ..
  2. Małe litery: a, b, c, ...
  3. Cyfry: 0, 1, 2, ...
  4. Symbole występujące na klawiaturze (wszystkie znaki na klawiaturze niezdefiniowane jako litery lub cyfry) oraz spacje.

A jak w haśle są spacje, to przecież wiadomo, że aby wczytać takie hasło, to trzeba wczytać, najlepiej od razu, np getline, całą linijkę, a nie po kawałkach. Może stąd niektórzy mają jakieś dziwne problemy i wysnuwają jeszcze dziwniejsze i oczywiście nieprawdziwe i niepoprawne "odkrywcze" wnioski, które powinny być przecież chyba jasne i oczywiste, czyż nie?

PS

Oczywiście, żadnego null'a tam nie ma, chyba, że rozwiązujący zadanie sam sobie je wsadzi.

Kolego Narbej, chyba kolega nie czytał zadania. Wymienione przypadki przez kolegę dotyczą poprawnego hasła. Otóż hasło poprawne może mieć w środku nul terminator i zaweirać przez Kolegę wymienione litery spełniające wymóg dobrego hasła. Ważne aby czytać linijkę to jest szukać '/n/ broń boże strlen który znajdzie nam nul. W przeciwnym wypadku wpadniemy w pułapkę autora zadania.

ciekawe, bardzo ciekawe nawet, bo mój program nie sprawdza istnienie znaku '\0' a mimo to został uznany za poprawny, ale cóż, niektórzy wierzą w teorie spiskowe

facepalm

Pisz, żeby nie sprawdzać nul a szukać końca linii.
Dostań pouczenie, że program który nie sprawdza nul przechodzi.

Masz całkowitą rację. Mam już takie doświadczenie i staż na spoju, że zupełnie nie potrzebuję czytać ani treści zadania, ani nawet przykładowego testu. Tak jakoś mi się porobiło, że siadam, piszę wysyłam i już. Jak nie za pierwszym razem, to po ewentualnie kilku próbach i drobnych kosmetycznych zmianach w kodzie jest AC.

A tak na serio, może trochę więcej pokory i samokrytyki wobec siebie i swoich umiejętności i wiadomości? Jak uda Ci się zaliczyć jakieś zadanie, z którym miałeś problemy, to nie obwiniaj autora zadania, że wsadził tam specjalnie bombę i przestań wysnuwać, jak to napisał @mariusz193 swoje odkrywcze teorie spiskowe. :wink:, a przynajmniej wcześniej poczytaj te manuale.

PS
Gdybym nie musiał tyle pisać, to może bym Ci wyjaśnił o co tu chodzi, ale już mi się rozbolały palce [starość nie radość], no ale musiałbyś wcześniej zgłosić takie zapytanie i takli problem, a nie wyskakiwać tu ze swoimi błędnymi wnioskami. I zapewne pominął bym to wszystko9 milczeniem, ale przecież czytają to inni i jeszcze uwierzą w twoje słowa, więc musiałem się, acz niechętnie wypowiedzieć.

Jeszcze raz zapewniam, w testach nie ma żadnych null terminatorów:

null terminator = '\0' != '0'

PS
Wiem, że Ty wiesz, co to null, ale tak dla przypomnienia innym czytającym.

Możliwe, że miałem jakiś błedzik który przez przypadek poprawiłem. Ale apeluję do osób które będą w przyszłości walczyć z tym zadaniem. Miejcie się na baczności. Nie od biedy to niepozorne zadanie ma tak niski % zaliczeń.

4 months later

Ostatni wiersz w danych testowych nie zawiera znaku nowej linii. Więc jak wczytujemy np funkcją fgets i usuwamy ostatni znak (bo spodziewamy się że jest tam znak nowej linii) to dostaniemy WA bo usuniemy sobie istotny znak z ostatniego wiersza.

4 years later

Witajcie,
Czy ktoś mógłby podać prawidłową odpowiedź na:

1
Żą 123

pomiędzy ą i 1 są 2 spacje a po 3 jest jeszcze spacja.

Wątpię, że w testach pojawiają się polskie litery więc nie przejmuj się takimi przypadkami. Mój program (AC) nie uważa takiego hasła za silne.

Jak nie masz pomysłu, co dalej to pokaż kod, to będziemy się zastanawiać

Wiram, mam probelem z tym zadaniem czy mógłby ktoś wyjaśnić co jest źle.(Sędzia zwraca NZEC)

for _ in range(int(input())):
haslo=input()
if not haslo.isalnum() and len(haslo)>=8 and any(i.isnumeric() for i in haslo) and any(r.islower() for r in haslo) and any(litera.isupper() for litera in haslo):
     print(haslo)