Problem: Automat do gier na automatach z Facebooka Hacker Cup 2011 Runda 1B
Cel: najkrótszy kod w twoim ulubionym języku za pomocą stdin / stdout. Nie możesz zakładać, że getRandomNumber
jest zdefiniowane, tzn. Twoje rozwiązanie musi zawierać wersję potencjalnie golfową jako funkcję lub w inny sposób.
Rozwiązanie referencyjne: na SO [wybrałem mój, ponieważ używa stdin / stdout i nie jestem pewien co do rozwiązania Dave'a]
Tekst problemu jest następujący:
Niedawno zaprzyjaźniłeś się z facetem, który pisze oprogramowanie do automatów. Po spędzeniu z nim trochę czasu zauważasz, że ma skłonność do popisywania się swoją wiedzą na temat działania automatów. Ostatecznie każesz mu szczegółowo opisać algorytm zastosowany na konkretnej maszynie. Algorytm wygląda następująco:
int getRandomNumber() {
secret = (secret * 5402147 + 54321) % 10000001;
return secret % 1000;
}
Ta funkcja zwraca liczbę całkowitą w [0, 999]; każda cyfra reprezentuje jeden z dziesięciu symboli, które pojawiają się na kole podczas określonego stanu maszyny. sekret jest początkowo ustawiony na nieznaną ci wartość nieujemną.
Obserwując działanie maszyny wystarczająco długo, możesz określić wartość tajemnicy, a tym samym przewidzieć przyszłe wyniki. Znając przyszłe wyniki, będziesz mógł postawić w inteligentny sposób i wygrać dużo pieniędzy.
Wejście
Pierwszy wiersz danych wejściowych zawiera liczbę dodatnią T , liczbę przypadków testowych. Następnie następuje test przypadków T. Każdy przypadek testowy składa się z dodatniej liczby całkowitej N , liczby dokonanych obserwacji. Następne N tokenów to liczby całkowite od 0 do 999 opisujące twoje obserwacje.
Wynik
Dla każdego przypadku testowego wypisz kolejne 10 wartości, które byłyby wyświetlane przez maszynę oddzielone białymi spacjami. Jeśli sekwencja, którą obserwujesz, nie może zostać wygenerowana przez urządzenie, które opisał ci twój przyjaciel, "Wrong machine"
zamiast tego wydrukuj . Jeśli nie możesz jednoznacznie określić następnych 10 wartości, wydrukuj "Not enough observations"
zamiast tego.
Ograniczenia
- T = 20
- 1 ≤ N ≤ 100
- Tokeny na wejściu mają nie więcej niż 3 znaki i zawierają tylko cyfry 0–9.
Przykładowe dane wejściowe
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
Przykładowe dane wyjściowe
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