당신이 시간을 볼거야,이 프로그램의 패턴의 숫자, 그리고 특히 루비 그리고 다시 시간. 이 생성 및 검증 실패시 다시 실행 형식 패턴은 매우 일반적이며 Ruby는 일반적으로 begin ... end while (cond)
구조를 가지고 있습니다.
여기에서 당신에게 불리한 점은 세 가지 변수가 있다는 것입니다. 이는 조직 코드를 유지하는 데 필수적인 Zero, One or Infinity Rule을 위반합니다. "하나"이상의 것을 처리 할 때는 배열과 같은 데이터 구조를 사용하는 것을 고려하십시오.
def random_values(count = 3)
begin
values = Array.new(count) { rand(1...9) }
end while (values.inject(&:-) <= 0)
values
end
이것은 당신이 당신의 기준을 충족 하나를 찾을 때까지 목록을 생성 유지 : 계정에 모든 촬영
는
여기에 간단한 방법입니다. inject
호출은 목록을 반복하고 다음 요소에서 하나의 요소를 뺀 다음 후속 루프에서 해당 결과를 사용하여 특정 집합의 숫자에 대해 빼기를 수행하는 빠른 방법입니다.
Array
생성자에는 두 개의 인수가 주어 지는데 하나는 미리 할당 할 요소 수이고 두 번째는 해당 요소를 생성하는 방법을 정의하는 블록입니다. 이것은 임의 길이의 N 길이 배열을 만드는 빠른 방법입니다. 이것은 당신이 당신의 기준과 일치하는 첫 번째 항목을 문제로 Enumerable 라이브러리를 적용하고 find
할 수 있습니다
random_values = Enumerator.new do |y|
loop do
y << Array.new(3) { rand(1...9) }
end
end
:
지금이 일을 약간 더 루비 방법은 임의의 숫자의 발전기 세트 정의하는 것입니다.이 같은 일을이 방법의 장점은 함께 할 수 있습니다 체인 것들을
first = random_values.find do |x, y, z|
x - y - z > 0
end
입니다
얻을 : 여기 당신은 코드를 간단하게 유지하기 위해이 지역 테스트 블록 내에서 배열의 변수를 확장 할 수 있습니다
selection = random_values.lazy.select do |x, y, z|
x - y - z > 0
end.first(10)
이것은 "게으른"배열을 열거합니다. 즉 완료 될 때까지 해당 루프를 실행하는 경우 필요에 따라 생성하고 selection
이라는 배열에 저장 한 첫 번째 10 개를 꺼냅니다.
유용한 답변을 찾은 경우 가장 좋아하는 답변을 선택하십시오. –