월말도 되고 해서 심심풀이로 풀고 있습니다. 1단계로 크기변경 없이 프린트하는 버전...
여기 magnifyDigits라는 함수만 잘 채워넣으면 마무리될것 같네요.
대략 함수형으로 짠 버전입니다. 심심하실 때 magnifyDigits 한번 채워넣어 보세요 ~~
/**
* Created with IntelliJ IDEA.
* User: s2852886
* Date: 30/01/13
* Time: 12:39 PM
* To change this template use File | Settings | File Templates.
*/
object seg7 {
val segMap = Map(
'0'-> List(" _ ","| |","|_|"),
'1'-> List(" "," |"," |"),
'2'-> List(" _ "," _|","|_ "),
'3'-> List(" _ "," _|"," _|"),
'4'-> List(" ","|_|"," |"),
'5'-> List(" _ ","|_ "," _|"),
'6'-> List(" _ ","|_ ","|_|"),
'7'-> List(" _ "," |"," |"),
'8'-> List(" _ ","|_|","|_|"),
'9'-> List(" _ ","|_|"," _|")
)
def toDigits(s:String) = {
def toDigit(s:Char):List[String] = segMap.get(s).getOrElse {throw new Exception("Invalid Digit")}
s.toList.map(toDigit)
}
def printDigits(s:List[List[String]]) {
def printLine(s:List[String]): List[String] = s match {
case Nil => Nil
case hd::tl => print(hd); tl
}
if (s.exists((l:List[String])=>(!l.isEmpty))) printDigits({println(""); s.map(printLine)})
}
def usage() {
println("사용법: seg7.scala <옵션> 숫자로만_이루어진_문자열")
println("")
println(" -s <크기> : <크기>(양의 정수) 배율로 확대한 7세그먼트 문자를 표시합니다(미지정시 기본값=2).")
println(" -h : 이 도움말 화면을 표시합니다.")
}
def magnifyDigits(sz:Int, s:List[List[String]]) = s
def main(args: Array[String]): Unit = {
if((args.length != 3) && (args.length != 1))
usage()
else
{
try {
val (str, size) =
if (args.length==1)
(args(0), 2)
else if (args(0) != "-s")
throw new Exception("invalid argument")
else
(args(2), args(1).toInt)
printDigits(magnifyDigits(2,toDigits(str)))
}
catch
{
case e:Exception => {
println("Error: " + e.getMessage())
println("")
usage()
}
}
}
}
}