In xkcd 1047 listet Randall Munroe "leicht falsche" Näherungen verschiedener Mengen und Zahlen mit unterschiedlicher Genauigkeit und Komplexität auf, z. B. dass die Anzahl der Liter in einer Gallone sehr nahe bei 3 + π ⁄ 4 liegt . In der Mitte des Comics gibt er eine Pause: eine Möglichkeit, die Weltbevölkerung (und die Bevölkerung der Vereinigten Staaten) basierend auf einem bestimmten Jahr zu schätzen.
(Aus xkcd beschnitten : Annäherungen von Randall Munroe)
Ihre Aufgabe ist es, ein Programm zu schreiben, das diese Formeln implementiert, um die aktuelle Welt und die US-Bevölkerung anzunähern.
Weltbevölkerung
- Nimm die letzten beiden Ziffern des laufenden Jahres.
- Subtrahieren Sie die Anzahl der Schaltjahre (einschließlich des aktuellen Jahres) seit dem Hurrikan Katrina (2005). Für diese Zwecke wird jedes durch 4 teilbare Jahr als Schaltjahr betrachtet.
- Fügen Sie einen Dezimalpunkt zwischen den beiden Zahlen ein (das gleiche wie beim Teilen durch 10).
- Addieren Sie 6. Dies ergibt Milliarden von Menschen.
US-Bevölkerung
- Nimm die letzten beiden Ziffern des laufenden Jahres.
- Subtrahiere 10.
- Mit 3 multiplizieren.
- Addiere 10.
- Fügen Sie am Anfang 3 hinzu (für diese Herausforderung sind einige Zahlen negativ, also fügen Sie stattdessen 300 hinzu). Irgendwie habe ich nicht bemerkt, dass das Verketten nicht funktioniert, weil das Programm, mit dem ich die Ergebnisse generiert habe, gerade 300 hinzugefügt hat.
- Dies führt bei Millionen von Menschen zum Ergebnis.
Einzelheiten
Diese Formel "sollte ein oder zwei Jahrzehnte lang aktuell bleiben", aber Sie müssen theoretisch in der Lage sein, jedes Jahr von 2000 bis einschließlich 2039 zu verarbeiten. In einigen Fällen haben die Schaltjahre seit Katrina einen negativen Wert oder Null.
Es steht Ihnen frei, die Formel in irgendeiner Weise zu vereinfachen, solange alle Ausgaben mit den folgenden übereinstimmen.
Verwenden Sie für das Jahr das Jahr gemäß der Uhr des Computers. Es muss nächstes Jahr und jedes andere Jahr in diesem Jahrhundert funktionieren, sodass Sie 2015 nicht einfach fest codieren können. Aus Gründen der Benutzerfreundlichkeit möchten Sie möglicherweise eine Möglichkeit einschließen, das Jahr als Variable oder Eingabe anzugeben, um andere Jahre zu testen.
Die Ausgabe sollte die ungefähre Weltbevölkerung (in Milliarden von Menschen) sein, gefolgt von einem Begrenzungszeichen (z. B. Leerzeichen oder Komma), gefolgt von der US-Bevölkerung (in Millionen von Menschen). Sie können auch eine Funktion schreiben, die eine Zeichenfolge oder ein Array von Zahlen oder Zeichenfolgen zurückgibt oder druckt.
Dies ist Codegolf, also gewinnt der kürzeste Code in Bytes. Tiebreaker ist der früheste Beitrag.
Testfälle
Dies ist eine Liste aller möglichen Jahre, gefolgt von den beiden Ausgaben.
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
quelle
3
, sollten Sie nicht2040
eine Population von geben3100
?40 - 10 = 30
,30 * 3 = 90
,90 + 10 = 100
Würde das geben"3" + "100" = 3100
280
als Ergebnis von-20+300=280
und nicht3 . -20= "3-20"
)Antworten:
Pyth,
21 bis20 Bytes-1 Byte von Dennis
Diese haben die gleiche Byteanzahl, sind jedoch nur ASCII-fähig:
Ich kenne Pyth nicht, also
wahrscheinlichnoch golfen. Mit dem gleichen Algorithmus:TI-BASIC, 23 Bytes
getDate
gibt eine Liste mit drei Gleitkommazahlen{YYYY,MM,DD}
in einer bestimmten Reihenfolge zurück, abhängig von der Einstellung des Datumsformats (TI-84s haben keinen echten int-Datentyp); Dasmax(
wird das Jahr sein. Das Multiplizieren und Subtrahieren innerhalb desmax(
spart eine enge Paren.quelle
Javascript (ES6),
555448 BytesFunktioniert in Firefox 33; Unterstützt theoretisch alle Jahre von 2000 bis 2099. Wenn Programme, die das Ergebnis auf der Konsole speichern, nicht zulässig sind, verwenden Sie diese 51-Byte-Funktion:
Volles Programm, 55 Bytes:
Das Jahr zu bekommen war ziemlich teuer, aber nach der Verwendung der veraltetenEDIT: Dank eines bösen Tricks habe ich übersprungengetYear()
anstelle vongetFullYear()
wurden alle Zahlen in der Gleichung kleiner, was eine Menge Bytes sparte.new
undgetYear()
insgesamt. >: DVorschläge willkommen!
quelle
Pyth, 30 Bytes
Mein erstes Pyth-Programm!
Danke @Jakube für ein paar Hinweise (daran hätte ich nie gedacht!)
quelle
+*3Z280
anstatt+*Z3 280
zum Beispiel).C\d
statt100
(spart Leerzeichen). Verwenden SieJ
anstelle vonZ
(speichert die=
). Inline die Aufgabe. LinkPython 2, 80 Bytes
Jetzt runden!
quelle
CJam, 28 Bytes
Probieren Sie es online aus
Wenn Sie andere als die aktuellen Jahre ausprobieren möchten, ersetzen Sie den
et0=
Wert am Anfang durch den wörtlichen Wert des Jahres.quelle
40%
ein Byte speichern.Python 3, 134 Bytes
Funktioniert gut, scheint aber etwas lang zu sein
quelle
from time import*
,y=strftime('%Y')
. Oder kopieren Sie die andere Python-Antwort: PAutoIt -
605856 BytesDie Rundung frisst Bytes(nicht mehr). Ich habe jetzt beide Formeln optimiert. Einige Beispielausgaben:Sie scheinen alle genau zu sein.
Ein Tipp: Die Ausführungsreihenfolge spart Bytes in Klammern. Zum Beispiel:
(a-4)/4 = a/4-1
:-).quelle
PowerShell,
53 -45 ByteVerwendet einen ähnlichen Rundungstrick wie die Python 2-Antwort von Muddyfish , um die Berechnung der Weltbevölkerung zu vereinfachen, da PowerShell implizit verwendet wird,
Round()
wenn Sie von A[double]
nach A umwandeln[int]
, anstatt abzuschneiden.Für die Ausgabe gehen wir davon aus, dass "gefolgt von einem Trennzeichen (z. B. Leerzeichen oder Komma)" auch "Zeilenumbruch" bedeuten kann. Daher führen wir ein Ergebnis und dann das zweite aus. PowerShell schreibt implizit Ergebnisse aus, sodass wir keine Druckbefehle explizit aufrufen müssen.
quelle
Mathematica, 50 Bytes
Beachten Sie, dass dies abhängig von einer Wolfram Engine mit der Versionsnummer 10+ (veröffentlicht 2014) ist
DateObjects
.R, 64 Bytes
Direkte Portierung von Mathematica-Code, denke ich hatte eine kürzere Lösung, aber abhängig von Paketen, während dies mit Basis R funktioniert.
quelle
(1/10)
->.1
?.1
.Java,
180177166152143 BytesDanke Thomas, dass du einem Noob geholfen hast :)
Ungolfed-Version:
Benötigt Java 8.
quelle
import java.time.*
?3.0
->3.
? Sie müssen auch nicht das Jahr mit der Ausgabe drucken.JavaScript (ES6) 52
Eine Funktion, die die Ausgabe als Array zurückgibt.
Nur zu Testzwecken akzeptiert die Funktion eine Eingabe, die dem aktuellen Jahr - 1900 entspricht (z. B. 105 für 2015).
Das entspricht der Antwort von ETHproductions (die Mathematik ist die Mathematik), aber abgesehen von dem bösen Trick ist es an verschiedenen Orten portabler. Und als Funktion ist es 1 Byte kürzer.
Testschnipsel:
quelle
Ruby, 57 Bytes
Kostet leider
Time.now.year
wirklich einige Charaktere.quelle
Desmos , 140 Bytes
Ich zähle eine neue Zeile, um ein Signal für eine neue Gleichung zu sein. Ordner auf dem Link dienen nur der Organisation.
Golf , 140 Bytes
Klicken Sie auf,
add slider
wenn Sie dazu aufgefordert werden.Ungolfed , 261 Bytes
quelle
Glava, 77 Bytes
Eine Übersetzung meiner Java-Antwort.
quelle
PHP, 45 Bytes
Der Code:
Da
y
(das Argument vondate()
) eine undefinierte Konstante ist, löst PHP einen Hinweis aus (der stummgeschaltet werden kann) und konvertiert ihn in einen String (wie wir ihn benötigen). Diese PHP-Höflichkeit erlaubt das Speichern von 2 Bytes.Um den Hinweis zu unterdrücken, muss das Programm mit der
error_reporting=0
Runtime-Direktive wie folgt ausgeführt werden:Zum Prüfen
Durch Ersetzen des Aufrufs von
date(y)
durch$argv[1]
(das erste Befehlszeilenargument) erhöht sich die Programmlänge um 1 Byte, es kann jedoch das Jahr von der Befehlszeile abgerufen werden.Das erwartete Argument ist das Jahr minus 2000; Es funktioniert auch für negative Werte (Jahre vor 2000) oder Werte über 40 (nach 2040).
quelle
APL,
252329 BytesTryAPL
Ja, es sind 29 Bytes .
quelle