Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace RTF2
- {
- using System.Collections.Generic;
- using System.Collections;
- using System;
- using BenchmarkDotNet;
- using BenchmarkDotNet.Running;
- using System.IO;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Linq;
- class Program
- {
- static void Main(string[] args)
- {
- var sameHashedNumbers = Enumerable.Range(int.MinValue + 1, int.MaxValue - 1).Select(x => x.WithSameHashes()).MaxBy(x => x.Length);
- Console.WriteLine(sameHashedNumbers.Length);
- using (var memory = new FileStream("save.dat", FileMode.OpenOrCreate))
- {
- var formatter = new BinaryFormatter();
- formatter.Serialize(memory, sameHashedNumbers);
- memory.Position = 0;
- }
- Console.ReadKey();
- BenchmarkRunner.Run<DictionaryBreaker>();
- Console.ReadKey();
- }
- }
- public class DictionaryBreaker
- {
- [BenchmarkDotNet.Attributes.Benchmark(Description = "Normal number")]
- public void AddNormalNumber()
- {
- int[] brokenNumbers;
- using (var memory = new FileStream("save.dat", FileMode.OpenOrCreate))
- {
- var formatter = new BinaryFormatter();
- brokenNumbers = (int[])formatter.Deserialize(memory);
- }
- var dict = new Dictionary<int, int>();
- for (int i = 0; i < 50000; i++)
- dict.Add(i, i);
- }
- [BenchmarkDotNet.Attributes.Benchmark(Description = "Broken numbers")]
- public void AddFuckedNumbers()
- {
- var dict = new Dictionary<int, int>();
- var value = 0;
- int[] brokenNumbers;
- using (var memory = new FileStream("save.dat", FileMode.OpenOrCreate))
- {
- var formatter = new BinaryFormatter();
- brokenNumbers = (int[])formatter.Deserialize(memory);
- }
- foreach (var item in brokenNumbers)
- dict.Add(item, value++);
- }
- }
- public static class Extensions
- {
- public static int[] WithSameHashes(this int src)
- {
- var stdHash = src.GetHashCode();
- var sameHashedNumbers = new List<int>();
- for (int i = int.MinValue; i < int.MaxValue; i++)
- {
- if (i.GetHashCode() == stdHash)
- {
- //Console.WriteLine(i);
- sameHashedNumbers.Add(i);
- }
- }
- return sameHashedNumbers.ToArray();
- }
- public static T[] MaxBy<T, TOut>(this IEnumerable<T[]> src, Func<T[], TOut> selector)
- where T: IComparable<T>, IComparable
- where TOut: IComparable<T>, IComparable
- {
- var tmpMax = src.First();
- using (IEnumerator<T[]> enumerator = src.GetEnumerator())
- {
- while (enumerator.MoveNext())
- {
- if (selector(enumerator.Current).CompareTo(selector(tmpMax)) > 0)
- tmpMax = enumerator.Current;
- }
- }
- return tmpMax;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement