프로그래밍/Ruby 26

Ruby 언어에서 큰 부동소수점수(native double) 의 정확도

정수부의 자리수가 조금 큰 부동소수점수(64비트 double 포맷의 수)를 십진수 표현으로 출력해 보았습니다. 십진수로 표현하면 유효자리수 개수가 약 14~15개 정도인데, Java 언어와 C# 언어에서는 유효수자 개수로 자르고 그 뒤를 모두 0으로 출력지만, Ruby 언어에서는 Python, C/C++ 언어들 처럼 유효수자 아래 부분을 자르지 않고 모두 츨력합니다. 물론 Java, C#, Python, C, C++ 어느 프로그램 언어든 십진수로 표현할 때 자르는 방법이나 유효수자 아래 부분을 채우는 방법은 다르지만, 덧셈, 뺄셈, 곱셈, 나누셈, 기타 등등에서 유효수자 아래부분의 처리 결과는 대동소이합니다. # -*- coding: utf-8 -*- # # Filename: Test_Of_Native_..

Ruby 언어로 평방근, 입방근, n제곱근 구하는 함수를 구현하고 테스트하기

음이 아닌 실수 A 의 평방근 sqrt(A) 를 구하는 Heron 의 방법: 반복함수 g(x) = (x + A/x) / 2 를 이용 실수 A 의 n제곱근 root(n, A) 를 구하는 Newton-Raphson 의 방법 반복함수 g(x) = ((n-1)*x + A/(x**(n - 1))) / n 를 이용 n = 2 인 경우에는 Newton-Raphson 의 방법이 Heron 의 방법과 동일하다. (참조. http://en.wikipedia.org/wiki/Newton's_method ) Ruby 언어에는 지수 연산자 ** 를 (밑수)**(지수) 의 형식으로 언어 자체에서 지원하고 있다. 하지만 차후 필요한 데가 있을 것 같아서 이와 유사한 n 제곱 함수와 n 제곱근 함수를 구현해 보았다. 지수가 정수인 ..

Ruby 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제

역삼각함수란 삼각함수의 역함수를 의미하고, 역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다. 수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데, Ruby 언어에서는 Math::asin() 함수로 구현되어 있다. 다음 소스는 Ruby, JRuby 중 어느 것으로 실행해도 같은 결과를 얻는다. # -*- encoding: utf-8 -*- # Filename: testArcSine.rb # # Execute: ruby testArcSine.rb # # Or # # Execute: jruby testArcSine.rb # # Date: 2013. 1. 1. # Copyright (c) pkim _AT_ scripts.pe.kr def sin(x) y = Math::sin(x) return y end d..

높은 버전(1.9.2 이상)의 Ruby 언어에서 (UTF-8 인코딩) 한글 문자열 거꾸로 하기

* 아래는 높은 버전(1.9.2 이상)의 Ruby를 사용할 때 적용된다. UTF--8 인코딩이면 영문이든 한글이든 모두 문자열을 거꾸로 하기가 잘된다.String.reverse 또는 Strig.reverse() 하면 거꾸로 된 문자열을 얻는다. 예제 1. UTF-8 한글 문자열을 잘 처리하는 예제 # -*- encoding: utf-8 -*- a = "Hello, world!" b = "안녕하세요? 아햏햏" puts "%s --> %s" % [a, a.reverse()] puts "%s --> %s" % [b, b.reverse()] #################### # Expected: # Hello, world! --> !dlrow ,olleH # 안녕하세요? 아햏햏 --> 햏햏아 ?요세하녕안 #..

Mac OS X Lion 에서 Ruby 1.9.2 설치하여 Tk GUI 사용하기

Mac OS X Lion 에서 Ruby 1.9.2 에서 Tk GUI 사용하려면 ActiveTcl 을 먼저 설치하는 것이 좋다. (만약 Ruby 1.9.2 가 설치되어 있다면 Tk 를 살치한 후 Ruby 를 재컴파일 & 재설치하면 된다.) 1. Mac OS X 용 ActiveTcl 8.5 다운로드 2. Mac OS X 용 Ruby 다운로드 * 또는 1.9 안정화 버젼: Ruby 1.9.2-p290(tar.bz2 | tar.gz | zip) (참고: http://www.ruby-lang.org/ko/downloads/) 3. ActiveTcl 8.5 설치하기 다운로드된 Active 8.5.10 의 mpkg 파일을 클릭하면 나타나는 다음 창에서 ActiveTcl-8.5.pkg 의 아이콘을 더블클릭하면 설치된다..

숫자 맞추기 게임 with Ruby

Ruby 언어로 숫자 맞추기 게임을 작성해 보았다.Python 언어의 input()  함수에 대응하는 함수로서 사용자가 컨솔에서 입력한 것을 스트링으로 받는 Ruby 언어의 함수는 gets()이다. 그런데 Ruby 언어의 간편 구문표기(syntax sugar)에 따라 소괄호 열기와 닫기를 생략하여 gets만 해도 된다. 즉 아래 소스의 14째 줄                sbuf = gets는               sbuf = gets()의 간편 구문표기(syntax sugar)이다.아래 소스의 15째 줄 guess = sbuf.to_i 는 스트링을 정수로 타입변환하는 과정이다.소스 파일명: guessNumber01.rb#!/env/ruby##   Filename: guessNumber01.rb #..

스트링 리스트에서 스트링 찾기(find) with Ruby

[파일명: testStringFindInList.rb]------------------------------------------------ def find(arr, s) for i in 0..arr.size() do if arr[i].index(s) != nil return i end end return -1; end def printArray(arr) print("[") for i in 0..arr.size() - 1 do print(arr[i] + ", ") end if arr.size() > 0 print(arr[arr.size() - 1]) end print("]\n") end words = ["하나", "둘", "셋", "넷", "다섯", "여섯"] print("list: ") printArr..

스트링 배열 정렬(sorting)하기 with Ruby

[파일명: testSort.rb]------------------------------------------------ def printArray(a) for i in a do print i + ", " end print "\n" end list = ARGV.sort() printArray(list) ------------------------------------------------ 실행> ruby testSort.rb 자전차 자전거 전동차 전차 전기자동차 자전거, 자전차, 전기자동차, 전동차, 전차, 크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.

Pollard's rho method 소개: 정수의 인수분해(factorizing integers) with Ruby

정의 (소수와 합성수) 1보다 큰 양의 정수 n에 대하여 (i) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하면, n을 합성수(合成數, composite number)라고 한다. 참고로 이 경우, a, b 중에 적어도 하나는 sqrt(n) 보다 작거나 같다. 합성수의 예로는 4, 6, 9, 24, 143 등이 있다. (ii) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하지 않으면, 즉 n을 두 양의 정수의 곱으로 표현하는 방법이 1*n과 n*1 두 가지 뿐이면, n을 소수(素數, prime number)라고 한다. 소수의 예로는 2, 3, 5, 7, 11 등이 있다. n이 소수인지 아닌지 확인하려면, n을 2 보다 크거나 같고 sqrt(n) 보다 작거..

손으로 계산하는 긴자리 곱셈표 만들기 with Ruby

초등학교 때 배우는 두 정수의 곱셈표를 만들어 주는 Ruby 소스이다. # Filename: makeMultTable.rb # # Print a multiplication table. # # Execute: ruby makeMultTable.rb 230 5100 # # Date: 2009/03/06 # # def printUsing() print "Using: ruby makeMultTable.rb [number1] [number2]\n" print "Print a multiplication table for the given two integers.\n" end def printMultTable(x, y) nx = x if nx < 0 nx = -nx end ny = y if ny < 0 ny = -n..