Skip to content

Instantly share code, notes, and snippets.

@O-O-wl
Last active April 4, 2019 02:50
Show Gist options
  • Save O-O-wl/0d89f3838399ce0a46536f573482edb5 to your computer and use it in GitHub Desktop.
Save O-O-wl/0d89f3838399ce0a46536f573482edb5 to your computer and use it in GitHub Desktop.
STEP2-5
import Foundation
func recognize( input : String ) ->(Double,String,String){
let pattern = "[^0-9.]+"
let regex = try! NSRegularExpression.init(pattern: pattern, options: [])
let matchRange = regex.firstMatch(in: input, options: [], range: NSRange.init(location: 0, length: input.count))
let units = NSString.init(string: input).substring(with: matchRange!.range)
let beforeUnit = units.split(separator: " ")[0]
let afterUnit = units.split(separator: " ").count == 2 ? String(units.split(separator: " ")[1]):"m"
let value = input.filter{
c in
if(units.contains(c)){
return false
}
return true
}
return (Double.init(value)! ,String(beforeUnit),String(afterUnit))
}
func convert(input:String) -> String {
let (value ,beforeUnit, afterUnit) = recognize(input: input)
var magnification :Double
switch ((beforeUnit,afterUnit) ) {
case ("cm","m"):
magnification = 0.01
case ("cm","inch"):
magnification = 0.393701
case ("cm","yard"):
magnification = 0.0109361
case ("m","cm"):
magnification = 100
case ("m","inch"):
magnification = 39.3701
case ("m","yard"):
magnification = 1.09361
case ("inch","cm"):
magnification = 2.54
case ("inch","m"):
magnification = 0.0254
case ("inch","yard"):
magnification = 0.0277778
case ("yard","cm"):
magnification = 91.44
case ("yard","m"):
magnification = 0.9144
case ("yard","inch"):
magnification = 36
default:
return "지원하지않는 단위입니다"
}
let result = "\(convertValueType(value: value * magnification))\(afterUnit)"
return result
}
func convertValueType( value : Double)->String{
if(value.remainder(dividingBy: 1) == 0){
return "\(Int.init(value))"
}else{
return "\(value)"
}
}
func start(){
while(true)
{
print("변환할 값과 단위를 입력해주세요")
let inputValue = readLine()
let quit = ["q","quit"]
if(quit.contains(inputValue!)){
break
}
print(convert(input: inputValue!))
}
}
start()
@godrm
Copy link

godrm commented Apr 4, 2019

convert(input:String) 함수에 있는 switch 비교문은 숫자만 리턴하는군요!
이런 경우는 메모리에 숫자값을 저장하는 방식을 고려해보세요. 데이터 구조를 사용하면 코드량을 줄일 수 있습니다.

@godrm
Copy link

godrm commented Apr 4, 2019

다음 단계를 하면서 recognize() 내부에 있는 작업들을 함수가 하나의 작업만 하도록 분리하고, recognize() 내부에서는 조합해서 사용하도록 개선해보세요.

@O-O-wl
Copy link
Author

O-O-wl commented Apr 4, 2019

감사합니다 JK 개선해서 진행해보겠습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment