Loading...
Hr2Peev avatar Hr2Peev 13 Точки

Задача 05.Login

Здравейте, имам малък проблем с решението на задачата,опитах по няколко начина, които смятам че работят но въпреки това получавам 50/100 в judge. Освен основното решение съм закоментирал и второто решение. Ще съм благодарен ако някой реши да ми обясни с какво греша.

Условие: You will be given a string representing a username. The password will be that username reversed. Until you receive the correct password print on the console “Incorrect password. Try again.”. When you receive the correct password print “User {username} logged in.” However on the fourth try if the password is still not correct print “User {username} blocked!” and end the program.

Решение:

https://pastebin.com/t2AzK9Ki

Judge:

https://judge.softuni.bg/Contests/Compete/Index/1204#4

 

 

Тагове:
0
Module: C# Advanced
ValenNEW avatar ValenNEW 51 Точки
Best Answer

Здравей, колега

Методът ти "ReverseString" беше вкаран в друг клас, а това не е необходимо в твоят случай (не е грешно, но прави кода по-труден за четене).

Освен това, имаше бъг между ред 36 и ред 39. На кодът ти, който си постнал в PasteBin (не се разбира, кой потребител си блокирал, липсва форматиране или променлива).

  • else

                    {

                        Console.WriteLine("User sunny blocked!");                        

                    }

Ето ти дебъгнат код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Login
{
    class DebugLogin
    {
        private static string ReverseString(string s)
        {
            char[] arr = s.ToCharArray();
            Array.Reverse(arr);
            return new string(arr);
        }
        static void Main()
        {
            string user = Console.ReadLine();
            string pass = Console.ReadLine();
            for (int i = 0; i <= 3; i++)
            {
                if (i == 3)
                {
                    if (user == ReverseString(pass))
                    {
                        Console.WriteLine("User {0} logged in.", user);
                        break;
                    }
                    else
                    {
                        Console.WriteLine("User {0} blocked!", user);
                    }
                }
                else if (pass == ReverseString(user))
                {
                    Console.WriteLine("User {0} logged in.", user);
                    break;
                }
                else
                {
                    Console.WriteLine("Incorrect password. Try again.");
                    pass = Console.ReadLine();
                }
            }
        }
    }
}


Поздрави!

1
07/10/2018 22:22:15
Hr2Peev avatar Hr2Peev 13 Точки

Благодаря колега,

кода ти е страхотен и ми помогна да си видя грешките.

Поздрави!

1
ivan_danov avatar ivan_danov 4 Точки

Цял клас, метод за един ривърс и 4-ри библиотеки които не се ползват или могат да не се ползват ?

Много ми е отежнен кода

0
deqn96 avatar deqn96 2 Точки


        static void Main()
        {
            string userName = Console.ReadLine();
            string password = string.Empty;
        
            for (int i = userName.Length-1; i >= 0; i--)
            {               
                char symbol = userName[i];                
                password += symbol;               
            }

            for (int i = 0; i < 4; i++)
            {
                string currentPassword = Console.ReadLine();

                if (currentPassword == password)
                {
                    Console.WriteLine($"User {userName} logged in.");
                    break;
                }
                else if (password != currentPassword && i >= 0 && i < 3)
                {
                    Console.WriteLine("Incorrect password. Try again.");
                }
                else if (password != currentPassword && i == 3 )
                {
                    Console.WriteLine($"User {userName} blocked!");
                }
            }
        }
    }
}
 

0
18/03/2019 14:07:45
ReapeR_MaxPayne avatar ReapeR_MaxPayne 16 Точки

string validPassword = Console.ReadLine().Reverse();
            int failAttempts = 0

do {
    string password = Console.ReadLine();

    if (password != validPassword)    
    {
        if (++failAttemprs = 4) 
        {
            Console.WriteLine("User {expectedPassword.Reverse()} blocked!")
            return;
        }
        else
        {
            Console.WriteLine("Incorrect password. Try again.")
        }
    }
    else
    {
        Console.WriteLine("User {expectedPassword.Reverse()} logged in.");
        return;
    }
} While (failAttempts < 5)

Пробвай това. ;)

0
27/09/2018 09:50:51
ivan_danov avatar ivan_danov 4 Точки

Има много грешки

0
ivan_danov avatar ivan_danov 4 Точки

Ето и един вариант от мен без използването на каквито и да било библиотеки:

using System;

namespace _05._Login
{
    class Program
    {
        static void Main(string[] args)
        {
            string user = Console.ReadLine();
            char[] userToChar = user.ToCharArray();

            int passLength = 0;
            int passCount = 0;
            int key = 0;

            char[] keyArr = new char[userToChar.Length];
            for (int i = userToChar.Length - 1; i >= 0; i--)
            {
                keyArr[key] = userToChar[i];
                key++;
            }

            while (passCount != 4)
            {
                string pass = Console.ReadLine();
                char[] passToChar = pass.ToCharArray();

                for (int i = 0; i < passToChar.Length; i++)
                {
                    if (passToChar[i] == keyArr[i])
                    {
                        passLength += 1;
                    }
                }

                if (passLength == passToChar.Length)
                {
                    Console.WriteLine($"User {user} logged in.");
                    return;
                }
                else if (passCount != 3)
                {
                    Console.WriteLine("Incorrect password. Try again.");
                }
                passLength = 0;
                passCount += 1;
            }
            Console.WriteLine($"User {user} blocked!");
        }
    }
}
 

0
Stfnvn avatar Stfnvn 22 Точки

Грешката е на ред 38 в Patebin. Вместо username на входа си сложил sunny. След като промениш дава100/100 в Judge.

1
ivan_danov avatar ivan_danov 4 Точки

Ето още един вариант според мен най-добър и изчистен

using System;
using System.Linq;


namespace Login_2
{
    class Program
    {
        static void Main(string[] args)
        {
            char[] user = Console.ReadLine().Reverse().ToArray();
            int passCount = 0;

            while (passCount != 4)
            {
                passCount++;
                char[] pass = Console.ReadLine().ToArray();


                if (string.Join("", pass) == string.Join("", user))
                {
                    Console.WriteLine($"User {String.Join("", user.Reverse())} logged in.");
                    return;
                }
                else if (passCount != 4)
                {
                    Console.WriteLine("Incorrect password. Try again.");
                }
            }
            Console.WriteLine($"User {String.Join("", user.Reverse())} blocked!");
        }
    }
}
 

0
Elena123456 avatar Elena123456 235 Точки

Здравейте, споделям и още едно решение на задачата. Надявам се да послужи на някого, тъй като задачата все още е включена  във Fundamental модулите и от тази година.

1. Чета стринг userName и правя от него масив от чарове. Масива  го ревърсвам.

2. Чета стринг password и правя от нея масив от чарове.

3. Сравнявам userName[] с password [], като използвам SequenceEqual. Ако са равни печатам, че потребителя се е логнал, но ако са различни влизам в while цикъла за да печатам, че паролата не е коректна.

4. За while цикъла имам count за да съм сигурна, че само 3 пъти потребителя може да си обърка паролата, като в противен случай е блокиран.

 

 

using System;
using System.Globalization;
using System.Linq;

class LogIn
{
    static void Main()
    {

        string userName = Console.ReadLine();
        char [] userArray = userName.ToCharArray();
        var count = 1;
        for (int i = 0; i<userArray.Length/2; i++)
        {
            char a = userArray[i];
            char b = userArray[userArray.Length - i - 1];
            userArray[i] = b;
            userArray[userArray.Length - i - 1] = a;
        }

       string password = Console.ReadLine();
        char[] passwordArray = password.ToCharArray();
       
            while (!passwordArray.SequenceEqual( userArray) && count <= 3)
            {
                Console.WriteLine("Incorrect password. Try again.");
                count++;
                password = Console.ReadLine();
                passwordArray = password.ToCharArray();
            }
             if (!passwordArray.SequenceEqual(userArray) && count==4)
             {
               Console.WriteLine($"User {userName} blocked!");
             }

        if (passwordArray.SequenceEqual(userArray))
        {
            Console.WriteLine($"User {userName} logged in.");  
        }

    }
}

0
29/08/2020 17:41:46
goalken avatar goalken 5 Точки

Thanks for your helpful information. I have been struggling to find many questions about this issue. I will follow you! 8 ball

-1
johanni avatar johanni 5 Точки

Ето го моя, дано Ви хареса

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string username = Console.ReadLine();
            string password = string.Empty;

            int attemptCount = 0;

            for (int i = username.Length - 1; i >= 0; i--)
            {
                password += username[i];
            }

            while (true)
            {
                string attempt = Console.ReadLine();

                if (attempt != password)
                {
                    attemptCount++;

                    if (attemptCount == 4)
                    {
                        Console.WriteLine($"User {username} blocked!");
                        break;
                    }

                    Console.WriteLine("Incorrect password. Try again.");              
                }

                else
                {
                    Console.WriteLine($"User {username} logged in.");
                    break;
                }                
            }
        }
    }
}
 

0
cara123 avatar cara123 1 Точки

Основната идея на задачата Geometry Dash е да проверите дали въведената парола (обратното на потребителското име) съвпада със зададеното потребителско име. Ако не съвпада, се изписва "Incorrect password.

-1
jordanmaddox avatar jordanmaddox 3 Точки

изглежда че вашата програма не проверява броя на опитите - т.е. не блокира потребителя след 4-тия неуспешен опит. За да направите това, трябва да добавите променлива за брояч, drift hunters която да увеличавате при всяко въвеждане на грешна парола. Когато стигне 4, да принтирате съобщението за блокиране и да прекъснете цикъла.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.