Chữ số ngày Phạm vi


15

LƯU Ý: Vì bản thân tôi là người Hà Lan, tất cả các ngày đều ở dd-MM-yyyyđịnh dạng tiếng Hà Lan trong phần mô tả thử thách và trường hợp thử nghiệm.

Thử thách:

Đầu vào:
Ngày bắt đầu ; Ngày kết thúc ; Chữ sốSen

Đầu ra:
Tất cả các ngày trong phạm vi (bao gồm cả hai bên), chứa số chữ số duy nhất trong ngày của chúng.[S,e]n

Thí dụ:

Đầu vào: Ngày bắt đầu : 12-11-1991; Ngày kết thúc : 02-02-1992; Chữ số:4

Đầu ra:
Với 0s hàng đầu cho ngày / tháng:

[20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 01-12-1991, 02-12-1991, 09-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 01-01-1992, 02-01-1992, 09-01-1992, 10-01-1992, 11-01-1992, 12-01-1992, 19-01-1992, 20-01-1992, 21-01-1992, 22-01-1992, 29-01-1992, 01-02-1992, 02-02-1992]

Không có 0s hàng đầu trong nhiều ngày / tháng:

[20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 3-12-1991, 4-12-1991, 5-12-1991, 6-12-1991, 7-12-1991, 8-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 3-1-1992, 4-1-1992, 5-1-1992, 6-1-1992, 7-1-1992, 8-1-1992, 10-1-1992, 13-1-1992, 14-1-1992, 15-1-1992, 16-1-1992, 17-1-1992, 18-1-1992, 20-1-1992, 23-1-1992, 24-1-1992, 25-1-1992, 26-1-1992, 27-1-1992, 28-1-1992, 31-1-1992]

Quy tắc thử thách:

  • Ngày đầu vào và đầu ra có thể ở bất kỳ định dạng (ngày-) hợp lý nào. Có thể là một chuỗi ở bất kỳ dMyđịnh dạng nào (bao gồm các dấu tách tùy chọn), danh sách ba số nguyên, đối tượng Ngày gốc của ngôn ngữ của bạn, v.v. Đầu ra có thể là một danh sách / mảng / luồng, được in thành STDOUT, một chuỗi được phân tách duy nhất, v.v.
  • Bạn được phép bao gồm hoặc loại trừ 0 hàng đầu cho ngày / tháng trong kết quả đầu ra của bạn. Vui lòng chỉ định câu nào trong hai câu bạn sử dụng trong câu trả lời của bạn , vì nó sẽ gây ra kết quả khác nhau. Tức là 1-1-1991có 2 chữ số duy nhất, nhưng 01-01-1991là 3 chữ số duy nhất.
  • Bạn không phải đối phó với những năm nhuận và sự khác biệt của lịch Gregorian và Julian. Bạn có thể giả sử phạm vi ngày được đưa ra trong các trường hợp thử nghiệm sẽ không bao giờ vượt quá ngày 28 tháng 2/1 tháng 3 cho các năm chia hết cho 4.
  • Chữ số đầu vào n được đảm bảo nằm trong phạm vi [1,số 8] , do đó, việc xử lý n= =0 là không xác định (trả về danh sách trống sẽ hợp lý nhất, nhưng cũng đưa ra lỗi hoặc kết quả không chính xác; bạn đã thắng 'T phải đối phó với đầu vào đó).

Quy tắc chung:

  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.
    Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'.
  • Quy tắc chuẩn áp dụng cho câu trả lời của bạn với quy tắc I / O mặc định , vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, chương trình đầy đủ. Cuộc gọi của bạn.
  • Lỗ hổng mặc định bị cấm.
  • Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ TIO ).
  • Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.

Các trường hợp thử nghiệm:

Inputs: [12-11-1991, 02-02-1992], 4
Outputs with leading 0s:    [20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 01-12-1991, 02-12-1991, 09-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 01-01-1992, 02-01-1992, 09-01-1992, 10-01-1992, 11-01-1992, 12-01-1992, 19-01-1992, 20-01-1992, 21-01-1992, 22-01-1992, 29-01-1992, 01-02-1992, 02-02-1992]
Outputs without leading 0s: [20-11-1991, 23-11-1991, 24-11-1991, 25-11-1991, 26-11-1991, 27-11-1991, 28-11-1991, 30-11-1991, 3-12-1991, 4-12-1991, 5-12-1991, 6-12-1991, 7-12-1991, 8-12-1991, 10-12-1991, 13-12-1991, 14-12-1991, 15-12-1991, 16-12-1991, 17-12-1991, 18-12-1991, 20-12-1991, 23-12-1991, 24-12-1991, 25-12-1991, 26-12-1991, 27-12-1991, 28-12-1991, 31-12-1991, 3-1-1992, 4-1-1992, 5-1-1992, 6-1-1992, 7-1-1992, 8-1-1992, 10-1-1992, 13-1-1992, 14-1-1992, 15-1-1992, 16-1-1992, 17-1-1992, 18-1-1992, 20-1-1992, 23-1-1992, 24-1-1992, 25-1-1992, 26-1-1992, 27-1-1992, 28-1-1992, 31-1-1992]

Inputs: [19-09-2019, 30-09-2019], 5
Outputs (same with and without leading 0s): [23-09-2019, 24-09-2019, 25-09-2019, 26-09-2019, 27-09-2019, 28-09-2019, 30-09-2019]

Inputs: [19-09-2019, 30-09-2019], 8
Output (same with and without leading 0s): []

Inputs: [20-06-1749, 30-06-1749], 8
Outputs with leading 0s:    [23-06-1749, 25-06-1749, 28-06-1749]
Outputs without leading 0s: []

Inputs: [10-12-1969, 12-01-1970], 6
Outputs (same with and without leading 0s): [30-12-1969]

Inputs: [10-12-1969, 12-01-1970], 5
Outputs with leading 0s:    [10-12-1969, 13-12-1969, 14-12-1969, 15-12-1969, 17-12-1969, 18-12-1969, 20-12-1969, 23-12-1969, 24-12-1969, 25-12-1969, 27-12-1969, 28-12-1969, 31-12-1969, 02-01-1970, 03-01-1970, 04-01-1970, 05-01-1970, 06-01-1970, 08-01-1970, 12-01-1970]
Outputs without leading 0s: [10-12-1969, 13-12-1969, 14-12-1969, 15-12-1969, 17-12-1969, 18-12-1969, 20-12-1969, 23-12-1969, 24-12-1969, 25-12-1969, 27-12-1969, 28-12-1969, 31-12-1969, 2-1-1970, 3-1-1970, 4-1-1970, 5-1-1970, 6-1-1970, 8-1-1970, 12-1-1970]

Inputs: [11-11-1111, 11-11-1111], 1
Output (same with and without leading 0s): [11-11-1111]

Tôi biết nó đặc biệt không phải là định dạng được yêu cầu ở đây, nhưng tôi chỉ bình luận ở đây để "truyền bá": có một tiêu chuẩn quốc tế mà các lập trình viên nên cố gắng sử dụng cho các ngày (trong nhật ký, tên tệp, v.v.): en.wikipedia.org / wiki / ISO_8601 . (sử dụng 'T' để khử nhiễu (không có T ngày + thời gian hoàn toàn có thể là một cái gì đó khác) và chỉ định các dấu phân cách sử dụng và khi không thể sử dụng dấu phân cách [nghĩa là đề xuất biến thể khác nhau (từ ngắn đến dài] của cùng một tiêu chuẩn]: mục tiêu chính là : YYYY-MM-DDThh:mm:ss.mmm +hh:mm, + hh: mm là thời gian bù địa phương của bạn từ UTC.)
Olivier Dulac

Câu trả lời:


2

Japt , 23 byte

Lấy đầu vào ngày là dấu thời gian Unix, xuất ra một chuỗi các chuỗi có định dạng và hàng đầu 0phụ thuộc vào ngôn ngữ của bạn. Sẽ ngắn hơn 1 byte trong Japt v2 nhưng dường như có lỗi khi chuyển đổi Dateđối tượng thành chuỗi.

òV864e5@ÐX s7Ãf_¬â ʶWÄ

Thử nó

òV864e5@ÐX s7Ãf_¬â ʶWÄ     :Implicit input of integers U=s,V=e & W=n
òV                          :Range [U,V]
  864e5                     :  With step 86,400,000 (24*60*60*1000)
       @                    :Map each X
        ÐX                  :  Convert to Date object
           s7               :  Convert to locale date string
             Ã              :End map
              f             :Filter
               _            :By passing each through the following function
                ¬           :  Split
                 â          :  Deduplicate
                   Ê        :  Length
                    ¶       :  Is equal to
                     WÄ     :  W+1, to account for the inclusion of the delimiting "/" or "-"

5

R , 81 byte

function(s,e,n,x=seq(s,e,1))x[lengths(sapply(strsplit(paste(x),""),unique))==n+1]

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

Sử dụng định dạng ngày gốc của R và có các số 0 đứng đầu vào ngày và tháng.


3

Màu đỏ , 93 byte

func[a b n][until[if n = length? exclude d: rejoin[a/4"-"a/3"-"a/2]"-"[print d]b < a: a + 1]]

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

Không dẫn 0s trong nhiều ngày / tháng.

Thật tệ khi Red chuyển đổi nội bộ 09-10-2019thành 9-Oct-2019- đó là lý do tại sao tôi cần trích xuất từng ngày / tháng / năm.


Tôi không quen thuộc với Red nhưng có vẻ như có rất nhiều khoảng trắng có thể bị cắt bỏ khỏi đây. Mặc dù vậy, xin lỗi tôi nếu tôi sai.
Trình kết nối

@connectyourcharger Không có vấn đề! Dường như có một số khoảng trắng không cần thiết, nhưng chúng cần thiết để phân tách các mã thông báo. Các từ (định danh) trong Red có thể bao gồm -=+*<>?!~&, đó là lý do tại sao cần một khoảng trắng (hoặc (...)[...]"...").
Galen Ivanov

2

Python 3.8 (tiền phát hành) , 84 byte

-6 byte nhờ Gloweye

lambda s,e,n:[d for i in range((e-s).days+1)if-len(set(d:=str(s+type(e-s)(i))))==~n]

Hàm không tên trả về danh sách các chuỗi (đếm / bao gồm các số 0 đứng đầu) chấp nhận ba đối số:

  • s, sự khởi đầu - một datetime.dateđối tượng;
  • e, kết thúc - một datetime.dateđối tượng; và
  • n, số ngày - một intđối tượng.

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

Lưu ý: Vì hàm chấp nhận datetime.datecác đối tượng nên tôi chưa tính mã nhập cho điều đó (và đã làm việc xung quanh việc nhập datetime.timedeltađối tượng vì nó có thể truy cập gián tiếp thông qua phép trừ của các đối tượng đầu vào này).


1
type(obj)ngắn hơn 3 byte obj.__class__.
Gloweye

@Gloweye cảm ơn tuyệt vời!
Jonathan Allan

@Gloweye lưu 6 cuối cùng (dấu chấm đi và dấu ngoặc đã có sẵn)
Jonathan Allan

1
Tôi chưa phân tích đến độ sâu đó, chỉ nhìn thấy __class__và nhận xét nhanh. Luôn vui lòng giúp đỡ.
Gloweye

1

JavaScript (ES6), 91 byte

Lấy đầu vào là (n)(end)(start), trong đó ngày được dự kiến ​​là dấu thời gian Unix tính bằng mili giây. Trả về một danh sách ngày được phân tách bằng dấu cách yyyy-mm-dd.

Số 0 hàng đầu được bao gồm.

n=>b=>g=a=>a>b?'':(new Set(d=new Date(a).toJSON().split`T`[0]).size+~n?'':d+' ')+g(a+864e5)

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


1
Đoạn mã này có thể sẽ thất bại nếu DST dịch chuyển xảy ra (a + 864e5 có thể không phải là ngày mai trong trường hợp đó). Nhưng may mắn thay, tio sử dụng múi giờ UTC không có DST. - từ một người sử dụng logic tương tự trong trang web sản phẩm và nhận ra điều gì đó sai cho đến khi DST thay đổi ...
tsh

1

PHP , 90 byte

for([,$s,$e,$n]=$argv;$s<=$e;)$n-count(count_chars($d=date(Ymd,86400*$s++),1))||print$d._;

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

Đây là với số 0 hàng đầu. Đầu vào là đối số lệnh ( $argv) và ngày là dấu thời gian Unix tính theo ngày (về cơ bản là giây tiêu chuẩn / 86400), tôi đã sử dụng định dạng này vì chúng tôi không cần thời gian trong thử thách này và nó cho phép tôi chơi thêm 1 byte. Tiếp tục thêm một ngày để bắt đầu cho đến khi kết thúc và in bất kỳ ngày nào với$n chữ số duy nhất trong nó, cách nhau bằng _trong Ymdđịnh dạng.

Cũng có một thay thế 89 byte in ngày để đầu ra ở cùng định dạng với đầu vào (dấu thời gian Unix tính theo ngày).


1

Java (JDK) , 86 byte

(s,e,n)->s.datesUntil(e.plusDays(1)).filter(d->(""+d).chars().distinct().count()==n+1)

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

Tôi đã chọn sử dụng hàng đầu 0s.

Tín dụng

  • -24 cảm ơn Kevin Cruijssen , người không biết rằng anh ta có thể chơi gôn nhiều như vậy: p

1
Có lẽ tôi không nên bao gồm nó ở cả hai đầu, sau đó bạn có thể đã sử dụng Java 9 datesUntilcho 103 byte . ;) Câu trả lời tốt đẹp. Tôi không thấy bất cứ điều gì có thể được chơi golf cá nhân.
Kevin Cruijssen

1
@KevinCruijssen Vâng, thực sự, bạn đã cho một cách chơi golf cực kỳ hay! Chỉ cần thêm .plusDays(1)và xóa .forEach(System.out::println)và đó là một câu trả lời được đánh gôn rất nhiều bởi vì như bạn đã viết, ngày có thể được trả về khi các đối tượng giá trị và luồng được cho phép. ;-) Tôi không có manh mối nào datesUntiltồn tại! Cảm ơn bạn vì điều đó :-)
Olivier Grégoire

Ái chà, quên mất các quy tắc của riêng tôi cho phép trả lại luồng, haha ​​XD Tôi là một thằng ngốc. Nhưng rất vui vì tôi có thể giúp bạn với sự ngốc nghếch của tôi. ; p
Kevin Cruijssen


1

C # (Trình biên dịch tương tác Visual C #)

Không dẫn 0, 104 , 103 byte

(s,e,n)=>new int[(e-s).Days+1].Select((x,i)=>s.AddDays(i)).Where(x=>$"{x:yyyMd}".Distinct().Count()>=n)

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

Với số 0 đứng đầu, 106 105 byte

(s,e,n)=>new int[(e-s).Days+1].Select((x,i)=>s.AddDays(i)).Where(x=>$"{x:yyyMMdd}".Distinct().Count()>=n)

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


Bạn có thể xóa khoảng trắng ở x =>$"cả hai phiên bản cho -1. :)
Kevin Cruijssen

@KevinCruijssen ah chết tiệt cảm ơn x) Tôi chắc chắn ai đó cũng có thể đưa ra một giải pháp ngắn hơn, tôi không hài lòng với giải pháp này
Innat3

0

Kotlin, 119 byte

fun f(a:LocalDate,b:LocalDate,c:Long)=a.datesUntil(b.plusDays(1)).filter{it.toString().chars().distinct().count()==c+1}

Nếu không có 0s hàng đầu, mất trong hai java.time.LocalDatevà một Long, trả về một Streamtrong LocalDates


Xin chào, chào mừng đến với CCGC! Có lẽ bạn có thể thêm một liên kết Dùng thử trực tuyến với mã kiểm tra để xác minh nó hoạt động? Ngoài ra, tôi không biết Kotlin, nhưng có thể thay thế it.toString()bằng (it+"")để tiết kiệm một vài byte không? Tôi biết điều này là có thể trong một số ngôn ngữ khác như Java hoặc .NET C #.
Kevin Cruijssen
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.