Введення-виведення:
Введення : Рівномірний випадковий, нескінченно довгий рядок '0 і' 1, узятий із stdin. Рядок вважається справді випадковим, а не псевдовипадковим. Він рівномірний тим, що кожен символ з однаковою ймовірністю буде "0" або "1".
Обережно! Вхід нескінченно довгий, тому ви не можете зберігати все це в пам'яті, використовуючи функцію raw_input () в python. Якщо я не помиляюся, golfscript вийде з ладу з нескінченним введенням, оскільки він натискає весь вклад на стек перед запуском.
Вихід : рівномірно випадкова перетасована стандартна колода, без жартів. Єдина, що всі замовлення однаково ймовірні.
Кожна карта на виході - це ранг, A, 2-9, T, J, Q або K, поєднаний з її костюмом, c, d, h або s. Наприклад, 10 пік єTs
Карти колоди повинні бути розділені пробілами.
Ви не можете використовувати вбудовані випадкові бібліотеки чи функції, оскільки вони не є справді випадковими, лише псевдовипадковими.
Приклад введення
Ви можете використовувати наступний скрипт python для передачі даних у програму:
import sys, random
try:
while True:
sys.stdout.write(str(random.randint(0,1)))
except IOError:
pass
Якщо ви збережете скрипт як rand.py, протестуйте програму python rand.py | your_program
У python 3 він працює як очікувалося, але в python 2.7 я отримую повідомлення про помилку після виходу програми, але лише після того, як все зроблено, тому просто ігноруйте повідомлення про помилку.
Приклад виводу:
Ось як слід надрукувати колоду, якщо вона сталася перетасованою в упорядкованому порядку:
Ac 2c 3c 4c 5c 6c 7c 8c 9c Tc Jc Qc Kc Ad 2d 3d 4d 5d 6d 7d 8d 9d Td Jd Qd Kd Ah 2h 3h 4h 5h 6h 7h 8h 9h Th Jh Qh Kh As 2s 3s 4s 5s 6s 7s 8s 9s Ts Js Qs Ks
Оцінка:
Це кодовий гольф. Найкоротший код виграє.
Приклад програми:
Ось рішення python 2.7, не гольф.
import sys
def next():
return int(sys.stdin.read(1))==1
def roll(n):
if n==1:
return 0
if n%2==0:
r=roll(n/2)
if next():
r+=n/2
return r
else:
r=n
while(r==n):
r=roll(n+1)
return r
deck = [rank+suit for suit in 'cdhs' for rank in 'A23456789TJQK']
while len(deck)>0:
print deck.pop(roll(len(deck))),