Glücklicher gerundeter PU-Tag


25

Um den Rounded Pi Day zu feiern, müssen Sie das heutige Datum nutzen, um ein Programm zu erstellen, das den Durchmesser eines Kreises erfasst und dessen Umfang ausgibt, indem Sie den Durchmesser mit 3.1416 multiplizieren, wobei 3.1416 mit dem heutigen Datum erhalten werden muss.

Input 3
Output 9.4248
etc.

Nimmt das Datum nicht als Eingabe. Sie müssen nicht alle Komponenten des Datums verwenden, aber die Ziffern von pi müssen aus der Formatierung eines Datumsobjekts oder der Verwendung eines Datumsobjekts stammen, um es zu erhalten. Die Antworten sehen bisher gut aus.

Ich bin mir nicht sicher, was ich sonst angeben soll. Alle bisherigen Antworten entsprechen meinen Erwartungen.

Meine Einschränkung war, dass Sie Komponenten des Datums verwenden müssen, um mit Pi zu kommen. Sie können natürlich die Komponenten verwenden, mit 0 multiplizieren und dann 3.1416 hinzufügen, aber das ist langweilig und verschwendet wertvolle Zeichen!

Kürzester Code gewinnt!


61
Was ist das Besondere am 14.3.16?
Neil

5
Definieren Sie anhand des heutigen Datums . Ich könnte das Datum als Zahl erhalten, durch sich selbst teilen und mit einer vordefinierten Konstante multiplizieren fürpi
Luis Mendo

7
@Neil: Da der 14.03.16 und der 31.04.16 keine gültigen tatsächlichen Daten im D / M / Y-Format sind. Es gibt keine 14 Monate und der April hat nur 30 Tage. Ich persönlich denke, wir sollten bis zum 28.06.32 (M / D / Y) oder vielleicht bis zum 02.06.33 (D / M / Y) warten, aber das ist ein ganz anderer heiliger Krieg.
Darrel Hoffman

8
@ DarrelHoffman Du bist ein Tau Mann, den ich sehe.
Jmasterx

16
Leider ist es der einzige PI-Tag im kulturellen Bereich der USA. Die Europäer haben mit ihrer albernen lexigraphisch vernünftigen Datumsbestellung keine jährlichen PI-Tage. Verschone ihnen einen traurigen Gedanken, wenn du heute dein Pi (e) isst.
TED

Antworten:


8

05AB1E, 16 13 Bytes

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

Probieren Sie es online aus.

Leider macht ein Fehler mit Floats dieses Byte länger: /

Vielen Dank an Adnan für das Golfen mit 3 Bytes.

Erläuterung

ž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

¦¦Stattdessen 2000-ist drei Bytes kürzer;)
Adnan

11
+1 žfžežgklingt wie ein schönes tschechisches Wort :)
yo '15.

In UTF-8 sind dies 19 Byte.
OldBunny2800

3
@ OldBunny2800 05AB1E verwendet CP1252 für die Codierung.
ein Spaghetto

Wanze mit Hin- und Herbewegungen?
CalculatorFeline

19

C 32 Bytes

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

Wenn es in Ordnung ist, ein bisschen mehr Genauigkeit zu verlieren, kann ich es auf ungefähr 29 Bytes bringen, wobei es immer noch auf 4 Stellen nach dem Komma genau ist (zum Zeitpunkt dieses Beitrags):

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

#include<time.h>?
Katze

Wo ist der ausführbare Code? Dies ist nur etwas, das der Präprozessor kopieren / einfügen kann. ein Ausschnitt. Wir mögen hier lauffähige Implementierungen.
Katze

3
Bei den meisten C-Compilern ist es nicht erforderlich, dass Sie #includeStandard-Bibliotheks-Header verwenden. Sie manuell einzubeziehen ist fast immer eine gute Idee, aber das Weglassen von Code erleichtert das Golfen in C erheblich.
Josh

12
@tac Die Antwort verhält sich meist genauso wie eine Funktion. Einige Antworten hier sind auch Standalone-Funktionen. Ich sehe keinen Sinn darin, eine Beispielfunktion mainbereitzustellen, um zu demonstrieren, wie man dieses Makro mit einem einzigen Argument aufruft.
Josh

1
@tac Ich denke, die Standardregeln für [Code-Golf] sind, dass es keine verbotenen Funktionen gibt.
Mindwin

14

AppleScript, 122 120 Bytes

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)

Variable a

Variable a ist ein Datumsobjekt. Ich rufe alle meine Datumsangaben ab.

Monat, Tag und Jahr

Die Aufrufe von Monat, Tag und Jahr geben tatsächlich ein Objekt zurück, das normalerweise eine Zeichenfolge zurückgibt. Um es richtig als Zahl zu verwenden, habe ich es auf beiden Seiten mit mathematischen Operationen umgeben, um es automatisch in eine Zahl umzuwandeln.

1e-4

1e-4ist ein Byte kürzer als .0001.

mod.01

.Dient als Trennzeichen für die automatische AppleScript-Korrektur. Auf diese Weise kann ich modulo verwenden und trotzdem ein Byte für mich behalten.

Keine Rückmeldung / Protokoll

Der zuletzt automatisch berechnete Wert wird vom Programm zurückgegeben. Ich gebe die berechnete Anzahl über die Rückgabebox aus.

Und hier ist ein GIF davon!

pi day gif


8
Vergiss Java, dies muss die ausführlichste Sprache sein
Downgoat

@Downgoat Ich denke, dass es "lesbar wie Englisch" oder so sein soll ... wir verwenden es ein bisschen bei einem meiner Jobs und ich mag es wirklich nicht, wenn ich Änderungen an solchen Skripten vornehmen muss.
Chris Cirefice

@ChrisCirefice Ja, nein - diese Sprache hat einige nervige Teile. dh Lautstärke Systemvolumen.
Addison Crump

13

Mathematica + Coreutils, 20 Bytes

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

Glücklicherweise interpretiert Mathematica die Ausgabe eines externen Befehls als Ausdruck. In diesem Fall ist die Ausgabe ein gültiger Gleitkommawert, sodass die Multiplikation mit dem Funktionsargument #impliziert ist.


Das ist eine Kombination, von der ich nicht wusste, dass sie existiert.
CalculatorFeline

12

Lua, 30 27 Bytes

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

Multiplizieren Sie das erste Befehlszeilenargument mit dem aktuellen Datum im mm.ddyytatsächlichen Format 03.1416.


9

Bash + Bc, 25 20 Bytes

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

Dank an manatwork für die Einsparung von fünf Bytes.

Verwendung:

$ ./pi-round.sh 3
9.4248

Diese Here-String-Notation ist so lang:date +%m.%d%y\*$1|bc
Manatwork

@manatwork du bist richtig! Ich spielte selbst mit demselben herum, konnte aber nicht herausfinden, wie ich es kombinieren sollte. Vielen Dank!
andlrc

6

PowerShell v2 +, 46 28 25 Byte

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

Ziemlich einfach. Nimmt Eingaben entgegen $args[0]und multipliziert sie mit dem Datum, das alsM.dy ( Get-impliziert) formatiert ist. Beachten Sie, dass die Ausführung von v2 sehr lange dauern kann, da mögliche Substitutionen Date(z. B. Überprüfen der %PATH%Umgebungsvariablen usw.) wiederholt werden, bevor Sie sich für v2 entscheiden Get-Date.


Können Sie den Raum danach schneiden -f?
Briantist

1
@ Briantist Leider nicht hier. Wir missbrauchen die Mustererkennung von PowerShell, da das aktuelle Flag lautet -Format. Mit solchen Flags müssen Sie nur eindeutig sein (wenn Sie zum Beispiel -Debugund -Delimiterals mögliche Optionen hätten, würden Sie mindestens drei Buchstaben zur Unterscheidung benötigen). Das Entfernen des Leerzeichens bedeutet, dass PowerShell versucht, das Flag zu analysieren, -F"M.dy"jedoch kein passendes Argument findet und daher einen Fehler auslöst.
AdmBorkBork

ahhh ich sehe es jetzt. Das bekomme ich, um das nach einem langen Tag in einem Zug zu lesen. Ich habe es als -fOperator interpretiert . Macht jetzt total Sinn.
Briantist

6

R 3.2.4, 55 51 47 Bytes

Bearbeiten Ich erkannte , ich konnte scandank @FryAmTheEggMan. Reduzierte 4 Bytes dank @MickyT.

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

Erster Golfversuch. Alles Gute zum Pi Tag!


1
Willkommen bei PPCG :) Ich bin kein R-Programmierer, aber Sie müssen keine benannte Funktion angeben, sondern nur einen Ausdruck, der zu einer Funktion ausgewertet wird. Also bin ich mir ziemlich sicher, dass du das fallen lassen kannst f=.
FryAmTheEggman

2
Sie können noch weiter gehen und tunscan()*as.numeric(format(Sys.Date(),'%m.%d%y'))
MickyT

2
as.doublestatt as.numericspeichert ein zusätzliches Byte
Flunderer

5

GNU Awk, 23 Zeichen

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

Probelauf:

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

5

Pyth, 19 Bytes

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

Probieren Sie es hier aus!
Funktioniert natürlich nur am 14.03.2016.

Erläuterung

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

     .d4 # aktueller Monat
        \. # Punkt zwischen Monat und Tag
          .d5 # aktueller Tag des Monats
             > 2`.d3 # letzte 2 Stellen des Jahres
   s [# alles zu einer Zeichenkette zusammenfassen
  v # eval -> in float konvertieren
* Q # Mit Eingabe multiplizieren, um den Umfang zu erhalten

5

PHP, 45 26 25 24 Bytes

Verwendet die Windows-1252-Codierung

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

Laufen Sie wie folgt:

echo '<?=$argv[1]*date(~‘Ñ•†);' | php -- 3
  • 19 Bytes mit date()anstelle von gespeichertDateTime::format
  • Mit dem Echo-Tag ein Byte gespeichert
  • Durch Verwendung der ISO-8859-Codierung und Negieren der Formatzeichenfolge wurde ein Byte gespeichert, sodass keine doppelten Anführungszeichen erforderlich sind. Könnte Ihr Terminal etwas durcheinander bringen, wenn es über CLI ausgeführt wird, funktioniert aber.

Wenn Sie register_globals auf true setzen, können Sie $nvia /?n=3in der URL verwenden.
Martijn

@Martijn Dazu ist PHP 4.1 erforderlich oder es muss mithilfe der php.iniDatei festgelegt werden. sagte aross vorher, der von einer solchen methode ablenken will.
Ismael Miguel

4

Python 2, 58 Zeichen

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

Versuch es!

Erläuterung:

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 Zeichen

Hierbei wird eine firmeneigene Nur-Firefox- Methode verwendet.

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

Dank an:

Beispiellauf (Firefox Web Console):

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

Hinweis: Dies schlägt in der Firebug-Konsole fehl. Es scheint , dass eine gewisse Ausdehnung Firebug auf der Vorlage Zeichenfolge durchführt, die Umwandlung `%m.%d%y`in die, `%__fb_scopedVars(m).d%y`bevor sie an den Code übergeben.


1
-2 Bytes:d=>new Date().toLocaleFormat`%m.%d%y`*d
Ismael Miguel

Oh. [facepalm] Keine Ahnung warum, ich vergesse normalerweise diesen Trick. Obwohl ich die Template-Strings regelmäßig benutze.
Manatwork

Ich kenne. Ich verstehe es auch nicht. Was ich versuche zu bekommen, ist ein Weg, das newvon dort zu entfernen .
Ismael Miguel

Ich habe es in Firefox ausprobiert und es hat gut funktioniert. Ich habe von der Konsole aus kopiert. Da ich ('...')mit 2 Backticks ersetzt habe, sind das 2 Bytes.
Ismael Miguel


2

Mathematica, 54

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

2

Vitsy + Coreutils, 19 Bytes

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

Erläuterung:

'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.

Kann nicht im abgesicherten Modus ausgeführt werden, da hierfür die exec-Methode der Runtime verwendet wird.



2

Oracle 11g, 50 49 Bytes

SELECT &n*to_char(sysdate,'MM.DDYY')FROM dual;

Dank @MickyT ein Byte weniger


Sie können das Leerzeichen vor demFROM
MickyT

2

Python 3, 74 54 Bytes

Verwenden Sie das Zeitmodul anstelle von datetime wie Loovjos Antwort

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

vorherige Lösung

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

2
Die @Zenadix Meta Konsens ist , dass unbenannte Funktionen in Ordnung sind.
FryAmTheEggman

2

Google Sheets, 13 Bytes

Bytes werden mit einem Byte pro Zeichen berechnet, null Bytes pro Zelle, mit Ausnahme der festgelegten Eingabezelle, zwei Bytes. Das Gleichheitszeichen zum Starten einer Formel wird nicht gezählt. (Ich weiß nicht, ob dies Standard ist. Bitte korrigieren Sie mich, wenn ich falsch liege.)

Führen Sie den Code aus, um den Code zu sehen.

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>

Dies funktioniert, weil Sie in Google Sheets Ihre eigenen Datumsformate definieren können. Ich habe es so gemacht, dass es ist <month>.<day><year>.


Möglicherweise möchten Sie auf Meta nach diesem Bewertungssystem fragen. ; P
Addison Crump

Wird es tun, wenn ich Zeit habe (vielleicht heute Abend in Maryland)
OldBunny2800

2

Pyke , 16 15 Bytes, ASCII - Codierung

C867wä%J"bT4^/*

Erläuterung:

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))

oder 11 Bytes (nicht konkurrierend), (fügt Zeichenketten-Singles, zweistellige Jahreszahlen, Zeichenketten-Summen hinzu)

C856\.R3sb*

Erläuterung:

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))

Ich vermute, das ist ein anderer Pyke als pyke.sourceforge.net ? Können Sie einen Link zur Sprachspezifikation posten?
Robert Fraser


Ich frage mich nur, welche Codierung verwendet Pyke? Wenn es sich um UTF-8 handelt, sind dies 16 Byte.
OldBunny2800

1
@ OldBunny2800 Es spielt keine Rolle; In diesem Fall werden gute alte ASCII-Werte verwendet , da alle Codepunkte unter 255 liegen. Laut meta.codegolf.stackexchange.com/a/5879/32686 kann die Antwort eine eigene Codierung definieren
Blue

1

JavaScript ES6, 68 66 Bytes

2 Bytes gespart dank dev-null!

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

Anonyme Funktion. Einige Anwendungen:

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

1
Sie sollten versuchen,with
Ismael Miguel

1

Tcl / Tk, 58 Bytes

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

(Das ist ein vollständiges Programm. Wenn Sie die explizite putsAnweisung schummeln und entfernen möchten, sind es nur 51 Bytes - Sie müssten jedoch tclsh starten und Folgendes direkt eingeben / einfügen :)

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

1

Java 114 Bytes

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

96 Bytes:float p(float d){return d*Float.parseFloat(new SimpleDateFormat("MM.ddyy").format(new Date()));}
Addison Crump

1

Schläger, 112 Zeichen

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

Liest die Zahl aus der Eingabe in der Standardlesersyntax.


1

TI-84 Basic, 30 Byte

Funktioniert mit TI-83/84-Taschenrechnern; E ist das wissenschaftliche Notationstoken und ~ ist das negative Token.

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

Testfall

D=?3
          9.4248

1

R 48 Bytes

d*as.double(format(Sys.Date(),format="%m.%d%y"))

1

MATL , 17 Bytes

Z'2$'mm.ddyy'XOU*

Probieren Sie es online!

Z'              % get current date and time as float 
2$'mm.ddyy'XO   % format as a string with custom format 
U               % convert to number 
*               % multiply by implicit input 

1

TI-BASIC, 16 13 9 Bytes

Xround(π,1+min(getDate

Wir runden πauf eine Dezimalstelle, die dem Minimum von entspricht{month,day,year} , und multiplizieren sie dann mit der Eingabe.

Diese Funktion nimmt Eingaben über X entgegen. Speichern Sie sie beispielsweise in einer der Y-Variablen Y1und rufen Sie sie dann wie Y1([number])auf dem Startbildschirm auf.


Es scheint einige Meinungsverschiedenheiten zu geben, dass die Eingabe über Anszulässig ist.
AdmBorkBork

Wie ist das nur 13 Bytes? Ohne Eingang A zähle ich 22 Zeichen.
OldBunny2800

1
@ OldBunny2800 TI-BASIC basiert auf einem Token. Jedes Atom wird als ein oder zwei Bytes dargestellt.
Adám

@ OldBunny2800 Die Codepage ist hier .
Lirtosiast

1

APL , 19 Bytes

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

⎕TSist 2016 3 14 12 34 56 78914 , dh März rd 2016 kurz vor 12.35
make in string, dh '2016 3 14 12 34 56 789'
8↑2↓fallen ersten beiden ( '20') dann nächsten acht nehmen ( '16 3 14 ')
2⌽drehen zwei Zeichen, was ' 3 14 16'
machen in Zahlen ( 3 14 16)
kehren Sie die Liste, was zu 16 14 3
0.01⊥bewerten in Basis ¹/₁₀₀ , = 16 × 0,01² + 15 × 0,01¹ + 3 × 0,01⁰ = 0,0016 + 0,15 + 3 = 3,1416
⎕×multiplizieren mit Eingabe

oder

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

⎕TSDies ist 2016 3 14 12 34 56 789, dh der 14. März 2016, kurz vor 12:35 Uhr. make in string, dh erst zwei ( ) ablegen, dann die nächsten sieben ( ) zwei Zeichen drehen, make in Zahlen ( ) die Liste umkehren und auswerten in Basis ¹⁄ & Sub1; & sub0 ;, = 1416 x 0,01¹ + 3 x 0,01 & sub0; = 0,1416 + 3 = 3,1416 multiplizieren mit Eingabe
'2016 3 14 12 34 56 789'
7↑2↓'20''16 3 14'
2⌽' 3 1416'
3 1416
1416 3
1E¯4⊥
⎕×


Wie funktioniert das?
OldBunny2800

1
@ OldBunny2800 Klar?
Adám

Ja, danke, aber in UTF-8 sind das 38 Bytes.
OldBunny2800


1
@ OldBunny2800 APL verwendet eine eigene Codepage - jedes dieser Zeichen besteht aus einem Byte. (Dies war vor ASCII wohlgemerkt ...)
ein Spaghetto
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.