diff --git a/examples/example-01.txt b/examples/example-01.txt new file mode 100644 index 0000000..a091ed5 Binary files /dev/null and b/examples/example-01.txt differ diff --git a/examples/example-02.txt b/examples/example-02.txt new file mode 100644 index 0000000..beb1242 Binary files /dev/null and b/examples/example-02.txt differ diff --git a/examples/example-03.txt b/examples/example-03.txt new file mode 100644 index 0000000..d470742 Binary files /dev/null and b/examples/example-03.txt differ diff --git a/examples/example-04.txt b/examples/example-04.txt new file mode 100644 index 0000000..1958d78 Binary files /dev/null and b/examples/example-04.txt differ diff --git a/source/Triangulum/MainWindow.xaml b/source/Triangulum/MainWindow.xaml index 06f18a2..f92fb4f 100644 --- a/source/Triangulum/MainWindow.xaml +++ b/source/Triangulum/MainWindow.xaml @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program.If not, see . --> - + @@ -53,6 +53,7 @@ + + + + + + + + VerticalAlignment="Bottom" + HorizontalAlignment="Right" + Width="64" Checked="cbxCenter_Checked" /> diff --git a/source/Triangulum/MainWindow.xaml.cs b/source/Triangulum/MainWindow.xaml.cs index 8e94c9e..ab1873d 100644 --- a/source/Triangulum/MainWindow.xaml.cs +++ b/source/Triangulum/MainWindow.xaml.cs @@ -28,6 +28,8 @@ You should have received a copy of the GNU General Public License using System.Windows; using System.Windows.Input; using System.ComponentModel; +using System.Numerics; +using System.Linq; namespace Triangulum { @@ -194,7 +196,11 @@ public void PascalsTriangle(ViewModel vm, int row) List triangle = new List(); - System.Numerics.BigInteger no_row, c = 1, blk, i, j; + // System.Numerics.BigInteger + BigInteger row_no; + BigInteger c = 1; + BigInteger blk; + BigInteger i, j; string spacer = string.Empty; if (vm.Center_IsChecked == true) @@ -202,11 +208,14 @@ public void PascalsTriangle(ViewModel vm, int row) spacer = " "; } - no_row = row; - for (i = 0; i < no_row; i++) + row_no = row; + for (i = 0; i < row_no; i++) { - for (blk = 1; blk <= no_row - i; blk++) - triangle.Add(spacer); + List triangle_row = new List(); + + // Center + for (blk = 1; blk <= row_no - i; blk++) + triangle_row.Add(spacer); for (j = 0; j <= i; j++) { @@ -217,28 +226,75 @@ public void PascalsTriangle(ViewModel vm, int row) // Convert to Binary if (vm.Binary_IsChecked == true) + { if (c % 2 != 0) if (vm.Binary1_IsChecked == true) - triangle.Add("1 "); + { + triangle_row.Add("1 "); + } else - triangle.Add(" "); + { + triangle_row.Add(" "); + } else if (vm.Binary0_IsChecked == true) - triangle.Add("0 "); - else - triangle.Add(" "); + { + triangle_row.Add("0 "); + } + else + { + triangle_row.Add(" "); + } + } // Integers else - triangle.Add(string.Format("{0} ", c)); + { + triangle_row.Add(string.Format("{0} ", c)); + } + } - // Linebreak - triangle.Add("\n"); - } + + // Decimal + if (vm.Decimal_IsChecked == true) + { + string join = string.Join("", triangle_row); + + // Remove WhiteSpaces + join = Regex.Replace(join, " ", ""); + + // Convert Binary to Decimal + BigInteger sequence = BinaryToDec(join); + + // Add to Triangle + triangle.Add(Convert.ToString(sequence)); + } + + + // Sum + if (vm.Sum_IsChecked == true) + { + BigInteger sum = triangle_row + .Where(x => !string.IsNullOrWhiteSpace(x)) + .Where(x => !string.IsNullOrEmpty(x)) + .Aggregate(BigInteger.Zero, (x, a) => x + BigInteger.Parse(a)); + + triangle.Add(string.Join(" ", sum)); + } + + + // Individual + if (vm.Decimal_IsChecked == false && + vm.Sum_IsChecked == false) + { + triangle.Add(string.Join("", triangle_row)); + } + + } // End Loop // Output - string output = string.Join(string.Empty, triangle); + string output = string.Join("\n", triangle); // Convert to ASCII if (vm.ASCII_IsChecked == true) @@ -262,6 +318,44 @@ public void PascalsTriangle(ViewModel vm, int row) } + + /// + /// Binary to Decimal + /// + static BigInteger BinaryToDec(string input) + { + char[] array = input.ToCharArray(); + // Reverse since 16-8-4-2-1 not 1-2-4-8-16. + Array.Reverse(array); + /* + * [0] = 1 + * [1] = 2 + * [2] = 4 + * etc + */ + BigInteger sum = 0; + + for (int i = 0; i < array.Length; i++) + { + if (array[i] == '1') + { + // Method uses raising 2 to the power of the index. + if (i == 0) + { + sum += 1; + } + else + { + sum += (BigInteger)Math.Pow(2, i); + } + } + + } + + return sum; + } + + /// /// Binary to ASCII /// @@ -290,9 +384,17 @@ private byte[] convertToBytes(string s) /// /// Font Size - Slider /// + // Double Click private void slFontSize_MouseDoubleClick(object sender, MouseButtonEventArgs e) { - slFontSize.Value = 9; + // Return to Default Size + slFontSize.Value = 12; + } + // Mouse Up + private void slFontSize_PreviewMouseUp(object sender, MouseButtonEventArgs e) + { + // Change Font Size + vm.Display_FontSize = slFontSize.Value; } @@ -310,11 +412,67 @@ private void cbxWrap_Unchecked(object sender, RoutedEventArgs e) } + /// + /// Center - CheckBox + /// + private void cbxCenter_Checked(object sender, RoutedEventArgs e) + { + // Uncheck Inline + if (vm.Inline_IsChecked == true) + { + cbxInline.IsChecked = false; + vm.Inline_IsChecked = false; + } + + // Uncheck ASCII + if (vm.ASCII_IsChecked == true) + { + cbxASCII.IsChecked = false; + vm.ASCII_IsChecked = false; + } + + // Uncheck Decimal + if (vm.Decimal_IsChecked == true) + { + cbxDecimal.IsChecked = false; + vm.Decimal_IsChecked = false; + } + + // Uncheck Sum + if (vm.Sum_IsChecked == true) + { + cbxSum.IsChecked = false; + vm.Sum_IsChecked = false; + } + } + + + /// + /// Inline - CheckBox + /// + private void cbxInline_Checked(object sender, RoutedEventArgs e) + { + // Uncheck Center + if (vm.Center_IsChecked == true) + { + cbxCenter.IsChecked = false; + vm.Center_IsChecked = false; + } + } + + /// /// ASCII - CheckBox /// private void cbxASCII_Checked(object sender, RoutedEventArgs e) { + // Uncheck Center + if (vm.Center_IsChecked == true) + { + cbxCenter.IsChecked = false; + vm.Center_IsChecked = false; + } + // Uncheck Binary cbxBinary.IsChecked = true; cbx0.IsChecked = true; @@ -323,8 +481,47 @@ private void cbxASCII_Checked(object sender, RoutedEventArgs e) vm.Binary_IsChecked = true; vm.Binary1_IsChecked = true; vm.Binary0_IsChecked = true; + + // Uncheck Decimal + cbxDecimal.IsChecked = false; + vm.Decimal_IsChecked = false; + + // Uncheck Sum + cbxSum.IsChecked = false; + vm.Sum_IsChecked = false; + } + + /// + /// Decimal - CheckBox + /// + private void cbxDecimal_Checked(object sender, RoutedEventArgs e) + { + // Uncheck Center + if (vm.Center_IsChecked == true) + { + cbxCenter.IsChecked = false; + vm.Center_IsChecked = false; + } + + // Check Binary 0 & 1 + cbxBinary.IsChecked = true; + cbx0.IsChecked = true; + cbx1.IsChecked = true; + + vm.Binary_IsChecked = true; + vm.Binary0_IsChecked = true; + vm.Binary1_IsChecked = true; + + // Uncheck ASCII + cbxASCII.IsChecked = false; + vm.ASCII_IsChecked = false; + + // Uncheck Sum + cbxSum.IsChecked = false; + vm.Sum_IsChecked = false; } + /// /// Binary - CheckBox /// @@ -338,7 +535,11 @@ private void cbxBinary_Checked(object sender, RoutedEventArgs e) vm.Binary_IsChecked = true; //vm.Binary0_IsChecked = true; vm.Binary1_IsChecked = true; - + + + // Enable Decimal + vm.Decimal_IsEnabled = true; + } // Unchecked @@ -351,6 +552,12 @@ private void cbxBinary_Unchecked(object sender, RoutedEventArgs e) vm.Binary_IsChecked = false; vm.Binary0_IsChecked = false; vm.Binary1_IsChecked = false; + + // Uncheck Decimal + vm.Decimal_IsChecked = false; + + // Disable Decimal + vm.Decimal_IsEnabled = false; } // Binary 0 - CheckBox @@ -376,6 +583,31 @@ private void cbx1_Checked(object sender, RoutedEventArgs e) } + /// + /// Sum - CheckBox + /// + // Unchecked + private void cbxSum_Checked(object sender, RoutedEventArgs e) + { + // Uncheck Center + cbxCenter.IsChecked = false; + vm.Center_IsChecked = false; + + // Uncheck Decimal + cbxDecimal.IsChecked = false; + vm.Decimal_IsChecked = false; + + // Uncheck ASCII + cbxASCII.IsChecked = false; + vm.ASCII_IsChecked = false; + } + // Unchecked + private void cbxSum_Unchecked(object sender, RoutedEventArgs e) + { + + } + + /// /// Rows - TextBox /// @@ -424,7 +656,7 @@ private void btnGo_Click(object sender, RoutedEventArgs e) { // Rows Over 2500 Warning // - if (int.Parse(vm.Rows_Text) >= 2500) + if (int.Parse(vm.Rows_Text) >= 1000) { // Yes/No Dialog Confirmation // diff --git a/source/Triangulum/Properties/AssemblyInfo.cs b/source/Triangulum/Properties/AssemblyInfo.cs index d9723ba..449a49d 100644 --- a/source/Triangulum/Properties/AssemblyInfo.cs +++ b/source/Triangulum/Properties/AssemblyInfo.cs @@ -51,5 +51,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.0.1.0")] -[assembly: AssemblyFileVersion("0.0.1.0")] +[assembly: AssemblyVersion("0.0.2.0")] +[assembly: AssemblyFileVersion("0.0.2.0")] diff --git a/source/Triangulum/ViewModel.cs b/source/Triangulum/ViewModel.cs index edb49fd..f9b1f04 100644 --- a/source/Triangulum/ViewModel.cs +++ b/source/Triangulum/ViewModel.cs @@ -83,19 +83,19 @@ public string Display_Text } } // Font Size - public string _FontSize_Text; - public string FontSize_Text + public double _Display_FontSize = 12; + public double Display_FontSize { - get { return _FontSize_Text; } + get { return _Display_FontSize; } set { - if (_FontSize_Text == value) + if (_Display_FontSize == value) { return; } - _Wrap_Text = value; - OnPropertyChanged("FontSize_Text"); + _Display_FontSize = value; + OnPropertyChanged("Display_FontSize"); } } // Text Wrap @@ -246,5 +246,57 @@ public bool Binary1_IsChecked } + // ------------------------- + // Sum - Toggle + // ------------------------- + private bool _Sum_IsChecked; + public bool Sum_IsChecked + { + get { return _Sum_IsChecked; } + set + { + if (_Sum_IsChecked == value) return; + + _Sum_IsChecked = value; + } + } + + + // ------------------------- + // Decimal - Toggle + // ------------------------- + // Checked + private bool _Decimal_IsChecked; + public bool Decimal_IsChecked + { + get { return _Decimal_IsChecked; } + set + { + if (_Decimal_IsChecked == value) return; + + _Decimal_IsChecked = value; + } + } + + // Enabled + private bool _Decimal_IsEnabled = true; + public bool Decimal_IsEnabled + { + get { return _Decimal_IsEnabled; } + set + { + if (_Decimal_IsEnabled == value) + { + return; + } + + _Decimal_IsEnabled = value; + OnPropertyChanged("Decimal_IsEnabled"); + } + } + + + + } }