roman_numerals

3601 단어 tag1tag2
제목. 답안 # frozen_string_literal: true require './assert_equal' # 로마 숫자는 기본적으로 왼쪽 기호부터 넣으면 아라비아 숫자와 대응할 수 있다. # (ex. 3 -> III(1+1+1), 11 -> XI(10+1)) # 폴란드 기법으로 표현하면 이해하기 쉽다, 3->+III, 11->+XI #그러나 일부 예외는 상위의 기호 부근에서 위의 규칙이 성립되지 않는다. # (ex. 4 -> IV(not 1+5, but 5-1)) # 폴란드 기법으로 표현하면 4->-VI. 그래도 원래 표기 IV와는 반대다. # 가장 높은 비트가 가장 큰 경우 태그를 기준으로 가산합니다.그렇지 않으면 두 번째 자리수와 기호 사이를 교환한 후에 감법 연산을 한다...이런 논리는 매우 번거롭다. # 따라서 왼쪽 기호부터 추가하는 개념을 유지하기 위해 # 위의 예외는 사전에 내부에 정의되어 있습니다. class Roman def initialize(n) @roman = '' @n = n @arabic_roman = [ [1, 'I'], [4, 'IV'], [5, 'V'], [9, 'IX'], [10, 'X'], [40, 'XL'], [50, 'L'], [90, 'XC'], [100, 'C'], [400, 'CD'], [500, 'D'], [900, 'CM'], [1000, 'M'] ] end def roman @arabic_roman.reverse.each do |arabic, roman| quotient = @n / arabic @n -= quotient * arabic (1..quotient).each do |_| @roman += roman end end @roman end end def to_roman(n) return 'I' if n == 1 return 'V' if n == 5 return 'X' if n == 10 return 'L' if n == 50 return 'C' if n == 100 return 'D' if n == 500 return 'M' if n == 1000 end if __FILE__ == $PROGRAM_NAME [ ['I', 1], ['II', 2], ['III', 3], ['IV', 4], ['V', 5], ['VI', 6], ['IX', 9], ['X', 10], ['XI', 11], ['XIV', 14], ['XV', 15], ['XIX', 19], ['XXXVIII', 38], ['XLII', 42], ['XLIX', 49], ['LI', 51], ['XCVII', 97], ['XCIX', 99], ['CDXXXIX', 439], ['CDLXXXIII', 483], ['CDXCIX', 499], ['DCCXXXII', 732], ['CMLXI', 961], ['CMXCIX', 999], ['MCMXCIX', 1999] ].each do |expected, arg| assert_equal(expected, Roman.new(arg).roman) end end 참고로 루비는 여러 줄의 댓글을 쓸 수 있어요. =begin hoge fuga =end rubocop 설명의 모든 행이 #에서 시작됩니다. test 나는 모든 테스트를 통과했다. expected: I result: I succeeded in assert_equal. expected: II result: II succeeded in assert_equal. expected: III result: III succeeded in assert_equal. expected: IV result: IV succeeded in assert_equal. expected: V result: V succeeded in assert_equal. expected: VI result: VI succeeded in assert_equal. expected: IX result: IX succeeded in assert_equal. expected: X result: X succeeded in assert_equal. expected: XI result: XI succeeded in assert_equal. expected: XIV result: XIV succeeded in assert_equal. expected: XV result: XV succeeded in assert_equal. expected: XIX result: XIX succeeded in assert_equal. expected: XXXVIII result: XXXVIII succeeded in assert_equal. expected: XLII result: XLII succeeded in assert_equal. expected: XLIX result: XLIX succeeded in assert_equal. expected: LI result: LI succeeded in assert_equal. expected: XCVII result: XCVII succeeded in assert_equal. expected: XCIX result: XCIX succeeded in assert_equal. expected: CDXXXIX result: CDXXXIX succeeded in assert_equal. expected: CDLXXXIII result: CDLXXXIII succeeded in assert_equal. expected: CDXCIX result: CDXCIX succeeded in assert_equal. expected: DCCXXXII result: DCCXXXII succeeded in assert_equal. expected: CMLXI result: CMLXI succeeded in assert_equal. expected: CMXCIX result: CMXCIX succeeded in assert_equal. expected: MCMXCIX result: MCMXCIX succeeded in assert_equal. source ~/ghq/github.com/TeamNishitani/grad_members_20f/members/syasin-5d/roman_numerals.org

좋은 웹페이지 즐겨찾기