数字日期范围


16

注意:由于我本人是荷兰人,dd-MM-yyyy因此挑战说明和测试用例中的所有日期均为荷兰语格式。

挑战:

输入:
开始日期;结束日期;数字sen

输出:
范围内的所有日期(包括双方),其日期中包含位数的唯一数字。[s,e]n

例:

输入:开始时间:12-11-1991; 结束日期:02-02-1992; 数字:4

输出:
天/月的前导0:

[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]

天/月不带前导0:

[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]

挑战规则:

  • 输入和输出日期可以采用任何合理的(日期格式)格式。可以是任何dMy格式的字符串(包括可选的分隔符),三个整数的列表,语言的本机Date对象等。输出可以是列表/数组/流,打印到STDOUT,单个定界的String等。
  • 您可以在输出中的天/月中包括或排除前导0。请指定您在答案中使用哪两个,因为这会导致不同的结果。即1-1-1991具有2个唯一数字,但01-01-1991作为3个唯一数字。
  • 您不必处理leap年和公历与儒略历之间的差异。您可以假设测试用例中给出的日期范围永远不会超过2月28日/ 3月1日,并且可以被4整除。
  • 输入数字保证在范围内,因此未指定处理(返回空列表是最合理的选择,但给出错误或不正确的结果也可以;您赢了不必处理这些输入)。n[1,8]n=0

通用规则:

  • 这是,因此最短答案以字节为单位。
    不要让代码高尔夫球语言阻止您使用非代码高尔夫球语言发布答案。尝试针对“任何”编程语言提出尽可能简短的答案。
  • 标准规则适用于具有默认I / O规则的答案,因此允许您使用STDIN / STDOUT,具有正确参数的函数/方法以及返回类型的完整程序。你的来电。
  • 默认漏洞是禁止的。
  • 如果可能的话,请添加一个带有测试代码的链接(即TIO)。
  • 另外,强烈建议为您的答案添加说明。

测试用例:

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]

我知道这不是这里所要求的格式,但是我在这里只是在“扩展”一词:程序员应该尝试使用一种国际标准来日期(在日志,文件名等):en.wikipedia.org / wiki / ISO_8601。(使用'T'消除歧义(不带T的日期和时间可能完全是另外的东西),并指定要使用的分隔符,并且当一个人不能使用分隔符时[即提出相同的不同变体(从短到长)标准]:主要是:YYYY-MM-DDThh:mm:ss.mmm +hh:mm,+ hh:mm是您的语言环境相对于UTC的时间偏移。)
Olivier Dulac

Answers:


2

Japt,23 个字节

将日期输入作为Unix时间戳,输出一个字符串数组,该字符串的格式和前导0s取决于您的语言环境。在Japt v2中将短1个字节,但是在将Date对象转换为字符串时似乎存在一个错误。

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

尝试一下

ò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个字节

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

在线尝试!

使用R的本机日期格式,并且在日和月中具有前导零。


3

红色,93字节

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

在线尝试!

天/月前无前导0。

太糟糕了,Red09-10-2019无法在内部将其转换为9-Oct-2019-这就是为什么我需要分别提取日/月/年。


我不熟悉Red,但似乎有很多空白可以消除。但是,如果我错了,请原谅我。
connectyourcharger

@connectyourcharger没问题!似乎有几个不必要的空格,但是需要使用空格来分隔标记。红色的单词(标识符)可以包含-=+*<>?!~&,这就是为什么需要空格(或(...)[...]"...")的原因。
加伦·伊万诺夫

2

Python 3.8(预发布),84字节

-6字节归功于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]

一个未命名的函数,它返回接受三个参数的字符串列表(计数/包括前导零):

  • s开始 -一个datetime.date对象;
  • e最后 -一个datetime.date对象;和
  • n,天数-一个int对象。

在线尝试!

注意:由于该函数接受datetime.date对象,因此我没有为此而计入导入代码(并且已通过避免datetime.timedelta减去这些输入对象来间接访问该对象的方法来解决该对象的导入问题)。


1
type(obj)比短3个字节obj.__class__
Gloweye

@Gloweye太棒了,谢谢!
乔纳森·艾伦,

@Gloweye最终保存6(点消失并且括号已经存在)
Jonathan Allan

1
我还没有分析到那么深,只是看了一下__class__并发表了快速评论。总是很乐意提供帮助。
Gloweye

1

JavaScript(ES6),91字节

将输入作为(n)(end)(start),其中日期应为Unix时间戳(以毫秒为单位)。返回以空格分隔的日期列表,格式为yyyy-mm-dd

包括前导0。

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

在线尝试!


1
如果发生DST偏移,此代码段可能会失败(在这种情况下,a + 864e5可能不会在明天出现)。但值得庆幸的是,tio使用没有DST的UTC时区。-来自在产品网站上使用相同逻辑并发现错误的人,直到DST转移为止
tsh

1

PHP,90字节

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

在线尝试!

这是前导0。输入是命令参数($argv),日期是Unix时间戳,以天为单位(基本上是标准秒数/ 86400),我使用了这种格式,因为在此挑战中我们不需要时间,它使我可以再打1个字节。不断增加一天的开始时间,直到结束为止,并打印其中包含$n唯一数字的任何日期,并_Ymd格式分隔。

还有一个89字节的备用选项,它以与输入相同的格式打印日期以输出(Unix时间戳以天为单位)。


1

Java(JDK),86字节

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

在线尝试!

我选择使用前导0s。

学分


1
也许我不应该在两端都包含它,那么您可以使用Java 9来datesUntil获取103个字节。;)好的答案。我看不到任何可以个人打高尔夫球的东西。
凯文·克鲁伊森

1
@KevinCruijssen好吧,实际上,您提供了一种非常不错的高尔夫方式!只需添加.plusDays(1)和删除.forEach(System.out::println),这是一个非常好的选择,因为如您所写,日期可以作为值对象和流允许返回。;-)我datesUntil什至没有线索!谢谢您:-)
奥利维尔·格雷戈尔

糟糕,忘记了我自己的允许流返回的规则,哈哈XD我是个白痴。但是很高兴我能帮到我。; p
凯文·克鲁伊森

1

红宝石 -rdate,54个字节

以2个Date对象和一个数字作为输入,并返回Date对象的列表作为输出。处理leap年并使用前导零。

->a,b,n{(a..b).select{|d|d.to_s.chars.uniq.size==n+1}}

在线尝试!


1

C#(Visual C#交互式编译器)

无前导0,104,103个字节

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

在线尝试!

与前导0,106个 105字节

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

在线尝试!


您可以x =>$"在两个版本的-1中都删除空格。:)
凯文·克鲁伊森

@KevinCruijssen啊,谢谢x)我确定有人也可以提出一个较短的解决方案,对此我不满意
Innat3

0

Kotlin,119个字节

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

如果没有前置0,接受两个java.time.LocalDate和一个Long,返回StreamLocalDate小号


嗨,欢迎来到CCGC!您是否可以添加带有测试代码的“ 在线试用”链接以验证其是否有效?另外,我不知道科特林,但有可能取代it.toString()(it+"")救几个字节?我知道这在其他一些语言(例如Java或.NET C#)中也是可行的。
凯文·克鲁伊森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.