Happy Rounded Pi Day


25

Чтобы отпраздновать День закругленных пи, вы должны использовать сегодняшнюю дату, чтобы создать программу, которая принимает диаметр круга и выводит его окружность, умножая диаметр на 3,1416, где 3,1416 нужно получить с использованием сегодняшней даты.

Input 3
Output 9.4248
etc.

Не принимает дату в качестве входных данных. Вам не обязательно использовать все компоненты даты, но цифры pi должны быть получены при форматировании объекта Date или использовании объекта даты для его получения. Ответы пока выглядят хорошо.

Не уверен, что еще указать. Все ответы пока соответствуют ожиданиям.

Мое ограничение было то, что вы должны использовать компоненты даты, чтобы придумать Пи. Вы, конечно, можете использовать компоненты, умножить на 0, затем добавить 3.1416, но это скучно и тратит впустую драгоценные символы!

Самый короткий код выигрывает!


61
Что такого особенного в 14/3/16?
Нил

5
определить с использованием сегодняшней даты . Я мог бы получить дату в виде числа, разделить ее и умножить на заранее заданную константу дляpi
Луис Мендо

7
@Neil: Потому что 3/14/16 и 31/4/16 не являются действительными фактическими датами в формате D / M / Y. Там нет 14 месяцев, а в апреле только 30 дней. Я лично думаю, что нам следует подождать до 28.06.32 (M / D / Y) или, может быть, 6/2/83 (D / M / Y), но это совсем другая священная война.
Даррел Хоффман

8
@DarrelHoffman Я человек Тау, которого я вижу.
jmasterx,

16
К сожалению, это единственный день PI в культурной зоне США. Европейцы, с их глупой лексикографически разумной датировкой, не получают ежегодных дней PI. Оставьте печальную мысль для них, поскольку вы едите свой пи (е) сегодня.
TED

Ответы:


8

05AB1E, 16 13 байт

žfžežg¦¦J*4°/

Попробуйте онлайн.

К сожалению, ошибка с плавающей точкой делает этот байт длиннее: /

Спасибо Аднану за 3 байта.

объяснение

žfžežg¦¦J*4°/
žfžežg         push month day year
      ¦¦       slice off the first two chars from the year (2016 -> 16)
        J      join them together into a number
         *     multiply by input
          4°/  divide by 1e4

¦¦вместо на 2000-три байта короче;)
Аднан

11
+1 žfžežgзвучит как хорошее Чешское слово :)
Yo»

В UTF-8 это составляет 19 байтов.
OldBunny2800

3
@ OldBunny2800 05AB1E использует CP1252 для кодирования.
спагетто

Ошибка с поплавками?
CalculatorFeline

19

C, 32 байта

#define f(d)d*time(0)/464083315.

Если потеря немного большей точности - это нормально, я могу уменьшить ее до 29 байт, оставаясь с точностью до 4 цифр после запятой (на момент публикации):

#define f(d)d*time(0)/46408e4

#include<time.h>?
кот

Кроме того, где находится исполняемый код? это просто что-то для препроцессора для копирования / вставки; фрагмент Нам нравятся запускаемые реализации здесь.
кот

3
@tac большинство компиляторов Си не требуют от вас #includeстандартных библиотечных заголовков. Включать их вручную - это почти всегда хорошая идея, но их отсутствие значительно упрощает игру в коде на языке Си.
Джош

12
@ ответ ответ ведет себя так же, как функция. Несколько ответов здесь также являются автономными функциями. Я не вижу смысла в предоставлении примера mainфункции, чтобы продемонстрировать, как вызвать этот макрос с одним аргументом.
Джош

1
@tac Я думаю, что стандартные правила [code-golf] таковы, что если запрещенные функции в порядке.
Mindwin

14

AppleScript, 122 120 байт

set a to current date
(display dialog""default answer"")'s text returned*(month of a+day of a*.01+year of a*1e-4 mod.01)

Переменная а

Переменная a является объектом даты. Я называю всю свою информацию о дате оттуда.

Месяц, день и год

Вызовы месяца, дня и года фактически возвращают объект, который обычно возвращает строку. Чтобы правильно использовать его как число, я окружил его с обеих сторон математическими операциями, чтобы автоматически привести его к числу.

1e-4

1e-4на байт короче .0001.

mod.01

.действует как разделитель для автозамены AppleScript. Используя это, я могу использовать модуль по- прежнему и держать его для себя.

Нет возврата заявления / журнала

Последнее значение, рассчитанное автоматически, возвращается программой. Я вывел число, рассчитанное через окно возврата.

И вот гиф это работает!

pi day gif


8
Забудьте о Java, это должен быть самый многословный язык
Downgoat

@ Downgoat Полагаю, что он должен быть «читабельным, как английский» или что-то в этом роде ... мы немного его используем на одной из моих работ, и мне очень не нравится, когда мне приходится вносить изменения в такие скрипты.
Крис Сирфице

@ChrisCirefice Да, нет - у этого языка есть некоторые раздражающие части к этому. т.е. объем системы объем.
Аддисон Крамп

13

Mathematica + coreutils, 20 байтов

<<"!date +%m.%d%y"#&

К счастью, Mathematica интерпретирует вывод внешней команды как выражение. В этом случае выходные данные являются действительными числами с плавающей запятой, так что #подразумевается умножение на аргумент функции .


Это комбинация, о которой я не знал.
CalculatorFeline

12

Луа, 30 27 байт

print(...*os.date"%m.%d%y")

Умножьте первый аргумент командной строки на текущую дату в формате mm.ddyy, который на самом деле 03.1416.


9

Bash + bc, 25 20 байт

date +%m.%d%y\*$1|bc

Спасибо manatwork за сохранение пяти байтов.

Использование:

$ ./pi-round.sh 3
9.4248

Эта нотация здесь такая длинная:date +%m.%d%y\*$1|bc
manatwork

@ manatwork ты прав! Я сам играл с тем же, но не мог понять, как это объединить. Благодарность!
andlrc

6

PowerShell v2 +, 46 28 25 байт

$args[0]*(Date -F "M.dy")

Довольно просто. Принимает ввод $args[0]и умножает его на дату, отформатированную какM.dy ( Get-подразумевается). Обратите внимание, что это может занять много времени для запуска на v2, поскольку он выполняет итерацию возможных замен Date(например, проверку %PATH%переменной среды и т. Д.), Прежде чем остановиться наGet-Date .


Можете ли вы сократить пространство после -f?
Бриантист

1
@briantist К сожалению, не здесь. Мы злоупотребляем распознаванием образов PowerShell, поскольку фактический флаг есть -Format. С такими флагами вам просто нужно быть недвусмысленным (например, если бы у вас были -Debugи в -Delimiterкачестве возможных вариантов вам понадобилось бы как минимум три буквы для дифференциации). Удаление пробела означает, что PowerShell пытается проанализировать флаг, -F"M.dy"но не может найти соответствующий аргумент и выдает ошибку.
AdmBorkBork

аааа я вижу это сейчас Вот что я получаю за чтение этого в поезде после долгого дня. Я интерпретировал это как -fоператора. Имеет смысл сейчас.
бриантист

6

R 3.2.4, 55 51 47 байтов

редактировать я понял, что я мог бы использоватьscan благодаря @FryAmTheEggMan. Уменьшено на 4 байта благодаря @MickyT.

scan()*as.numeric(format(Sys.Date(),'%m.%d%y'))

Первая попытка в гольф. С праздником Пи!


1
Добро пожаловать в PPCG :) Я не программист на R, но вам не нужно предоставлять именованную функцию, просто выражение, которое оценивает функцию. Так что я уверен, что вы можете бросить f=.
FryAmTheEggman

2
Вы можете пойти еще дальше и сделатьscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doubleвместо того, чтобы as.numericсохранить дополнительный байт
Flounderer

5

GNU Awk, 23 символа

$0*=strftime("%m.%d%y")

Образец прогона:

bash-4.3$ awk '$0*=strftime("%m.%d%y")' <<< 3
9.4248

5

Pyth, 19 байт

*Qvs[.d4\..d5>2`.d3

Попробуй это здесь!
Работает только в 2016-03-14 конечно.

объяснение

* Qvs [.d4 \ .. d5> 2`.d3 # Q = input

     .d4 # текущий месяц
        \. # точка между месяцем и днем
          .d5 # текущий день месяца
             > 2`.d3 # последние 2 цифры года
   s [# объединить все в строку
  v # eval -> конвертировать в float
* Q # умножить с вводом, чтобы получить окружность

5

PHP, 45 26 25 24 байта

Использует кодировку Windows-1252

<?=$argv[1]*date(~‘Ñ•†);

Запустите так:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • Сохранено 19 байт с использованием date()вместоDateTime::format
  • Сохраненный байт с помощью тега echo
  • Сохранение байта с использованием кодировки ISO-8859 и отрицания строки формата, поэтому нет необходимости в двойных кавычках. Может немного испортить ваш терминал при запуске из CLI, но работает.

Если вы предполагаете, что register_globals имеет значение true, вы можете использовать $nvia /?n=3в URL.
Мартейн

@Martijn Для этого требуется PHP 4.1 или настройка с использованием php.iniфайла. Перед этим Аросс сказал, что хочет уклониться от такого метода.
Исмаэль Мигель

4

Python 2, 58 символов

import time
print float(time.strftime("%m.%d%y"))*input()

Попытайся!

Объяснение:

import time                                   # Import time time module
print                                         # Print the following
      float(                                  # Cast to float
            time.strftime("%m.%d%y"))         # Format the time as MM.DDYY
                                     *input() # Multiply by input

4

JavaScript, 41 39 символов

Это использует собственный метод только для Firefox .

d=>new Date().toLocaleFormat`%m.%d%y`*d

Благодаря:

Пример запуска (веб-консоль Firefox):

> (d=>new Date().toLocaleFormat`%m.%d%y`*d)(3)
9.4248

Примечание: это не удастся в Firebug Console. Кажется , что Firebug выполняет некоторое расширение на строке шаблона, преобразуя `%m.%d%y`в `%__fb_scopedVars(m).d%y`перед передачей его в код.


1
-2 байта: d=>new Date().toLocaleFormat`%m.%d%y`*d
Исмаэль Мигель

Ой. [facepalm] Не знаю почему, я обычно забываю этот трюк. Хотя я использую шаблонные строки регулярно.
Манатворк

Я знаю. Я действительно тоже не понимаю. То, что я пытаюсь получить, это способ удалить это newоттуда.
Исмаэль Мигель

Я попробовал это на Firefox, и он работал нормально. Я скопировал с консоли. Так как я заменил ('...')на 2 обратных знака, это 2 байта.
Исмаэль Мигель



2

Vitsy + coreutils, 19 байтов

'y%d%.m%+ etad',W*N

Объяснение:

'y%d%.m%+ etad',W*N
'y%d%.m%+ etad'       Push 'date +%m.%d%y' to the stack.
               ,      Execute as shell.
                W     Grab input from STDIN and eval it.
                 *    Multiply the top two items
                  N   Output as a number.

Невозможно запустить в безопасном режиме, так как при этом используется метод exec Runtime.


2

SpecBAS , 39 байт

1 INPUT n: ?n*VAL DATE$(TIME,"mm.ddyy")

Ничего необычного. Форматирует дату как строку, а затем умножает ввод на VAL(значение) этой строки.


Ссылка интерпретатора / компилятора?
кот


Я отредактировал ссылку в вашем ответе
кот


2

Python 3, 74 54 байта

используя модуль времени вместо datetime как ответ Loovjo

import time
lambda n:n*float(time.strftime('%m.%d%y'))

предыдущее решение

from datetime import*
lambda n:n*float(datetime.now().strftime('%m.%d%y'))

2
@ Zenadix Мета-консенсус заключается в том, что безымянные функции в порядке.
FryAmTheEggman

2

Google Sheets, 13 байтов

Байты рассчитываются с одним байтом на символ, нулевыми байтами на ячейку, за исключением указанной входной ячейки, двумя байтами. Знак равенства для запуска формулы не учитывается. (Я не знаю, стандартно ли это, поправьте меня, если я ошибаюсь.)

Запустите сниппет, чтобы увидеть код.

table {
  empty-cells: show;
}
table,
th,
td {
  border: 1px solid black;
}
<table border="1">
  <tr>
    <th></th>
    <th>1</th>
    <th>2</th>
    <th>3</th>
  </tr>
  <tr>
    <td>A</td>
    <td>&lt;input></td>
    <td style="text-align:right">3.1416</td>
    <td style="font-family:'Ubuntu Mono',monospace">=<span style="color:rgb(257,142,29)">A1</span>*<span style="color:rgb(126,55,148)">A2</span>
    </td>
  </tr>
</table>

Это работает, потому что вы можете определить свои собственные форматы даты в Google Sheets. Я сделал так, чтобы это было <month>.<day><year>.


Вы можете спросить на мета об этой системе оценки. ;П
Аддисон Крамп

Сделаю, когда у меня будет время (может быть, сегодня вечером в Мэриленде)
OldBunny2800

2

Pyke , 16 15 байт, кодировка ASCII

C867wä%J"bT4^/*

Объяснение:

C867            - b,c,d = year, day, month
    wä          - a = base_96("ä") - 100
      %         - a = a%b
       J"       - a = "".join([a,c,d])
         b      - b = base(a, 10)
          T4^   - a = 10^4
             /  - a = a/b
              * - imp_print(a*eval_or_not(input))

или 11 байтов (неконкурентные), (добавляет одиночные строки, год из двух цифр, строковые суммы)

C856\.R3sb*

Объяснение:

C856        - a,b,c = 2d_year, day, month
    \.      - d = "."
      R3    - a,b,c = b,c,a
        s   - a = sum(a,b,c)
         b  - a = base(a, 10)
          * - imp_print(a*eval_or_not(input))

Я предполагаю, что это другой Pyke, чем pyke.sourceforge.net ? Можете ли вы опубликовать ссылку на спецификацию языка?
Роберт Фрейзер


Просто интересно, какую кодировку использует Pyke? Если это UTF-8, это 16 байтов.
OldBunny2800

1
@ OldBunny2800 Это не имеет значения; в этом случае он использует старый добрый ascii, так как все кодовые точки ниже 255. Согласно meta.codegolf.stackexchange.com/a/5879/32686 , ответ может определить свою собственную кодировку бесплатно
Blue

1

JavaScript ES6, 68 66 байт

Сохранено 2 байта благодаря dev-null!

x=>x*((a=new Date).getMonth()+1+"."+a.getDate()+(a.getYear()-100))

Анонимная функция. Некоторые использует:

f(1)    == 3.1416
f(5)    == 15.708
f(f(2)) == 19.73930112

1
Вы должны попробовать использоватьwith
Исмаэль Мигель

1

Tcl / Tk, 58 байт

puts [expr {[gets stdin]*[clock f [clock se] -f %N.%d%g]}]

(Это полная программа. Если вы хотите обмануть и удалить явный putsоператор, тогда это всего лишь 51 байт - вам нужно запустить tclsh и ввести / вставить следующее напрямую :)

expr {[gets stdin]*[clock f [clock se] -f %N.%d%g]}

1

Java 114 байт

public double p(double d){
  return (d*Double.parseDouble(new SimpleDateFormat("MM.ddyy").format(new Date())));
}

96 байт: float p(float d){return d*Float.parseFloat(new SimpleDateFormat("MM.ddyy").format(new Date()));}
Эддисон Крамп,

1

Ракетка, 112 знаков

(define d(seconds->date(current-seconds)))(*(read)(+(date-month d)(*(date-day d).01)(*(-(date-year d)2e3)1e-4)))

Читает число из ввода в стандартном синтаксисе читателя.


1

TI-84 Basic, 30 байтов

Работает на калькуляторах ТИ-83/84; E - это научный маркер, а ~ - отрицательный.

Prompt D:getDate:D(Ans(2)+E~4Ans(1)-.2+.01Ans(3

Прецедент

D=?3
          9.4248



1

TI-BASIC, 16 13 9 байтов

Xround(π,1+min(getDate

Мы кругом π до десятичного знака, равного минимуму{month,day,year} , и затем умножаем его на вход.

Это функция, которая принимает входные данные через X. Сохраните ее, например, в одной из переменных Y Y1, а затем вызовите, как Y1([number])на домашнем экране.


Кажется, есть некоторое несогласие с тем, что вход через вход Ansразрешен.
AdmBorkBork

Как это только 13 байтов? Не считая вход A, я считаю 22 символа.
OldBunny2800

1
@ OldBunny2800 TI-BASIC основан на токене, каждый атом представлен одним или двумя байтами.
Адам

@ OldBunny2800 Кодовая страница здесь .
lirtosiast

1

APL , 19 байт

⎕×0.01⊥⌽⍎2⌽8↑2↓⍕⎕TS

⎕TSявляется 2016 3 14 12 34 56 789то 14 март - е , 2016 прямо перед 12:35
сделайте в строку, то есть '2016 3 14 12 34 56 789'
8↑2↓падение первых два ( '20') принимает следующие восемь ( '16 3 14 ')
2⌽повернуть два символа, давая ' 3 14 16'
превратить числа ( 3 14 16)
обратный список, давая 16 14 3
0.01⊥оценку в базе ¹/₁₀₀ , = 16 × 0,01² + 15 × 0,01¹ + 3 × 0,01⁰ = 0,0016 + 0,15 + 3 = 3,1416
⎕× умножить на вход

или

⎕×1E¯4⊥⌽⍎2⌽7↑2↓⍕⎕TS

⎕TSэто 2016 3 14 12 34 56 789, то есть 14 март - го , 2016 прямо перед 12:35
сделайте в строку, то есть '2016 3 14 12 34 56 789'
7↑2↓падение первых два ( '20') принимает следующие семь ( '16 3 14')
2⌽повернуть два символа, давая ' 3 1416'
превратить числа ( 3 1416)
обратный список, давая 1416 3
1E¯4⊥оценку в базе ¹/ ₁₀₀₀₀, = 1416 × 0,01¹ + 3 × 0,01⁰ = 0,1416 + 3 = 3,1416
⎕×умножить на вход


Как это работает?
OldBunny2800

1
@ OldBunny2800 Очистить?
Адам

Да, спасибо, но в UTF-8 это 38 байтов.
OldBunny2800


1
@ OldBunny2800 APL использует свою собственную кодовую страницу - каждый из этих символов занимает один байт. (Это было до ASCII, заметьте ...)
спагетто
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.