Máy đánh bạc


17

Vấn đề: Hacker máy quay số từ Facebook Hacker Cup 2011 Vòng 1B

Mục tiêu: Mã ngắn nhất trong ngôn ngữ yêu thích của bạn bằng cách sử dụng stdin / stdout. Bạn không thể cho rằng đã getRandomNumberđược xác định, tức là giải pháp của bạn phải bao gồm một phiên bản có khả năng chơi gôn như một chức năng hoặc theo một cách khác.

Giải pháp tham khảo: trên SO [Tôi đã chọn của tôi, vì nó sử dụng stdin / stdout và tôi không chắc về giải pháp của dave.]

Vấn đề văn bản sau:

Gần đây bạn kết bạn với một anh chàng viết phần mềm cho máy đánh bạc. Sau khi đi chơi với anh ấy một chút, bạn nhận thấy rằng anh ấy có xu hướng thể hiện kiến ​​thức của mình về cách các máy đánh bạc hoạt động. Cuối cùng, bạn được anh ấy mô tả cho bạn một cách chi tiết chính xác thuật toán được sử dụng trên một thương hiệu máy cụ thể. Thuật toán như sau:

int getRandomNumber() {
  secret = (secret * 5402147 + 54321) % 10000001;
  return secret % 1000;
}

Hàm này trả về một số nguyên trong [0, 999]; mỗi chữ số đại diện cho một trong mười biểu tượng xuất hiện trên một bánh xe trong trạng thái máy cụ thể. bí mật ban đầu được đặt thành một số giá trị không âm cho bạn.

Bằng cách quan sát hoạt động của một chiếc máy đủ lâu, bạn có thể xác định giá trị của bí mật và do đó dự đoán kết quả trong tương lai. Biết kết quả trong tương lai, bạn sẽ có thể đặt cược một cách thông minh và giành được nhiều tiền.

Đầu vào

Dòng đầu tiên chứa số dương T , số trường hợp kiểm tra. Điều này được theo sau bởi các trường hợp thử nghiệm T. Mỗi trường hợp kiểm tra bao gồm một số nguyên dương N , số lượng quan sát bạn thực hiện. Mã thông báo N tiếp theo là các số nguyên từ 0 đến 999 mô tả các quan sát của bạn.

Đầu ra

Đối với mỗi trường hợp thử nghiệm, xuất 10 giá trị tiếp theo sẽ được hiển thị bởi máy được phân tách bằng khoảng trắng. Nếu trình tự bạn quan sát không thể được tạo ra bởi máy mà bạn bè của bạn mô tả cho bạn, "Wrong machine"thay vào đó hãy in . Nếu bạn không thể xác định duy nhất 10 giá trị tiếp theo, hãy in "Not enough observations"thay thế.

Những ràng buộc

  • T = 20
  • 1 ≤ N 100
  • Mã thông báo trong đầu vào dài không quá 3 ký tự và chỉ chứa các chữ số 0-9.

Ví dụ đầu vào

5
1 968 
3 767 308 284 
5 78 880 53 698 235 
7 23 786 292 615 259 635 540 
9 862 452 303 558 767 105 911 846 462 

Ví dụ đầu ra

Not enough observations
577 428 402 291 252 544 735 545 771 34
762 18 98 703 456 676 621 291 488 332
38 802 434 531 725 594 86 921 607 35
Wrong machine

Câu trả lời:


3

Python, 293 ký tự

import sys
n=1e7+1
for s in[map(int,x.split())for x in sys.stdin][1:]:
 Q=[]
 for i in range(s[1],n,1e3):A=[i];R=[A.append((A[-1]*5402147+54321)%n)or A[-1]%1e3for x in[0]*8+s];Q+=[R[-10:]]*(R[:-10]==s[2:])
 print Q and["%d "*10%tuple(Q[0]),"Not enough observations"][len(Q)>1]or"Wrong Machine"

2

Con trăn, 316 ký tự

C=10**7+1
G=lambda:(s*5402147+54321)%C
import sys
I=map(int,sys.stdin.read().split())[1:]
while I:
 n=I[0]+1;S=range(C)
 for x in I[1:n]:S=[G()for s in S if s%1000==x]
 if len(S)-1:V="Not enough observations"if S else"Wrong machine"
 else:
  s=S[0];V=""
  for i in range(10):V+="%d "%(s%1000);s=G()
 print V;I=I[n:]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.