Dans xkcd 1047 , Randall Munroe cite des approximations "légèrement fausses" de quantités et de nombres assortis avec une précision et une complexité variables, telles que le nombre de litres dans un gallon est très proche de 3 + π ⁄ 4 . Au milieu de la bande dessinée, il donne un entracte: un moyen d’estimer la population mondiale (et américaine) pour une année donnée.
(Recadré de xkcd: approximations de Randall Munroe)
Votre tâche consiste à écrire un programme qui implémente ces formules pour se rapprocher des populations mondiales et américaines actuelles, reproduit comme suit.
Population mondiale
- Prenez les deux derniers chiffres de l'année en cours.
- Soustrayez le nombre d'années bissextiles (y compris l'année en cours) depuis l' ouragan Katrina (2005). À ces fins, toute année divisible par 4 est considérée comme une année bissextile.
- Ajoutez une virgule décimale entre les deux nombres (identique à la division par 10).
- Ajoutez 6. Cela donne le résultat en milliards de personnes.
Population américaine
- Prenez les deux derniers chiffres de l'année en cours.
- Soustrayez 10.
- Multiplier par 3.
- Ajoutez 10.
- Ajoutez 3 au début (pour ce défi, certains nombres seront négatifs, ajoutez donc 300 à la place). D'une manière ou d'une autre, je n'ai pas remarqué que le simple fait de concaténer ne fonctionnerait pas car le programme avec lequel j'avais l'habitude de générer les résultats en ajoutait 300.
- Cela donne le résultat en millions de personnes.
Détails
Cette formule "devrait rester d'actualité pendant une décennie ou deux", mais vous devez être en mesure de gérer théoriquement toute année 2000-2039 incluse. Dans certains cas, les années bissextiles depuis Katrina auront une valeur négative ou nulle.
Vous êtes libre de simplifier la formule de quelque manière que ce soit, à condition que toutes les sorties correspondent à celles ci-dessous.
Pour l'année, utilisez l'année en fonction de l'horloge de l'ordinateur. Cela doit fonctionner l'année prochaine et toute autre année du siècle, vous ne pouvez donc pas simplement coder 2015 en dur. Pour plus de commodité, vous pouvez inclure un moyen de spécifier l'année en tant que variable ou en tant qu'entrée pour tester d'autres années.
Le résultat devrait être la population mondiale approximative (en milliards de personnes), suivie d'un délimiteur (par exemple, l'espace ou une virgule), suivie de la population américaine (en millions de personnes). Vous pouvez également écrire une fonction qui renvoie ou imprime une chaîne ou un tableau de nombres ou de chaînes.
C'est le code de golf, donc le code le plus court en octets gagne. Tiebreaker est le premier post.
Cas de test
Ceci est une liste de toutes les années possibles, suivie des deux sorties.
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
la source
3
, ne devriez-vous pas en2040
donner une population3100
?40 - 10 = 30
,30 * 3 = 90
,90 + 10 = 100
, Ce qui donnerait"3" + "100" = 3100
280
à la suite de-20+300=280
et non3 . -20= "3-20"
)Réponses:
Pyth,
21 à20 octets-1 octet par Dennis
Ceux-ci ont le même nombre d'octets mais sont uniquement en ASCII:
Je ne connais pas Pyth, donc
probablementencore golfable. En utilisant le même algorithme:TI-BASIC, 23 octets
getDate
renvoie une liste de trois flottants{YYYY,MM,DD}
dans un ordre quelconque en fonction du format de date (les TI-84 n'ont pas de type de données true int); lemax(
sera l'année. Multiplier et soustraire à l'intérieur de l'max(
enregistre un proche-paren.la source
Javascript (ES6),
555448 octetsFonctionne dans Firefox 33; prend en charge théoriquement toutes les années de 2000 à 2099. Si les programmes qui affichent le résultat sur la console ne sont pas autorisés, utilisez cette fonction à 51 octets:
Programme complet, 55 octets:
Obtenir l’année coûtait assez cher, mais après avoir utilisé l’option obsolèteEDIT: Merci à un tour eeevil, j'ai sautégetYear()
au lieu degetFullYear()
, tous les chiffres de l’équation sont devenus plus petits, ce qui a permis d’économiser beaucoup d’octets.new
etgetYear()
tout à fait. >: DSuggestions bienvenues!
la source
Pyth, 30 octets
Mon premier programme Pyth!
Merci @Jakube pour quelques conseils (je n'aurais jamais pensé à ceux-là!)
la source
+*3Z280
au lieu de,+*Z3 280
par exemple).C\d
au lieu de100
(enregistre des espaces). UtilisezJ
au lieu deZ
(enregistre le=
). En ligne de la mission. LinkPython 2, 80 octets
Maintenant les tours!
la source
CJam, 28 octets
Essayez-le en ligne
Pour essayer des années autres que celle en cours, remplacez la
et0=
valeur initiale par la valeur littérale de l'année.la source
40%
pour enregistrer un octet.Python 3, 134 octets
Fonctionne bien mais semble un peu long
la source
from time import*
,y=strftime('%Y')
. Ou copiez l'autre réponse en python: PAutoIt -
605856 octetsL'arrondi mange des octets(plus maintenant). J'ai maintenant modifié les deux formules. Quelques exemples de sorties:Ils semblent tous être précis.
Un conseil: L'ordre d'exécution enregistre les octets entre parenthèses. Par exemple:
(a-4)/4 = a/4-1
:-).la source
PowerShell,
53 à45 octetsUtilise une astuce d’arrondi similaire à celle de la réponse Python 2 de muddyfish pour simplifier le calcul de la population mondiale, étant donné que PowerShell est implicitement utilisé
Round()
lorsque vous passez d’un élément[double]
à un[int]
plutôt que de le tronquer.Pour la sortie, nous supposons que "suivi d'un certain délimiteur (par exemple, espace ou virgule)" peut également signifier "nouvelle ligne", nous exécutons donc un résultat, puis le second. PowerShell écrit implicitement les résultats. Il n'est donc pas nécessaire d'appeler explicitement les commandes d'impression.
la source
Mathematica, 50 octets
Notez que cela dépend du fait que Wolfram Engine avec la version 10+ (publiée en 2014) dépend de
DateObjects
.R, 64 octets
Port direct du code Mathematica, je pense avoir une solution plus courte mais dépendante des packages alors que cela fonctionne avec la base R.
la source
(1/10)
->.1
?.1
.Java,
180177166152143 octetsMerci Thomas d'avoir aidé un noob :)
Version non-golfée:
Nécessite Java 8.
la source
import java.time.*
?3.0
->3.
? Vous n'avez pas non plus besoin d'imprimer l'année avec la sortie.JavaScript (ES6) 52
Une fonction renvoyant la sortie sous forme de tableau.
Juste à des fins de test, la fonction accepte une entrée égale à l'année en cours - 1900 (par exemple, 105 pour 2015)
C'est dans la ligne de la réponse d'ETHproductions (le calcul est le calcul), mais éviter le truc du mal est plus portable dans différents endroits. Et en tant que fonction, il est plus court d'un octet.
Extrait de test:
la source
Ruby, 57 octets
Malheureusement,
Time.now.year
ça coûte vraiment quelques personnages.la source
Desmos , 140 octets
Je compte une nouvelle ligne comme un signal pour une nouvelle équation. Les dossiers sur le lien sont uniquement pour l'organisation.
Golfé , 140 octets
Cliquez
add slider
lorsque vous y êtes invité.Ungolfed , 261 Bytes
la source
Glava, 77 octets
Une traduction de ma réponse Java.
la source
PHP, 45 octets
Le code:
Parce que
y
(l'argument dedate()
) est une constante non définie, PHP déclenche une notification (qui peut être mise en sourdine) et la convertit en chaîne (selon nos besoins). Cette courtoisie PHP permet de sauver 2 octets.Pour supprimer la notification, le programme doit être exécuté à l'aide de la
error_reporting=0
directive d'exécution, comme ceci:Pour tester
En remplaçant l'appel à
date(y)
avec$argv[1]
(le premier argument de la ligne de commande), la longueur du programme augmente d'un octet, mais il peut obtenir l'année à partir de la ligne de commande.L'argument attendu est l'année moins 2000; cela fonctionne également pour les valeurs négatives (années avant 2000) ou supérieures à 40 (après 2040).
la source
APL,
252329 octetsTryAPL
Oui, c'est 29 octets .
la source