20180914_ARTS_week12

十二周咯,算法题 Roman to Integer,看了一篇讲 Python 和 Go 的文章,记录了移动端网页适配 iPhone X 的内容,分享了三个月来做 ARTS 的一点感受。

Algorithm

/**
 * Roman to Integer
 * https://leetcode.com/problems/roman-to-integer/description/
 * 
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
    var romaDict = {
        "CM":900,
        "M":1000,
        "CD":400,
        "D":500,
        "XC":90,
        "C":100,
        "XL":40,
        "L":50,
        "IX":9,
        "X":10,
        "IV":4,
        "V":5,
        "I":1
    }

    var rs = 0;

    for (var k of Object.keys(romaDict)) {
        var v = romaDict[k]
        var reg = new RegExp(k, "g");

        var repeatList = s.match(reg);
        var repeat = repeatList ? repeatList.length : 0;

        rs += v * repeat;

        s = s.replace(reg, "")
    }

    return rs;
};

console.log(romanToInt("III"))
console.log(romanToInt("IV"))
console.log(romanToInt("IX"))
console.log(romanToInt("LVIII"))
console.log(romanToInt("MCMXCIV"))

因为之前做过 Integer to Roman 这个 Roman to Integer 还是比较容易有思路,和 Integer to Roman 差不多,但是这里要先算组合型的字符,比如 CM 就要在 M 之前计算。

然后这个方法通过两次正则去匹配,效率不是太高,应该还有更好的方法。

Review

Moving from Python to Go

https://towardsdatascience.com/moving-to-go-from-python-9ebbd9a8aec4

文章从静态类型,JSON 解析,接口和类型推断 3 方面比较了 Python 和 Go 的不同。

我懂点 Python,对 Go 还挺有兴趣的,看文章可以大概了解下 Go 在这几方面与 Python 的不同,文章最后推荐了 《The Go Programming Language》,国内叫《Go 语言圣经》,看这个应该会更加系统。

Tip

分享个关于移动端网页适配 iPhone X 的相关内容。

iPhone X 新增了一个叫安全区域的概念,也就是除了四周圆角,上边刘海,底部小黑条之外中间的那个长方形区域。我们对网页做适配主要也是让主体内容保持在安全区域内。

苹果为了适配 iPhone X 对现有 viewport meta 标签扩展了一个叫 viewport-fit 的东东,用于设置网页在可视窗口的布局方式,可设置三个值:

  • contain: 可视窗口完全包含网页内容
  • cover:网页内容完全覆盖可视窗口
  • auto:默认值,跟 contain 表现一致

默认不添加扩展的表现是 viewport-fit=contain,需要适配 iPhone X 须要设置 viewport-fit=cover。

除此之外,iOS 11 新增了四个预定义变量,用于设定安全区域与边界的距离,有四个预定义的变量:

  • safe-area-inset-left:安全区域距离左边边界距离
  • safe-area-inset-right:安全区域距离右边边界距离
  • safe-area-inset-top:安全区域距离顶部边界距离
  • safe-area-inset-bottom:安全区域距离底部边界距离

然后就可以通过利用这些变量来达到将页面控制在安全区的目的:

body {
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);
}

上面就是为了让 web 内容不要延伸到底部的小黑条,这里 constant 是为了兼容 iOS 11.2 之前的。

其实我觉得这个方案不是特别好,对于已有的项目,比如 hybrid app,页面数量何止成百上千,一个一个根据页面情况做适配简直是会疯掉,更好的方案是终端开发能定制 webview,提供能力,在 iPhone X 下就自动上下加个距离,页面也不用改,测试的工作量也会小很多 :-)

Share

这周是做 ARTS 的第 12 周,差不多也要 3 个月了。一开始其实挺难的,看英文文章很慢,如果不是熟悉的技术,常常不太得要领,现在感觉有一点进步,稍微熟悉的大概看一下基本也能连猜带懵了解大半。

耗子哥说:『一件事情你有信心就能打败 99% 的人,然后坚持下去又能打败剩下 1% 中 99% 的人』

能完成 12 周的 ARTS 也是靠着坚持,然后想各种办法去完成没一周的任务,比如中午午睡的时间抽半个小时出来看一会儿英文文章,平常工作的时候遇到有益的 Tip 就赶紧记下了,想到什么可以 Share 的就先把关键字记下来,有空的时候再扩展一下。

总之,希望这只是一个开始,与君共勉。


碎碎念

记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 20180803_ARTS_week06

    这个是个比较不好的解法,就是像题目介绍里面那样先把这个『之』字形给做出来,然后再逐行读成字符串,但是通过这个比较好帮助我们理解这个题目。

    Bob.Chen
  • TypeScript 中使用 CSS Modules

    CSS 的全局性 相当长一段时间 CSS 总是在页面上作为一个全局的存在,以前这个『特性』影响还不算很大,命名上注意一点,比如使用 BEM 也能一定程度上解决问...

    Bob.Chen
  • 20180922_ARTS_week13

    这个题比较简单,用循环硬做也可以,这里做了一个小小的优化,先排序了一下,如果不排序的话,遇到 ["aaa","aa","aaa"] 这种形式就会出错。

    Bob.Chen
  • 玩转SSH(五):Struts + Spring + MyBatis(注解版)

    本文将在 玩转SSH(四):Struts + Spring + MyBatis 的基础上进行一些小的改动,将原本是 xml 配置方式的项目,改成注解的配置方式。...

    陈树义
  • 一日一技:docker-compose配置文件中的易混淆参数

    在写docker-compose的yml配置文件时,会看到一个参数叫做 version,例如:

    青南
  • HTML&CSS06_默认布局级别

    起初,我认真的时候,你不认真,现在你认真了,我却已离你有些远了。想想当时我们一起学习一起努力的日子,是不是有种莫名的喜悦。现在大家工作了,也会遇到一些前端设计的...

    用户1730674
  • Go 2017 调查报告

    Programming background ? Go usage ? Development and deployment ?

    程序员的酒和故事
  • 爱加密企业版静态脱壳机编写

    加壳时将方法指令抽走后自定义格式加密存放在assets/ijiami.ajm文件中,通过IDA动态调试分析发现每个被抽走的方法的debuginfo值改成0X3F...

    我是小三
  • HTML&CSS07_浮动和定位布局

    起初,我认真的时候,你不认真,现在你认真了,我却已离你有些远了。想想当时我们一起学习一起努力的日子,是不是有种莫名的喜悦。现在大家工作了,也会遇到一些前端设计的...

    用户1730674
  • jquery_01第一例

    起初,我认真的时候,你不认真,现在你认真了,我却已离你有些远了。想想当时我们一起学习一起努力的日子,是不是有种莫名的喜悦。现在大家工作了,也会遇到一些前端设计的...

    用户1730674

扫码关注云+社区

领取腾讯云代金券