鱼C论坛

 找回密码
 立即注册
查看: 2368|回复: 1

[技术交流] 0022-编程打卡:找出4位纯数字列表可组成最大有效时间

[复制链接]
发表于 2022-9-19 17:41:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2022-9-19 19:05 编辑

001.png
002a.png
002b.png
003c.png

一星答案:

  1. def late_clock(lst):
  2.     lst.sort(reverse = True)
  3.     list2 = lst[:]
  4.     if 2 in list2:
  5.         list2.remove(2)
  6.         list1 = []
  7.         list1.append(2)
  8.         for i in range(3, -1, -1):
  9.             if i in list2:
  10.                 list2.remove(i)
  11.                 list1.append(i)
  12.                 if list2[0] < 6:
  13.                     list1.extend(list2)
  14.                     return '%d%d:%d%d'%tuple(list1)
  15.                 if list2[-1] < 6:
  16.                     list1.extend(reversed(list2))
  17.                     return '%d%d:%d%d'%tuple(list1)
  18.         list2 = lst[:]
  19.     if 1 in list2:
  20.         list2.remove(1)
  21.         list1 = []
  22.         list1.append(1)
  23.         list1.append(list2[0])
  24.         list2.pop(0)
  25.     elif 0 in list2:
  26.         list2.remove(0)
  27.         list1 = []
  28.         list1.append(0)
  29.         list1.append(list2[0])
  30.         list2.pop(0)
  31.     else:
  32.         return ''
  33.     if list2[0] < 6:
  34.         list1.extend(list2)
  35.         return '%d%d:%d%d'%tuple(list1)
  36.     if list2[-1] < 6:
  37.         list1.extend(reversed(list2))
  38.         return '%d%d:%d%d'%tuple(list1)
  39.     return ''

  40. print(late_clock([2,3,1,6]))
复制代码



二星答案:

  1. #递归
  2. def late_clock(digits):
  3.     def loc_num(arr, n):
  4.         req_num = req_idx = -1
  5.         for k in range(len(arr)):
  6.             if arr[k] <= n:
  7.                 if arr[k] >= req_num:
  8.                     req_num = arr[k]
  9.                     req_idx = k
  10.         arr[req_idx] = -1
  11.         return req_num

  12.     from copy import deepcopy
  13.     digits_copy = deepcopy(digits)

  14.     t = [0] * 4
  15.     nl = [2, 3, 5, 9]
  16.     for i in range(len(nl)):
  17.         if i == 1:
  18.             t[i] = loc_num(digits, nl[i]) if t[i - 1] == nl[i - 1] else loc_num(digits, nl[i] ** 2)
  19.         else:
  20.             t[i] = loc_num(digits, nl[i])

  21.     if min(t) < 0:
  22.         nl = [1, 9, 5, 9]
  23.         t = [loc_num(digits_copy, nl[i]) for i in range(len(nl))]

  24.     return '%s%s:%s%s' % (t[0], t[1], t[2], t[3])
复制代码



三星答案:

  1. from datetime import time
  2. from itertools import permutations

  3. def late_clock(digits):
  4.     ret = []
  5.     for ll in permutations(digits):
  6.         try:
  7.             hr = ll[0] * 10 + ll[1]
  8.             mm = ll[2] * 10 + ll[3]
  9.             ret.append(time(hr, mm))
  10.         except ValueError: pass
  11.     return max(ret).strftime('%H:%M')

  12. print(late_clock([1,2,4,5]))
复制代码



基础语法:



算法讲解:



本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-19 22:46:11 | 显示全部楼层
您发那么多主题干嘛啊,还不如多花时间写一些有意思的文章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表