В xkcd 1047 Рэндалл Манро перечисляет «слегка неправильные» аппроксимации различных величин и чисел с различной точностью и сложностью, например, что количество литров в галлоне очень близко к 3 + π ⁄ 4 . В середине комикса он дает антракт: способ оценки мирового населения (и Соединенных Штатов) на основе данного года.
(Вырезано из xkcd: приближения Рэндалла Манро)
Ваша задача состоит в том, чтобы написать программу, которая реализует эти формулы для аппроксимации текущего мира и населения США, реплицируясь следующим образом.
Мировое население
- Возьмите последние две цифры текущего года.
- Вычтите число високосных лет (включая текущий год) после урагана Катрина (2005 г.). Для этих целей любой год, кратный 4, считается високосным.
- Добавьте десятичную точку между двумя числами (так же, как деление на 10).
- Добавить 6. Это дает результат в миллиардах людей.
Население США
- Возьмите последние две цифры текущего года.
- Вычтите 10.
- Умножьте на 3.
- Добавить 10
- Добавьте 3 к началу (для этого задания некоторые числа будут отрицательными, поэтому вместо них добавьте 300). Почему-то я не заметил, что просто конкатенация не сработает, потому что программа, которую я использовал для генерации результатов, только добавила 300.
- Это дает результат в миллионах людей.
Детали
Эта формула «должна оставаться актуальной в течение десяти или двух лет», но теоретически вы должны быть в состоянии справиться с любым 2000–2039 годом включительно. В некоторых случаях високосные годы после Катрины будут иметь отрицательное или нулевое значение.
Вы можете упростить формулу любым способом, если все выходные данные соответствуют приведенным ниже.
Для года используйте год по часам компьютера. Он должен работать в следующем году и в любой другой год этого столетия, поэтому вы не можете просто жестко кодировать 2015. Для удобства вы можете включить способ указания года в качестве переменной или ввода для проверки других лет.
Выходными данными должны быть приблизительные данные о численности населения мира (в миллиардах человек), после которых следует некоторый разделитель (например, пробел или запятая), за которым следует население США (в миллионах человек). Вы также можете написать функцию, которая возвращает или печатает строку или массив чисел или строк.
Это код гольф, поэтому выигрывает самый короткий код в байтах. Tiebreaker - самый ранний пост.
Контрольные примеры
Это список всех возможных лет, за которыми следуют два результата.
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
источник
3
, разве не следует2040
давать населению3100
?40 - 10 = 30
,30 * 3 = 90
,90 + 10 = 100
, Который дал бы"3" + "100" = 3100
280
в результате,-20+300=280
а не3 . -20= "3-20"
)Ответы:
Pyth,
2120 байт-1 байт Денисом
Они имеют одинаковое количество байтов, но только для ASCII:
Я не знаю Пита, так что все еще
возможновозможно игра в гольф. Используя тот же алгоритм:TI-BASIC, 23 байта
getDate
возвращает список из трех чисел с плавающей точкой{YYYY,MM,DD}
в некотором порядке, в зависимости от настройки формата даты (TI-84 не имеют истинного типа данных int);max(
будет год. Умножение и вычитание изнутриmax(
спасает близкого человека.источник
Javascript (ES6),
555448 байтРаботает в Firefox 33; теоретически поддерживает все годы с 2000 по 2099 год. Если программы, которые выводят результат на консоль, не разрешены, используйте эту 51-байтовую функцию:
Полная программа, 55 байт:
Получение года было довольно дорогим, но после использования устаревшегоРЕДАКТИРОВАТЬ: Благодаря трюк Eeevil, я пропустилgetYear()
вместоgetFullYear()
всех чисел в уравнении стало меньше, экономя много байтов.new
иgetYear()
вообще. >: DПредложения приветствуются!
источник
Pyth, 30 байт
Моя первая программа Pyth!
Спасибо @Jakube за некоторые подсказки (я бы никогда не подумал об этом!)
источник
+*3Z280
вместо,+*Z3 280
например).C\d
вместо100
(экономит место). ИспользуйтеJ
вместоZ
(сохраняет=
). Вставьте задание. СсылкаPython 2, 80 байт
Теперь раунды!
источник
CJam, 28 байтов
Попробуйте онлайн
Чтобы попробовать годы, отличные от текущего, замените
et0=
в начале буквальное значение года.источник
40%
чтобы сохранить один байт.Python 3, 134 байта
Работает хорошо, но кажется немного долго
источник
from time import*
,y=strftime('%Y')
. Или скопируйте другой ответ Python: PAutoIt -
605856 байтОкругление съедает байты(больше нет). Теперь я настроил обе формулы. Некоторые примеры выходов:Все они кажутся точными.
Совет: порядок выполнения экономит байты в скобках. Например:
(a-4)/4 = a/4-1
:-).источник
PowerShell,
5345 байтИспользует трюк с округлением, аналогичный ответу Python 2 от muddyfish, для упрощения расчета численности населения в мире, поскольку PowerShell неявно
Round()
s при[double]
преобразовании из a в[int]
, а не в усечение.Для вывода мы предполагаем, что «после некоторого разделителя (например, пробел или запятая)» также может означать «перевод строки», поэтому мы выполняем один результат, а затем второй. PowerShell неявно записывает результаты, поэтому нам не нужно явно вызывать какие-либо команды печати.
источник
Mathematica, 50 байтов
Обратите внимание, что это зависит от наличия двигателя Wolfram Engine с версией 10+ (выпущена в 2014 году) из-за зависимости от
DateObjects
.R, 64 байта
Прямой порт кода Mathematica, думаю, у меня было более короткое решение, но зависящее от пакетов, тогда как это работает с базой R.
источник
(1/10)
->.1
?.1
.Java,
180177166152143 байтаСпасибо Томасу за помощь новичку :)
Безголовая версия:
Требуется Java 8.
источник
import java.time.*
?3.0
->3.
? Вам также не нужно печатать год с выходными данными.JavaScript (ES6) 52
Функция, возвращающая вывод в виде массива.
Только для целей тестирования функция принимает входные данные, равные текущему году - 1900 (например, 105 за 2015 год)
Это в ответе ETHproductions (математика - это математика), но, избегая злой уловки, она более переносима в разных местах. И как функция это на 1 байт короче.
Тестовый фрагмент:
источник
Рубин, 57 байт
К сожалению,
Time.now.year
действительно стоит некоторых персонажей.источник
Desmos , 140 байт
Я считаю, что новая строка является сигналом для нового уравнения. Папки по ссылке предназначены только для организации.
Гольф , 140 байт
Нажмите,
add slider
когда будет предложено.Ungolfed , 261 байт
источник
Глава, 77 байт
Перевод моего Java-ответа.
источник
PHP, 45 байт
Код:
Поскольку
y
(аргументdate()
) является неопределенной константой, PHP вызывает уведомление (которое может быть отключено) и преобразует его в строку (как нам нужно); эта вежливость PHP позволяет сэкономить 2 байта.Чтобы подавить уведомление, программа должна быть запущена с использованием
error_reporting=0
директивы runtime, например:Для тестирования
Заменяя вызов
date(y)
с$argv[1]
(первый аргумент командной строки), длина программы увеличивается с 1 байт , но он может получить год из командной строки.Ожидаемый аргумент - год минус 2000; это также работает для отрицательных значений (годы до 2000 года) или значений больше 40 (после года 2040).
источник
APL,
252329 байтTryAPL
Да, это 29 байтов .
источник