Щасливий день округлого Пі


25

Щоб відсвяткувати день округлого пі, ви повинні скористатися сьогоднішньою датою, щоб скласти програму, яка займає діаметр кола і виводить його окружність, помноживши діаметр на 3.1416, де 3.1416 потрібно отримати, використовуючи сьогоднішню дату.

Input 3
Output 9.4248
etc.

Не приймає дату як вхідну. Вам не доведеться використовувати всі компоненти дати, але цифри pi повинні надходити від форматування об'єкта Date або використання об'єкта date для його отримання. Поки відповіді виглядають добре.

Не впевнений, що ще вказати. Усі відповіді поки що відповідають тому, що я очікував.

Моє обмеження полягало в тому, що ви повинні використовувати компоненти дати, щоб придумати Pi. Можна, звичайно, використовувати компоненти, помноживши на 0, а потім додати 3.1416, але це нудно і витрачає дорогоцінні характеристики!

Найкоротший код виграє!


61
Що такого особливого в 14/3/16?
Ніл

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

7
@Neil: Оскільки 3/14/16 та 31/4/16 не є дійсними фактичними датами у форматі D / M / Y. Немає 14 місяців, а у квітні 30 днів. Я особисто думаю, що ми повинні почекати до 6/28/32 (M / D / Y) або, можливо, 6/2/83 (D / M / Y), але це зовсім інша свята війна.
Даррель Гофман

8
@DarrelHoffman Ти тауський чоловік, якого я бачу.
jmasterx

16
На жаль, це єдиний день PI у культурній зоні США. Європейці, з їх дурним лексиграфічно впорядкованим побаченням дати, не мають щорічних ПІ днів. Запасіться сумною думкою для них, коли ви їсте своє пі (е) сьогодні.
ТЕД

Відповіді:


8

05AB1E, 16 13 байт

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

Спробуйте в Інтернеті.

На жаль, помилка з floats робить цей байт довше: /

Дякуємо Аднану за те, що він пограв у 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 більшість компіляторів C не вимагає від вас #includeстандартних заголовків бібліотеки. Включення їх вручну майже завжди є хорошою ідеєю, але їх пропускання значно полегшує гольф з кодом у C.
Джош

12
@tac відповідь поводиться здебільшого так само, як і функція. Кілька відповідей тут є і окремими функціями. Я не бачу сенсу в наданні вибіркової mainфункції, щоб продемонструвати, як викликати цей єдиний макрос аргументу.
Джош

1
@tac Я думаю, що стандартні правила [code-golf] полягають у тому, що, якщо заборонені функції не в порядку.
Міндвін

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

Змінна a - це об'єкт дати. Я називаю всю інформацію про свою дату.

Місяць, день та рік

Дзвінки місяця, дня та року фактично повертають об'єкт, який зазвичай повертає рядок. Щоб правильно використовувати його як число, я оточив його з обох сторін математичними операціями, щоб автоматично передати його на число.

1е-4

1e-4- байт коротший, ніж .0001.

мод.01

.діє як роздільник автокорекції AppleScript. Використовуючи це, я можу використовувати модуль і все ще зберігати його як байт.

Немає заяви / журналу повернення

Останнє значення, обчислене автоматично, повертається програмою. Я виводжу число, обчислене через поле повернення.

І ось цей gif працює!

пі ден 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

Завдяки манатурності за економію п'яти байтів.

Використання:

$ ./pi-round.sh 3
9.4248

Ця строкова позначення настільки довга:date +%m.%d%y\*$1|bc
маніпуляція

@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

Pyth, 19 байт

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

Спробуйте тут!
Працює лише в 2016-03-14 звичайно.

Пояснення

* Qvs [.d4 \ .. d5> 2`.d3 # Q = вхід

     .d4 # поточний місяць
        \. # точка між місяцем і днем
          .d5 # поточний день місяця
             > 2`.d3 # останні 2 цифри року
   s [# concat усе в рядку
  v # eval -> перетворити на плавати
* 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 є істинним, ви можете використовувати $nvia /?n=3в URL-адресі.
Martijn

@Martijn Для цього потрібен PHP 4.1 або встановити його за допомогою php.iniфайлу. Попереду сказане, що хоче відмовитися від такого методу.
Ісмаїл Мігель

4

Пітон 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

Математика, 54

.0001FromDigits[Now@{"Month","Day","YearShort"},100]#&

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.

Неможливо запустити в безпечному режимі, оскільки для цього використовується метод виконання Runtime.


2

SpecBAS , 39 байт

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

Нічого незвичайного. Форматує дату у вигляді рядка, а потім помножує вхід на VAL(значення) цього рядка.


Посилання для перекладача / укладача?
кіт


Я відредагував посилання на вашу відповідь
кіт


2

Python 3, 74 54 байт

використовуючи модуль часу замість дати, як відповідь Ловджо

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 Таблиці, 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 Таблицях. Я зробив так, щоб воно було <month>.<day><year>.


Ви можете запитати в мета про цю систему балів. ; P
Addison Crump


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 байт

Працює над калькуляторами TI-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 байт? Не рахуючи Введення А, я рахую 22 символи.
OldBunny2800

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

@ OldBunny2800 Кодова сторінка тут .
ліртосіаст

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.