Исследование и преобразование сортировкой псевдослучайных последовательностей

Исследование и преобразование сортировкой псевдослучайных последовательностей Цель: созданы алгоритмы на языках C# и qbasic и таблица Excel совместимая, доказывающие возможность исследовать псевдослучайные последовательности на случайность и способные определять последовательности неслучайные или маломощные. Графическая оболочка: таблица Excel совместимая для исследования свыше 50 тыс элементов 2-х видов: 1. Исследование последовательности чисел; 2. Исследование последовательности цифр 0 и 1. Исследование последовательности чисел: таблица определяет двоичные признаки, например меньше \ больше и чётность \ нечётность. Графическая оболочка таблица Excel совместимая использует формулы: A B C D E F G H I J K L M N O 1 ВЬЮГА 22 0,4978 1 N-1 27683 0,5081 0 N-1 27393 2 VYUGA 20 19,03 1 1 1 0 13989 0 1 1 0 13773 3 3 0 0 0 1 6948 1 0 0 1 6790 4 Норм. 24 1 0 0 2 3461 Норм. 0 0 0 2 3424 5 15 0 0 0 3 1665 1 0 0 3 1713 6 24 1 0 4 837 0 0 0 4 886 7 27 1 1 5 404 1 0 5 429 8 27 1 2 6 216 1 1 1 6 211 9 26 1 3 3 7 118 0 0 0 7 107 10 17 0 0 8 45 1 0 8 60 11 6 0 1 1 1 1 12 8 0 2 0 2,01 2,06 0 0 0 2,03 13 7 0 3 1 2,01 1,97 0 1 1 1 1,98 14 11 0 4 2 2,08 1 0 2 2,00 15 17 0 5 5 3 1,99 1 1 1 3 1,93 16 22 1 0 4 2,07 0 0 0 4 2,07 17 23 1 1 1 5 1,87 1 0 5 2,03 18 9 0 0 0 6 1,83 1 1 1 6 1,97 19 28 1 0 7 2,62 0 0 7 1,78 Количество совпадений подряд рассчитывает формула N=log(1-C)/log(1-P), где N – шаг, P – вероятность, C – надёжность вероятности. Подставив C и P: N=log(1-0,99)/log(1-0,5) = 6,7 = натуральное значение 7, значит по счёту 7-й шаг распределения должен включать около 1% от половины данных, из-за подсчёта повторов и 0 и 1, в сумме 100%. Номер шага распределения: при С=P=0,5; N = 1 = log0,5/log0,5 = log(1-1/2)/log(1-1/2) = 1 при C=0,25; P=0,5; N = 2 = log0,75/log0,5 = log(1-1/4)/log(1-1/2) = 2 и т.д. Столбец A – наименование последовательности; Столбец B – последовательность; Столбец D – 1-е распределение меньше / больше; Столбцы E, F – определение одинаковых подряд; Столбцы G, H – подсчёт количества признаков одинаковых подряд; Столбец J – 2-е распределение чётные / нечётные; Столбцы K, L – определение признаков одинаковых подряд; Столбцы M, N – подсчёт количества признаков одинаковых подряд. Формулы, используемые в таблице: Яч. Формула Пояснение С1 =СРЗНАЧ(D1:D55000) Среднее значение чисел последовательности C2 =СРЗНАЧ(B1:B55000) Среднее значение распределения 1 D1 =ЕСЛИ(B1 d THEN a(i) = a(i)-d: GOTO 22 PRINT #1, a(i) NEXT Онлайн компилятор C# https://ideone.com/cPYZad //VYUGA.cs using System;using System.Linq; using System.Collections.Generic; using System.Text.RegularExpressions; namespace VYUGA { public class Program { static double w; static void Main(string[] args) { Random rand = new Random(); int d=37; double s = rand.Next(5000000); double a = Math.Round(d*s/5000000)+1; Console.WriteLine(a); for (int i = 1; i < 5555; i++) { w = rand.Next(3000000)+1; double v = Math.Round(w*d/1000000)+1; a=a+v; da: if (a>d) { a=a-d; goto da; } Console.WriteLine(a);} Console.ReadKey(); }}} Проверка показывает распределение хорошее, сравнивая признаки: меньше \ больше и чётное \ нечётное. Таблица исследует ГПСЧ тригонометрический ГПСЧ тригонометрический использует цифры после запятой тригонометрических функций, стандартный ГПСЧ не используя. 'rndsin.bas OPEN "rndsin.txt" FOR OUTPUT AS #1 c = 0: a = SIN(TIMER) * 100 + 200 PRINT #1, "a= ", a FOR k = 1 TO 10 ^ 3 + a * 10 ^ 3: NEXT FOR i = 1 TO 100 FOR j = 1 TO a x = SIN(TIMER) * 1000 + 2000 b = COS(x): c = c + b LOCATE 1, 1: PRINT j NEXT d = (ABS(c)) - INT(ABS(c)) PRINT #1, d FOR k = 1 TO 10000 + a * b * c * 10 ^ 2: NEXT NEXT До перестановки 500 ячеек: неудовлетворительно Очевидно распределение плохое, обнаруживая периодичность и разброс значений, сравнивая признаки малые \ большие и чётные \ нечётные. После перестановки 500 ячеек: нормально Массив превращается в нормальный Графики отношения признаков: после перестановки амплитуда меньше. Таблица оптимизирует ГПСЧ тригонометрический Цель: исключить встроенный ГПСЧ. Метод: исходная последовательность сортируется, в качестве случайных для перестановки принята та же последовательность, перевёрнутая или инвертированная любым способом. Например, в Excel созданы 2 копии столбцов последовательности на расстоянии и у одного столбца слева выстроен ведущий ряд 1...55000 подряд и 2 столбца сортированы от максимального к минимальному, инвертировав исходные данные. Далее 2 столбца последовательности поставлены рядом и сортированы, где столбец ведущий – обратный и столбец ведомый – начальный. До перестановки 500 ячеек: неудовлетворительно После перестановки 500 ячеек: нормально Результат: последовательность стала нормальной без встроенного ГПСЧ. Исследование числа пи 55000 цифр после запятой Используя 55000 цифр числа пи после запятой, сначала в Word цифры переведены заменой в столбик и в Excel разделены на двоичные признаки: малые \ большие и чётные \ нечётные. Результаты: среднее у обоих разделений: 0,5 и разделения соответствуют случайности истинной и ещё возможно перестанавливать До перестановки 500 ячеек: После перестановки 500 ячеек: Вывод: цифры числа пи распределены нормально. Возможно исследовать другие константы и корни. Программа перестановки на языках qbasic и C# Программами datasov.bas и datasov.cs осуществляется перестановка элементов массива исходного путём сортировки массива инвертированного. ' datasov.bas DIM a(55000), d(55000) OPEN "aa.txt" FOR INPUT AS #1 OPEN "dd.txt" FOR OUTPUT AS #2 FOR i = 1 TO 55000 INPUT #1, a(i): d(55000 - i + 1) = a(i):NEXT FOR i = 1 TO 54999: FOR j = i TO 55000 IF d(i) > d(j) THEN SWAP d(i), d(j): SWAP a(i), a(j) NEXT: NEXT FOR i = 1 TO 55000: PRINT #2, a(i): NEXT: CLOSE // datasov.cs using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.IO; namespace tasov { class Program { static long[] a; static long[] d; static void Main(string[] args) { a = new long[55500]; d = new long[55500]; var inpFile = new StreamReader("aa.txt"); for (int i = 1; i <= 55000; i++) { a[i] = Convert.ToInt64(inpFile.ReadLine()); d[55000-i+1] = a[i]; } for (int i = 1; i <= 54999; i++) for (int j = i; j <= 55000; j++) if (d[i] > d[j]) { var temp = d[i]; d[i] = d[j]; d[j] = temp; temp = a[i]; a[i] = a[j]; a[j] = temp; } var outFile = new StreamWriter("vv.txt"); for (int i = 1; i <= 55000; i++) outFile.WriteLine(a[i]); Console.ReadKey();}}} Алгоритм без RND считывает массив исходный и сразу создаётся массив инвертированный и далее сортировка обратного массива перетасовывает исходный массив и получается последовательность нормальная. Вывод: случайность достоверная – 2-сторонняя интегральная случайность. Фальсификация случайности Программа «Фальшь случайность 1» В последовательности увеличивается количество одинаковых подряд. ' dafalse11.bas qbasic OPEN "da11.txt" FOR OUTPUT AS #1 FOR d = 1 TO 5: FOR s = 1 TO 100 FOR i = 1 TO s: PRINT #1, 1: NEXT FOR i = 1 TO s: PRINT #1, 0: NEXT NEXT: NEXT: CLOSE A B C D E F G H I J K L M N O P Q R 1 ФАЛЬШ 0,5 1 0 N-1 94 437924 1 0,5 1 N-1 25028 2 0 0 0 0 14 975628 1 0,5 1 1 0 12458 3 11 1 0 1 10 851344 1 1 2 1 6173 4 1 1 1 2 10 460579 1 1 3 2 3269 5 НЕУД 0 0 3 10 43784 1 ХОР 1 4 3 1603 6 0 1 1 4 10 598365 1 1 5 5 4 792 7 1 0 5 10 149074 0 0 0 0 5 382 8 1 1 6 10 255382 1 1 0 6 202 9 1 2 2 7 10 484782 1 1 1 7 98 10 0 0 8 10 967156 1 1 2 8 51 11 0 1 1,05 277194 1 1 3 3 12 0 2 2 0 1,4 1,99 241817 0 0 0 0 2,02 13 1 0 1 1,0 255608 0 0 1 1 1 1,89 14 1 1 2 1,0 986306 1 1 0 0 2 2,04 15 1 2 3 1,0 332832 0 0 0 3 2,02 16 1 3 3 4 1,0 980651 0 0 1 1 4 2,07 17 0 0 5 1,0 568495 1 1 0 5 1,89 18 0 1 6 1,0 399534 1 1 1 6 2,06 19 0 2 7 1,0 694732 1 1 2 2 7 1,92 Столбец G показывает абсурдное распределение при среднем 0,5. Столбец А – наименование эксперимента; В1 =СРЗНАЧ(C1:C50504) - среднее значение последовательности; Столбцы C…F –исследование количества подряд; Столбец J – случайные для перестановки; Столбец K – последовательность после перестановки; M1 =СРЗНАЧ(N1:N50504) - среднее значение последовательности; Столбцы N…R – исследование количества подряд. До перестановки 500 ячеек: неудовлетворительно После перестановки 500 ячеек: нормально Вывод: выявлена явная подделка вида: равное число одинаковых подряд. Программа «Фальшь случайность 2» В последовательности увеличивается количество одинаковых подряд, специально учитывая проверочный алгоритм. ' dafalse22.bas qbasic OPEN "da22.txt" FOR OUTPUT AS #1 FOR k = 1 TO 100: FOR s = 1 TO 7 FOR d = 1 TO 2^(7-s) FOR i = 1 TO s: PRINT #1, 1: NEXT FOR i = 1 TO s: PRINT #1, 0: NEXT NEXT: NEXT: NEXT: CLOSE A B C D E F G H I J K L M N O P Q R 1 ФАЛЬШ 0,5 1 0 N-1 25926 314776 1 0,5 1 N-1 25275 2 0 0 0 0 13060 550753 1 0,5 1 1 1 0 12706 3 22 1 0 0 1 6528 224941 0 0 0 0 1 6377 4 0 0 0 2 3264 411343 1 1 0 2 3122 5 НЕУД 1 0 0 3 1634 332385 1 ХОР 1 1 1 3 1532 6 0 0 0 4 824 551963 0 0 0 4 800 7 1 0 0 5 412 360461 0 0 1 1 5 387 8 0 0 0 6 204 938208 1 1 0 0 6 194 9 1 0 0 7 0 508846 0 0 0 0 7 102 10 0 0 0 8 0 524570 1 1 0 0 8 55 11 1 0 0 2,00 246947 0 0 0 12 0 0 0 0 2,00 1,98 458506 0 0 1 0 1,99 13 1 0 0 1 2,00 104623 0 0 2 1 2,04 14 0 0 0 2 2,00 993835 0 0 3 3 2 2,04 15 1 0 0 3 1,98 33687 1 1 0 3 1,92 16 0 0 0 4 2,00 764405 1 1 1 1 4 2,07 17 1 0 0 5 2,02 400801 0 0 0 0 5 1,99 18 0 0 0 6 #/0! 562167 1 1 0 6 1,90 19 1 0 0 7 #/0! 471789 1 1 1 7 1,85 До перестановки 500 ячеек: неудовлетворительно После перестановки 500 ячеек: нормально Вывод: выявлена умная подделка, ведь не запрограммированы все возможные варианты и виден перекос из-за алгоритма синтеза. Последовательность фальшивая перетасованная превращается в последовательность случайную. Вывод: определить фальшивые последовательности реально. Программа эмулятор ГПСЧ MicroSoft Программа рассчитывает псевдослучайные последовательности без использования функции RND. 'rndms.bas qbasic OPEN «rndxxx.txt» FOR OUTPUT AS #1 FOR i = 1 TO 55555: r = Rand IF r < 0.5 THEN PRINT #1, 0 ELSE PRINT #1, 1 'IF r <= 0.5 THEN PRINT #1, 0 ELSE PRINT #1, 1 'IF r <= 0.7 THEN PRINT #1, 0 ELSE PRINT #1, 1 NEXT: CLOSE FUNCTION Rand: STATIC Seed x1 = (Seed * 214013 + 2531011) MOD 2 ^ 24 Seed = x1: Rand = x1 / 2 ^ 24 END FUNCTION Упрощённая реализация на языке C# для вставки в онлайн компилятор https://rextester.com/WXH62544 // rndms.cs using System;using System.Linq; using System.Collections.Generic; using System.Text.RegularExpressions; namespace rndxx { public class Program { public static void Main(string[] args) { Random rand = new Random(); for (int i = 1; i < 5555; i++) { var d = rand.Next(2); if (d<0.5) Console.WriteLine("0"); else Console.WriteLine("1"); }}}} Результат: случайность маломощная, предположительно понимаемая людьми как случайность якобы нормальная. Общие выводы: истинная случайность для людей неестественна и возможно синтезировать последовательности маломощные или фальшивые, принимаемые людьми и компьютерами за случайные последовательности. Любые последовательности реально синтезировать на языках программирования и в таблицах Excel совместимых. Задача преодоления случайности решается распознаванием случайности нормальной или фальшивой в таблице Excel с графиками. Что и требовалось доказать. Research and Sorting Transformation pseudo-random sequences Objective: To set up algorithms in C # and qbasic languages and table Excel compatible th, etc. it is possible to examine pseudo-random sequence for randomness and capable of determining sequence of a non-random or thin . Graphical shell : Excel table compatible for researching over 50 thousand elements of 2 types: 1. Study of a sequence of numbers ; 2. Examination of sequence of digits 0 and 1 . Investigation sequence of numbers : t b le defines binary attributes, such as less \ more and parity \ oddness. Excel Shell compatible graphical table uses formulas: A B C D E F G H I J K L M N O 1 WINTER STORM 22 0, 4978 1 27683 0, 5081 0 27393 2 VYUGA 20 19.03 1 1 1 0 13989 0 1 1 0 13773 3 3 0 0 0 1 6948 1 0 0 1 6790 4 Norm 24 1 0 0 2 3461 Norm 0 0 0 2 3424 5 fifteen 0 0 0 3 1665 1 0 0 3 1713 6 24 1 0 4 837 0 0 0 4 886 7 27 1 1 5 404 1 0 5 429 8 27 1 2 6 216 1 1 1 6 211 9 26 1 3 3 7 118 0 0 0 7 107 10 17 0 0 8 45 1 0 8 60 11 6 0 1 1 1 1 12 8 0 2 0 2.01 2.06 0 0 0 2.03 13 7 0 3 1 2.01 1.97 0 1 1 1 1.98 14 eleven 0 4 2 2.08 1 0 2 2.00 15 17 0 5 5 3 1.99 1 1 1 3 1.93 16 22 1 0 4 2.07 0 0 0 4 2.07 17 23 1 1 1 5 1.87 1 0 5 2.03 18 9 0 0 0 6 1.83 1 1 1 6 1.97 19 28 1 0 7 2.62 0 0 7 1.78 Number of consecutive matches is calculated by formula N = log (1-C) / log (1-P), where N is step, P is probability, C is reliability of probability. Substituting C and P: N = log (1-0.99) / log (1-0.5) = 6.7 = natural value 7, that means that 7th step of distribution should include about 1% of half data, due to counting repetitions and 0 and 1, in amount of 100%. Distribution step number: at C = P = 0.5; N = 1 = log0.5 / log0.5 = log (1-1 / 2) / log (1-1 / 2) = 1 at C = 0.25; P = 0.5; N = 2 = log0.75 / log0.5 = log (1-1 / 4) / log (1-1 / 2) = 2, etc. Column A is name of sequence; Column B - sequence; Column D - 1st distribution less / more; Columns E, F - definition of identical ones in a row; Columns G, H - counting number of signs identical in a row; Column J - 2nd distribution even / odd; Columns K, L - definition of signs identical in a row; Columns M, N - counting number of signs identical in a row . Formulas used in table: Cell Formula Explanation C1 = AVERAGE (D1: D55000) average value of sequence numbers C2 = AVERAGE (B1: B55000) Distribution Average 1 D1 = IF (B1 d THEN a (i) = a (i) -d: GOTO 22 PRINT # 1, a (i) NEXT Online C # Compiler https://ideone.com/cPYZad //VYUGA.cs using System; using System.Linq; using System.Collections.Generic; using System.Text.RegularExpressions; namespace VYUGA {public class Program {static double w; static void Main (string [] args) {Random rand = new Random (); int d = 37; double s = rand.Next (5000000); double a = Math.Round (d * s / 5000000) +1; Console.WriteLine (a); for (int i = 1; i < 55 55; i ++) {w = rand.Next (3000000) +1; double v = Math.Round (w * d / 1000000) +1; a = a + v; da: if (a> d) {a = ad; goto da; } Console.WriteLine (a);} Console.ReadKey (); }}} A check shows distribution is good, comparing attributes: m ensh e \ more and EVEN for e \ is odd about e. table examines PRNG trigonometric trigonometric PRNG uses digits after decimal point of trigonometric functions, without using standard PRNR . ' rndsin . bas OPEN " rndsin . Txt " FOR OUTPUT AS # 1 c = 0: a = SIN (TIMER) * 100 + 200 PRINT # 1, "a =", a FOR k = 1 TO 10 ^ 3 + a * 10 ^ 3: NEXT FOR i = 1 TO 100 FOR j = 1 TO a x = SIN (TIMER) * 1000 + 2000 b = COS (x): c = c + b LOCATE 1, 1: PRINT j NEXT d = (ABS (c)) - INT (ABS (c)) PRINT # 1, d FOR k = 1 TO 10000 + a * b * c * 10 ^ 2: NEXT NEXT Before reshuffling 500 cells: unsatisfactory Obviously, distribution is poor, revealing frequency and scatter of values, comparing signs of small / large and even / odd. After rearranging 500 cells: normal array turns into normal Graphs of relationship of signs: after permutation, amplitude is less. table optimizes PRNG trigonometric Purpose: to exclude built-in PRNG . Method: and a similar sequence is sorted, as random sequence for permutation is same sequence, inverted or inverted in any way . For example, in Excel, 2 copies of columns of a sequence were created at a distance, and a leading row of 1 ... 55000 in a row was built at left of one column and 2 columns are sorted from maximum to minimum, inverting original data . Next, 2 columns of sequence are placed side by side and sorted, where leading column is reverse column and slave column is initial one. Before reshuffling 500 cells: unsatisfactory After rearranging 500 cells: normal Result: sequence became normal without an integrated PRNG . Research pi 55000 decimal places Using 55,000 digits of pi after decimal point, first in Word numbers translated s replacement in column and in Excel divided s on binary features : small \ large and even \ odd. Results: average of both divisions: 0.5 and separating I corresponding w t true randomness and more possible permutated Before permuting 500 cells: After rearranging 500 cells: Conclusion: q and frames of pi are normally distributed. It is possible to explore other constants and roots. Program permutation into language ah q basic and C # Programs s datasov.bas and datasov.cs carried permutation array elements by sorting inverted original array. ' da tasov.bas DIM a (55000), d (55000) OPEN "aa.txt" FOR INPUT AS # 1 OPEN "dd.txt" FOR OUTPUT AS # 2 FOR i = 1 TO 55000 INPUT # 1, a (i): d (55000 - i + 1) = a (i): NEXT FOR i = 1 TO 54999: FOR j = i TO 55000 IF d (i)> d (j) THEN SWAP d (i), d (j): SWAP a (i), a (j) NEXT: NEXT FOR i = 1 TO 55000: PRINT # 2, a (i): NEXT: CLOSE // da tasov.cs using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.IO; namespace tasov {class Program {static long [] a; static long [] d; static void Main (string [] args) {a = new long [55500]; d = new long [55500]; var inpFile = new StreamReader ("aa.txt"); for (int i = 1; i <= 55000; i ++) {a [i] = Convert.ToInt64 (inpFile.ReadLine ()); d [55000-i + 1] = a [i]; } for (int i = 1; i <= 54999; i ++) for (int j = i; j <= 55000; j ++) if (d [i]> d [j]) {var temp = d [i]; d [i] = d [j]; d [j] = temp; temp = a [i]; a [i] = a [j]; a [j] = temp; } var outFile = new StreamWriter ("vv.txt"); for (int i = 1; i <= 55000; i ++) outFile.WriteLine (a [i]); Console . ReadKey ();}}} And algorithm without RND reads source array and immediately creates an inverted array and then sorting inverse array shuffles original array and sequence is normal . Conclusion: reliable randomness - 2-sided integral randomness. Falsification of chance program "False Chance 1" In sequence, number of identical ones in a row increases . ' da false11.bas qbasic OPEN " da1 1.txt" FOR OUTPUT AS # 1 FOR d = 1 TO 5: FOR s = 1 TO 100 FOR i = 1 TO s: PRINT # 1, 1: NEXT FOR i = 1 TO s: PRINT # 1, 0: NEXT NEXT: NEXT: CLOSE A B C D E F G H I J K L M N O P Q R 1 FALSE 0.5 1 0 94 437924 1 0.5 1 25028 2 0 0 0 0 14 975628 1 0.5 1 1 0 12458 3 eleven 1 0 1 10 851344 1 1 2 1 6173 4 1 1 1 2 10 460579 1 1 3 2 3269 5 NEUD 0 0 3 10 43784 1 CHORUS 1 4 3 1603 6 0 1 1 4 10 598365 1 1 5 5 4 792 7 1 0 5 10 149074 0 0 0 0 5 382 8 1 1 6 10 255382 1 1 0 6 202 9 1 2 2 7 10 484782 1 1 1 7 98 10 0 0 8 10 967156 1 1 2 8 51 11 0 1 1.05 277194 1 1 3 3 12 0 2 2 0 1.4 1.99 241817 0 0 0 0 2.02 13 1 0 1 1, 0 255608 0 0 1 1 1 1.89 14 1 1 2 1,0 986306 1 1 0 0 2 2.04 14 1 2 3 1,0 332832 0 0 0 3 2.02 16 1 3 3 4 1,0 980651 0 0 1 1 4 2.07 17 0 0 5 1,0 568495 1 1 0 5 1.89 18 0 1 6 1,0 399534 1 1 1 6 2.06 19 0 2 7 1,0 694732 1 1 2 2 7 1.92 Column G shows an absurd distribution with an average of 0.5. Column A - name of experiment; B1 = AVERAGE (C1: C50504) - average value of sequence; Columns C ... F - study of quantity in a row; Column J - random for permutation; Column K - sequence after permutation; M1 = AVERAGE (N1: N50504) - average value of sequence; Columns N ... R - a study of quantity in a row . Before reshuffling 500 cells: unsatisfactory After rearranging 500 cells: normal Conclusion: a clear fake of species was revealed : an equal number of identical ones in a row . program "False Chance 2" sequence increases number of identical ones in a row, especially considering verification algorithm. ' da false22.bas qbasic OPEN " da2 2.txt" FOR OUTPUT AS # 1 FOR k = 1 TO 100: FOR s = 1 TO 7 FOR d = 1 TO 2 ^ (7-s) FOR i = 1 TO s: PRINT # 1, 1: NEXT FOR i = 1 TO s: PRINT # 1, 0: NEXT NEXT : NEXT : NEXT : CLOSE A B C D E F G H I J K L M N O P Q R 1 FALSE 0, 5 1 0 25926 314776 1 0, 5 1 25275 2 0 0 0 0 13060 550753 1 0, 5 1 1 1 0 12706 3 22 1 0 0 1 6528 224941 0 0 0 0 1 6377 4 0 0 0 2 3264 411343 1 1 0 2 3122 5 NEUD 1 0 0 3 1634 332385 1 CHORUS 1 1 1 3 1532 6 0 0 0 4 824 551963 0 0 0 4 800 7 1 0 0 5 412 360461 0 0 1 1 5 387 8 0 0 0 6 204 938208 1 1 0 0 6 194 9 1 0 0 7 0 508846 0 0 0 0 7 102 10 0 0 0 8 0 524570 1 1 0 0 8 55 11 1 0 0 2.00 246947 0 0 0 12 0 0 0 0 2.00 1.98 458506 0 0 1 0 1.99 13 1 0 0 1 2.00 104623 0 0 2 1 2.04 14 0 0 0 2 2.00 993835 0 0 3 3 2 2.04 14 1 0 0 3 1.98 33687 1 1 0 3 1.92 16 0 0 0 4 2.00 764405 1 1 1 1 4 2.07 17 1 0 0 5 2.02 400801 0 0 0 0 5 1.99 18 0 0 0 6 # / 0! 562167 1 1 0 6 1.90 19 1 0 0 7 # / 0! 471789 1 1 1 7 1.85 Before reshuffling 500 cells: unsatisfactory After rearranging 500 cells: normal Conclusion: a smart fake is revealed, because it is not programmed all possible options and skew due to synthesis algorithm . A fake shuffled sequence turns into a random sequence. Conclusion: realistically identify fake sequences . Software emulation I t op PRNG MicroSoft program calculates pseudo-random sequences without using RND function. 'rnd ms .bas qbasic OPEN "rndxxx.txt" FOR OUTPUT AS # 1 FOR i = 1 TO 55555: r = Rand IF r <0.5 THEN PRINT # 1, 0 ELSE PRINT # 1, 1 'IF r <= 0.5 THEN PRINT # 1, 0 ELSE PRINT # 1, 1 'IF r <= 0.7 THEN PRINT # 1, 0 ELSE PRINT # 1, 1 NEXT: CLOSE FUNCTION Rand: STATIC Seed x1 = (Seed * 214013 + 2531011) MOD 2 ^ 24 Seed = x1: Rand = x1 / 2 ^ 24 END FUNCTION Simplified C # implementation for insertion into online compiler https://rextester.com/WXH62544 // rnd ms.cs using System; using System.Linq; using System.Collections.Generic; using System.Text.RegularExpressions; namespace rndxx {public class Program {public static void Main (string [] args) {Random rand = new Random (); for (int i = 1; i <5555; i ++) {var d = rand.Next (2); if (d <0.5) Console.WriteLine ("0"); else Console.WriteLine ("1"); }}}} Result: an accident of low power, supposedly understood by people as an accident supposedly normal. General conclusions: true randomness is unnatural for people and it is possible to synthesize low-power or false sequences that are accepted by people and computers as random sequences . Any sequence actually synthesized in programming languages and in tables ah Excel compatible. challenge to overcome, I randomness solved recog and eat chance of normal or false in Excel spreadsheet with charts . Which was required to prove.