You have done a great job, Your video is helping me to prepare for a C# challenge, Thank you. int sum = 0; ArrayList arrList = new ArrayList(); for (int i=0; i< ops.Length;i++) { int Num = 0; sum = 0; if (int.TryParse(ops[i],out Num)) { arrList.Add(Num); } else if(ops[i]=="+") { sum =(int) arrList[arrList.Count - 1]; sum += (int)arrList[arrList.Count - 2]; arrList.Add(sum); } else if (ops[i] == "D") { sum = 2*(int)arrList[arrList.Count - 1]; arrList.Add(sum); } else if (ops[i] == "C") { arrList.RemoveAt(arrList.Count - 1); } } sum = 0; for (int i = 0; i < arrList.Count; i++) { sum += (int)arrList[i]; } return sum;
Some tips: On the first problem It's possible to avoid the unnecessary nested loops: You can solve the problem with just one loop, which will give an O(n) algorithm. Also, try to use more meaningful names for variables. Don't forget to handle invalid inputs: It's not a good strategy to consider any input other than C, D, or + as an integer.
You have done a great job here, my brother. One thing I got from your presentation is the principle of separation of concern and understanding the actual questions or requirements is essential. I never thought I could access the last two indexes; I only knew of one in a list. Thanks for the method, and I am grateful.
I liked the solution very much I've also tried one. public int CalPointsFunc(string[] args) { int output; List record = new List(); foreach(string arg in args) { if (Int32.TryParse(arg, out output)) { record.Add(Int32.Parse(arg)); } else { if (arg == "C") record.RemoveAt(record.Count - 1); else if (arg == "D") record.Add(record.Last() * 2); else if (arg == "+") record.Add(record[record.Count - 2] + record.Last()); } } return record.Sum(); } Thanks
I recreated your solution using much shorter syntax. Here it is ... class Solution { public int CalPoints(string[] ops) { var opsList = new List(); var count = 0; foreach(var op in ops) { if (op.Equals("+")) { var val = opsList[opsList.Count -1] + opsList[opsList.Count - 2]; opsList.Add(val); } else if (op.Equals("D")) { var val = opsList[opsList.Count - 1] * 2; opsList.Add(val); } else if (op.Equals ("C")) { opsList.RemoveAt(opsList.Count - 1); } else { opsList.Add(int.Parse(op)); } } foreach(var op in opsList) { count += op; } return count; } } class CalPoints { public static void Main(string[] args) { var solution = new Solution(); var space = new Char[] { ' ' }; string[] ops = Console.ReadLine().Split(space); int output = solution.CalPoints(ops); Console.WriteLine(output.ToString()); } }
I try to write before watching your solution. Still refactor should be done. Here it is: public int Calculate(string[] scores) { const string CANCEL = "C"; const string DOUBLE = "D"; const string ADD = "+"; if (scores == null || scores.Length == 0) { return 0; } var records = new List(); foreach (var score in scores) { switch (score) { case CANCEL: if(records.Count == 0) throw new Exception($"{CANCEL} operator cannot be used first!"); records.RemoveAt(records.Count - 1); continue; case DOUBLE: if (records.Count == 0) throw new Exception($"{DOUBLE} operator cannot be used first!"); records.Add(records[^1] * 2); continue; case ADD: if (records.Count < 2) throw new Exception($"{ADD} operator cannot be used for first two values!"); records.Add(records[^1] + records[^2]); continue; default: if (!int.TryParse(score, out int number)) { throw new ArgumentException($"Unknown score specifier: {score}"); } records.Add(number); continue; } } return records.Sum(); }
@@mihirrajput932 Hi Mihir. This code has been tested. No need to add AsQueryable(). System.Linq.Enumerable already has a direct extension method for sum and the other aggreagte functions :)
I did something like that yesterday, un VS works ok but un the turing web give me a sintaxis error in " value.Count - 1 " for get the last member, specificly un the -
A stack version for fun var opList = new[] { "5", "2", "C", "D", "+" }; var stk = new Stack(); foreach(var op in opList) { switch(op) { case "+": var lVal = stk.Pop(); var rVal = stk.Peek(); stk.Push(lVal); stk.Push(lVal + rVal); break; case "C": stk.Pop(); break; case "D": stk.Push(stk.Peek() * 2); break; default: stk.Push(int.Parse(op)); break; } } Console.WriteLine(stk.Sum());
Hello... I'm new to turing. I'm an intermediate c# programmer. I would like to know your journey with turing... I'm wondering if this can help me in my career path
Thanks it was great! and here is an other solution: public static int CalPoints(string[] ops) { Stack stack = new Stack(); foreach (string op in ops) { if (int.TryParse(op, out int score)) { stack.Push(score); } else if (op == "+") { int prev1 = stack.Pop(); int prev2 = stack.Peek(); int newScore = prev1 + prev2; stack.Push(prev1); stack.Push(newScore); } else if (op == "D") { int prev = stack.Peek(); stack.Push(prev * 2); } else if (op == "C") { stack.Pop(); } } int finalScore = 0; while (stack.Count > 0) { finalScore += stack.Pop(); } return finalScore; }
Ty for the video! Your explanation is great and is helping me to prepare for a C# challenge. Just a question, why not to put the foreach (var val in opsList) [...] segment outside all if statements instead of copying and repeating it for each of them? I may be missing something.
Thank you so much for your observation Sir. The reason we repeat it for each if statement is because each if statement does something unique to opsList, and we need to initialize the value of the "value" variable to zero before we call the foreach statement. Hopes this help. Thanks
My solution, nice and clean public int CalPoints(string[] ops) { var record = new List(); foreach (var item in ops) { switch (item) { case var _ when int.TryParse(item, out int value): record.Add(value); break; case "+": record.Add(record[^2] + record[^1]); break; case "D" or "d": record.Add(2 * record[^1]); break; case "C" or "c": record.RemoveAt(record.Count - 1); break; } } return record.Sum(); } }
Hello bro, what about the Turing Tests that is before the Coding Challenge ?, that will be more interesting if you show us some skills on that thank you
public static int ProcOpt(string[] opt) { List recordList = new(); for (int i = 0; i < opt.Length; i++) { if (opt[i] == "c") recordList.Remove(recordList.Last()); else if (opt[i] == "d") recordList.Add(recordList.Last() * 2); else if (opt[i] == "+") recordList.Add(recordList.TakeLast(2).Sum()); else recordList.Add(int.Parse(opt[i])); } return recordList.Sum(); }
I'd like to give you a little better solution ;) public int calPoints(string[] s) { List points = new List(); for (int i = 0; i < s.Length; i++) { if (s[i].Equals("+")) { points.Add(points[points.Count - 2] + points[points.Count-1]); } else if (s[i].Equals("D")) { points.Add(points[points.Count - 1] * 2); } else if (s[i].Equals("C")) { points.RemoveAt(points.Count - 1); } else { points.Add(int.Parse(s[i])); } } int score = 0; foreach (int point in points) score += point; return score; }
You have done a great job, Your video is helping me to prepare for a C# challenge, Thank you.
int sum = 0;
ArrayList arrList = new ArrayList();
for (int i=0; i< ops.Length;i++)
{
int Num = 0;
sum = 0;
if (int.TryParse(ops[i],out Num))
{
arrList.Add(Num);
}
else if(ops[i]=="+")
{
sum =(int) arrList[arrList.Count - 1];
sum += (int)arrList[arrList.Count - 2];
arrList.Add(sum);
}
else if (ops[i] == "D")
{
sum = 2*(int)arrList[arrList.Count - 1];
arrList.Add(sum);
}
else if (ops[i] == "C")
{
arrList.RemoveAt(arrList.Count - 1);
}
}
sum = 0;
for (int i = 0; i < arrList.Count; i++)
{
sum += (int)arrList[i];
}
return sum;
Some tips: On the first problem It's possible to avoid the unnecessary nested loops: You can solve the problem with just one loop, which will give an O(n) algorithm. Also, try to use more meaningful names for variables. Don't forget to handle invalid inputs: It's not a good strategy to consider any input other than C, D, or + as an integer.
would you happen to know the javascript solution for this?
do they ask same question in c# stack or they keep changing it?
You have done a great job here, my brother. One thing I got from your presentation is the principle of separation of concern and understanding the actual questions or requirements is essential. I never thought I could access the last two indexes; I only knew of one in a list. Thanks for the method, and I am grateful.
do they ask same question in c# stack or they keep changing it?
Why is the music playing in the background when doing a fully concentrated work?
I liked the solution very much
I've also tried one.
public int CalPointsFunc(string[] args)
{
int output;
List record = new List();
foreach(string arg in args)
{
if (Int32.TryParse(arg, out output))
{
record.Add(Int32.Parse(arg));
}
else
{
if (arg == "C")
record.RemoveAt(record.Count - 1);
else if (arg == "D")
record.Add(record.Last() * 2);
else if (arg == "+")
record.Add(record[record.Count - 2] + record.Last());
}
}
return record.Sum();
}
Thanks
Wow!!
Thànk you so much for this. Nice content 👌
The background music is perfect for learning.
Thank you so much
I recreated your solution using much shorter syntax.
Here it is ...
class Solution
{
public int CalPoints(string[] ops)
{
var opsList = new List();
var count = 0;
foreach(var op in ops)
{
if (op.Equals("+"))
{
var val = opsList[opsList.Count -1] + opsList[opsList.Count - 2];
opsList.Add(val);
}
else if (op.Equals("D"))
{
var val = opsList[opsList.Count - 1] * 2;
opsList.Add(val);
}
else if (op.Equals ("C"))
{
opsList.RemoveAt(opsList.Count - 1);
}
else
{
opsList.Add(int.Parse(op));
}
}
foreach(var op in opsList)
{
count += op;
}
return count;
}
}
class CalPoints
{
public static void Main(string[] args)
{
var solution = new Solution();
var space = new Char[] { ' ' };
string[] ops = Console.ReadLine().Split(space);
int output = solution.CalPoints(ops);
Console.WriteLine(output.ToString());
}
}
I really appreciate the background music. Helps my attention
We are glad it does
why didnt u make integer list you couldve only needed to parse once while adding right?
Wow! happy to discover your channel. I am preparing to take a Javascript live coding challenge, at least you have given me a hint of what to expect.
We are glad to be of help. We wish you all the best as you write the live coding challenge
Have you taken the test? I'm about to take the test and the template is somewhat of a challenge for me. Can we connect on discord or any other app?
I try to write before watching your solution. Still refactor should be done. Here it is:
public int Calculate(string[] scores)
{
const string CANCEL = "C";
const string DOUBLE = "D";
const string ADD = "+";
if (scores == null || scores.Length == 0)
{
return 0;
}
var records = new List();
foreach (var score in scores)
{
switch (score)
{
case CANCEL:
if(records.Count == 0) throw new Exception($"{CANCEL} operator cannot be used first!");
records.RemoveAt(records.Count - 1);
continue;
case DOUBLE:
if (records.Count == 0) throw new Exception($"{DOUBLE} operator cannot be used first!");
records.Add(records[^1] * 2);
continue;
case ADD:
if (records.Count < 2) throw new Exception($"{ADD} operator cannot be used for first two values!");
records.Add(records[^1] + records[^2]);
continue;
default:
if (!int.TryParse(score, out int number))
{
throw new ArgumentException($"Unknown score specifier: {score}");
}
records.Add(number);
continue;
}
}
return records.Sum();
}
return records.AsQueryable().Sum() ; //just a small correction :)
@@mihirrajput932 Hi Mihir. This code has been tested. No need to add AsQueryable(). System.Linq.Enumerable already has a direct extension method for sum and the other aggreagte functions :)
I did something like that yesterday, un VS works ok but un the turing web give me a sintaxis error in " value.Count - 1 " for get the last member, specificly un the -
Both can be done using single loop.
Solution 1 :
List result = new List();
for (int i = 0; i < ops.Length; i++)
{
if (ops[i] == "+")
{
result.Add(result[result.Count - 1] + result[result.Count - 2]);
}
else if (ops[i] == "D")
{
result.Add(result[result.Count - 1] * 2);
}
else if (ops[i] == "C")
{
result.RemoveAt(result.Count - 1);
}
else
{
result.Add(int.Parse(ops[i]));
}
}
return result.Sum();
.................................
Solution 2:
char[] chars = s.ToCharArray();
Stack openParenthesis = new Stack();
foreach (var c in chars)
{
if(c == '(' || c == '{' || c == '[')
{
openParenthesis.Push(c);
}
else if(c == ')')
{
if(openParenthesis.Peek() == '(')
{
openParenthesis.Pop();
}
}
else if(c == '}')
{
if (openParenthesis.Peek() == '{')
{
openParenthesis.Pop();
}
}
else if (c == ']')
{
if (openParenthesis.Peek() == '[')
{
openParenthesis.Pop();
}
}
}
return openParenthesis.Count == 0;
Can't wait for the full C# course. Im interested in learning that language
Stay tuned. It's coming
A stack version for fun
var opList = new[] { "5", "2", "C", "D", "+" };
var stk = new Stack();
foreach(var op in opList)
{
switch(op)
{
case "+":
var lVal = stk.Pop();
var rVal = stk.Peek();
stk.Push(lVal);
stk.Push(lVal + rVal);
break;
case "C":
stk.Pop();
break;
case "D":
stk.Push(stk.Peek() * 2);
break;
default:
stk.Push(int.Parse(op));
break;
}
}
Console.WriteLine(stk.Sum());
This is great content. Looking forward to try the live coding challenge in Kotlin
Coming soon!
Im looking forward to develop my skills in programming from your channel.Thanks
Best of luck! We will do our best to help you
Hello... I'm new to turing. I'm an intermediate c# programmer. I would like to know your journey with turing... I'm wondering if this can help me in my career path
did you get the same questions ?
Thanks it was great! and here is an other solution:
public static int CalPoints(string[] ops)
{
Stack stack = new Stack();
foreach (string op in ops)
{
if (int.TryParse(op, out int score))
{
stack.Push(score);
}
else if (op == "+")
{
int prev1 = stack.Pop();
int prev2 = stack.Peek();
int newScore = prev1 + prev2;
stack.Push(prev1);
stack.Push(newScore);
}
else if (op == "D")
{
int prev = stack.Peek();
stack.Push(prev * 2);
}
else if (op == "C")
{
stack.Pop();
}
}
int finalScore = 0;
while (stack.Count > 0)
{
finalScore += stack.Pop();
}
return finalScore;
}
Thank you so much. Great content
Glad you enjoyed it!
Ty for the video! Your explanation is great and is helping me to prepare for a C# challenge. Just a question, why not to put the foreach (var val in opsList) [...] segment outside all if statements instead of copying and repeating it for each of them? I may be missing something.
Thank you so much for your observation Sir. The reason we repeat it for each if statement is because each if statement does something unique to opsList, and we need to initialize the value of the "value" variable to zero before we call the foreach statement. Hopes this help. Thanks
did you get the same questions ?
@@zainulabideniftikhar821 In the practice test we all get the same questions, I believe. Unless it changed since then.
Don't stop the good work
Thank you so much
Nice... i wished you could do it in php. But i guess thats not your stack.
My solution, nice and clean
public int CalPoints(string[] ops)
{
var record = new List();
foreach (var item in ops)
{
switch (item)
{
case var _ when int.TryParse(item, out int value):
record.Add(value);
break;
case "+":
record.Add(record[^2] + record[^1]);
break;
case "D" or "d":
record.Add(2 * record[^1]);
break;
case "C" or "c":
record.RemoveAt(record.Count - 1);
break;
}
}
return record.Sum();
}
}
Hello bro, what about the Turing Tests that is before the Coding Challenge ?, that will be more interesting if you show us some skills on that
thank you
This is noted Sir. Thanks for the feedback
I like your presentation
So nice of you
Please is the practice question the same as the real test that one will do?
Urgent!!!
did you get the same questions ?
Fantastic work
Many thanks
Can you share this script in Java?
Great work
Thank you! Cheers!
public static int ProcOpt(string[] opt)
{
List recordList = new();
for (int i = 0; i < opt.Length; i++)
{
if (opt[i] == "c")
recordList.Remove(recordList.Last());
else if (opt[i] == "d")
recordList.Add(recordList.Last() * 2);
else if (opt[i] == "+")
recordList.Add(recordList.TakeLast(2).Sum());
else
recordList.Add(int.Parse(opt[i]));
}
return recordList.Sum();
}
internal void Solution()
{
Stack stack = new Stack();
for (int i = 0; i < arr.Length; i++)
{
string cc = arr[i];
if (cc == "C")
stack.Pop();
else if (cc == "D")
{
int peek = stack.Peek();
stack.Push(peek * 2);
}
else if (cc == "+")
{
int prevPeek = stack.Pop();
int newNum = prevPeek + stack.Peek();
stack.Push(prevPeek);
stack.Push(newNum);
}
else
stack.Push(int.Parse(cc));
}
int res = 0;
while (stack.Count() > 0)
res += stack.Pop();
Console.WriteLine(res);
}
My way using stack
static string GetSum(List input)
{
long num = 0;result = 0;
if (input.Count
forgot stack declartion Stack puni = new Stack();
I'd like to give you a little better solution ;)
public int calPoints(string[] s)
{
List points = new List();
for (int i = 0; i < s.Length; i++)
{
if (s[i].Equals("+"))
{
points.Add(points[points.Count - 2] + points[points.Count-1]);
}
else if (s[i].Equals("D"))
{
points.Add(points[points.Count - 1] * 2);
}
else if (s[i].Equals("C"))
{
points.RemoveAt(points.Count - 1);
}
else
{
points.Add(int.Parse(s[i]));
}
}
int score = 0;
foreach (int point in points)
score += point;
return score;
}
Thanks so much for this. I'm sure the community would learn from it
Amazing video
Glad you think so!
please remove the BG music
This is noted. No more background music in upcoming videos
Please remove the background music it really sucks
Ok. Thank you so much for the feedback. No more background music in upcoming videos