[Elixir/Erlang/Racket] 模式匹配,字符串,哈希表,格式化输出
函数式编程三兄弟哈,leetcode什么时候支持haskell?
Elixir
名词解释
:binary.encode_unsigned(c) codepoint转到bitstring
<< >> 空的bitstring
res<> <<"hello">> 拼接2个bitstring
?\s 拿到字符's'的codepoint
?? 拿到字符'?'的codepoint
%{} 空字典
代码
defmodule Solution do
@spec evaluate(s :: String.t, knowledge :: [[String.t]]) :: String.t
def evaluate(s, knowledge) do
dict = knowledge |> Enum.reduce(%{}, fn [k, v], acc -> Map.put(acc, k, v) end)
# dict = Enum.into(Enum.map(knowledge, fn [key, val] -> {String.to_existing_atom(key), val} end), %{})
for << c<-s >>, reduce: {false, <<>>, <<>>} do
{add_key, key, res} ->
cond do
c==?\( ->
{true, key, res}
c==?\) ->
{false, << >>, res<> Map.get(dict,key,<<"?">>) }
true ->
case add_key do
true->{add_key, key<>:binary.encode_unsigned(c), res}
false->{add_key, key, res<>:binary.encode_unsigned(c)}
end
end
end
|> elem(2) #下标从0开始,取三元组里的res
end
end
# :io.format("before, The value of res is: ~p~n", [res])
Erlang
名词解释
iolist_to_binary([Res, <<"?">>]) 拼接bitstring
<< >> 空的bitstring
element(3,Res) 元组的第3个元素
$( 拿到'('的codepoint
erlang:binary_to_list bitstring转list
代码
getOrDefault(Dict, Key, DefaultValue) ->
case dict:find(Key, Dict) of
{ok, Value} ->
Value;
error ->
DefaultValue
end.
evaluate(S, Knowledge) ->
Dict = lists:foldl(fun([K, V], Acc) -> dict:store(K, V, Acc) end, dict:new(), Knowledge),
MyFunc =fun(C, {AddKey, Key, Res}) ->
case C of
$( -> {true, Key, Res};
$) -> {false, <<>>, iolist_to_binary([Res, getOrDefault(Dict,Key, <<"?">>)])};
_ ->
case AddKey of
true -> {AddKey, iolist_to_binary([Key,C]), Res};
false -> {AddKey, Key, iolist_to_binary([Res,C])}
end
end
end,
Res = lists:foldl(MyFunc, {false,<< >>,<< >>}, erlang:binary_to_list(S)),
element(3,Res).
% io:format("Sum=~p ~n", [Sum]),
Racket
名词解释
(car ele) 取ele的第一个元素
(cadr ele) 取ele的第二个元素
(string->list s) bitstring 切分为list
(string ele) 可以把#\( 转成"("
(string-append key c) 字符串拼接,key在前,c在后
代码
(define (get-or-default dict key default-value)
(let ([result (hash-ref dict key 'not-found)])
(if (eq? result 'not-found) default-value result))
)
(define/contract (evaluate s knowledge)
(-> string? (listof (listof string?)) string?)
(define my-dict (make-hash))
(for-each
(lambda (ele) (
hash-set! my-dict (car ele) (cadr ele)
))
knowledge)
(define my-list (string->list s))
(displayln my-list)
(define final_acc (foldl
(lambda (ele acc) ;iterator 和 acc
(define c (string ele))
(define addkey (list-ref acc 0))
(define key (list-ref acc 1))
(define res (list-ref acc 2))
(match c
["(" (list #t key res)]
[")" (list #f "" (string-append res (get-or-default my-dict key "?")) )]
[else
(match addkey
[#t (list addkey (string-append key c) res)]
[#f (list addkey key (string-append res c))]
)
]
)
)
(list #f "" "") ;acc初始值
my-list)) ;foldl主体
(define ret (list-ref final_acc 2))
ret
)
[Elixir/Erlang/Racket] 模式匹配,字符串,哈希表,格式化输出的更多相关文章
- Swift4 基本数据类型(范围型, Stride型, 数组, 字符串, 哈希表)
创建: 2018/02/28 完成: 2018/03/04 更新: 2018/05/03 给主要标题加上英语, 方便页内搜索 [任务表]TODO 范围型(Range)与Stride型 与范围运算符相 ...
- python_字符串,元组,格式化输出
一.字符串 1.字符串是有成对的单引号或者双引号括起来的.例如:name="张三",sex="女" 2.字符串的索引是从0开始的 3.字符串的切片 a.单个字符 ...
- 字符串与C51的格式化输出
一字符数组和字符指针: 字符指针可以用字符串对其直接初始化和随时赋值:而字符数组可以用字符串进行初始化,但不能用字符串对其进行随时赋值(但此时可以定义一个字符串指针指向字符数组,然后用字符串对指针随时 ...
- Java知多少(79)哈希表及其应用
哈希表也称为散列表,是用来存储群体对象的集合类结构. 什么是哈希表 数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系.当要查找一个对象时,只能以某种顺 ...
- Python基础__字符串拼接、格式化输出与复制
上一节介绍了序列的一些基本操作类型,这一节针对字符串的拼接.格式化输出以及复制的等做做详细介绍.一. 字符串的拼接 a = 'I', b = 'love', c = 'Python'. 我们的目的是: ...
- kmp和hash 字符串处理 哈希表
来自http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 并进行自己的简单整 ...
- 剑指 Offer 48. 最长不含重复字符的子字符串 + 动态规划 + 哈希表 + 双指针 + 滑动窗口
剑指 Offer 48. 最长不含重复字符的子字符串 Offer_48 题目详情 解法分析 解法一:动态规划+哈希表 package com.walegarrett.offer; /** * @Aut ...
- 【字符串哈希】【哈希表】Aizu - 1370 - Hidden Anagrams
给你两个4k长度的串,问你最长公共子串.两个子串相同被定义为所有字母的出现次数分别相同即可. 就枚举第一个串的所有子串,将字母出现的次数看作一个大数,进行哈希(双关键字),塞到哈希表里面.然后枚举第二 ...
- 【二分答案】【哈希表】【字符串哈希】bzoj2946 [Poi2000]公共串
二分答案,然后搞出hash值扔到哈希表里.期望复杂度O(n*log(n)). <法一>next数组版哈希表 #include<cstdio> #include<cstri ...
- Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)
Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...
随机推荐
- docker容器监控系统
Cadvisor+InfluxDB+Grafana Cadvisor Cadvisor是检测单节点资源信息的工具,提供了一个http接口的查询界面,可以和其他工具整合使用,Cadvisor既可以采集宿 ...
- 数据库tempdb的事物日志已满,原因为“ACTIVE_TRANSACTION”
系统运行过程中,突然报错数据库tempdb的事物日志已满,原因为"ACTIVE_TRANSACTION".导致所有业务崩溃. 接到报警后,进入数据库服务器.检查硬盘空间正常,于是登 ...
- 1.3 选择IDE
选择IDE 使用过的IDE 1.DEV-C++ 配合使用语言:C.C++ 个人体验:支持代码补全,信息竞赛遗留物,招很多入门教材喜欢,十分古老缺乏维护,功能简洁,安装完打开直接编译很方便,代码提示让人 ...
- sql 错误问题
message: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: SELECT command denie ...
- PSPNet 代码分析
https://www.lmlphp.com/user/62501/article/item/1225624/ train.py 网络训练主函数,主要操作有: 传入训练参数:通常采用argparse库 ...
- mapboxGL2离线化应用
https://blog.csdn.net/GISShiXiSheng/article/details/120300679?spm=1001.2014.3001.5501
- function | ECOS
用于优化线性或二阶锥的自对偶齐次嵌入内点方法. 不支持 SDP 锥体! [x,y,info,s,z] = ecos(c,G,h,dims,A,b) 求解一对原始和双锥程序 最小化 c'x 服从 Gx ...
- 12.20linux学习第十九天
今天老刘开始讲第17章 使用iSCSI服务部署网络存储.第18章 使用MariaDB数据库管理系统和第19章 使用PXE+Kickstart无人值守安装服务,内容有点多. 7.1 iSCSI技术介绍 ...
- jsp第8个作业
public boolean addMail(Msg msg){ Statement st =null; Connection con=null; try{ //获取连接 con = getConne ...
- python2 selenium
参考blog: https://www.cnblogs.com/xiaozhiblog/p/5378723.html http://www.cnblogs.com/fnng/ 一.项目结构介绍 下面逐 ...