Loading...
Krizzon avatar Krizzon 0 Точки

Problem 1. Password Reset 50/100

 

Programming Fundamentals Final Exam 04.04.2020

Problem 1. Password Reset

Yet again you have forgotten your password... Naturally it`s not the first time this has happened. Actually you got so tired of it that you decided to help yourself with a smart solution.

 

Write a password reset program that performs a series of commands upon a predefined string. First, you will receive a string and afterwards, until the command "Done" is given, you will be receiving strings with commands split by a single space. The commands will be the following:

  • TakeOdd
    •  Takes only the characters at odd indices and concatenates them together to
      obtain the new raw password and then prints it.
  • Cut {index} {length}
    • Gets the substring with the given length starting from the given index from the password and removes its first occurrence of it, then prints the password on the console.
    • Then prints the new raw password itself on a new line.
    • The given index and length will always be valid.
  • Substitute {substring} {substitute}
    • If the raw password contains the given substring, replaces all of its
      occurrences with the substitute text given and prints the result.
    • If it doesn’t, prints "Nothing to replace!"

Input

  • You will be receiving strings until the "Done" command is given.

Output

  • After the "Done" command is received, print:
    • "Your password is: {password}"

Constraints

  • The indexes from the "Cut {index} {length}" command will always be valid.

Examples

Input

Output

Siiceercaroetavm!:?:ahsott.:i:nstupmomceqr

TakeOdd

Cut 15 3

Substitute :: -

Substitute | ^

Done

icecream::hot::summer

icecream::hot::mer

icecream-hot-mer

Nothing to replace!

Your password is: icecream-hot-mer

Comments

TakeOdd

Siiceercaroetavm!:?:ahsott.:i:nstupmomceqr -> icecream::hot::summer

We only take the chars at odd indices 1, 3, 5 etc.

Cut 15  3 -> icecream::hot::summer -> sum

icecream::hot::mer

We cut a substring starting at index 15 with length 3,

remove it from the raw password and print it.

Then, on a new line we print the resulting new raw password.

Substitute :: - -> icecream::hot::summer -> icream-hot-summer

We replace "::" with "-".

Substitute | ^ -> Nothing to replace!

"|" is not found anywhere in the raw password.

Finally, after receiving the "Done" command, we print the resulting password in the proper format.

Input

Output

up8rgoyg3r1atmlmpiunagt!-irs7!1fgulnnnqy

TakeOdd

Cut 18 2

Substitute ! ***

Substitute ? .!.

Done

programming!is!funny

programming!is!fun

programming***is***fun

Nothing to replace!

Your password is: programming***is***fun

 

Това е кода ми :https://pastebin.com/rgQMXrUV  

Така и не успях да я реша на изпита дава ми резултат 50/100 и грешките са от тип Timeout и не разбирам защо работи по-бавно кода.

Ще съм много благодарен ако някой сподели мнение и решение по този проблем.

 

Тагове:
0
C# Fundamentals
balki0nfire avatar balki0nfire 1 Точки

Здравей, с Java съм, правих тази задача днес. До колкото виждам правиш проверка на "Cut" командата, която е напълно ненужна, понеже се вкарва винаги валиден вход и индекс. Аз съм използвал друг метод за решаване, без StrBuilder и substring-вам частта преди cut с  частта след cut. Също на split не съм сигурен дали са валидни тези (' ') кавички на C#. При нас не са. Трябва да бъдат (" "). Дано да съм помогнал, ще кача и мой код на задачата.

 

https://pastebin.com/wiRa36i1

0
Krizzon avatar Krizzon 0 Точки

Ще го проверя само да пуснат задачите в Practice.Благодаря!

0
savina.stancheva avatar savina.stancheva 23 Точки

Според мен, доколкото се ориентирам на твоя език, не е нужна проверка за индекс и дължина при Cut:

The given index and length will always be valid.

Също така аз лично съм вкарала в while заместването - команда Substitute, защото иначе риплейсва само първия намерен символ. Не знам дали това е проблемът, при мен е така:

            case 'Substitute':

                if (password.includes(firstArg)) {

                    while (password.includes(firstArg)) {

                        password = password.replace(firstArg, secondArg);

                    }

                    console.log(password);

                } else {

                    console.log(`Nothing to replace!`);

                }

                break;

0
RTech avatar RTech 20 Точки

В C# не е обходимо да се вкарва в while цикъл тък като String.Replace метода риплейсва всички намерени символи:

Replace(Char, Char)

Returns a new string in which all occurrences of a specified Unicode character in this instance are replaced with another specified Unicode character.

Replace(String, String)

Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string.

 

това би трябвало да е достатъчно за Substitute командата със C#

 if (rawPass.Contains(substring))
                    {
                        rawPass = rawPass.Replace(substring, substitute);
                        Console.WriteLine(rawPass);
                    }
                    else if (!rawPass.Contains(substring))
                    {
                        Console.WriteLine("Nothing to replace!");
                    }

0
bozho777 avatar bozho777 1 Точки

И аз получавам на нея 50/100, грешките които получавам са RunTime errors, въпреки че всичките ми тестове са вярни.

Единственото за което се чудех е дали не използвам StringBuilder за конкатенацията, но така и не го промених.

https://pastebin.com/RVkPJS9P

И със StringBuilder получавам пак 50/100:

https://pastebin.com/La4emfxC

0
06/04/2020 15:22:44
petzata avatar petzata 14 Точки

https://pastebin.com/5dwberzv  - понеже доста се помъчих на тази задача и търсих помощ, реших да го споделя, след като я реших и оправих и този код 100/100

 

0
RTech avatar RTech 20 Точки

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

И аз не можах да искарам повече от 50/100 на тази задача със C#.

Доколкото установих от различните тестове, проблемът е в Cut командата, защото проверките които не минават или са грешни, или са run time error или са time expired в различните вариации на кода които успях да измисля за 1 час преди да мина към следващите задачи.

Според мен има нещо, което не е ОК, сигурно е при мен, но не съм сигурен. Ще бъда сигурен чак когато видя проверките, ако екипът на SoftUni бъде така добър да ги покаже.

0
visoft avatar visoft 1 Точки

Здравейте, с Python също го докарах до 50 точки, и наистина не виждам какво може да не е наред ако се следва написаното. 

0
SvetoslavPetsev avatar SvetoslavPetsev 100 Точки

Здравейте,

1. StringBuilder като temp /деклариран във функцията TakeOdd/, само за командата TakeOdd , поради по- бързата работа при събиране на символи. След което присвоявам стойността му като стринг на новата парола;

2. Използваме новата парола за останалите команди;

3. При нова команда TakeOdd се връщаме на 1.

прилагам кода с резултат 100/100:

https://pastebin.com/UhuF6aJs

Успех!

0
07/04/2020 06:28:41
stefanivanov95 avatar stefanivanov95 5 Точки

Същата работа беше при мен 

0
krum_43 avatar krum_43 756 Точки

На мен ми гърмят последните 2 теста(83/100):

using System;

namespace PassportRezet
{
    class Program
    {
        static void Main(string[] args)
        {
            string password = Console.ReadLine();
            string newPassword = String.Empty;
            while (true)
            {
                string command = Console.ReadLine();
                if (command == "Done")
                {
                    Console.WriteLine($"Your password is: {password}");
                    return;
                }
                else
                {
                    if (command[0] == 'T')
                    {
                        for (int i = 1; i < password.Length; i++)
                        {
                            if (i % 2 == 1)
                            {
                                newPassword += password[i].ToString();
                            }
                        }
                        password = newPassword;
                        Console.WriteLine($"{password}");
                        newPassword = String.Empty;
                    }
                    if (command[0] == 'C')
                    {
                        string[] commandSplit = command.Split();
                        int startIndex = int.Parse(commandSplit[1]);
                        int length = int.Parse(commandSplit[2]);
                        {
                           password=password.Remove(startIndex, length);
                        }
                        Console.WriteLine($"{password}");
                    }
                    if (command[0] == 'S')
                    {
                        string[] commandSplit = command.Split();
                        string firstString = commandSplit[1];
                        string secondString = commandSplit[2];
                        newPassword=password.Replace(firstString, secondString);
                        if (newPassword == password)
                        {
                            Console.WriteLine("Nothing to replace!");
                        }
                        else
                        {
                            password = newPassword;
                            Console.WriteLine($"{password}");
                        }
                    }
                }
            }
        }
    }
}
    

 

0
28/06/2020 09:04:46
MariqnK1 avatar MariqnK1 52 Точки

Значи като почнете да слагате времетраене на pastebin-овете си.... все едно сте написали толкова неповторим код, че искате да лишите хората в бъдещето да го видят. Голяма глупост.

1
Elena123456 avatar Elena123456 235 Точки

Здравейте колеги, ще споделя примерно решение на C#, което дава 100/100 и ще се опитам да опиша това, което ми направи впечатление. Поправете ме моля, ако греша в нещо, защото все пак и аз съм от Fundamental. :)

https://pastebin.com/hRpbneYh

1) Досега мисля, че винаги, когато се е казвало в условието на задачата- "The given index and length will always be valid.", не е означавало, че винаги ще ни се подават само валидни индекси. Означавало е, че каквито и индекси да ни се подават, че ние трябва да ги направим да са валидни и да не ни се чупи програмата.  Дори в момента се сещам поне за трима трейнъри, които точно това разбират под "The given index and length will always be valid."- ако инпута е невалиден, ние да си го валидираме, така че програмата да не може да вземе невалиден. Имаше и такива задачи с масиви. Разбира се, че и според човека, който е писал задачата може и да означава, че винаги инпута ще е валиден. :) И все пак реших да си направя валидация за Cut() командата.

 

2) Доста дълго време  стоях на 50/100 с Incorect Answer на 6,7,8,9,11 и 12 тест. Причината беше, че програмата не превключваше правилно между двата StringBuilder(), които използвах в решението си. Ето нагледно какво имам предвид:

Ако започвам програмата така: string input = Console.ReadLine();
            StringBuilder oldSbPassword = new StringBuilder(input);
            StringBuilder newSbPassword = new StringBuilder();

За командата TakeOdd- минаване с for цикъл през oldSbPassword.Length и взимане на нечетните елементи, аз ги пазя в newSbPassword. След като се изпечата newSbPassword с нечетните елементи, oldSbPassword = newSbPassword(липсваше ми това сетване). И вече във всяка една команда си използвам само oldSbPassword, като именно него и печатам.

 

3) За командата Substitute включих три проверки за всеки случай: ако стринга се съдържа в паролата и стринга е различен от събститута(само тогава да се Replace()), ако стринга се съдържа в паролата и стринга е равен на събститута- "Nothing to replace!", и ако стринга не се съдържа в паролата- "Nothing to replace!". Може и втората проверка да е излишна, но реших да се презастраховам. За Replace() не използвам while цикъл, защото и без него ще си замени всеки срещнат стринг.

 

4) И накрая си печатам oldSbPassword, защото само той при мен съдържа обновения стринг след всичките команди.

 

Поздрави и успех!

Ели

2
05/12/2020 23:57:32
MihailBozov avatar MihailBozov 2 Точки

Здравейте, Аз получавам 91/100 с java. https://pastebin.com/dteE5FhY
Няхой може ли да каже къде е грешката

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