日期问题&&迷宫

文章讲述了两个问题,一是如何处理不统一格式的历史文献日期,使用Python的datetime模块和循环尝试不同格式来解析可能的日期;二是通过DFS深度优先搜索算法计算在给定路径的迷宫中,有多少玩家可以走出迷宫。
摘要由CSDN通过智能技术生成

题目

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。

更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

 

思路

        推测应该是使用datetime模块中的函数来对日期的合法性进行判断,但是我不太会日期的函数,就直接去看了题解。 

代码

import os
import sys

# 请在此输入您的代码
import datetime
date = input()
Date = datetime.datetime
fmt = ["%y/%m/%d","%m/%d/%y","%d/%m/%y"]
d = []
for i in fmt:
  try:
    _date = Date.strptime(date,i)  # 泰裤辣!
    if(_date.year>2059): # 默认都是20年后吗?
      _date = _date.replace(year = 1900 + _date.year%100)
    if(_date not in d):
      d.append(_date)
  except Exception as e:
    pass
d.sort()
for i  in d:
  print(Date.strftime(i,"%Y-%m-%d"))

题目

X 星球的一处迷宫游乐场建在某个小山坡上。它是由 10×1010×10 相互连通的小房间组成的。

房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:

  • L 表示走到左边的房间,
  • R 表示走到右边的房间,
  • U 表示走到上坡方向的房间,
  • D 表示走到下坡方向的房间。

X 星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!

开始的时候,直升机把100 名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。

 请你计算一下,最后,有多少玩家会走出迷宫,而不是在里边兜圈子?

思路

 DFS

代码 

import os
import sys

# 请在此输入您的代码
path = ["UDDLUULRUL",
"UURLLLRRRU",
"RRUURLDLRD",
"RUDDDDUUUU",
"URUDLLRRUU",
"DURLRLDLRL",
"ULLURLLRDU",
"RDLULLRDDD",
"UUDDUDUDLL",
"ULRDLUURRR"]

count = 0

def find(x,y):
  if x < 0 or x > 9 or y < 0 or y > 9:
    global count
    count += 1
    return True
  if tablelist[x][y] == 1:
    return False
  
  tablelist[x][y] = 1
  
  if path[x][y] == 'U':
    find(x-1, y)
  elif path[x][y] == 'D':
    find(x+1, y)
  elif path[x][y] == 'R':
    find(x, y+1)
  elif path[x][y] == 'L':
    find(x, y-1)
  return False

for i in range(10):
  for j in range(10):
    tablelist = [[0] * 10 for i in range(10)]
    find(i,j)

print(count)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值