Чтобы проверить, если число имеет только уникальные значения, вы можете сделать это:
num.to_s.split('').uniq == num.to_s.split('')
Вы распределяете каждое число в его отдельные цифры, как строки, а затем запустить uniq
для удаления дубликатов, и, если это то же самое, что и массив без uniq
, то у вас есть номер с недвойственными цифрами.
Если добавить к вашему if
заявлению, он получит довольно долго, поэтому я предлагаю вам обернуть это метод, который возвращает true
или false
:
def unique_digits?(num)
num.to_s.split('').uniq == num.to_s.split('')
end
Вашего if
заявление будет:
def next_numb(n)
x = n + 3
if x % 2 == 1 && x % 3 == 0 && unique_digits?(x)
return x
end
end
Я заметил что-то еще о вашем коде, он добавит только 3 к n
и проверяет, соответствует ли номер всем условиям, если да, то он вернет номер, а если нет, он вернется nil
.
Если у вас есть вход 15
, ваша функция вернет nil
, потому что 18
не является нечетным. Правильный номер, чтобы вернуться в 21
, так что вам потребуется цикл:
def next_numb(n)
x = n + 1
until x % 2 == 1 && x % 3 == 0 && unique_digits?(x)
x += 1
end
x
end
def unique_digits?(num)
num.to_s.split('').uniq == num.to_s.split('')
end
next_numb(13) #=> 15
next_numb(15) #=> 21
next_numb(125) #=> 129
будет 'next_numb (15)' '15' возврата или' 21'? –
будет '21', так как OP ищет следующий номер. – davidhu2000
Не думаю, что я видел эту аббревиатуру для слова «число». –