<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="wix.bootstrapper" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore"> <section name="host" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" /> </sectionGroup> </configSections> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" /> </startup> <wix.bootstrapper> <host assemblyName="Bootstrapper.UI"> <supportedFramework version="v4\Full" /> <supportedFramework version="v4\Client" /> </host> </wix.bootstrapper> </configuration>
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Bundle Name="Bootstrapper" Version="!(bind.packageVersion.Msi_Installer)" Manufacturer="Justin" UpgradeCode="1b9106f0-5ba8-4857-ac0a-c1becba1fe51"> <BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost"> <Payload SourceFile="$(var.Bootstrapper.UI.TargetPath)" /> <Payload SourceFile="$(var.Bootstrapper.UI.ProjectDir)BootstrapperCore.config"/> <Payload SourceFile="$(var.Bootstrapper.UI.TargetDir)BootstrapperCore.dll"/> <Payload SourceFile="$(var.Bootstrapper.UI.TargetDir)Microsoft.Deployment.WindowsInstaller.dll"/> </BootstrapperApplicationRef> <Chain> <PackageGroupRef Id="NetFx462Web"/> <MsiPackage Id="Msi_Installer" SourceFile="$(var.Installer.TargetPath)" EnableFeatureSelection="yes" Compressed="yes" /> </Chain> </Bundle> </Wix>
protected override void Run() { WaitForDebugger(); InitializePackages(); _BootstrapDispatcher = Dispatcher.CurrentDispatcher; // should UI be displayed if (Command.Display == Display.Full || Command.Display == Display.Unknown) { Engine.Log(LogLevel.Verbose, "Launching custom UX"); _InstallerWindowViewModel = new InstallerWindowViewModel(this); InstallerWindow installerWindow = new InstallerWindow { DataContext = _InstallerWindowViewModel }; installerWindow.Closed += (s, e) => _BootstrapDispatcher.InvokeShutdown(); installerWindow.Show(); Dispatcher.Run(); Engine.Quit(_ErrorCode); } else { DetectComplete += (sender, args) => Plan(Command.Action); PlanComplete += (sender, args) => Execute(); ExecuteComplete += (sender, args) => { Engine.Quit(args.Status); _BootstrapDispatcher.InvokeShutdown(); }; Detect(); Dispatcher.Run(); } }
private void WaitForDebugger() { if (Command.GetCommandLineArgs().Contains("DEBUG")) { Engine.Log(LogLevel.Verbose, "Waiting for debugger to be attached..."); while (!Debugger.IsAttached) { Thread.Sleep(500); } Debugger.Break(); } }
private readonly XNamespace ManifestName = "http://schemas.microsoft.com/wix/2010/BootstrapperApplicationData"; … private void InitializePackages() { const string DataFilePathName = "BootstrapperApplicationData.xml"; const string ApplicationDataNamespace = "BootstrapperApplicationData"; const string MbaPrereqNamespace = "WixMbaPrereqInformation"; const string PackageNamespace = "WixPackageProperties"; const string FeatureNamespace = "WixPackageFeatureInfo"; var workingDir = Path.GetDirectoryName(GetType().Assembly.Location); var dataFilePath = Path.Combine(workingDir, DataFilePathName); XElement applicationData = null; try { using (var reader = new StreamReader(dataFilePath)) { var xml = reader.ReadToEnd(); var xDoc = XDocument.Parse(xml); applicationData = xDoc.Element(ManifestName + ApplicationDataNamespace); } } catch (Exception ex) { Engine.Log(LogLevel.Error, $"Unable to parse {DataFilePathName}.\nReason: {ex.Message}"); } var mbaPrereqs = applicationData.Descendants(ManifestName + MbaPrereqNamespace) .Select(x => new MbaPrereqPackage(x)); // exclude prereq packages Packages = applicationData.Descendants(ManifestName + PackageNamespace) .Select(x => new BundlePackage(x)) .Where(pkg => !mbaPrereqs.Any(preReq => preReq.PackageId == pkg.Id)) .ToArray(); // get features and associate with their package var featureNodes = applicationData.Descendants(ManifestName + FeatureNamespace); foreach (var featureNode in featureNodes) { var feature = new PackageFeature(featureNode); var parentPkg = Packages.First(pkg => pkg.Id == feature.PackageId); parentPkg.Features.Add(feature); feature.Package = parentPkg; } }
Surprisingly there are only three numbers that can be written as the sum of fourth powers of their digits:
1634 = 14 + 64 + 34 + 44
8208 = 84 + 24 + 04 + 84
9474 = 94 + 44 + 74 + 44As 1 = 14 is not a sum it is not included.
The sum of these numbers is 1634 + 8208 + 9474 = 19316.
Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.
using System; using System.Diagnostics; namespace Project_Euler_30 { internal class Program { // 5x9^5 has 6 digits, so the upper bound should be 6x9^6 private const int UpperBound = 59049 * 6; private static readonly int[] powersCache = new int[] { 0, 1, 32, 243, 1024, 3125, 7776, 16807, 32768, 59049 }; private static void Main(string[] args) { Stopwatch sw = Stopwatch.StartNew(); int result = 0; // start the loop at 243 since that is the lower bound (3^5) of a possible sum for(int i = powersCache[3]; i <= UpperBound; i++) { int sum = 0; int workingNumber = i; while(workingNumber > 0) { int digit = workingNumber % 10; workingNumber /= 10; sum += powersCache[digit]; if(sum > i) { // passed the number, stop checking break; } } if(sum == i) { result += i; } } sw.Stop(); Console.WriteLine($"Sum of results: {result}"); Console.WriteLine($"Took {sw.ElapsedMilliseconds}ms"); } } }
Consider all integer combinations of ab for 2 ≤ a ≤ 5 and 2 ≤ b ≤ 5:
22=4, 23=8, 24=16, 25=32
32=9, 33=27, 34=81, 35=243
42=16, 43=64, 44=256, 45=1024
52=25, 53=125, 54=625, 55=3125If they are then placed in numerical order, with any repeats removed, we get the following sequence of 15 distinct terms:
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
How many distinct terms are in the sequence generated by ab for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?
using System; using System.Collections.Generic; using System.Diagnostics; namespace Project_Euler_29 { internal class Program { private static void Main(string[] args) { Stopwatch sw = Stopwatch.StartNew(); HashSet<double> results = new HashSet<double>(); for (int a = 2; a <= 100; a++) { for (int b = 2; b <= 100; b++) { results.Add(Math.Pow(a, b)); } } sw.Stop(); Console.WriteLine($"Number of distinct powers: {results.Count}"); Console.WriteLine($"Took {sw.ElapsedMilliseconds}ms"); } } }
Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13It can be verified that the sum of the numbers on the diagonals is 101.
What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?
using System; using System.Diagnostics; using System.Linq; namespace ProjectEuler_28 { internal class Program { private static void Main(string[] args) { const int squareSize = 1001; Stopwatch sw = Stopwatch.StartNew(); int half = (int)Math.Ceiling(squareSize / 2D) - 1; int[] topRight = new int[half]; int[] topLeft = new int[half]; int[] bottomLeft = new int[half]; int[] bottomRight = new int[half]; int idx = 0; for (int i = squareSize; i > 1;) { topRight[idx] = i * i; topLeft[idx] = topRight[idx] - i + 1; bottomLeft[idx] = topLeft[idx] - i + 1; bottomRight[idx] = bottomLeft[idx] - i + 1; i = (int)Math.Floor(Math.Sqrt(bottomRight[idx])); idx++; } sw.Stop(); Console.WriteLine($"Sum of diagonols: {topRight.Sum() + topLeft.Sum() + bottomLeft.Sum() + bottomRight.Sum() + 1} in {sw.ElapsedTicks} ticks"); } } }
Euler discovered the remarkable quadratic formula:
n2 + n + 41
It turns out that the formula will produce 40 primes for the consecutive integer values 0 ≤ n ≤ 39. However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 412 + 41 + 41 is clearly divisible by 41.
The incredible formula n2 - 79n + 1601 was discovered, which produces 80 primes for the consecutive values 0 ≤ n ≤ 79. The product of the coefficients, −79 and 1601, is −126479.
Considering quadratics of the form:
n2 + an + b, where |a| < 1000 and |b| ≤ 1000where |n| is the modulus/absolute value of n
e.g. |11| = 11 and |-4| = 4Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0.
using Common.Math; using System; using System.Diagnostics; using System.Linq; namespace ProjectEuler_27 { internal class Program { private static int[] primeCache = Eratosthenes.GetPrimes(1000).ToArray(); private static bool IsPrime(int num) { if (num > primeCache.Last()) { primeCache = Eratosthenes.GetPrimes(primeCache.Last() * 2); } // array.contains checks every value, these are in order from smallest to largest // so creating our own contains is more efficient. int i = 0; while (i < primeCache.Length && primeCache[i] < num) { i++; } return primeCache[i] == num; } private static void Main(string[] args) { Stopwatch sw = Stopwatch.StartNew(); ResultHelper result = new ResultHelper(); // 'b' must be prime because when n=0 we get 0^2 + a(0) + b which is just 'b' // since 0 is inclusive and all results must be prime, we can narrow down 'b' to just prime numbers int[] bPossibles = primeCache; // we can also narrow down 'a' possiblities because all primes except for 2 are odd // so if n=1 we get 1^2 + a(1) + b = 1 + a + b // since an odd added to an odd is always even, we know that for all cases except 2 'a' must be odd // in the case of 2 'a' must be even for (int a = -999; a < 1000; a += 2) { for (int bIdx = 0; bIdx < bPossibles.Length; bIdx++) { // handle the case of b=2 int workingA = bPossibles[bIdx] == 2 ? a - 1 : a; int n = 0; while (IsPrime(Math.Abs(n * n + workingA * n + bPossibles[bIdx]))) { n++; } if (result.Count < n) { result = new ResultHelper { A = a, B = bPossibles[bIdx], Count = n }; } } } sw.Stop(); Console.WriteLine($"{result.Count} primes found in {sw.ElapsedMilliseconds}ms when a={result.A} and b={result.B} with a product of {result.A * result.B}."); } private struct ResultHelper { public int A; public int B; public int Count; } } }