I know that there are combinatoric libraries for this kind of thing. However, with me being new to C# and coding in general I found that I couldn't understand the code well enough to implement it in my solution.
Here is the challenge:
Given two integers: L and R,
find the maximal values of A xor B given, L ≤ A ≤ B ≤ R
Input Format The input contains two lines, L is present in the first line. R in the second line.
Constraints 1 ≤ L ≤ R ≤ 103
Output Format The maximal value as mentioned in the problem statement.
Sample Input#00
1 10
Sample Output#00
15
Sample Input#0110 15
Sample Output#01
7
Explanation for the second example is as follows:In the second sample let's say L=10, R=15, then all pairs which comply to above condition are
10⊕10=0
10⊕11=1
10⊕12=6
10⊕13=7
10⊕14=4
10⊕15=5
11⊕11=0
11⊕12=7
11⊕13=6
11⊕14=5
11⊕15=4
12⊕12=0
12⊕13=1
12⊕14=2
12⊕15=3
13⊕13=0
13⊕14=3
13⊕15=2
14⊕14=0
14⊕15=1
15⊕15=0Here two pairs (10,13) and (11,12) have maximum xor value 7 and this is the answer.
The code below represents my solution to the problem in question. It works but I feel like I reinvented the wheel on this one. Is there a better way of going about it than what I have?
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution {
public static List<int[]> Combinations( List<int> number_list )
{
// We are only choosing 2 values out of any list of numbers
int[] TwoList = new int[2];
List<int[]> result = new List<int[]>();
List<int> stack = new List<int>(number_list);
while (stack.Count > 0)
{
int StackLast = stack.Count - 1;
for (int i =0; i < stack.Count; i++)
{
TwoList[0] = stack[StackLast];
TwoList[1] = stack[i];
result.Add(new int[] {TwoList[0], TwoList[1]});
}
stack.RemoveAt(StackLast);
}
return result;
}
static int MaxXor(int l, int r)
{
List<int> NumList = new List<int>(Enumerable.Range(l, r - l + 1));
// Inserts the list combinations as int arrays
List<int[]> comboList = Combinations(NumList);
int max = 0;
foreach(var two in comboList)
{
int XorValue = two[0] ^ two[1];
max = ( max > XorValue )? max : XorValue;
}
return max;
}
static void Main(String[] args)
{
int _l;
int _r;
_l = Convert.ToInt32(Console.ReadLine());
_r = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(MaxXor(_l, _r));
}
}
PascalCase
for all method, constant and property names, andcamelCase
for everything else.snake_case
is really not used in C#. Additionally, opening curly braces generally go on new lines. This helps people not mistake your code for Java while simultaneously making it more familiar to other developers. \$\endgroup\$