Професионална програма
Loading...
+ Нов въпрос
Pesho1983 avatar Pesho1983 2 Точки

C# Advanced Exam - 19 June 2016 [03. Cubic Messages]

Здравейте,

Нещо немога да я направя тази задача .Нулевите тестове ми минава и после всичко гърми.

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

 

Това ми е регекса @"(^[0-9]+)([a-zA-Z]+)([^a-zA-Z]+)((?![a-zA-Z]).)*$" .

Благодаря.

Тагове:
1
C# Advanced 21/06/2016 11:11:30
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки

Като хванеш някой сайт, на който се тества регекс, просто пробвай да слагаш всякакви символи отпред и отзад след даденото съобщение, за да видиш кога хващаш групи, които не ти трябват. От лявата страна на съобщението може да имаш САМО цифри, от дясната може да имаш всичко друго ОСВЕН букви от английската азбука. Слагай където се сещаш тирета, кавички, запетаи и тн, и гледай да не би в някой от всичките случаи да хващаш match, който реално не ти върши работа.

2
StoykoMandzhukov avatar StoykoMandzhukov 11 Точки

И аз съм в твоето положение. Минавам нулевите тестове и после дава грешен резултат навсякъде. В допълнение на колегата, който ти е отговорил, пробвай и вариант да няма нищо отзад. Да хванеш само 2 мача- цифрите и думата. Подозирам, че такъв вариант също ще е валиден, но не можах да си доизпипам регекса за такъв случай. Успех! 

1
Raskolnikov avatar Raskolnikov 102 Точки

Без наличен код ми е трудно да предположа, но ще стрелям в тъмното и ще ти задам въпрос: ''Принтираш ли съобщенията, които нямат verification code?''

0
Pesho1983 avatar Pesho1983 2 Точки

Да принтирам !

Ето и кода но ми се искаше сам да намеря грешкато като знам теста :)

http://pastebin.com/tDHjpfVc

0
Raskolnikov avatar Raskolnikov 102 Точки

Ами помисли дали negative lookahed- a ти е нужен и дали няма случай, в който след самия месидж няма нито един символ, а също така и шапчицата, която е за начало на стринг може би трябва да е преди първата скоба, а не след нея. 

Нямаш плейсхолдър за броя символи на месиджа.

0
21/06/2016 11:33:11
kalinamomkova avatar kalinamomkova 26 Точки

Тестовете още не са излезли и няма как да знаем какви са, така че предполагам, някой трудно ще ти даде конкретен тест. Не съм гледала кода ти подробно, но регекса ти не ми харесва. Пробвай да го направиш така:  Regex patern = new Regex(@"^([0-9]+)([a-zA-Z]{числото от долния ред})([^a-zA-Z]*)$"); Както беше трябва всичките ти 10 теста без двата нулеви да гърмят. Може да нямаш нищо след буквите. Моля те, сподели какво е станало:)

0
21/06/2016 11:36:07
Pesho1983 avatar Pesho1983 2 Точки

Изглежда ,че regex -а ми е скапан. Въпрос: как да сложа n (демек дължината на мсг) в регекса ,че нещо по моя начин дето пробвах не става.

0
kalinamomkova avatar kalinamomkova 26 Точки

При мен е така:

var message = Console.ReadLine();
            var messagesWithIndexes = new Dictionary<string, List<int>>();
            while (message != "Over!")
            {
                var messageLenght = int.Parse(Console.ReadLine());
                var pattern = @"^([0-9]+)([a-zA-Z]{" + $"{messageLenght}" + @"})(" + "[^a-zA-Z]*" + ")$";
                var regex = new Regex(pattern);
                var matches = regex.Matches(message);

1
ArmenPotourlyan+deleted! avatar ArmenPotourlyan+deleted! 488 Точки
string pattern = $"^\\d+(?'key'[a-zA-Z]{{{count}}})(?!.*[a-zA-Z])";

count e променливата, която отговаря на дължината на съобщението.

0
IvelinTenev avatar IvelinTenev 51 Точки

Ето го моето решение:

http://pastebin.com/Z8qLHacd

regex:

^(\d+)([A-Za-z]+)([^A-Za-z]*)$

0
maria_ruskova avatar maria_ruskova 15 Точки

Моят регекс е това, ако ти е полезен.

@"^(\d+)([a-zA-Z]+)([^\d*]?)?(\d*)([^A-Za-z]?)$"

 

0
IskrenPenev avatar IskrenPenev 177 Точки

Здравей,

на изпита използвах този регекс ^([0-9]+)([a-zA-Z]+)([^a-zA-Z]*)$".  Хваща началото на стринга, след това първата група лови само числа, втората група улавя самото съобщение, а третата група всичко след съобщението (всичко без букви) ако има нещо след съобщението разбира се. С знака $  накрая се уверяваш че третата група е хванала края на стринга и си 100% сигурен че няма други букви освен самото съобщение. 

Това е цялото ми решение: https://gist.github.com/iskren-penev/d3ead2f8131eb30a8191bc82c6a5d049

2
boyanst avatar boyanst 29 Точки

Здравейте,

В началото ползвах следния регекс - ^([0-9]+)([a-zA-Z]+)([^a-zA-Z]+)$ Двата нулеви теста минават а след това всичко гърми. След това вместо + на последната група сложих * ^([0-9]+)([a-zA-Z]+)([^a-zA-Z]*)$ и ми даде 100%. Голяма забава мисля, че тестовете нямат символи след кодираното събщение, защото + хваща едно или повече,  а  *  - 0 или повече.

2
TodoresteG avatar TodoresteG 2 Точки

Абсолютно същия проблем. Благодаря ти, защото не можех да повярвам, че нулевите вървят а след това всичко е 0. :D

0
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравейте

 

Един съвет от мен. Ако се затруднявате с написването на регекса, пробвайте "баламски" начин. Това, което направих на изпита, е да пробвам с този "(.*)([a-zA-Z]{{{count}}})(.*)".

1ва група - завъртам цикъл, и ако срещна нещо по - различно от цифра, сетвам една променлива фалсе и брейквам цикъла (лека оптимизация)

3та група - ако тази променлива ми е останала тру след завъртането на цикъла за 1вата група, завъртам цикъл и за тази.

Ако след завъртането и на 2та цикъла булевата променлива продължава да е тру, всичко е ок, продължавам нататък.

Наистина не успях да измисля регекса, но реших да пробвам да въртя цикли. Не е най - бързото решения, но на изпита докара 100 точки.

 

Мисълта ми е, ако не можете да измислите как да си формулирате целия регекс, пробвайте нещо подобно. Реално съдъжра 1/3 от необходимото, но с малко помощ от циклите нещата се получиха.

 

Поздрави!

4
LardaX avatar LardaX 15 Точки

Здравейте...от Programming Fundamenals съм и вчера решавахме тая задача като пробна за изпит. Сътворих това, коригирах много грешки, които си открих впоследствие и задачата продължава да минава нулевите тестове и след тях - нищо...някаква идея?
http://pastebin.com/2MVrzrKt

Редакция - току що прочетох коментар по-горе...последния + на регекса ми трябвало да е *, защото може да няма нищо след думата...
@"(^\d+)([a-zA-Z]+)([^a-zA-Z]*?)$";

0
21/10/2016 09:28:39
Boris.stavrev92 avatar Boris.stavrev92 41 Точки

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

namespace Problem_4___Cubic_s_Messages
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> validMassageList = new List<string>();

            string inputMassage = Console.ReadLine();
            
            Regex pattern = new Regex(@"^(\d+)([a-zA-Z]+)([^\d*]?)?(\d*)([^A-Za-z]?)$");
            // @"^([0-9]+)([a-zA-Z]+)([^a-zA-Z]*)$"
            // @"^(\d+)([a-zA-Z]+)([^\d*]?)?(\d*)([^A-Za-z]?)$"

            while (inputMassage != "Over!")
            {
                int massageLenght = int.Parse(Console.ReadLine());

                Match getMassage = pattern.Match(inputMassage);

                if (!getMassage.Success)
                {
                    inputMassage = Console.ReadLine();
                    continue;
                }
                
                MatchCollection indexCollection = Regex.Matches(inputMassage, @"[\d*]");
                string getMassageText = getMassage.Groups[2].ToString();

                if (getMassageText.Length != massageLenght)
                {
                    inputMassage = Console.ReadLine();
                    continue;
                }
                
                StringBuilder empty = new StringBuilder();

                foreach (var item in indexCollection)
                {
                    int index = int.Parse(item.ToString());

                    if (index < massageLenght && index >= 0)
                    {
                        
                        empty.Append(getMassageText[index]);
                    }
                    else
                    {
                        empty.Append(" ");
                    }
                }

                string result = $"{getMassageText} == {empty.ToString()}";
                validMassageList.Add(result);
                
                inputMassage = Console.ReadLine();
            }

            // OutPut:

            foreach (var item in validMassageList)
            {
                Console.WriteLine(item);
            }


        }
    }
}
 

0