En xkcd 1047 , Randall Munroe enumera aproximaciones "ligeramente incorrectas" de cantidades y números variados con precisión y complejidad variables, como que el número de litros en un galón es muy cercano a 3 + π ⁄ 4 . En el medio del cómic, da un intermedio: una forma de estimar la población mundial (y de los Estados Unidos) en función de un año determinado.
(Recortado de xkcd: Aproximaciones de Randall Munroe)
Su tarea es escribir un programa que implemente estas fórmulas para aproximarse al mundo actual y a las poblaciones de los Estados Unidos, replicado de la siguiente manera.
Población mundial
- Tome los dos últimos dígitos del año actual.
- Reste el número de años bisiestos (incluido el año actual) desde el huracán Katrina (2005). Para estos fines, cualquier año divisible por 4 se considera un año bisiesto.
- Agregue un punto decimal entre los dos números (lo mismo que dividir por 10).
- Agregue 6. Esto da el resultado en miles de millones de personas.
Población estadounidense
- Tome los dos últimos dígitos del año actual.
- Restar 10.
- Multiplica por 3.
- Añadir 10.
- Agregue 3 al principio (para este desafío, algunos números serán negativos, así que agregue 300 en su lugar). De alguna manera, no me di cuenta de que la concatenación no funcionaría porque el programa que usé para generar los resultados acaba de agregar 300.
- Esto da el resultado en millones de personas.
Detalles
Esta fórmula "debería mantenerse actualizada durante una década o dos", pero debe ser capaz de manejar teóricamente cualquier año 2000-2039 inclusive. En algunos casos, los años bisiestos desde Katrina tendrán un valor negativo o cero.
Usted es libre de simplificar la fórmula de cualquier manera, siempre que todas las salidas coincidan con las siguientes.
Para el año, use el año de acuerdo con el reloj de la computadora. Debe funcionar el próximo año y cualquier otro año de este siglo, por lo que no puede simplemente codificar el 2015. Para su comodidad, es posible que desee incluir una forma de especificar el año como una variable o entrada para probar otros años.
El resultado debería ser la población mundial aproximada (en miles de millones de personas), seguida de algún delimitador (por ejemplo, espacio o coma), seguida de la población de los Estados Unidos (en millones de personas). También puede escribir una función que devuelva o imprima una cadena o una matriz de números o cadenas.
Este es el código de golf, por lo que gana el código más corto en bytes. Tiebreaker es la primera publicación.
Casos de prueba
Esta es una lista de todos los años posibles, seguida de los dos resultados.
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
fuente
3
, ¿no debería2040
dar una población de3100
?40 - 10 = 30
,30 * 3 = 90
,90 + 10 = 100
, Lo que daría"3" + "100" = 3100
280
como resultado-20+300=280
y no3 . -20= "3-20"
)Respuestas:
Pyth,
2120 bytes-1 byte por Dennis
Estos tienen el mismo recuento de bytes pero son solo ASCII:
No conozco a Pyth, así que
probablementeaúnseagolfable. Usando el mismo algoritmo:TI-BASIC, 23 bytes
getDate
devuelve una lista de tres flotantes{YYYY,MM,DD}
en algún orden dependiendo de la configuración del formato de fecha (las TI-84 no tienen un tipo de datos int verdadero); Elmax(
será el año. Multiplicar y restar dentro de lasmax(
partidas guarda un paren cercano.fuente
Javascript (ES6),
555448 bytesFunciona en Firefox 33; teóricamente es compatible con todos los años desde 2000 hasta 2099. Si los programas que vuelcan el resultado en la consola no están permitidos, use esta función de 51 bytes:
Programa completo, 55 bytes:
Obtener el año fue bastante costoso, pero después de usar el en desuso enEDITAR: Gracias a un truco malvado, me saltégetYear()
lugar degetFullYear()
, todos los números en la ecuación se hicieron más pequeños, ahorrando muchos bytes.new
y porgetYear()
completo. >: DSugerencias bienvenidas!
fuente
Pyth, 30 bytes
Mi primer programa Pyth!
Gracias @Jakube por algunas sugerencias (¡nunca habría pensado en eso!)
fuente
+*3Z280
lugar de,+*Z3 280
por ejemplo).C\d
en lugar de100
(ahorra espacios). Usar enJ
lugar deZ
(guarda el=
). En línea la tarea. EnlacePython 2, 80 bytes
Ahora rondas!
fuente
CJam, 28 bytes
Pruébalo en línea
Para probar años que no sean el actual, reemplace
et0=
al principio con el valor literal del año.fuente
40%
para guardar un byte.Python 3, 134 bytes
Funciona bien pero parece un poco largo
fuente
from time import*
,y=strftime('%Y')
. O copie la otra respuesta de Python: PAutoIt -
605856 bytesEl redondeo come bytes(ya no). Ahora he ajustado ambas fórmulas. Algunas salidas de muestra:Todos parecen ser precisos.
Un consejo: el orden de ejecución ahorra bytes entre paréntesis. Por ejemplo:
(a-4)/4 = a/4-1
:-).fuente
PowerShell,
5345 bytesUtiliza un truco de redondeo similar al de la respuesta Python 2 de muddyfish para simplificar el cálculo de la población mundial, ya que PowerShell implícitamente
Round()
s cuando se lanza de a[double]
a an[int]
, en lugar de truncar.Para la salida, suponemos que "seguido de algún delimitador (por ejemplo, espacio o coma)" también puede significar "nueva línea", por lo que ejecutamos un resultado y luego el segundo. PowerShell escribe implícitamente los resultados, por lo que no necesitamos llamar explícitamente ningún comando de impresión.
fuente
Mathematica, 50 bytes
Tenga en cuenta que esto depende de tener un Wolfram Engine con la versión número 10+ (lanzado en 2014) debido a la dependencia de
DateObjects
.R, 64 bytes
Puerto directo del código de Mathematica, creo que tenía una solución más corta pero dependiente de los paquetes, mientras que esto funciona con la base R.
fuente
(1/10)
->.1
?.1
.Java,
180177166152143 bytesGracias Thomas por ayudar a un novato :)
Versión sin golf:
Requiere Java 8.
fuente
import java.time.*
?3.0
->3.
? Tampoco necesita imprimir el año con la salida.JavaScript (ES6) 52
Una función que devuelve la salida como una matriz.
Solo para fines de prueba, la función acepta una entrada igual al año actual - 1900 (por ejemplo, 105 para 2015)
Eso está en la línea de la respuesta de ETHproductions (la matemática es la matemática), pero evitando el malvado truco , es más portátil en diferentes lugares. Y como función es 1 byte más corto.
Fragmento de prueba:
fuente
Ruby, 57 bytes
Lamentablemente,
Time.now.year
realmente cuesta algunos personajes.fuente
Desmos , 140 bytes
Estoy contando una nueva línea como señal para una nueva ecuación. Las carpetas en el enlace son solo para la organización.
Golfizado , 140 bytes
Haga clic
add slider
cuando se le solicite.Sin Golf , 261 Bytes
fuente
Glava, 77 bytes
Una traducción de mi respuesta Java.
fuente
PHP, 45 bytes
El código:
Debido a que
y
(el argumento dedate()
) es una constante indefinida, PHP activa un aviso (que puede silenciarse) y lo convierte en una cadena (según sea necesario); Esta cortesía de PHP permite guardar 2 bytes.Para suprimir el aviso, el programa debe ejecutarse utilizando la
error_reporting=0
directiva de tiempo de ejecución, así:Para las pruebas
Al reemplazar la llamada a
date(y)
con$argv[1]
(el primer argumento de la línea de comando), la longitud del programa aumenta con 1 byte pero puede obtener el año desde la línea de comando.El argumento esperado es el año menos 2000; También funciona para valores negativos (años anteriores a 2000) o valores superiores a 40 (después del año 2040).
fuente
APL
252329 bytesTryAPL
Sí, son 29 bytes .
fuente