Gratulacje! Właśnie zostałeś zatrudniony przez NASA do pracy nad nowym projektem Horizons 2.
Niestety ostatnio miały miejsce ogromne cięcia budżetowe, więc najwyższe kierownictwo postanowiło sfałszować cały planowany przelot Plutona (podobnie jak w przypadku lądowań na Księżycu w latach 70.).
Twoim zadaniem jest napisanie programu, który zaakceptuje jako datę datę w formacie yyyymmdd
i dostarczy fałszywe zdjęcie Plutona na tę datę. Możesz założyć, że wprowadzona data będzie w roku 2015 lub 2016.
Zdjęcie to siatka 15 x 15 znaków ASCII. Znaki na siatce mają współrzędne x i y w zakresie [-7, 7]
- lewy górny znak znajduje się na, (-7, -7)
a prawy dolny znak na (7, 7)
.
Zdjęcie zostanie obliczone według następujących zasad:
- Sonda będzie najbliżej Plutona 25.12.2015
- Odległość
d
do Plutona jest określona przez ten wzór:square root of ((difference in days to christmas) ^ 2 + 10)
- Promień
r
obrazu Plutona na zdjęciu jest określony przez:22 / d
- Znak ze współrzędnymi
(x, y)
na siatce należy ustawić na#
ifx^2 + y^2 <= r^2
; w przeciwnym razie należy ustawić spację. - Są gwiazdy w pozycji
(-3, -5)
,(6, 2)
,(-5, 6)
,(2, 1)
,(7, -2)
. Gwiazdy są reprezentowane przez kropkę.
i oczywiście są ukryte przez Plutona.
Jeszcze jedno: Rada NASA doszła do wniosku, że odkrycie życia na Plutonie prawdopodobnie spowoduje znaczny wzrost budżetu. Twój program powinien następnie dodać wskazówki życia na Plutonie:
- Gdy odległość do Plutona wynosi <= 4, dodaj pluton o współrzędnych
(-3,-1)
:(^_^)
Przykładowe zdjęcie do wprowadzenia 20151215
: (Twój kod powinien zawierać wszystkie znaki nowej linii, tak jak ten kod)
.
# .
###
#####
###.
# .
.
Zdjęcie do wprowadzenia 20151225
:
#######
#########
###########
#############
#############.
###(^_^)#####
#############
#############
#############
#############
###########
#########
. #######
Dla porównania, oto zdjęcie satelity Pluto Hydra zrobione przez New Horizons. Różnice są prawie niezauważalne w naszej sztuce ASCII.
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach!
`
s na rzecz<pre><code>
; możesz się wycofać, jeśli ci się nie podoba.You can assume the entered date will be in the year 2015 or 2016.
Ale dlaczego w ogóle określać rok?Odpowiedzi:
JavaScript (ES6), 237 bajtów
Demo na żywo . Uruchom w przeglądarce Firefox.
Orginalna wersja
Gra w golfa
To była fajna gra w golfa.
Nie muszę tworzyć obiektu Date, więc zapisałem wartość w milisekundach, aby zapisać 13 bajtów:
Zamień tablicę asocjacyjną na ciąg ograniczników, aby wyeliminować 9 bajtów:
Największym refaktorem było zastąpienie pętli for zagnieżdżonymi, rekurencyjnymi IIFE, aby zrzucić 10 bajtów:
Pozbyłem się także
Math.sqrt
8 kolejnych bajtów.Zagadnienia
Mogłem tylko uzyskać prawidłowe zdjęcie dla przypadków testowych, zmieniając najbliższą datę na 2015/12/24 i nie wiem, czy problem leży w moim kodzie, czy w pytaniu. Proszę wyjaśnić, a ja zaktualizuję swoją odpowiedź.Oto mój wynik, używając różnic od 2015/12/25.Edycja: Zaktualizowano odpowiedź, aby użyć świąt Bożego Narodzenia jako najbliższej daty.
Zdjęcie dla „20151215”:
Zdjęcie dla „20151225”:
źródło
C # 4.0, 393 bajty
Przykład:
Wydajność:
źródło
CJam, 165 bajtów
Pierwsza część oblicza różnicę dnia i zapisuje ją w
D
zmiennej. Reszta to podwójna pętla, która iteruje przezX
iY
.Sprawdź to tutaj
źródło