Про серію
По-перше, ви можете ставитися до цього, як і до будь-якого іншого виклику коду для гольфу, і відповідати на нього, не турбуючись про серію взагалі. Однак існує лідери у всіх викликах. Ви можете знайти таблицю лідерів разом з додатковою інформацією про серії в першій публікації .
Хоча у мене є маса ідей, що вибудовуються для цієї серії, майбутні виклики ще не поставлені в камені. Якщо у вас є якісь пропозиції, будь ласка, повідомте мене про це у відповідній поштовій скриньці .
Отвір 2: Числа від нормального розподілу
Я не можу повірити, що цього ще не було зроблено! Ви повинні генерувати випадкові числа, виходячи із звичайного розподілу . Деякі правила (більшість із них, ймовірно, автоматично охоплюються більшістю подань, але деякі з них існують для забезпечення узгодженості результатів між різними мовами):
Ви повинні взяти два невід’ємні цілі числа як вхідні дані : насіння
S
та кількістьN
чисел, які потрібно повернути. На виході повинен бути списокN
чисел з плаваючою комою, виведений із звичайного розподілу із середнім значенням 0 та дисперсією 1 . Щоразу, коли ваші подання даються однаковим насінням,S
він повинен давати однакову кількість. Зокрема, якщо він викликається один раз з і один раз з , перші записи двох виходів повинні бути однаковими. Крім того, щонайменше 2 16 різних значень повинні виробляти різні послідовності.(S, N1)
(S, N2)
min(N1, N2)
S
Ви можете використовувати будь-який вбудований генератор випадкових чисел, який задокументований для отримання чисел із (приблизно) рівномірного розподілу, за умови, що ви можете передати
S
його та підтримує щонайменше 2 16 різних насінин. Якщо це зробити, RNG повинен мати можливість повернути щонайменше 2 20 різних значень для будь-якого заданого вами номера.- Якщо наявний рівномірний СПГ має менший діапазон, не піддається посіву, або підтримує занадто мало насіння, ви повинні спочатку створити рівномірний СПГ з достатньо великим діапазоном поверх вбудованого або потрібно реалізувати свій власний відповідний RNG за допомогою насіння. Ця сторінка може бути корисною для цього.
- Якщо ви не реалізуєте встановлений алгоритм для генерації нормальних розподілів, будь ласка, додайте доказ коректності. У будь-якому випадку алгоритм, який ви вибрали, повинен дати теоретично точний нормальний розподіл (обмеження обмеження базових типів PRNG або обмежене точність даних).
- Ваша реалізація повинна використовувати або повертати числа з плаваючою комою (принаймні 32 біта в ширину) або номери з фіксованою точкою (принаймні 24 біт шириною), і всі арифметичні операції повинні використовувати повну ширину обраного типу.
- Ви не повинні використовувати будь-які вбудовані функції, безпосередньо пов'язані з нормальним розподілом або гауссовими інтегралами, як-от функція Error або її зворотна.
Ви можете написати повну програму або функцію та взяти введення через STDIN, аргумент командного рядка, аргумент функції або підказку та отримати висновок через повернене значення або надрукувавши STDOUT (або найближчу альтернативу).
S
і N
будуть невід’ємними цілими числами, кожне менше 2 20 . Вихід може бути у будь-якому зручному, однозначному списку чи рядковому форматі.
Це код гольфу, тому виграє найкоротше подання (у байтах). І звичайно, найкоротше подання на кожного користувача також увійде в загальну таблицю лідерів серії.
Таблиця лідерів
Перший пост серії генерує таблицю лідерів.
Щоб відповіді відображалися, почніть кожну відповідь із заголовка, використовуючи такий шаблон Markdown:
# Language Name, N bytes
де N
розмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Мова наразі не відображається, але фрагмент вимагає і проаналізувати його, і я можу в майбутньому додати таблицю лідерів за мовою.)