ACM problem http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1042
主要是为了学习scala,使用scala去解决上面提到的ACM问题,不会是最有效率的方式,而且也没法提交代码进行验证;
package com.me.acm.p1042 import scala.collection.mutable.ArrayBuffer object WsCipher extends App { //定义一个Regex pattern,可以用于提取类似 2 3 1,并绑定每个值到一个变量;(\d+),括号是必 //须得,三个括号对应三个变量,一个,只定义一个变量;其他和Java Regex是一样的; val NUMBERS = """(\d+) (\d+) (\d+)""".r val Group1 = "([a-i])".r val Group2 = "([j-r])".r val Group3 = "([s-z]|_)".r // _ 在这里表示初始值,这里是NULL var g1: Group = _ var g2: Group = _ var g3: Group = _ //这种方式可以从标准输入按行读取,直到读到0 0 0为止;这种方式和处理普通的Iterator, List, //Set是一样的; Iterator.continually(Console.readLine).takeWhile(_ != "0 0 0").foreach { // _ again!当参数没有歧义的使用时,比如只有一个参数,就可以不用定义参数,而直接用_表示; //scala 会正确的推断出其类型; 整个模式匹配构成了一个函数字面量; _ match { //NUNMBERS可以这样使用; case NUMBERS(k1, k2, k3) => { //k1 toInt 其实是 k1.toInt的变种 g1 = Group(k1 toInt, ArrayBuffer.empty) g2 = Group(k2 toInt, ArrayBuffer.empty) g3 = Group(k3 toInt, ArrayBuffer.empty) } case line => { val processed = process(line) println(processed) } } } def process(line: String): String = { val letters = line.toArray.map { _ toString match { //Group1因为只有一个括号(),所以只能绑定一个变量; c是一个String,Char在这里不能 //匹配Regex;所以先转换成了String; 因为String是一个Char的Sequence,所以要取第 //一个字符(它只有一个字符),可以使用c(0), 同时也因为String 有一个apply方法; case Group1(c) => Some(Letter(g1, c(0))) case Group2(c) => Some(Letter(g2, c(0))) case Group3(c) => Some(Letter(g3, c(0))) case _ => None } } val decrpted = letters map { case Some(l) => l.decrypt case None => '_' } decrpted.mkString("") } } case class Group(k: Int, buf: ArrayBuffer[Char]) { private var index: Int = -1; def addChar(c: Char): Int = { buf += c index += 1 index } } case class Letter(g: Group, var c: Char) { var index = g addChar c def decrypt(): Char = { index = (index + g.buf.size - g.k) % g.buf.size c = g.buf(index) c } }
相关推荐
通过这个sample-scala-project,学习者可以深入了解Scala的语法特性、SBT的使用以及CI/CD的实践,为实际项目开发打下坚实的基础。在实际操作中,还应注意代码风格、异常处理、并发编程等方面的最佳实践,提升代码...
Dotty 的设计目标之一就是简化 Scala 语言,使其更易于学习和使用。 8. **Match 类型** Scala 3 中的 **Match 类型** 允许你在类型定义中使用 `match` 表达式,这样可以确保变量只能接受特定类型的值。 9. **...
这个名为"scala-samples"的压缩包包含了一系列的Scala示例代码,旨在帮助开发者更好地理解和学习Scala语言的特性与用法。 在Scala中,类和对象是其核心概念。 Scala支持类继承,同时通过特质(Traits)提供了更加...
通过深入研究这些文件,我们可以学习如何在Scala环境中设置gRPC服务,如何使用ScalaPB生成代码,以及如何实现protobuf定义的服务接口。这对于想要将gRPC应用到Scala项目中的开发者来说是非常有价值的参考资料。
**正文** Macwire 是一个 Scala 语言中的轻量级依赖注入(Dependency Injection,简称 DI)库,它使得在...通过学习和实践这个示例,你将能更好地理解和掌握 Scala 中的依赖注入,从而提升你的编程技能和项目质量。
【impress-js-scala-presentaion-sample】是一个项目,展示了如何结合使用JavaScript库impress.js与Scala语言来创建富有吸引力的动态演示文稿。impress.js是一个强大的工具,由前端开发者Bartek Szopka创建,它利用...
【标签】中的"sample"表明这是一个示例项目,有助于开发者理解和学习如何实现特定功能。"jvm"表示此项目是在Java虚拟机上运行的,"example-app"和"example-project"进一步确认了其作为学习资源的身份。"webapp"和...
"教授如何在Scala中构建简单的口译员" 表明这是一个教程或者学习资源,旨在教导用户如何设计和实现一个基础的解释器,用于理解并执行特定的编程指令或表达式。 **描述解析:** 描述中的 "样本解释器" 和 "教授如何...
标题 "sample-LDA-Java:从Scala轻松转换代码LDA" 指向的是一个项目,该项目旨在帮助开发者将Scala中的Latent Dirichlet Allocation(LDA)代码转换为Java语言。LDA是一种主题模型,常用于文本挖掘,它可以发现文档...
**Play Framework Scala 流处理与 Comet 和 Server ...此项目对于学习Play Framework的实时功能以及了解如何在Scala中构建高性能Web应用程序非常有帮助。开发者可以通过阅读源代码和运行示例来深入了解这些概念和实践。
通过深入学习和使用"excelParser",开发者可以有效地将Excel的计算能力引入到Scala应用中,提升数据分析和处理的效率。同时,对于熟悉JavaScript的开发者,这个库也可能提供了一种在前端或Node.js环境中处理Excel...
总结来说,`play-scala-seed.g8` 是一个用于快速搭建 Scala 语言的 Play Web 应用的模板,它利用 Giter8 工具简化了项目初始化过程,为开发者提供了一个功能齐全的起点,以便于学习、实践和扩展 Play 框架的应用程序...
**正文** `play-scala-tls-example` 是一个基于Play Framework构建的应用程序示例,它展示了如何在...通过深入研究此项目,开发者可以学习到如何在Scala中构建安全的Web应用程序,提升他们在网络应用安全方面的技能。
在"play-scala-forms-example"这个项目中,我们将深入学习如何使用Scala来处理表单。 **1. Play Framework简介** Play Framework推崇MVC(Model-View-Controller)架构模式,强调开发的快速迭代和热部署特性。它...
1. **sample**:这是一个示例项目,用于展示如何使用Scala和Play Framework构建Web应用程序。 2. **jvm**:Scala是一种运行在Java虚拟机上的编程语言,因此这个项目是在Java平台上运行的。 3. **example-app**:表明...
标题中的"fab-sample-camel-blueprint-share-1.1.0.Beta5.zip"表明这是一个基于Apache Camel的开源项目,具体来说,它使用了Blueprint XML配置来构建服务共享组件。Apache Camel是一个流行的Java企业集成库,它允许...
通过这个简单的Play Scala Hello World教程,你不仅可以学习到如何在Scala环境中搭建Web应用,还能掌握Play Framework的基础工作流程。了解这些基本概念后,你可以继续深入学习Play的高级特性,如WebSocket、CORS...
《Presto Parser 0.152.2与Scala响应式数据绑定解析》 在IT领域,开源项目是技术创新的重要推动力,今天我们将聚焦于...通过不断学习和实践,开发者可以充分利用这些工具的潜力,创造出更加高效和用户友好的软件系统。
通过深入研究并实践"play-scala-chatroom-example"项目,开发者不仅可以掌握Play Framework的基本用法,还能学习到WebSocket通信、实时应用的构建、Scala语言的应用以及如何测试此类Web应用程序,从而提升自己的技能...