public Stream Decompress(Archive archive, Stream output) { var bytesPrices = archive.BytePrice.OrderBy(pair => pair.Key); var bits = new List <bool[]>(archive.BytePrice.Count); foreach (var bytePrice in bytesPrices) { var convertedPrice = new bool[bytePrice.Value.Count]; foreach (bool bit in bytePrice.Value) { convertedPrice.Append(bit); } bits.Add(convertedPrice); } using (var reader = new BinaryReader(archive.Data, encoding, true)) using (var writer = new BinaryWriter(output, encoding, true)) { while (reader.BaseStream.Position != reader.BaseStream.Length) { foreach (var bit in bits[reader.ReadByte()]) { writer.Write(bit); } } } return(output); }
static void PrintExpTree(Expression exp, StringBuilder sb, bool[] scopes = null) { Console.OutputEncoding = Encoding.UTF8; if (scopes == null) { scopes = new bool[1] { false } } ; const char lineHorizontal = '\u2501'; const char lineCrossed = '\u2523'; const char lineCurved = '\u2517'; const char lineChildren = '\u2533'; const char lineVertical = '\u2503'; for (int i = 0; i < scopes.Length - 1; i++) { if (scopes[i]) { sb.Append(lineVertical); } else { sb.Append(' '); } } if (scopes.Last() == false) { sb.Append(lineCurved); } else { sb.Append(lineCrossed); } if (exp.getChildren().Count() > 0) { sb.Append(lineChildren); } else { sb.Append(lineHorizontal); } sb.Append(' '); sb.AppendLine(exp.ToString()); int counter = 0; foreach (var item in exp.getChildren()) { counter++; PrintExpTree(item, sb, scopes.Append(exp.getChildren().Count() != counter).ToArray()); } }
public bool[] CalculateOnePass(double[] timePassed, params bool[] elementsStates) { //массив состояний элементов после прохода (на один меньше, так как значение системы будет рассчитываться позже) bool[] outElementsStates = new bool[elementsStates.Length - 1]; //проход по всем элементам for (int i = 0; i < elementsStates.Length - 1; i++) { double randomValue = random.NextDouble(); //если элемент работает if (elementsStates[i]) { double failureProbability = 1 - Math.Exp(-failureRate * timePassed[i]); //если элемент отказывает if (randomValue <= failureProbability) { //изменить состояние элемента на "отказ" outElementsStates[i] = false; } else { outElementsStates[i] = true; } } //если элемент отказал else { double recoveryProbability = 1 - Math.Exp(-recoveryRate * timePassed[i]); //если элемент восстанавливается if (randomValue <= recoveryProbability) { //изменить состояние элемента на "работает" outElementsStates[i] = true; } else { outElementsStates[i] = false; } } } //находим количество отказавших элементов int failureElementsCount = outElementsStates.Count(x => !x); //определяем и записываем состояние системы outElementsStates = outElementsStates.Append(!(failureElementsCount >= necessaryFailureElementsCount)).ToArray(); return(outElementsStates); }
static void Main(string[] args) { int N = GetNumbers(Console.ReadLine()); string[] array = Console.ReadLine().Split(); int[] numbers = Console.ReadLine().Split(' ').Select(GetNumbers).ToArray(); bool[] used = new bool[N]; StringBuilder list = new StringBuilder(); int index = 0; bool cycles = false; int cycleIndex = -1; while (true) { if (index < 0 || index >= N) { break; } if (used[index]) { cycles = true; cycleIndex = index; break; } list.Append(index); used.Append(index); index = numbers[index]; } if (cycleIndex == 0) { Console.Write("(" + list[0] + " "); for (int i = 1; i < list.Length - 1; i++) { Console.Write(list[i] + " "); } Console.Write(list[list.Length - 1] + ")"); } else { for (int i = 0; i < list.Length - 1; i++) { if (list[i + 1] - '0' == cycleIndex) { Console.Write(list[i]); } else if (list[i] - '0' == cycleIndex) { Console.Write("(" + list[i] + " "); } else { Console.Write(list[i] + " "); } } if (cycles == true) { if (list.Length == 2) { Console.Write("(" + list[list.Length - 1] + ")"); } else { Console.Write(list[list.Length - 1] + ")"); } } else { Console.Write(list[list.Length - 1]); } } }