Đếm ngược 100 ngày


25

Thông thường bắt đầu đếm ngược 100 ngày trước một sự kiện, có thể là do hệ thống cơ sở 10 của chúng tôi. Ví dụ về điều này có thể được tìm thấy ở khắp mọi nơi:

  • 100 ngày cho đến sinh nhật của bạn
  • 100 ngày cho đến ngày cưới
  • 100 ngày cho đến khi bầu cử
  • 100 ngày cho đến khi chúng tôi tốt nghiệp
  • 100 ngày cho đến ngày đáo hạn của cô ấy
  • 100 ngày cho đến mùa bóng đá
  • 100 ngày cho đến khi bạn nhận được huy hiệu Fanatic

Bạn nhận được hình ảnh. Có vẻ như ngày thứ 100 trước một sự kiện chỉ đứng thứ hai sau sự kiện thực tế. Vì vậy, đối với thử thách này, tôi cần biết ngày nào sẽ diễn ra trong 100 ngày, để tôi có thể xác định những gì tôi cũng nên bắt đầu đếm ngược.

Đầu vào

Không có đầu vào

Đầu ra

Ngày 100 ngày kể từ ngày hiện tại dựa trên Lịch Gregorian tiêu chuẩn (Đảm bảo tính đến năm nhuận). Đầu ra là linh hoạt miễn là định dạng ngày là người đọc có thể (ví dụ như 2016-10-8, 10-8-16, [ 2016, 10, 8 ], 10/8/16 12:00:00 AM).

Chiến thắng

Code golf: mã ngắn nhất tính bằng byte


Ví dụ

100 ngày kể từ hôm nay (ngày 5 tháng 4 năm 2017) là thứ Sáu ngày 14 tháng 7 năm 2017.

Current                Future
-------                ------
01/01/2001 +100        04/11/2001
01/01/2004 +100        04/10/2004
01/01/1900 +100        04/11/1900
01/01/2000 +100        04/10/2000

07/04/2017 +100        10/12/2017
10/31/2017 +100        02/08/2018
12/25/2017 +100        04/04/2018

08/29/1941 +100        12/07/1941
06/03/2001 +100        09/11/2001

2
Tôi có thể thêm thời gian hiện tại vào đầu ra không?
Tít

1
@Titus không, chỉ là ngày trong tương lai
tuyến

1
Hầu hết các câu trả lời bao gồm một ngày và thời gian bây giờ, tôi nghĩ rằng điều này nên được cho phép.
GB

1
@GB Khi bạn xuất ngày trong tương lai, định dạng linh hoạt (có thể bao gồm dấu thời gian) miễn là nó có thể đọc được. Tuy nhiên, thời gian / ngày hiện tại không được chấp nhận.
Phi tuyến

5
" Vì hệ thống cơ sở 10 của chúng tôi "? Không, nếu chúng tôi tính theo nhị phân, chúng tôi có thể sẽ đếm ngược từ 100 - ngoại trừ việc đó chỉ mất bốn ngày, thay vì một trăm ...
Toby Speight

Câu trả lời:


42

Excel, 10

=NOW()+100

Trình diễn

nhập mô tả hình ảnh ở đây


1
Cũng hoạt động trong Google Sheets.
Okx

11
Excel luôn tốt cho mã golf liên quan đến phân tích ngày.
Kỹ sư Toast

2
Có một gói ngôn ngữ cho excel trong đó chức năng NOW được đánh vần chỉ bằng hai chữ cái không? Trong trường hợp đó, bạn có thể tiết kiệm 1 byte.
iFreilicht

13
Đúng, tiếng Hà Lan có 'nu ()'
Tominator

2
Mặc dù, chỉ mỗi phần ngày , bạn phải sử dụng =TODAY()+100hoặc=TEXT(NOW()+100,"MM/dd/yyyy")
KyleMit

20

Bash, 17 16 15 14 13 byte

date -d100day

Hóa ra datelệnh này có một số đầu vào khá linh hoạt cho thời gian tương đối. Bạn cũng có thể làm những việc như thế 1 year, 1 week ago, yesterday, vv Đó là khá mát mẻ.

-1 byte bằng cách nhận ra rằng bash không quan tâm đến ngữ pháp.
-1 byte vì không gian giữa 100daykhông cần thiết.
-1 byte vì tôi không cần dấu ngoặc kép nữa vì tôi không có khoảng trắng trong chuỗi.
-1 byte bằng cách xóa khoảng trắng sau -d(chỉ cảm ơn ASCII!)


Lệnh yêu thích mới +1
Phi tuyến

@NonlinearFbean Hah, yeah, nó có lẽ là một trong những lệnh yêu thích của tôi. Cảm ơn!
HyperNeutrino

Bạn không cần khoảng trống sau-d
ASCII - chỉ

@ ASCII-chỉ Oh, được thôi. Cảm ơn!
HyperNeutrino

10

PowerShell, 10 byte

(date)+1e2

Cảm ơn ConnorLSW cho thủ thuật + 1e2.

Có vẻ như nhân đôi ( 1e2là gấp đôi) cũng được thêm dưới dạng ngày.

Phiên bản trước, 12 byte:

(date)+"100"

Rõ ràng bạn có thể thêm chuỗi vào ngày trong PowerShell. Chuỗi "100"được chuyển đổi thành 100 ngày- TimeSpan.


2
Ok đừng hỏi tôi tại sao, nhưng mặc dù (date)+100không làm việc, (date)+1e2không ... Tôi đoán 1e2là thực sự là một doubletrong khi 100là một con số cho đến khi nó được biên dịch, tức là bạn có thể không gọi 100.GetType()nhưng bạn có thể 1e2.GetType()- đó của -2 và đưa chúng ta đến một trận hòa với Excel!
colsw

@ConnorLSW Nếu nó giúp hoặc thêm vào sự nhầm lẫn 100được xem là thêm 100 tick trong đó chuỗi "100"được lấy theo ngày. Cả hai đều là PS hợp lệ nhưng chỉ có một người làm những gì chúng ta cần.
Matt

@Matt 1e6vẫn là một số và được thêm dưới dạng ngày?
colsw

Thế là thú vị rồi. Có lẽ có nhiều điều đang diễn ra dưới mui xe nơi con số đó vượt quá ngưỡng .... Tôi không biết
Matt

Tôi nghĩ rằng bằng cách nào đó nó có liên quan đến loại DATE cũ là số dấu phẩy động 8 byte với số ngày được biểu thị dưới dạng số gia toàn bộ. Tôi đoán đó là những gì Excel đang sử dụng.
Danko Durbić


6

PHP, 28 byte

<?=date(Y_m_d,time()+864e4);

phiên bản có thể đọc được của con người, 35 byte:

<?=date(Y_m_d,strtotime("100day"));

hầu như có thể đọc được, 34 byte:

<?=date(Y_m_d,strtotime(1e2.day));

-4 byte nếu in thời gian cũng được chấp nhận: thay thế Y_m_dbằng rhoặc c.

Đó là ngày lễ quốc gia tại Pháp trong 100 ngày.


Các dấu gạch dưới khiến tôi phải làm "Tại sao lại nhấn mạnh, nó có phải là hằng số không? Không, một chuỗi OH WAIT 'SPACES' !!" Tài giỏi.
Martijn

@Martijn Bật E_NOTICEvà bạn Hayll biết: Y_m_dlà hằng số không xác định và PHP giả định một chuỗi. Điều này hoạt động với bất kỳ từ hợp lệ (bao gồm tất cả các tên hàm) ngoài từ khóa , hằng số được xác định trước và trường hợp không nhạy cảm true, falsenull.
Tít

5

Ruby , 16 byte

p Time.now+864e4

Hãy thử trực tuyến!


Sẽ trả lời điều này, tốt đẹp. Nhưng tôi nhận được kết quả khác nhau cho 864e48640000và tôi hoàn toàn không biết tại sao. Tôi đổ lỗi cho TIO. EDIT: khi bạn sử dụng p, hai giá trị tạo ra kết quả khác nhau. Nhưng khi bạn sử dụng puts, chúng giống nhau.
ốc_

Tôi không hiểu, tôi nhận được kết quả tương tự với cả hai. Bạn có thể gửi một ví dụ? Có lẽ nó phụ thuộc vào địa phương?
GB

p Time.now+864e4chậm khoảng 4 ngày p Time.now+8640000trên TIO. Tôi đã thử nó nhiều lần. Tuy nhiên, nếu bạn sử dụng puts, sự khác biệt này không tồn tại. Tôi thực sự không biết địa phương của mình có vấn đề gì không, US East sẽ khá bình thường: PI đoán tôi sẽ thử chạy nó trên PC của chính tôi khi tôi về nhà.
ốc_

5

Javascript, 29 26 25 byte

Đã lưu 3 byte chỉ nhờ @ ASCII!

Đã lưu 1 byte nhờ @JohanKarlsson

new Date(+new Date+864e7)

document.body.innerHTML=new Date(+new Date+864e7)


1
Bạn có thể sử dụng 864e7thay vì864*10e6
ASCII chỉ

1
Bạn có thể tiết kiệm 1 byte bằng cách sử dụng +new Datethay vìDate.now()
Johan Karlsson

1
Đây là một đoạn. Bạn cần bao gồmconsole.log
mbomb007


4

Vim, 27 byte

:r!date "+\%F" -d"+100 day"

thử trực tuyến!

nhập mô tả hình ảnh ở đây

Chỉnh sửa: Loại bỏ không gian không cần thiết char.


2
Nếu bạn đang sử dụng Linux date, thì cái này trên trang này date -d100day, không chắc là nó có giúp ích hay không
ASCII - chỉ

Tôi kiểm tra nó với :r!date +\%F -d100daycái này cũng hoạt động (ít nhất là trên pc của tôi (C)), nhưng giống như HyperNeutrinođã sử dụng trong bash.
12431234123412341234123

Uh, bạn có thể lưu byte bằng cách loại bỏ vim và thực hiện nó trong bash.
David Conrad

4

MATL , 9 byte

Z'100+1XO

Định dạng đầu ra là 15-Jul-2017(mà tôi thấy dễ đọc nhất). Thay đổi 1XOđể 2XOcó được định dạng được sử dụng trong các ví dụ , 07/15/17.

Hãy thử trực tuyến!

Giải trình

Z'      % Push current date and time as a serial date number
100+    % Add 100
1XO     % Convert to string with format 'dd-mmm-yyyy'. Implicitly display

4

SQL (Microsoft), 35 31 byte

SELECT DATEADD(D,100,GETDATE())

Bạn có thể sử dụng dthay vì DAYvà loại bỏ các không gian bên trong DATEADD.
mbomb007

Ngay cả tôi cũng không biết bạn có thể sử dụng d. Tôi sử dụng ddhoặc daytrong thực tế. Tôi chỉ thử nó và nó hoạt động.
mbomb007

3

Java 8, 77 , 61 byte

()->System.out.print(java.time.LocalDate.now().plusDays(100))

Hãy thử trực tuyến!


Có một lý do bạn không bao gồm nồi hơi? (tức là 'lớp A {công tĩnh ..') Đối với Java, tôi tin là cần thiết cho một chương trình đầy đủ. Bạn có thể làm một lambda ()->java.time.LocalDate.now().plusDays(100).
Phi tuyến

Tôi đã có điều đó trước khi chỉnh sửa câu trả lời của tôi. Đó là 94 byte cùng với bản tóm tắt. Tôi mới chơi golf với java. do đó tôi không chắc chắn về việc tôi có phải bao gồm điều đó không!
Keerthana Mitchhakaran

2
Đệ trình (trừ khi có quy định khác) có thể là một chương trình đầy đủ (có thể chạy được bởi một số thông dịch viên mà không sửa đổi) hoặc một chức năng.
Phi tuyến

3

C #, 103 97 byte

Cảm ơn raznagul vì đã tiết kiệm 6 byte!

using System;class P{static void Main(){Console.Write(DateTime.Now.AddDays(100).ToString("d"));}}

Chương trình đầy đủ đọc ngày hiện tại, thêm 100 ngày và hiển thị kết quả ở M/d/YYYYđịnh dạng.

Bạn có thể thay đổi định dạng ngày bằng cách thêm một vài byte:

using System;class P{static void Main(){Console.Write(DateTime.Now.AddDays(100).ToString("d-M-yyyy"));}}

Để loại bỏ mã soạn sẵn - C # không chính xác được biết là rất nhỏ gọn - có thể sử dụng một hàm ẩn danh:

C # lambda, 49 43 byte

()=>DateTime.Now.AddDays(100).ToString("d")

Chương trình đầy đủ:

using System;

class P
{
    static void Main()
    {
        Func<string> f = 
        ()=>DateTime.Now.AddDays(100).ToString("d");

        Console.WriteLine(f());
    }
}

Đối với chương trình đầy đủ, tôi nghĩ bạn có thể viết System.DateTime. Bây giờ ... để tránh "sử dụng Hệ thống;"
Taemyr

1
@Taemyr: Điều đó sẽ lâu hơn, vì anh ấy cũng cần nó cho Console.Write.
raznagul

2
@adrianmp: Bạn có thể lưu lưu 6 byte bằng cách sử dụng .ToString("d")thay vì .ToShortDateString().
raznagul

3

Noodel , 8 byte

]5@LaƇ⁺ƈ

Thử nó:)


Làm thế nào nó hoạt động

]5@LaƇ⁺ƈ
]5@La    # The string "]5@La" gets pushed onto the stack which in base 98 represents 8,640,000,000.
     Ƈ   # Pushes an integer that represents the current time where highest resolution is milliseconds.
      ⁺  # Add the time and the string which will be interpreted as 8,640,000,000ms.
       ƈ # Convert the integer to human readable time.
         # Implicitly output to the screen.

<div id="noodel" code="]5@LaƇ⁺ƈ" input="" cols="80" rows="2"/>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


Ký tự là ký tự unicode U + 0187, quá lớn để hiển thị trong một byte đơn. Tương tự với (U + 0188). Vì vậy, trong khi đây dài 8 ký tự, độ dài byte tối thiểu là 10.
iFreilicht

1
@iFreilicht, Noodel sử dụng mã hóa riêng. Trình chỉnh sửa thực hiện mọi thứ trong UTF-16 để hoạt động trực quan tốt hơn, nhưng được mã hóa dựa trên trang mã Noodel trước khi phân tích cú pháp.
tkellehe

3

Toán học, 26 21 byte

-5 byte nhờ @KiranLinsuain!

Today+Quantity@"100d"

Nếu bao gồm thời gian được cho phép, thì chúng ta có thể lưu 2 byte:

Now+Quantity@"100d"

1
"Bây giờ + Số lượng [" 100d "]" cắt giảm khá nhiều, nhưng có thể không phải lúc nào cũng hoạt động trên tất cả các phiên bản.
kl

3

C, 87 46 44 byte

đã lưu 2 byte nhờ vào Albert Renshaw

f(){time_t t=time(0)+864e4;puts(ctime(&t));}

Tôi nhận ra đầu ra đủ linh hoạt để cho phép ngày và tuần, do đó không cần sử dụng localtimehay tmcấu trúc nào cả.

Câu trả lời cũ

f(){time_t t=time(0)+8640000;char b[9];strftime(b,9,"%d-%m-%y",localtime(&t));puts(b);}

Dựa trên câu trả lời của Khaled.K , nhưng thay vì làm rối tmcấu trúc, hãy thêm số giây tương đương với 100 ngày trực tiếp vào time_tgiá trị. Nó cũng chỉ in ngày, không có thời gian hoặc ngày trong tuần.

Vì nó sẽ xảy ra trong một chương trình chơi gôn, một số cảnh báo xấu được tạo ra khi biên soạn.

Hãy thử trực tuyến!

Ung dung:

f(){
    // Current time + 100 days
    time_t t=time(0)+8640000;
    // Buffer for printing formatted time
    char b[9];
    // Print the time in format dd-mm-yy to buffer
    strftime(b,9,"%d-%m-%y",localtime(&t));
    // print buffer
    puts(b);
}

2
Cạo 2 byte bằng cách thay thế 8640000bằng864e4
Albert Renshaw


2

Công thức ghi chú IBM / Lotus, 29 byte

@Adjust(@Today;0;0;100;0;0;0)

Thật không may @Adjustđòi hỏi phải 0'smất tích hh:mm:ss.

Nếu chúng ta cũng được phép hiển thị thời gian thì việc thay đổi @Todaythành @Nowsẽ tiết kiệm 2 byte cho 27.


2

JavaScript (ES6), 44 byte

_=>new Date(Date.now()+864e7).toDateString()

25 byte nếu trả về một ngày với thời gian là chấp nhận được:

_=>Date(Date.now()+864e7)


2

F # (53 byte)

printf"%s"(DateTime.Now.AddDays(100.0).ToString("d"))

Đừng thấy nhiều câu trả lời của F # ở đây. Thanh danh!
David Conrad

2

Swift 3, 39 byte

print(Date(timeIntervalSinceNow:864E4))

Tôi cho rằng bạn không cần import foundation;. Swift chỉ chạy trên iOS và đó là tự động được nhập vào đó.
Albert Renshaw

Vẫn chưa có quá nhiều câu trả lời của Swift ở đây, vì vậy không chắc sự đồng thuận là gì. Nhưng tôi nghĩ rằng bạn có một điểm tốt, tôi sẽ xóa nhập :)
Matt

@Albert Swift cũng chạy trên Mac OS và Linux. Tuy nhiên, tôi không biết điều đó có nghĩa là việc nhập khẩu là bắt buộc.
David Conrad

2

C, 120 113 byte

#include <time.h>
f(){time_t t=time(0);struct tm*tm=localtime(&t);tm->tm_mday+=100;t=mktime(tm);printf("%s",ctime(&t));}

Bản thử trực tiếp

#include <stdio.h>
#include <time.h>

void PrintDatePlus100days()
{
    // obtain current time
    time_t t = time( 0 );

    // convert to datetime struct
    struct tm *tm = localtime( &t );

    // add 100 days
    tm->tm_mday += 100;

    // convert to time_t
    t = mktime( tm );

    // print time in readable format
    puts( ctime( &t ) );
}

Nếu tôi không nhầm, bạn không cần phải tính đến #include ...nồi hơi khi gửi các chức năng. (Ví dụ, câu trả lời Java không cần importtrong trường hợp đó)
Cássio Renan

@ CássioRenan trong Java, bạn không cần phải tính các lần nhập mặc định như java.lang.*, giống như cách chúng tôi không đếm stdio.hstdlib.htrong C. Nhưng ngay cả trong java, bạn cần xem xét nhập tùy chỉnh hoặc đặt đường dẫn trong tên lớp như java.util.Date, và điều đó được tính vào điểm số của bạn.
Khaled.K

2
Tại sao sử dụng printf()sẽ puts()không hoạt động?
12431234123412341234123

2

PowerShell, 23

(get-date).adddays(100)

Đây là lần thử đầu tiên của tôi, vì vậy xin vui lòng cho tôi phản hồi mang tính xây dựng. Cảm ơn!


2

R (REPL), 14 byte

Sys.Date()+100

Hãy thử nó trên Ideone .


1
Đây là một đoạn. Mã của bạn được yêu cầu để xuất kết quả, là kết quả của hàm hoặc STDOUT dưới dạng chương trình đầy đủ.
mbomb007


@ mbomb007 Câu trả lời REPL được cho phép , nhưng chúng được coi là một ngôn ngữ riêng.
Dennis

@Dennis Nó không được liệt kê là REPL trước đây.
mbomb007

1

Python, 63 byte

from datetime import*
print(datetime.now()+timedelta(days=100))

Giải pháp rất đơn giản thực sự. Bởi vì datetime.now()kết quả giống typenhư kết quả của timedeltanó, nó vui vẻ thêm hai người lại với nhau.


Nó không phải là một chức năng. Bạn có thể loại bỏ lambda:và nó vẫn sẽ là một chương trình đầy đủ.
Phi tuyến

@NonlinearFnut Có nhưng printsẽ phải được thêm vào và điều đó làm cho nó có cùng số byte.

Nếu bạn sử dụng Python 2, bạn có thể xóa dấu ngoặc printđể lưu 1 byte
Dead Possum

các days=là không bắt buộc, mà sẽ tiết kiệm 5 + 1 byte (python2 printdấu ngoặc 's)
Felipe Nardi Batista

Chơi gôn xuống còn 57 byte:from datetime import*;print datetime.now()+timedelta(100)
Ông Xcoder


1

Golang, 58 byte

import ."time"
func f(){Println(Now().AddDate(0, 0, 100))}

Chương trình đầy đủ

package main

import . "time"
import . "fmt"

func main() {
    Println(Now().AddDate(0, 0, 100))
}

thử trực tuyến!


1

Oracle, 34 byte

SELECT CURRENT_DATE+100 FROM DUAL;

1

Python 2 + Pandas 0.19.1, 56 51 byte

from pandas import*
print Timestamp('now','D')+100
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.