[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) ...
随机推荐
- 根本不常用知识之Generator
首先babel链接很重要 https://www.babeljs.cn/repl#?browsers=&build=&builtIns=false&corejs=3.6& ...
- shell_Day02
虽然差了不少天,但的确是第......一天 history 查看历史命令记录 !命令序号 查看命令并执行 -c 清空 关于命令历史的文件 关于命令历史的变量(环境变量) 命令补全 tab:制表符 \t ...
- Html5本地存储概念,有什么优点,与cookie有什么区别?
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有 ...
- python机器学习——kmeans聚类算法
背景与原理: 聚类问题与分类问题有一定的区别,分类问题是对每个训练数据,我给定了类别的标签,现在想要训练一个模型使得对于测试数据能输出正确的类别标签,更多见于监督学习:而聚类问题则是我们给出了一组数据 ...
- 使用python-docx提取word中的表格
提取表格 import docx from docx import Document #导入库 path = '123.docx' #文件路径 document = Document(path) #读 ...
- JAVA基础Day2-基本运算符/自增自减运算符/逻辑运算符、位运算符/包机制
一.基本运算符 算术运算符:+.-.*./.%.++.-- 赋值运算符:= 关系运算符:>.<.>=.<=.==.!= instanceof 逻辑运算符:&&. ...
- echarts 图表 tooltip提示框,formatter自定义
自定义图表提示框样式, 自定义原因:series中有多个数据样式,那么提示框会展示多条. tooltip: { formatter(params) { let circle = `<span s ...
- 记一次线上DB被打挂
这周刚新上了需求,在慢慢写代码的时候,突然报警群的消息多了,组长让我看看咋回事. 一开始没当回事,因为faas任务的错误日志一直很多,但是发现新的日志和以前大不相同,显示的是上游faas实例的连接被m ...
- python3GUI--轮播图效果展示By:PyQt5(附源码下载地址)
@ 目录 一.前言 二.展示 1.酷我音乐 2.QQ飞车 3.虎牙 4.网易云音乐 5.英雄联盟 6.英雄联盟(Pro) 7.腾讯视频 三.源代码 1.demo02GUI.py 2.engine.py ...
- 解决office提示您的许可证不是正版的问题
https://blog.csdn.net/d_pcb66/article/details/125339872?spm=1001.2101.3001.6650.4&utm_medium=dis ...