【蹭热度】AI绘图大赛计分小工具
本帖最后由 AkiPolaris 于 2023-8-5 20:56 编辑众所周知,萝卜头的AI绘图大赛的排名、评分工作正在进行中,参赛选手一定想知道自己将会获得怎样的成绩。
大部分参赛选手都将自己的排名发布于投票贴中,因此各位坛友都可以计算选手们的分数。
虽然理论能算,但手算又有些繁琐,于是我编写了一个快速计算各位选手得分的小工具,让各位选手得以快速计算自己的得分及排位。(杠:可以用Excel)
工具用scala3编写,打包包括了scala环境,运行仅要求java环境(jre)。
当然,由于编写时间有限,同时适用范围极小,因此没有过多考虑非法输入,但只要按本次活动的排名规则输入,理论上不会出问题。
工具运行效果:
输入当前回帖中各参赛选手的排名
查看得分及排位
在运行过程中会在程序所在目录产生一个文件:rank.dat
里面记录的实际上就是各位参赛选手对作品的排名,因此理论上也可以直接填写该文件,再通过工具计算结果。
rank.dat文件大致长这个样子:
代码:
import scala.io.Source
import scala.io.StdIn.{readLine, readInt}
import collection.mutable.Map
import java.io._
import scala.compiletime.ops.string
def welcome() =
print("""萝卜头AI绘图大赛计分小工具
|by AkiPolaris
|
|功能选择:「1」输入n条数据,每次都会进行初始化
| 「2」计算结果,按得分从高到低排序
| 「3」退出
""".stripMargin)
//计算排行榜
def getRanks() =
var mapRanks = Map()
for rank <- read_PlainText() do
val aRank = getARank(rank)
if mapRanks.isEmpty then
mapRanks = aRank
else
mapRanks = mapRanks ++ aRank.map(t => t._1 -> (t._2 + mapRanks.getOrElse(t._1, 0)))
val seqRanks = mapRanks.toSeq.sortWith(_._2 > _._2)
for rank <- seqRanks do
println(s"${rank._1} : ${rank._2}")
//计算某一次排名
def getARank(aRank: String) =
val mapARank = Map()
val len = aRank.length()
for i <- (0 to len-1) do
mapARank(aRank.charAt(i)) = (len-i)
mapARank
//输入所有排名
def setRanks() =
val fw = FileWriter(File("./ranks.dat"),false)
fw.write("")
fw.flush()
fw.close()
println("初始化完成")
try
println("接下来将输入多少行数据?")
val times = readInt()
for i <- 1 to times do
println("请输入一行数据")
setARank()
catch
case nfe: NumberFormatException => println("请输入大于等于1的数字")
//写入一个排名
def setARank() =
write_PlainText(readLine().replaceAll(" ","").toUpperCase())
//读取文件
def read_PlainText() =
Source.fromFile("./ranks.dat").getLines()
//写入文件
def write_PlainText(rank: String) =
val writer = FileWriter(File("./ranks.dat"),true)
writer.write(rank+'\n')
writer.close()
@main def Main: Unit =
while true do
welcome()
readLine() match
case "1" => setRanks()
case "2" => getRanks()
case "3" => return
case _ => println("无效命令,只接受输入1、2、3")
打包过程:
程序文件(jar):
顶一下,虽然我看不太懂
最后的几个case是用来简化if语句的吗,头一次知道Python里也有 这个必须要顶起来,有需求才能有创作的动力。
小朋友们可以解决实际问题了,{:37:} 大佬!收下我的膝盖!{:37:} 爱电脑的昕宇 发表于 2023-8-11 21:25
顶一下,虽然我看不太懂
最后的几个case是用来简化if语句的吗,头一次知道Python里也有 ...
不,这是scala3{:15:}
这种场景下用case比if else简单易读就是了
页:
[1]