1

I am working on project where User have to insert character between A to AZ. Ex. If User Enter Values Like This

  • Field 1= AA

  • Field 2= AD

  • Then I have to generate AA,AB,AC,AD.

KrutPandya
  • 33
  • 5

5 Answers5

1
string start = "AD", end = "BC";

int p1 = int.Parse(string.Join("", start.Select(c => (int)c)));
int p2 = int.Parse(string.Join("", end.Select(c => (int)c)));
var range = Enumerable.Range('A', 26);
var combo = range.Select(c => ((char)c).ToString()).ToList();
combo.AddRange(
from r in range from r2 in range select string.Concat((char)r, (char)r2));
var results = combo.Where(l =>
{
    var v = int.Parse(string.Join("", l.Select(c => (int)c)));
    return v >= p1 && v <= p2;
});

Console.WriteLine(string.Join(",", results));

Output: AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ,BA,BB,BC

Explanation:

Take the numeric value of each character in a pair and string concatenate them, e.g.

"AD" = "65" + "68" = 6568 (lower bound)
"BC" = "66" + "67" = 6667 (upper bound)

From a list of generated pairs AA to ZZ, compare the numeric value using the same formula above to get the desired result

"AA" = "65" + "65" = 6565 (outside bound)
"AB" = "65" + "65" = 6566 (outside bound)
...
"AD" = "65" + "68" = 6568 (inside bound)
...
"BD" = "66" + "68" = 6668 (outside bound)
Zeb Rawnsley
  • 2,210
  • 1
  • 21
  • 33
1

Finally issue is solved. Sharing my answer For Angular Code. Hope it will help others too.

Function to Convert Number To Char

   numberToCol(num) {
     var str = '', q, r;
     while (num > 0) {
       q = (num - 1) / 26;
       r = (num - 1) % 26
       num = Math.floor(q)
       str = String.fromCharCode(65 + r) + str;
     }
     return str;
   }

Function To Convert Char To Number

 GenerateAlphabeticArray(letter1, letter2) {
 
     let var1 = letter1.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);
     let var2 = letter2.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);
 
     let a = [];
 
     for (let i = var1; i <= var2; i++) {
       a.push(this.numberToCol(i))
     }
     console.log("AtoZData = ", a);
     return a;
   }

Make a call of fuction

this.GenerateAlphabeticArray('AA', 'AD');

Output

['AA', 'AB', 'AC', 'AD']
Peter Csala
  • 17,736
  • 16
  • 35
  • 75
KrutPandya
  • 33
  • 5
0

A simple nested loop should do it. Something like:

var alphabets = new List<string>();
for(int i = 65;i< 65+26;i++)
    for(int j = 65;j< 65+26;j++)
        alphabets.Add($"{(char)i}{(char)j}");
MrClan
  • 6,402
  • 8
  • 28
  • 43
  • this solution is work but it generate array From AA to AZ. I want to generate array according to user requirement. if User Enter From AA TO QA, Then I have to generate array from AA to QA. – KrutPandya Dec 08 '21 at 04:44
  • Can you update the question to show examples of these user requirements? How are you passing in those requirements to your generator method? – MrClan Dec 08 '21 at 04:47
  • Have a look now. I have updated question. – KrutPandya Dec 08 '21 at 04:51
0

This should work to get the values you are expecting

public static void combination() {
            string[] letters = { "a", "b", "c", "d"... };
        List<string> combinations = new List<string>();
            for (int i = 0; i < letters.Length; i++)
            {
                for (int j=0; j<letters.Length; j++)
                {
                    combinations.Add(letters[i]+letters[j]);
                }
            }
        }
LouisLuna
  • 36
  • 1
  • 2
  • I want to generate array according to user requirement. if User Enter From AA TO QA, Then I have to generate array from AA,AB,AC,AD.... to QA – KrutPandya Dec 08 '21 at 05:01
0

I really liked KrutPandya and PeterCsala's answer.

So this is just an improvement on their excellent idea.


const numberToCol = (num) => {
     var str = '', q, r;
     while (num > 0) {
       q = (num - 1) / 26;
       r = (num - 1) % 26
       num = Math.floor(q)
       str = String.fromCharCode(65 + r) + str;
     }
  return str;
}

const colToNumber = col => 
  col.split('').reduce((code,chr,index) => code + (chr.charCodeAt() - 64) * (26 ** (col.length-index-1)),0)
;

const range = function* (start = 0, end = Infinity, step = 1) {
  for (let i = start; i <= end; i += step)
    yield i;
}

// Then 
Array.from(
  range(
    colToNumber('AA'), 
    colToNumber('AD')
  )
).map(numberToCol);

// range = [27,28,29,30] 
// map ['AA','AB','AC','AD']

Claudio Acioli
  • 319
  • 1
  • 7