Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以MM/DD HH:MM格式,使用十二个给定单位数中的任意八个,形成可能的最大日期时间_Python_Algorithm_Date_Datetime - Fatal编程技术网

Python 以MM/DD HH:MM格式,使用十二个给定单位数中的任意八个,形成可能的最大日期时间

Python 以MM/DD HH:MM格式,使用十二个给定单位数中的任意八个,形成可能的最大日期时间,python,algorithm,date,datetime,Python,Algorithm,Date,Datetime,我已经为下面的问题陈述编写了一个代码,它可以很好地用于大多数输入。但是它不适用于像1,1,1,1,1,1,1,3这样的输入。答案应该是11/13 11:11,但它返回0,这意味着它找不到有效的日期。我理解为什么会发生这种情况,但我找不到解决办法 问题描述: 阿伦和他的妹妹乌莎正在用一些技巧互相挑战 数学难题。更聪明的乌莎想出了 给文加伦12个不同的数字,从0到9,并让他形成一个新的想法 2018年与他们的最大约会时间。阿伦有点紧张,而且 请你帮他做一个电脑程序。Usha会给Arun 12个 不同

我已经为下面的问题陈述编写了一个代码,它可以很好地用于大多数输入。但是它不适用于像1,1,1,1,1,1,1,3这样的输入。答案应该是11/13 11:11,但它返回0,这意味着它找不到有效的日期。我理解为什么会发生这种情况,但我找不到解决办法

问题描述:

阿伦和他的妹妹乌莎正在用一些技巧互相挑战 数学难题。更聪明的乌莎想出了 给文加伦12个不同的数字,从0到9,并让他形成一个新的想法 2018年与他们的最大约会时间。阿伦有点紧张,而且 请你帮他做一个电脑程序。Usha会给Arun 12个 不同的数字。他需要在列表中创建一个日期时间组合 2018年:MM/DD表格中的日期四位数字必须为 当前,且格式为HH:MM的时间所有四位数字必须为 目前日期可能从01/01至12/31,时间可能从 00:00至23:59,24小时制。提供的数字可以是 在阿伦给出的答案中只使用了一次。如果有多个日期 可能会形成时间组合,Arun需要给出最新的有效时间 日期时间可能在2018年

约束条件

0-9中的任意一个数字

输入格式

由12个不一定不同的序列组成的线 用逗号分隔的0-9中的任何一位。顺序将是 非递减

输出

2018年的最大可能有效日期时间。输出必须是 格式为MM/DD HH:MM如果无法构造日期时间,则 输出应为0

解释

例1:

输入

0,0,1,2,2,2,3,5,9,9,9,9

输出

12/30 22:59

解释

给出了Arun使用的12位数字。最长有效日期 仅使用给定数字的时间,最多使用每个数字 一次是12/30 22:59,这是输出

例2

输入

3,3,3,3,3,3,3,3,3,3,3,3

输出

0

解释

由于输入中没有小于3的数字,因此无法输入有效月份 形成。因此,无法使用输入形成有效的日期时间 数字

我的代码:


问题是你没有回溯,你会得到一个“3”作为天数的第一个数字,只剩下1,第11个月没有第31个数字

因此,这里不允许将“3”作为第一个数字,您需要在没有“3”的情况下重做一个月的第一个数字,并将其保留到下一个数字。

重新阅读此问题后,我意识到您想知道为什么您的代码不起作用,而不是一般问题的解决方案,我向您道歉。把我的代码留在这里以防万一

你可以使用回溯,但暴力在这里似乎并没有那么错

考虑下面的问题

In [129]: import random

In [130]: nums = [random.randint(1,3) for _ in range(0,9)]

In [131]: pnums = [(i,j) for i in range(0,len(nums)) for j in range(0, len(nums)) if i is not j]

In [132]: month = -1

In [133]: m1 = -1

In [134]: m2 = -1

In [135]: len(pnums)
Out[135]: 72        

In [136]: nums
Out[136]: [1, 1, 3, 1, 3, 2, 1, 3, 3]

In [137]: month_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 13 ])

In [138]: month_candidates
Out[138]:                 
[(0, 1),                  
 (0, 3),                  
 (0, 5),                  
 (0, 6),                  
 (1, 0),                  
 (1, 3),                  
 (1, 5),                  
 (1, 6),                  
 (3, 0),                  
 (3, 1),                  
 (3, 5),                  
 (3, 6),                  
 (6, 0),                  
 (6, 1),                  
 (6, 3),                  
 (6, 5)]                  

In [139]: nums
Out[139]: [1, 1, 3, 1, 3, 2, 1, 3, 3]

In [140]: for (i,j) in month_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > month:
     ...:         month = ((nums[i]*10)+nums[j])
     ...:         m1 = i                        
     ...:         m2  = j                       
     ...:                                       

In [141]: m1
Out[141]: 0 

In [142]: m2
Out[142]: 5 

In [143]: month
Out[143]: 12   

In [144]: temp = [pnums.remove(p) for p in pnums if (m1 in p) or (m2 in p)] # Save some typing

In [145]: len(nums)
Out[145]: 9        

In [146]: len(pnums)
Out[146]: 50        

In [147]: days = -1

In [148]: d1 = -1

In [149]: d2 = -1

In [150]: day_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 31 ])

In [151]: for (i,j) in day_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > days:
     ...:         days = ((nums[i]*10)+nums[j])
     ...:         d1 = i                       
     ...:         d2  = j                      
     ...:                                      
     ...:                                      

In [152]: days
Out[152]: 23  

In [153]: temp = [pnums.remove(p) for p in pnums if (d1 in p) or (d2 in p)] # Save some typing

In [154]: len(pnums)
Out[154]: 38        

In [155]: hours = -1

In [156]: h1 = -1

In [157]: h2 = -1

In [158]: hour_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 24 ])

In [159]: for (i,j) in hour_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > hours:
     ...:         hours = ((nums[i]*10)+nums[j])
     ...:         h1 = i
     ...:         h2  = j
     ...:
     ...:

In [160]: hours
Out[160]: 21

In [161]: temp = [pnums.remove(p) for p in pnums if (h1 in p) or (h2 in p)] # Save some typing

In [162]: len(pnums)
Out[162]: 29

In [163]: mins = -1

In [164]: mi1 = -1

In [165]: mi2 = -1

In [166]: min_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 60 ])

In [167]: for (i,j) in min_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > mins:
     ...:         mins = ((nums[i]*10)+nums[j])
     ...:         mi1 = i
     ...:         mi2  = j
     ...:
     ...:

In [168]: mins
Out[168]: 33

In [169]: print '{}/{} {}:{}'.format(month, days, hours, mins)
12/23 21:33

In [170]: nums
Out[170]: [1, 1, 3, 1, 3, 2, 1, 3, 3]
假设

没有可靠的边缘情况检查 假设月份有31天可以通过使用映射查询月份来修复 对1到3的整数执行此操作对于0到9,soln没有太大的不同 解释 我会带你去计算最好的月份

首先使用给定整数列表生成所有索引数字对。 然后计算最大索引对,当在源数组中查找并转换为2位整数时,该索引对产生小于13的最大数字 将指数从未来考虑中删除 对具有适当界限的其他数量重复该过程,24小时,30/31天等。
你知道我为什么会落选吗?我不知道。我想这是因为你没有尝试在你的代码上运行调试器,并试图找出你的算法哪里出了问题。对于SO成员来说,除了一个琐碎的程序之外,很难为您找出错误所在。为了改进这个问题,我将首先尝试使用调试器/print stmts进行调试,并尝试找出prog中的逻辑在哪里中断,然后将这些细节添加到问题中:查看有关提出好问题的更多有用提示:
In [129]: import random

In [130]: nums = [random.randint(1,3) for _ in range(0,9)]

In [131]: pnums = [(i,j) for i in range(0,len(nums)) for j in range(0, len(nums)) if i is not j]

In [132]: month = -1

In [133]: m1 = -1

In [134]: m2 = -1

In [135]: len(pnums)
Out[135]: 72        

In [136]: nums
Out[136]: [1, 1, 3, 1, 3, 2, 1, 3, 3]

In [137]: month_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 13 ])

In [138]: month_candidates
Out[138]:                 
[(0, 1),                  
 (0, 3),                  
 (0, 5),                  
 (0, 6),                  
 (1, 0),                  
 (1, 3),                  
 (1, 5),                  
 (1, 6),                  
 (3, 0),                  
 (3, 1),                  
 (3, 5),                  
 (3, 6),                  
 (6, 0),                  
 (6, 1),                  
 (6, 3),                  
 (6, 5)]                  

In [139]: nums
Out[139]: [1, 1, 3, 1, 3, 2, 1, 3, 3]

In [140]: for (i,j) in month_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > month:
     ...:         month = ((nums[i]*10)+nums[j])
     ...:         m1 = i                        
     ...:         m2  = j                       
     ...:                                       

In [141]: m1
Out[141]: 0 

In [142]: m2
Out[142]: 5 

In [143]: month
Out[143]: 12   

In [144]: temp = [pnums.remove(p) for p in pnums if (m1 in p) or (m2 in p)] # Save some typing

In [145]: len(nums)
Out[145]: 9        

In [146]: len(pnums)
Out[146]: 50        

In [147]: days = -1

In [148]: d1 = -1

In [149]: d2 = -1

In [150]: day_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 31 ])

In [151]: for (i,j) in day_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > days:
     ...:         days = ((nums[i]*10)+nums[j])
     ...:         d1 = i                       
     ...:         d2  = j                      
     ...:                                      
     ...:                                      

In [152]: days
Out[152]: 23  

In [153]: temp = [pnums.remove(p) for p in pnums if (d1 in p) or (d2 in p)] # Save some typing

In [154]: len(pnums)
Out[154]: 38        

In [155]: hours = -1

In [156]: h1 = -1

In [157]: h2 = -1

In [158]: hour_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 24 ])

In [159]: for (i,j) in hour_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > hours:
     ...:         hours = ((nums[i]*10)+nums[j])
     ...:         h1 = i
     ...:         h2  = j
     ...:
     ...:

In [160]: hours
Out[160]: 21

In [161]: temp = [pnums.remove(p) for p in pnums if (h1 in p) or (h2 in p)] # Save some typing

In [162]: len(pnums)
Out[162]: 29

In [163]: mins = -1

In [164]: mi1 = -1

In [165]: mi2 = -1

In [166]: min_candidates = ([ (i,j) for (i,j) in pnums if ((nums[i]*10)+nums[j]) < 60 ])

In [167]: for (i,j) in min_candidates:
     ...:     if ((nums[i]*10)+nums[j]) > mins:
     ...:         mins = ((nums[i]*10)+nums[j])
     ...:         mi1 = i
     ...:         mi2  = j
     ...:
     ...:

In [168]: mins
Out[168]: 33

In [169]: print '{}/{} {}:{}'.format(month, days, hours, mins)
12/23 21:33

In [170]: nums
Out[170]: [1, 1, 3, 1, 3, 2, 1, 3, 3]