Фон
У мене є колекція «шкарпеток у будній день», які представляють сім пар шкарпеток, позначених по днях тижня. Коли я праю шкарпетки, вони закінчуються в купі, і я повинен розставити їх у потрібні пари, перш ніж покласти їх у шафу. Моя стратегія - одночасно витягнути один випадковий шкарпетку з палі і покласти її на ящик. Всякий раз, коли на ящику є відповідна пара шкарпеток, я зав'язую їх і складаю в шафу. Ваше завдання - імітувати цей випадковий процес і повернути кількість малюнків, необхідних для пошуку першої пари, що відповідає.
Вхідні дані
Ваш вхід - ціле число N ≥ 1 . Він являє собою "кількість днів у тиждень": в купі є N пар пар шкарпеток, і кожна пара має чітку мітку. Якщо потрібно, ви також можете взяти насіння PRNG як вихідний матеріал.
Вихідні дані
Ваш вихід - це кількість шкарпеток, які я повинен намалювати до того, як буде знайдена перша відповідна пара. Наприклад, якщо перші два шкарпетки вже утворюють відповідну пару, вихід є 2
.
Звичайно, вихід є випадковим і залежить від порядку нанесення. Ми припускаємо, що всі замовлення на малювання однаково вірогідні , тому кожен раз, коли малюється шкарпетка, вибір є рівномірним та незалежним від усіх інших варіантів.
Приклад
Нехай N = 3 , щоб у нас було 6 шкарпеток із позначкою AABBCC . Можливий запуск "протоколу малювання носка" такий:
| Pile | Drawer | Pairs
Begin | AABBCC | - | -
Draw B | AABCC | B | -
Draw C | AABC | BC | -
Draw B | AAC | C | BB
Draw A | AC | AC | BB
Draw A | C | C | AA BB
Draw C | - | - | AA BB CC
Перша пара, що відповідає, була знайдена після того, як було намальовано другий B , який був третім носком, який потрібно намалювати, тому правильний вихід є 3
.
Правила та оцінка
Ви можете написати повну програму або функцію. Виграє найменший байт, а стандартні лазівки заборонені. Введення та вихід можуть бути у будь-якому розумному форматі, включаючи одинарний (рядок 1
s).
Ви можете припустити, що вбудований RNG у вашій мові ідеальний. Вам не потрібно насправді моделювати протокол малювання носка, якщо ваші виходи мають правильний розподіл ймовірностей.
"Тестові справи"
Ось приблизні ймовірності всіх виходів на вхід N = 7 :
Output 2 3 4 5 6 7 8
Probability 0.077 0.154 0.210 0.224 0.186 0.112 0.037
Щоб перевірити своє рішення, ви можете запустити його, скажімо, в 40 000 разів і побачити, чи розподіл вихідних даних досить близький до цього.
Draw all socks. End up with an odd number.