Loading...
abetterman avatar abetterman 21 Точки

Две! грешки в условието на задача 3.Take/Skip Rope от More Exercises: Lists

Часове ми бяха необходими, докато намеря грешките!

1ва Грешка в изречението " Afterwards, iterate over both of the lists and skip {skipCount} characters from the non-numbers list, then take {takeCount} characters and store it in a result string. "  
Обратното е. take {takeCount} characters and store it in a result string, then skip {skipCount} characters from the non-numbers list
То така е показано и в примерите по-долу, че първо вземаме символи и тогава skip-ваме.

2ра Грешка. В главния пример на задачата има стринг "skipTest_String044170" . Предпоследния символ трябва да е шест, а не седем.

Трябва да е skipTest_String044160 , защото думата String има 6 символа, а не 7.

 

Тагове:
0
Fundamentals Module
Savas avatar Savas 38 Точки

Благодаря за спестеното време  abetterman,
И аз ще добавя малко от себе си за да помогнем на колегите и те да спестят малко време и нерви (ако са толкова педантични, че докато не намерят решение – не намират покой :)

Може да се обобщи, че обяснението е непълно, объркващо и грешно (предполагам, че това е търсен ефект). Понякога се питам какво се цели с подобен подход, но какво разбирам аз…

Ще се опитам да хвърля светлина върху „неясния“ абзац, който може да бъде квалифициран като пе7й97нин87дъа7с (цифрите следва да се скипнат :). Ето го и абзаца:

 

Afterwards, iterate over both of the lists and skip {skipCount} characters from the non-numbers list, then take {takeCount} characters and store it in a result string. Note that the skipped characters are summed up as they go.

 

Това е оригиналното обяснение, където в червено съм маркирал обяснения, които са дадени за да помогнат… в какво ли? (с изключение на втория ред – където е ОК)

 

  1. Take 0 characters --> Taken: "", skip 4 characters (total 0) --> Skipped: "skipTest_String"--> Result: ""
  2. Take 4 characters --> Taken: "Test", skip 1 characters (total 4) --> Skipped: "skip" --> Result: "Test"
  3. Take 6 characters --> Taken: "String", skip 0 characters (total 9) --> Skipped: "" --> Result: "TestString"

 

Тейкването е някак си логично – при всяка итерация вземаме съответния брой chars. Но скипването е доста мъгливо, а без него неможем да се ориентираме откъде да започнем да take-ваме.

 

Ето какво е „искал да каже автора“:

Скипването на елементи се натрупва при всяка итерация (започвайки от нула на първата итерация). При всяка итерация се сумират броя на скипнатите и тейкнати елементи, така че всеки следващ тейк (при следваща итерация) започва от края на предходно „обработения“ диапазон (който е сума от всички take+skip до момента). Ето как би изглеждал примера, който трябва да се реализира, както казва по-горе abetterman:

 

1. Тотал скип чарс 0 --> Take 0 characters --> Taken: "" --> Result: "" // (skipList[1] + takeList[1] = 4)
(скипваш 0 и вземаш следващите 0)

2. Тотал скип чарс 4 (0 + 4) --> Take 4 characters --> Taken: " Test " --> Result: "Test" // (skipList[2] + takeList[2] = 5)
(скипваш 4 и вземаш следващите 4)

3. Тотал скип чарс 9 (4 + 5) --> Take 6 characters --> Taken: "String" --> Result: "TestString"
(скипваш 9 и вземаш следващите 6)

0
03/06/2020 20:52:16
MariqnK1 avatar MariqnK1 52 Точки

Може ли линк към условието? Благодаря!

0
Savas avatar Savas 38 Точки

https://softuni.bg/downloads/svn/soft-tech/Sept-2019/CSharp/05.%20CSharp-Fundamentals-Lists/05.%20CSharp-Fundamentals-Lists-More-Exercise.docx

Задача 3 от doc файла от линка по-горе.
Ще пейстна и условието тук, но може да се "изяде"(повреди) някой символ при пействането.

3. Take/Skip Rope

Write a program, which reads a string and skips through it, extracting a hidden message. The algorithm you have to implement is as follows:

Let’s take the string “skipTest_String044170” as an example.

Take every digit from the string and store it somewhere. After that, remove all the digits from the string. After this operation, you should have two lists of items: the numbers list and the non-numbers list:

  • Numbers list: [0, 4, 4, 1, 7, 0]
  • Non-numbers: [s, k, i, p, T, e, s, t, _, S, t, r, i, n, g]

After that, take every digit in the numbers list and split it up into a take list and a skip list, depending on whether the digit is in an even or an odd index:

  • Numbers list: [0, 4, 4, 1, 7, 0]
  • Take list: [0, 4, 7]
  • Skip list: [4, 1, 0]

Afterwards, iterate over both of the lists and skip {skipCount} characters from the non-numbers list, then take {takeCount} characters and store it in a result string. Note that the skipped characters are summed up as they go. The process would look like this on the aforementioned non-numbers list:

  1. Take 0 characters >>>Taken: "", skip 4 characters (total 0) >>> Skipped: "skipTest_String" >>> Result: ""
  2. Take 4 charactersTaken: "Test", skip 1 characters (total 4) >>> Skipped: "skip" >>> Result: "Test"
  3. Take 7 characters >>>Taken: "String", skip 0 characters (total 9) >>> Skipped: "" >>> Result: "TestString"

After that, just print the result string on the console.

Input

  • First line: The encrypted message as a string

Output

  • First line: The decrypted message as a string

Constraints

  • The count of digits in the input string will always be even.
  • The encrypted message will contain any printable character.

Examples

Input

Output

T2exs15ti23ng1_3cT1h3e0_Roppe

TestingTheRope

O{1ne1T2021wf312o13Th111xreve!!@!

OneTwoThree!!!

this forbidden mess of an age rating 0127504740

hidden message

 

1
04/06/2020 10:00:44
Mr.D.Dimitrov avatar Mr.D.Dimitrov 3 Точки

Задачата няма грешка!
Здравейте понеже и аз се обърках на това условие и никой не е обяснил защо задачата не е грешна си позволих да обясня за хората които тепърва ще се бъркат като нас на тази задача.
Просто са си спестили да споменат (или може би ние трябва да се досетим), че ако текстовия стринг е по-малък от текущото число трябва да си дадем текущото число да ни е равно на стринга
затова там където са написали: ( Take 7 characters➔ Taken: "String") а стринга е 6 characters , ако не си направим валидация на индекса гърмим
Ето и моето решение на C# (със знанията до листи) https://pastebin.com/N39PWJvV

0
16/11/2021 14:02:06
mitkomik avatar mitkomik 13 Точки
Може и без метода, но бях тръгнал в друга посока и впоследствие ме домързя да го махна:)
Така я видях аз тази задача. 100/100 Judge.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TakeSkipRope14_01_03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        List<Character> numbers = new ArrayList<>();
        List<Character> characters = new ArrayList<>();
        for (int i = 0; i < input.length(); i++) {

            if (input.charAt(i) >= 48 && input.charAt(i) <= 57) {
                numbers.add(input.charAt(i));
            } else {
                characters.add(input.charAt(i));
            }
        }
        List<Integer> takeList = new ArrayList<>();
        List<Integer> skipList = new ArrayList<>();
        for (int i = 0; i < numbers.size(); i++) {
            int numToAdd = Character.getNumericValue(numbers.get(i));
            if (i % 2 == 0) {
                takeList.add(numToAdd);
            } else {
                skipList.add(numToAdd);
            }
        }
        String string = characters.toString()
                .substring(1, 3 * characters.size() - 1)
                .replaceAll(", ", "");

        takePartsOfString(string, takeList, skipList);

    }

    private static void takePartsOfString(String string, List<Integer> takeList, List<Integer> skipList) {
        StringBuilder newString = new StringBuilder();
        for (int i = 0; i < takeList.size(); i++) {
            int take = takeList.get(i);
            for (int j = 0; j < take; j++) {
                if (string.length() == 0) {
                    break;
                }
                newString.append(string.charAt(0));
                string = string.substring(1);
            }

            for (int j = 0; j < skipList.get(i); j++) {

                if (string.length() == 0) {
                    break;
                }
                string = string.substring(1);
            }
        }
        System.out.println(newString);
    }
}
0
JsDSU avatar JsDSU 3 Точки

Качвам едно решение за Java ---> https://pastebin.com/Vv2Qbznp без substring.

Считам, че така е много по-лесно за разбиране кога се премахват елементите и кога се добавят. Написано по този начин отговаря на текущите лекции с използване на методи и листи, което би следвало да е идеята за упражнение на получените познания.

 Успех!

0
03/03/2021 13:16:27
Julianh12 avatar Julianh12 3 Точки

Ето едно елементарно решение,написано е на Python,но ще се ориентирате.

string_name=input()

number_list=[]
string_list=[]
take_list=[]
skip_list=[]
for i in range(len(string_name)):
    if string_name[i].isdigit():
        number_list.append(int(string_name[i]))
    else:
        string_list.append(string_name[i])

for x in range(len(number_list)):
    if x % 2==0:
        take_list.append(number_list[x])
    else:
        skip_list.append(number_list[x])

take_number=0
skip_number=0

index=0
new_string=""

for i in range(len(take_list)):
    take_number=take_list[i]
    skip_number=skip_list[i]
    new_string+="".join(string_list[:take_number])
    del string_list[0:take_number+skip_number]

print(new_string)
0
BasilioCristov avatar BasilioCristov 0 Точки

Много добро решение, простичко, но ефективно.

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