`
forestking
  • 浏览: 43920 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Scala sample 学习

 
阅读更多

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

    通过这个sample-scala-project,学习者可以深入了解Scala的语法特性、SBT的使用以及CI/CD的实践,为实际项目开发打下坚实的基础。在实际操作中,还应注意代码风格、异常处理、并发编程等方面的最佳实践,提升代码...

    scala3-sample-classes

    Dotty 的设计目标之一就是简化 Scala 语言,使其更易于学习和使用。 8. **Match 类型** Scala 3 中的 **Match 类型** 允许你在类型定义中使用 `match` 表达式,这样可以确保变量只能接受特定类型的值。 9. **...

    scala-samples:Scala 示例代码

    这个名为"scala-samples"的压缩包包含了一系列的Scala示例代码,旨在帮助开发者更好地理解和学习Scala语言的特性与用法。 在Scala中,类和对象是其核心概念。 Scala支持类继承,同时通过特质(Traits)提供了更加...

    grpc-scala-sample:使用ScalaPB从grpc Java示例翻译而来

    通过深入研究这些文件,我们可以学习如何在Scala环境中设置gRPC服务,如何使用ScalaPB生成代码,以及如何实现protobuf定义的服务接口。这对于想要将gRPC应用到Scala项目中的开发者来说是非常有价值的参考资料。

    di-macwire-sample:使用 Macwire 在 Scala 中进行依赖注入的示例

    **正文** Macwire 是一个 Scala 语言中的轻量级依赖注入(Dependency Injection,简称 DI)库,它使得在...通过学习和实践这个示例,你将能更好地理解和掌握 Scala 中的依赖注入,从而提升你的编程技能和项目质量。

    impress-js-scala-presentaion-sample:包含使用 impress-js 的 Scala 演示

    【impress-js-scala-presentaion-sample】是一个项目,展示了如何结合使用JavaScript库impress.js与Scala语言来创建富有吸引力的动态演示文稿。impress.js是一个强大的工具,由前端开发者Bartek Szopka创建,它利用...

    play-scala-grpc-example:Play框架应用程序(Scala)中嵌入的akka​​-grpc服务的示例

    【标签】中的"sample"表明这是一个示例项目,有助于开发者理解和学习如何实现特定功能。"jvm"表示此项目是在Java虚拟机上运行的,"example-app"和"example-project"进一步确认了其作为学习资源的身份。"webapp"和...

    sample-interpreter:教授如何在Scala中构建简单的口译员

    "教授如何在Scala中构建简单的口译员" 表明这是一个教程或者学习资源,旨在教导用户如何设计和实现一个基础的解释器,用于理解并执行特定的编程指令或表达式。 **描述解析:** 描述中的 "样本解释器" 和 "教授如何...

    sample-LDA-Java:从Scala轻松转换代码LDA

    标题 "sample-LDA-Java:从Scala轻松转换代码LDA" 指向的是一个项目,该项目旨在帮助开发者将Scala中的Latent Dirichlet Allocation(LDA)代码转换为Java语言。LDA是一种主题模型,常用于文本挖掘,它可以发现文档...

    play-scala-streaming-example:示例Play应用程序,显示Scala中的Comet和Server Sent事件

    **Play Framework Scala 流处理与 Comet 和 Server ...此项目对于学习Play Framework的实时功能以及了解如何在Scala中构建高性能Web应用程序非常有帮助。开发者可以通过阅读源代码和运行示例来深入了解这些概念和实践。

    excelParser:试图理解 excel 公式的 Scala 库

    通过深入学习和使用"excelParser",开发者可以有效地将Excel的计算能力引入到Scala应用中,提升数据分析和处理的效率。同时,对于熟悉JavaScript的开发者,这个库也可能提供了一种在前端或Node.js环境中处理Excel...

    play-scala-seed.g8:播放Scala种子模板:运行“ sbt new playframeworkplay-scala-seed.g8”

    总结来说,`play-scala-seed.g8` 是一个用于快速搭建 Scala 语言的 Play Web 应用的模板,它利用 Giter8 工具简化了项目初始化过程,为开发者提供了一个功能齐全的起点,以便于学习、实践和扩展 Play 框架的应用程序...

    play-scala-tls-example:使用HTTPS和WS以及可选客户端身份验证的Play应用程序

    **正文** `play-scala-tls-example` 是一个基于Play Framework构建的应用程序示例,它展示了如何在...通过深入研究此项目,开发者可以学习到如何在Scala中构建安全的Web应用程序,提升他们在网络应用安全方面的技能。

    play-scala-forms-example:示例Play项目,显示表单处理

    在"play-scala-forms-example"这个项目中,我们将深入学习如何使用Scala来处理表单。 **1. Play Framework简介** Play Framework推崇MVC(Model-View-Controller)架构模式,强调开发的快速迭代和热部署特性。它...

    play-scala-starter-example:播放Scala入门模板(适合新用户!)

    1. **sample**:这是一个示例项目,用于展示如何使用Scala和Play Framework构建Web应用程序。 2. **jvm**:Scala是一种运行在Java虚拟机上的编程语言,因此这个项目是在Java平台上运行的。 3. **example-app**:表明...

    fab-sample-camel-blueprint-share-1.1.0.Beta5.zip

    标题中的"fab-sample-camel-blueprint-share-1.1.0.Beta5.zip"表明这是一个基于Apache Camel的开源项目,具体来说,它使用了Blueprint XML配置来构建服务共享组件。Apache Camel是一个流行的Java企业集成库,它允许...

    play-scala-hello-world-tutorial:在Scala中播放的Hello World教程

    通过这个简单的Play Scala Hello World教程,你不仅可以学习到如何在Scala环境中搭建Web应用,还能掌握Play Framework的基础工作流程。了解这些基本概念后,你可以继续深入学习Play的高级特性,如WebSocket、CORS...

    presto-parser-0.152.2.zip

    《Presto Parser 0.152.2与Scala响应式数据绑定解析》 在IT领域,开源项目是技术创新的重要推动力,今天我们将聚焦于...通过不断学习和实践,开发者可以充分利用这些工具的潜力,创造出更加高效和用户友好的软件系统。

    play-scala-chatroom-example:使用Scala API播放聊天室

    通过深入研究并实践"play-scala-chatroom-example"项目,开发者不仅可以掌握Play Framework的基本用法,还能学习到WebSocket通信、实时应用的构建、Scala语言的应用以及如何测试此类Web应用程序,从而提升自己的技能...

Global site tag (gtag.js) - Google Analytics