tło
Osoba zainteresowana to dramat kryminalny w CBS i mój ulubiony program telewizyjny.
Spektakl opowiada o człowieku o nazwisku Harold Finch, programista miliarder i jego partner John Reese, weteran sił specjalnych i były agent CIA. Ten programista stworzył czującą sztuczną inteligencję zwaną „Maszyną”, która przewiduje brutalne zbrodnie, zanim się one zdarzą. Przez cały czas śledzi każdą osobę na Ziemi, monitorując i analizując wszystkie kamery monitorujące i komunikację elektroniczną na całym świecie.
Harold zbudował Maszynę dla rządu Stanów Zjednoczonych w celu wykrycia działalności terrorystycznej przed faktem. Podział przestępstw, które przewiduje, dzieli na listy w oparciu o to, czy mają one znaczenie dla bezpieczeństwa narodowego. Odpowiednie sprawy są rozpatrywane przez rząd, podczas gdy „nieistotna” lista jest zaprogramowana do codziennego usuwania.
Harold zrobił dla siebie mały backdoor w nadziei, że sam sobie poradzi z „nieistotną” listą. To tylne wejście powoduje, że Maszyna dzwoni do automatu telefonicznego najbliższego Harolda (raz dziennie) i odczytuje mu numer ubezpieczenia społecznego. Ten SSN należy do osoby, której życie jest zagrożone w ramach przestępstwa z premedytacją lub osoby, która planuje takie przestępstwo.
Wyzwanie
Napisz program, który nie przyjmuje danych wejściowych i generuje 30 losowych numerów telefonów i numerów SSN (patrz poniżej).
Wydajność
Istnieją dwa wiersze tekstu, które będą drukowane każdego „dnia”.
Crime predicted: 555-55-5555
Calling: 1-555-555-5555
po którym następuje nowa linia
Proces ten należy powtarzać przez jeden „miesiąc” (30 „dni”).
Numery telefoniczne
Każdy numer telefonu musi zawierać następujące elementy:
Musi mieć kod kraju Stanów Zjednoczonych (pierwsza cyfra).
Musi mieć losowy numer kierunkowy (pierwszy zestaw trzech cyfr).
Pierwsze trzy cyfry samego numeru telefonu powinny być
555
, a następnie 4 losowe cyfry.
Oto przykład z adnotacjami:
1-814-555-3857
| | | |
| | | |
| | | +----------> random four digits
| | |
| | +--------------> the set 555
| |
| +------------------> area code
|
+---------------------> country code
Numery ubezpieczenia społecznego
Każdy SSN musi składać się z 9 losowych cyfr w następującym formacie.
342-98-1613
Przykład
Crime predicted: 234-72-8311
Calling: 1-633-555-0188
Crime predicted: 135-77-0910
Calling: 1-202-555-4719
Crime predicted: 722-90-6653
Calling: 1-466-555-1069
...
Kontynuacja przez kolejne 27 cykli.
Tablica wyników
Twój wynik powinien pojawić się na tablicy, powinien mieć następujący format:
# Language, Bytes
Przekreślenia nie powinny powodować problemów.
1
. Jeśli chodzi o numery kierunkowe, na potrzeby tego wyzwania wystarczą trzy cyfry. @minxomatOdpowiedzi:
CJam,
686664 bajtówDzięki Dennis za oszczędność 2 bajtów!
Kopiowanie nie działa, ponieważ istnieje kilka niedrukowalnych elementów (po jednym w każdej losowej grupie), więc oto
xxd
zrzut:Aby odwrócić, wklej go do pliku i uruchom
xxd -r in_file > out_file
. Możesz także spróbować online .Wyjaśnienie
źródło
Python 2, 129
Naiwna metoda. Bierze wiadomość
i kopiuje to 30 razy. Następnie zastępuje każdą
x
losową cyfrąrandint(0,9)
, zachowując wszystkie pozostałe znaki bez zmian.źródło
Python 2, 151 bajtów
Podziękuj lordowi (i @Dennisowi) za
%0nd
: Dźródło
Perl, 85 bajtów, dzięki Dennis i grc!
Oryginalny Perl,
9192 bajtówźródło
$_="..."x30;s/_/0|rand 10/eg;print
który ratuje/r
flagę.0|rand ...
triku i operatorze powtarzania, którego teraz używam, by wielokrotnie uderzać mnie w głowę za to, że tego przegapiłem!CJam,
737170 bajtówWypróbuj online w interpretatorze CJam .
Jak to działa
źródło
ß,
121118112 bajtówZasadniczo zastępuje 0 losową liczbą i wywołuje się 30 razy.
Przetestuj za pomocą terminala online :
Edycja (112B): Używanie
$$
(coś jak sprintf) i operatora trójskładnikowego.źródło
Pyth, 66
Używa
X
tłumaczenia ostatnich 5 liter alfabetu (>5G == 'vwxyz'
) na 5 liczb losowych. Używa tego samego RNG, co Sok.Wypróbuj online tutaj
źródło
Pyth, 62
Implementacja fantastycznej odpowiedzi Andrei na CJam.
Zauważ, że w źródle znajduje się kilka niedrukowalnych znaków i nie powinno być końca
"
. Zostało to dodane do SE, więc wydaje się bardziej czytelne. Nie udało mi się jeszcze uzyskać zrzutu heksadecymalnego, ale poniższy link działa i powinieneś być w stanie go skopiować i wkleić.Wypróbuj online tutaj
źródło
CJam, 74 bajty
Nie jest zwycięzcą, ale jest co najmniej nieco zbliżony do tego, co dotychczas Dennis, i stosuje inne podejście. Pomyślałem więc, że i tak warto to opublikować.
Używa to
e%
operatora CJam , który generuje dane wyjściowe za pomocą łańcucha formatu stylu printf.źródło
Matlab / Octave, 108
172bajtówWypróbuj online
źródło
JavaScript (ES6), 142
Dodatkowa uwaga odpowiedź mixmat w ß pokazuje tak lepszy sposób na wykonanie tego zadania i może być łatwo zaimplementowana w JS, dając lepszy wynik. Chciałbym o tym pomyśleć.
Edytuj Dodano brakujący tekst (źle odczytałem wyzwanie)
Przetestuj poniższy fragment kodu w przeglądarce zgodnej z EcmaScript 6
źródło
Fourier,
166142 bajtówJest to jeden z najwyższych bajtów, ale jestem wielkim fanem Fouriera i chciałem spróbować swoich sił w rozwiązaniu problemu. Niezbyt zoptymalizowany.
Podział:
Ustawia zmienną d na 45, kod ASCII dla łącznika. Ten znak jest drukowany tak bardzo, że oszczędza kilka bajtów, aby go tutaj zadeklarować.
Ustawia akumulator na zero i zapętla się w nawiasach, aż osiągnie 30.
Drukuj „Przewidywane przestępstwa:”.
Wydrukuj całkowicie losowy numer SSN + nowa linia.
Wydrukuj „Dzwonienie:”.
Wydrukuj numer telefonu zgodnie z wytycznymi: 1-xxx-555-xxxx
Wydrukuj dwa nowe wiersze, aby zacząć od nowa.
źródło
Pyth, 67 bajtów
Nowe wiersze są ważne i są uwzględnione w liczbie bajtów. Wypróbuj tutaj .
źródło
Haskell, 150 bajtów
źródło
JavaScript (ES6),
130123 bajtówIdąc krok dalej w rozwiązaniu ß minxomata, zastąpiłem
0
s liczbą0
s, która byłaby tam. Kod używa tych liczb do pobrania poprawnej liczby cyfrMath.random()
, co pozwala zaoszczędzić sporo bajtów.Wypróbuj to:
Jak zawsze sugestie mile widziane!
źródło
Java, 246 bajtów
Z podziałami linii:
To poczatek. Zamiast tworzyć losowe cyfry, użyłem losowych liczb 3-cyfrowych lub 4-cyfrowych.
źródło
R,
151146 lub 144 bajtówKod
Przetestuj online .
Nie golfił
Myślę, że jest dużo miejsca do poprawy, ale nie mam problemów z napisami w R.
Edit 1: zmienił
runif(16,max=10)
sięrunif(16,,10)
.Zrobiłem inny kod (
147144 bajtów),sprintf
ale nie sądzę, że jest to kod podobny do R.Inne podejście (149 bajtów):
źródło
PHP ,
144143 bajtówźródło
GolfScript, 91 bajtów
Wypróbuj online.
źródło
C #,
280263246 bajtówGra w golfa:
Zębaty:
Nowości w Codegolf, wskazówki są mile widziane!
źródło
h(999)
wygeneruje liczbę od000
do998
włącznie, więc oznacza to, że nie jest to zgodne z duchem specyfikacji. Natrafiłem na ten sam problem .Sód , 230 bajtów
Rozszerzony:
źródło
Ruby, 98 znaków
Przykładowy przebieg:
źródło
JavaScript,
146141źródło
JavaScript wcześniejszy niż ES6, 128
Wydaje mi się, że kreski można jakoś usunąć, ale nie jestem pewien.
źródło
Pyth, 73 bajty
Próbny
źródło
Julia, 120 bajtów
Nie golfowany:
źródło
Rubinowy,
9088 bajtówWypróbuj online.
źródło
?N
. Nie ma potrzeby stosowania nawiasów wokółrand
parametru.PowerShell,
120108103102 bajtówSkrócono kilka dodatkowych bajtów, ustawiając pętlę podziału na blok kodu, który wysyła dane do tablicy@(..)
i jest ponownie łączony.Wyeliminowano
@
poprzez zapamiętywanie, które(...)
wyznacza blok kodu wykonany przedtem-join''
.Eliminuje to konieczność przypisywania
$a
zmiennej. Zauważyłem również, że ze względu na działanie tej-split
funkcji poprzedni kod wyrzucał zbyt wiele cyfr dla numeru telefonu, więc uzyskałem tam darmowy zapis bajtów, zmniejszając się do1-XXX-555-XXX
. To zrekompensowało błąd,Random 9
który faktycznie wybiera losowe0-8
, więc zamiast tego musimy sprecyzowaćRandom 10.
Sooo dang blisko dwucyfrowych, ale nie jestem pewien, gdzie można grać w golfa na kolejne
cztery3 bajty ...Poprzedni, 108
Skróciliśmy kod o kilka bajtów, zamiast tego dzieląc ciąg znaków na
X
, a następnie ponownie zapętlając wynikową tablicę ciągów i łącząc każdy wpisRandom
cyfrą, aby zbudować nasz końcowy ciąg wyjściowy$a
. Pamiętaj, że nie moglibyśmy zrobić czegoś takiego,"string".replace("x",$(Random 9))
ponieważ wtedyRandom
zadzwonilibyśmy tylko raz, więc miałbyś1-222-555-2222
na przykład numer telefonu.Poprzednio, 120
Dang konkurencyjna dla pełnego języka, dzięki hojnym specyfikacjom wyjściowym (tj.
000-00-0001
Jest traktowany jako prawidłowy SSN) i naprawdę solidny.ToString()
algorytm formatowania, którego używa PowerShell. PowerShell generuje również\r\n
po każdym wyjściu łańcucha, więc wymóg wprowadzenia nowej linii pomiędzy iteracjami jest po prostu prosty""
.Zauważ, że używa to domniemania
Get-
przedRandom
, więc może to być naprawdę powolne na niektórych platformach / implementacjach.źródło
Befunge-98, 170
Myślę, że można to jeszcze trochę pograć w golfa. Ale przynajmniej pokonałem C #. Testowany na befungius.aurlien.net .
źródło
Python 2,
151150 bajtówTak dobrze jak grałem w golfa.
źródło