W xkcd 1047 Randall Munroe podaje „nieco błędne” przybliżenia różnych wielkości i liczb z różną precyzją i złożonością, na przykład liczba litrów w galonie jest bardzo bliska 3 + π ⁄ 4 . W środku komiksu przerywa: sposób oszacowania populacji świata (i Stanów Zjednoczonych) na podstawie danego roku.
(Wykadrowane z xkcd: Approximations autorstwa Randall Munroe)
Twoim zadaniem jest napisanie programu, który implementuje te formuły w celu przybliżenia obecnego świata i populacji USA, powielonego w następujący sposób.
Populacja świata
- Weź dwie ostatnie cyfry bieżącego roku.
- Odejmij liczbę lat przestępnych (w tym rok bieżący) od huraganu Katrina (2005). Do tych celów każdy rok podzielny przez 4 jest uważany za rok przestępny.
- Dodaj kropkę dziesiętną między dwiema liczbami (to samo, co dzielenie przez 10).
- Dodaj 6. Daje to wynik w miliardach ludzi.
Populacja USA
- Weź dwie ostatnie cyfry bieżącego roku.
- Odejmij 10.
- Pomnóż przez 3.
- Dodaj 10.
- Dodaj 3 na początek (w tym wyzwaniu niektóre liczby będą ujemne, więc zamiast tego dodaj 300). Jakoś nie zauważyłem, że po prostu konkatenacja nie zadziała, ponieważ program, którego użyłem do wygenerowania wyników, dodał 300.
- To daje wynik w milionach ludzi.
Detale
Ta formuła „powinna być aktualna przez dekadę lub dwie”, ale musisz być w stanie teoretycznie poradzić sobie z każdym rokiem 2000–2039 włącznie. W niektórych przypadkach lata przestępne od Katriny będą miały wartość ujemną lub zerową.
Możesz dowolnie upraszczać formułę, o ile wszystkie wyniki są zgodne z poniższymi.
Dla roku użyj roku zgodnie z zegarem komputera. Musi działać w przyszłym roku i w każdym innym w tym stuleciu, więc nie można po prostu ustawić na stałe kodu 2015. Dla wygody możesz chcieć podać sposób określania roku jako zmiennej lub danych wejściowych do testowania innych lat.
Wynikiem powinna być przybliżona populacja światowa (w miliardach ludzi), a następnie pewien separator (np. Spacja lub przecinek), a następnie populacja USA (w milionach ludzi). Możesz także napisać funkcję, która zwraca lub drukuje ciąg znaków lub tablicę liczb lub ciągów znaków.
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach. Tiebreaker jest najwcześniejszym postem.
Przypadki testowe
To jest lista wszystkich możliwych lat, po których następują dwa wyniki.
Year World U.S.
2000 6.1 280
2001 6.2 283
2002 6.3 286
2003 6.4 289
2004 6.4 292
2005 6.5 295
2006 6.6 298
2007 6.7 301
2008 6.7 304
2009 6.8 307
2010 6.9 310
2011 7 313
2012 7 316
2013 7.1 319
2014 7.2 322
2015 7.3 325
2016 7.3 328
2017 7.4 331
2018 7.5 334
2019 7.6 337
2020 7.6 340
2021 7.7 343
2022 7.8 346
2023 7.9 349
2024 7.9 352
2025 8 355
2026 8.1 358
2027 8.2 361
2028 8.2 364
2029 8.3 367
2030 8.4 370
2031 8.5 373
2032 8.5 376
2033 8.6 379
2034 8.7 382
2035 8.8 385
2036 8.8 388
2037 8.9 391
2038 9 394
2039 9.1 397
źródło
3
, nie powinieneś2040
dać populacji3100
?40 - 10 = 30
,30 * 3 = 90
,90 + 10 = 100
, Co daje"3" + "100" = 3100
280
jako wynik-20+300=280
i nie3 . -20= "3-20"
)Odpowiedzi:
Pyth,
2120 bajtów-1 bajt Dennisa
Te mają tę samą liczbę bajtów, ale są tylko ASCII:
Nie znam Pytha, więc
prawdopodobnieprawdopodobnie gra w golfa. Używając tego samego algorytmu:TI-BASIC, 23 bajty
getDate
zwraca listę trzech liczb zmiennoprzecinkowych{YYYY,MM,DD}
w określonej kolejności w zależności od ustawienia formatu daty (TI-84 nie mają prawdziwego typu danych int);max(
będzie rokiem. Mnożenie i odejmowanie wewnątrzmax(
zapisuje bliski paren.źródło
JavaScript (ES6),
555448 bajtówDziała w przeglądarce Firefox 33; teoretycznie obsługuje wszystkie lata od 2000 do 2099. Jeśli programy, które zrzucają wynik na konsolę, nie są dozwolone, użyj tej 51-bajtowej funkcji:
Pełny program, 55 bajtów:
Uzyskanie roku było dość drogie, ale po użyciu przestarzałejEDYCJA: Dzięki sztuczce eeevila pominąłemgetYear()
zamiastgetFullYear()
, wszystkie liczby w równaniu zmniejszyły się, oszczędzając wiele bajtów.new
igetYear()
całkowicie. >: DSugestie mile widziane!
źródło
Pyth, 30 bajtów
Mój pierwszy program w języku Pyth!
Dzięki @Jakube za wskazówki (nigdy bym o nich nie pomyślał!)
źródło
+*3Z280
zamiast+*Z3 280
na przykład).C\d
zamiast100
(oszczędza spacje). UżyjJ
zamiastZ
(zapisuje=
). Wstaw zadanie. LinkPython 2, 80 bajtów
Teraz rundy!
źródło
CJam, 28 bajtów
Wypróbuj online
Aby wypróbować lata inne niż obecny, zastąp
et0=
na początku literalną wartością roku.źródło
40%
aby zapisać jeden bajt.Python 3, 134 bajty
Działa dobrze, ale wydaje się nieco długi
źródło
from time import*
,y=strftime('%Y')
. Lub skopiuj drugą odpowiedź pytona: PAutoIt -
605856 bajtówZaokrąglenie zjada bajty(już nie). Teraz poprawiłem obie formuły. Niektóre przykładowe wyniki:Wszystkie wydają się dokładne.
Wskazówka: Kolejność wykonywania zapisuje bajty w nawiasach. Na przykład:
(a-4)/4 = a/4-1
:-).źródło
PowerShell,
5345 bajtówUżywa podobnej sztuczki zaokrąglania, jak odpowiedź Python 2 błotniaka, aby uprościć obliczanie populacji na świecie, ponieważ PowerShell domyślnie
Round()
s przy rzutowaniu z a[double]
na[int]
zamiast obcinania.W przypadku danych wyjściowych zakładamy, że „po którym następuje jakiś separator (np. Spacja lub przecinek)” może również oznaczać „nowy wiersz”, więc wykonujemy jeden wynik, a następnie drugi. PowerShell domyślnie zapisuje wyniki, więc nie musimy jawnie wywoływać żadnych poleceń drukowania.
źródło
Mathematica, 50 bajtów
Pamiętaj, że jest to zależne od posiadania silnika Wolfram z wersją 10+ (wydaną w 2014 r.) Z powodu zależności
DateObjects
.R, 64 bajty
Bezpośredni port kodu Mathematica, myślę, że miałem krótsze rozwiązanie, ale zależne od pakietów, podczas gdy działa to z bazą R.
źródło
(1/10)
->.1
?.1
.Java,
180177166152143 143 bajtyDzięki Thomas za pomoc noobowi :)
Wersja bez golfa:
Wymaga Java 8.
źródło
import java.time.*
?3.0
->3.
? Nie musisz także drukować roku z wydrukiem.JavaScript (ES6) 52
Funkcja zwracająca dane wyjściowe jako tablicę.
Dla celów testowych funkcja przyjmuje wartość wejściową równą bieżącemu rokowi - 1900 (np. 105 dla 2015 r.)
Jest to zgodne z odpowiedzią ETHproductions (matematyka jest matematyką), ale skłaniając się ku złej sztuczce , jest bardziej przenośna w różnych lokalizacjach. I jako funkcja jest o 1 bajt krótszy.
Fragment testowy:
źródło
Rubinowy, 57 bajtów
Niestety,
Time.now.year
naprawdę kosztuje niektóre postacie.źródło
Desmos , 140 bajtów
Liczę, że nowa linia będzie sygnałem dla nowego równania. Foldery w linku służą wyłącznie do organizacji.
Gra w golfa , 140 bajtów
Kliknij
add slider
po wyświetleniu monitu.Niegolfowany , 261 bajtów
źródło
Glava, 77 bajtów
Tłumaczenie mojej odpowiedzi Java.
źródło
PHP, 45 bajtów
Kod:
Ponieważ
y
(argumentdate()
) jest nieokreśloną stałą, PHP wyzwala powiadomienie (które można wyciszyć) i konwertuje je na ciąg znaków (w razie potrzeby); ta uprzejmość PHP pozwala zaoszczędzić 2 bajty.Aby pominąć powiadomienie, program musi być uruchamiany przy użyciu
error_reporting=0
dyrektywy wykonawczej:Dla testów
Poprzez zastąpienie wywołanie
date(y)
z$argv[1]
(pierwszy wiersz poleceń argument), długość programu wzrasta z 1 bajt, ale może dostać roku z linii poleceń.Oczekiwanym argumentem jest rok minus 2000; działa również w przypadku wartości ujemnych (lata przed 2000 r.) lub wartości większych niż 40 (po roku 2040).
źródło
APL,
252329 bajtówTryAPL
Tak, to 29 bajtów .
źródło