source: branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Generators/NameGenerator.cs @ 14727

Last change on this file since 14727 was 14727, checked in by pkimmesw, 3 years ago

#2665 PushGP HL Integration, Views, Parameters

File size: 1.3 KB
Line 
1namespace HeuristicLab.Problems.ProgramSynthesis.Push.Generators {
2  using System;
3  using HeuristicLab.Core;
4  using HeuristicLab.Random;
5
6  public class NameGenerator {
7    public const int DefaultRandomNameLength = 10;
8
9    private static readonly char[] chars =
10      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
11
12    private int index;
13
14    public string GetNext() {
15      var length = this.index < chars.Length ? 1 : (int)Math.Log(this.index, chars.Length) + 1;
16      var result = new char[length];
17      var tmp = this.index;
18      this.index++;
19
20      for (var i = length; i > 0; i--) {
21        var a = (int)Math.Pow(chars.Length, i - 1);
22        var b = tmp / a;
23
24        result[length - i] = chars[b];
25
26        tmp -= a * b;
27      }
28
29      return new string(result);
30    }
31
32    public static string RandomName(IRandom random) {
33      return RandomName(DefaultRandomNameLength, random);
34    }
35
36    public static string RandomName(int length = DefaultRandomNameLength, IRandom random = null) {
37      random = random ?? new FastRandom();
38      var name = new char[length];
39
40      for (var i = 0; i < length; i++)
41        name[i] = chars[random.Next(chars.Length)];
42
43      return new string(name);
44    }
45  }
46}
Note: See TracBrowser for help on using the repository browser.