Morse Clock
Morse Clock
"di-dah di-di-di-dit di-dah-dah di-dah-dah-dah dah-di-dit dah-di-di-dah", sound of Morszelizer clanked out loud.
"What're you doing?" Nikola asked curiously.
"I'm sending our time logs for the last expedition to headquarters, but it's not an easy task..." Stephen grumbled, "Can you imagine that with all the computer power at our disposal, I STILL have to convert this message to Morse-code with only an on/off button... Hrmph... what a pain." He grumbled at the inconvenience.
"Let me look at it." Nikola offered his help, "It looks like a pretty easy solution, we could automate the process."
"Oh.. you hero of my day." Stephen started excitedly. "So, how do we start it?"
"With Python!" Nikola exclaimed.
Help Stephen to create a module for converting a normal time string to a morse time string. As you can see in the illustration, a gray circle means on, while a white circle means off. Every digit in the time string contains a different number of slots. The first digit for the hours has a length of 2 while the second digit for the hour has a length of 4. The first digits for the minutes and seconds have a length of 3 while the second digits for the minutes and seconds have a length of 4. Every digit in the time is converted to binary representation. You will convert every on (or 1) signal to dash ("-") and every off (or 0) signal to dot (".").
An time string could be in the follow formats: "hh:mm:ss", "h:m:s" or "hh:m:ss". The "missing" digits are zeroes. For example, "1:2:3" is the same as "01:02:03".
"h h : m m : s s"
where each digits represented as sequence of "." and "-"
Input: A normal time string as a string (unicode).
def checkio(time_string):
hh_mm_ss = time_string.split(':') formal = [] #format
for each in hh_mm_ss:
if len(each) != 2:
formal.append('' + each)
else:
formal.append(each) hhmmss = ''.join(formal) limit_len = [2, 4, 3, 4, 3, 4] rel = [] for pos in range(0, len(hhmmss)):
tmp = [] binary = bin(int(hhmmss[pos])) num_str = binary[2:] tmp_len = len(num_str) if tmp_len < limit_len[pos]:
tmp.append('.' * (limit_len[pos] - tmp_len)) for each in num_str:
if each == '':
tmp.append('-')
else:
tmp.append('.') rel.append(''.join(tmp)) if pos != 5 and pos & 1:
rel.append(':') return ' '.join(rel)
观摩PositronicLlama的代码
"""
Convert a time to a pseudo-Morse code.
This 'binary-Morse' encoding represents the binary digits of a number as . and -
for 0 and 1 respectively.
""" TO_MORSE = str.maketrans('', '.-') def to_morse(number, bits):
"""Return number in binary-Morse as a string with the given number of bits."""
return "{0:0{1}b}".format(number, bits).translate(TO_MORSE) def to_code(field):
"""Return a space-delimited string of binary-Morse digits."""
tens, ones = divmod(int(field), 10)
return "{} {}".format(to_morse(tens, 3), to_morse(ones, 4)) def checkio(data):
"""Return a string representing the time in a Morse code-like form."""
return ' : '.join(map(to_code, data.split(':')))[1:] # Strip leading .
str.maketrans()是静态方法, 第七行设置str.translate的替换规则, 即在str.translate方法中将0替换为-, 将1替换为.
"{0:0{1}b}".format(number, bits), 嵌套式格式控制, 0{1}b, 表示左对齐{1}, 以0填充, b二进制表示, 对{0}的格式控制, 详情参考http://blog.csdn.net/xiaofeng_yan/article/details/6648493
translate(), 将二进制形式中的0转为-, 1转为.
Morse Clock的更多相关文章
- 修改Linux系统日期与时间date clock
先设置日期 date -s 20080103 再设置时间 date -s 18:24:30 为了永久生效,需要将修改的时间写入CMOS. 查看CMOS的时间: #clock -r 将当前系统时间写到C ...
- 操作系统页面置换算法(opt,lru,fifo,clock)实现
选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种(以下来自操作系统课本). ...
- Cesium应用篇:3控件(1)Clock
创建 跟Clock相关的主要有Animation控件和Timeline控件,通常两者会放在一起使用. 在Cesium中,Viewer默认开启这两个控件,如果你想要不显示控件,可以在Viewer初始化中 ...
- morse code
morse code,摩斯电码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母.数字和标点符号. 摩斯电码,是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代 ...
- get back to the slower clock rate that allows it to save more power
http://www.howtogeek.com/177790/why-you-cant-use-cpu-clock-speed-to-compare-computer-performance/ Wh ...
- Clock rate
https://en.wikipedia.org/wiki/Clock_rate The clock rate typically refers to the frequency at which a ...
- clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别【转】
转自:http://www.cnblogs.com/krythur/archive/2013/02/25/2932647.html 转自http://blog.sina.com.cn/s/blog_7 ...
- 最少clock
var elClock = document.getElementById("clock");var getTime = function(){ var _ = ['00','01 ...
- 用clock()函数计算多项式的运行时间
百度百科中定义clock():clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简 ...
随机推荐
- Android 状态栏通知Notification、NotificationManager简介
Notification(通知)一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这个通知: 在Android系统中, ...
- 2015第24周一Spring事务
1. Spring事务管理简介 (1)Spring为多种不同类型的事务管理机制提供统一编程模型,这些事务管理模型包括JTA.JDBC.Hibernate.JPA和JDO. (2)Spring支持声明式 ...
- bzoj2154
#include<cstdio> #include<cstdlib> #include<iostream> #include<fstream> #inc ...
- acdream1412:2-3 trees 组合数dp
题意: 给出一个标准2-3树的叶子节点(最底层节点)个数 L,求2-3数的形成方案数并取余 分析: 如果有L个叶子枚举 每个 可以使x*2+y*3=L 的 x y 那么在最底层就有 c(x+y,x) ...
- Git本地版本控制备忘
首先git是一个版本控制工具,类似于SVN 笔记包括两部分,git本地版本控制和git远程协助 一.Git本地版本控制 以git windows版本msysgit为例,下载地址http://msysg ...
- css备忘录(关于relative、absolute)
父级用:position: relative; 子级才能用:position: absolute; relative里面用margin调位置: absolute里面用top.left.right.bo ...
- 马士兵Servlet&Jsp学习
Servlet&JSP 1>http常见错误信息: 404--url地址找不找, 403--禁止访问 500--服务器内部错误 2>Servlet的生命周期: *生命全过 ...
- uiautomatorviewer 识别android微信元素报错
org.xml.sax.SAXParseException; systemId: file:/C:/Users/xxxxxxxxx/AppData/Local/Temp/uiautomatorview ...
- PC-CSS-多浏览器支持HTML5
非IE:article, section, aside, hgroup, nav, header, footer, figure, figcaption {display: block;}IE:< ...
- NYOJ128 前缀式计算 【栈】
前缀式计算 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 先说明一下什么是中缀式: 如2+(3+4)*5这样的我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上 ...