Zadanie rekrutacyjne i sposób jego wykonania

0

Cześć ostatnio dostałem takie zadanie:

Write a C# console application that evaluates a string expression consisting of
non-negative integers and the + - / * operators only, taking into account the normal
mathematical rules of operator precedence. Support for brackets is not required.

For example:
an input string of "4+5*2" should output 14
an input string of "4+5/2" should output 6.5
an input string of "4+5/2-1" should output 5.5

Submission:
Please send us your source code in a format that we can easily compile along with a brief description of how you approached the problem and the decisions you made in order to make our solution well thought out, maintainable and production quality. Please compress your source code into a single archive (*.ZIP only) and don’t include any binaries.

a moje wyknaniego tego zadania wygląda tak xd
Uznają mnie za idiotę bo kurcze nie ma ngidzie ze nie mogę używać bibliotek xd

    class Program
    {
        static void Main(string[] args)
        {

            //Skorzystałem z biblioteki https://github.com/mariuszgromada/MathParser.org-mXparser

            string a = Console.ReadLine(); // Pobranie wartości 

            double score =  Calculator.Calculate(a); // Wyliczenie wyniku

            Console.WriteLine(score); // Wyświetlenie wyniku na ekaranie
        }
    }
    public class Calculator 
    {
        public static double Calculate(string task) 
        {
            Expression e = new Expression(task); 

            double score = e.calculate(); 

            return score;
        }
    }
1

No raczej nie chodziło im o to :P

0

spytaj o co im chodzi, dostaniesz plusa za kompetencje miękkie bo umiesz się zapytać

0

Expression Tree & inorder traversal

1

Jesteś taki leniwy że nawet nie chcę ci się zerznac z kodu biblioteki którą znalazłeś?

1

A tak się zapytam gdzie jest wklad własny bo rozumiem że biblioteka robi za ciebie całą robotę. Ty tylko dane wrzucasz

0

kurcze to działa też bez użycia biblioteki

            string math = "4+5/2-1";
            string value = new DataTable().Compute(math, null).ToString();
            Console.WriteLine(value);
0

^^ Takie coś to już bym wysłał. Nie korzystasz z zew bibliotek, wykazałeś się umiejętnością szukania bądź wiedzą że takie coś istnieje, nie odkrywasz koła na nowo.

1

oni chcą abyś to rozwiązał algorytmicznie, a nie mechanizmem frameworka czy libką.

Bo równie dobrze mógłbyś w Roslyna to wrzucić i wykonać kod C# w C#, który returnowałby to wyrażenie.

2

Może zacznij od sparsowania wyrażenia, które pochodzi od użytkownika. Wyznacz sobie przy użyciu LINQ listy operandów i operatorów. Możesz stworzyć enuma Operator i jakąś metodę ParseOperator(char). Aby uniknąć ifów, można stworzyć słownik <char, Operator> i rzucać wyjątek, jeśli operator nie jest obsługiwany. Możesz sobie też napisać jakąś metodę PerformOperation(operand1, operand2, operator) i tu podobnie użyć słownika operator-funkcja. Potem tylko wystarczy powiązać indeks operatora z indeksem operandów. Trzeba pamiętać o kolejności wykonywania działań. Jeśli ma to być obiektowo, to zrób jakąś klasę MathExpression, która będzie przyjmowała w konstruktorze łańcuch znaków i będzie miała publiczną metodę Compute.

1
WeiXiao napisał(a):

oni chcą abyś to rozwiązał algorytmicznie, a nie mechanizmem frameworka czy libką.

Bo równie dobrze mógłbyś w Roslyna to wrzucić i wykonać kod C# w C#, który returnowałby to wyrażenie.

Gdzie to niby jest napisane, aby to rozwiązać "algorytmicznie", a nie libką? Ja z opisu OPa tego nie widzę.

Zrobił coś działającego opierającego się na bibliotece, więc są możliwości takie:

  • odrzucą to rozwiązanie - znaczy tam w projekcie wymyślają koło od nowa, czyli tak trzeba robić, w projekcie nie można używać libek itp. W każdym razie raczej źle świadczy o projekcie, chyba, że to jakiś specyficzny projekt (typu HFT)

  • przyjmą rozwiązanie - znaczy docenili, że zrobił prosto i bez ceregieli, nie wynajdował koła od nowa (wszak mógł łaskawiec przekleić kod z liba i pozmieniać nazwy zmiennych)

W każdym razie, ja bym raczej nie chciał pracował w firmie, która co innego wymaga na rekrutacji, a co innego się rzeczywiście robi (w sytuacji, gdy na rekrutacji trzeba przechodzić ścieżkę zdrowia, jakby się do FAANGa chciało dostać, a na miejscu dostaje się 15 letnie legacy, do dodawania/usuwania 1 linii kodu dziennie)

1 użytkowników online, w tym zalogowanych: 0, gości: 1