patterncsharpCritical
Matching a generated string of random letters to an input
Viewed 0 times
randomgeneratedinputstringmatchingletters
Problem
I made a program in Python and wanted it to be faster, so I wrote it on C# because it's compiled. To my surprise, the Python program is much faster. I guess there is something wrong with my C# code, but it is pretty simple and straightforward, so I don't know. They are structured about the same way.
C#:
Python:
```
import random
import time
#This
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Diagnostics;
//This program generates a string of random lowercase letters and matches it to the user's input
//It does this until it gets a match
//It also displays the closest guess so far and the time it took to guess
namespace Monkey
{
class Program
{
static string userinput()
{
//Takes user input, makes sure it is all lowercase letters, returns string
string input;
while(true)
{
input = Console.ReadLine();
if (Regex.IsMatch(input, @"^[a-z]+$"))
{
return input;
}
}
}
static string generate(int len)
{
//generates string of random letters, returns the random string
Random rnd = new Random();
string alpha = "abcdefghijklmnopqrstuvwxyz";
int letterInt;
StringBuilder sb = new StringBuilder();
for (int i = 0; i best)
{
Console.Write("The best guess so far is: ");
Console.WriteLine(guess);
best = correct;
}
}
watch.Stop();
TimeSpan ts = watch.Elapsed;
Console.WriteLine("Success!");
Console.Write("It took " + ts.TotalSeconds + " seconds for the sharp C to type ");
Console.WriteLine("\"" + guess + "\"");
Console.ReadLine();
}
}
}Python:
```
import random
import time
#This
Solution
If you want performance, don't create objects in the inner loop:
create them once and reuse them
static string generate(int len)
{
Random rnd = new Random(); // creating a new object
string alpha = "abcdefghijklmnopqrstuvwxyz";
int letterInt;
StringBuilder sb = new StringBuilder(); // creating a new object
....
}create them once and reuse them
Code Snippets
static string generate(int len)
{
Random rnd = new Random(); // creating a new object
string alpha = "abcdefghijklmnopqrstuvwxyz";
int letterInt;
StringBuilder sb = new StringBuilder(); // creating a new object
....
}Context
StackExchange Code Review Q#42792, answer score: 50
Revisions (0)
No revisions yet.