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