2017-01-05 18 views
1

Мне нужно заменить целое число на строку в clojure, но только на 20% от выводимых целых чисел.Как заменить целое число на строку 20 процентов времени Clojure

(defn factor5 [x] 
    (if (= (mod x 3) (mod x 5) 0) "BuzzFizz" 
    (if (= (mod x 5) 0) "buzz" 
    (if (= (mod x 3) 0) "fizz" x)))) 

здесь у меня есть программа FizzBuzz, которая печатает «шипение», если число кратно 3 или «кайфа», если он кратен 5 и «BuzzFizz» печатается, если кратно и , если целое число не является ни одним из вышеперечисленных умножений, целое число печатается. Мне нужно печатать «Boom» вместо целого числа, но только для 20% целых чисел.

некоторые псевдо-код

if(x == int){ 
    print out Boom instead of x only for 20% } 
    else{ 
    print out x} 

У меня есть очень ограниченное exprience в Clojure, как мой псевдокода является Java на основе

+0

Вы хотите, чтобы 20% были случайными? –

ответ

0

Пожалуйста, см the Clojure Cheatsheet для полного списка функций.

Тот, который вы хотите, rand, и испытание, как:

(if (< (rand) 0.2) ....) 
+0

Спасибо, ребята, у меня нет репутации 15, поэтому я не могу поддержать, но большое спасибо. –

0

, если вы хотите, решение, принятое в случайном порядке, вы можете использовать один из ранда runctions в если заявление так:

user> (defn x20% [x] 
     (if (rand-nth [true false false false false]) 
      "Boom" 
      x)) 
#'user/x20% 
user> (x20% 5) 
5 
user> (x20% 5) 
5 
user> (x20% 5) 
"Boom" 
user> (x20% 5) 
5 

есть также rand и rand-int. который вы используете несколько вопрос стиля и специфики вашей функции:

user> (> 2 (rand-int 10)) 
true 
user> (> 2 (rand-int 10)) 
true 
user> (> 2 (rand-int 10)) 
false 
user> (> 0.2 (rand)) 
true 
user> (> 0.2 (rand)) 
+0

Я думаю, что ваш '<' тест отсталый ...? –

+0

yep, точно назад, спасибо, что поддержал меня честно! –

0
(defn factor-5 [x] 
    (if (and (number? x) (zero? (rem x 1))) 
    (if (zero? (rand-int 5)) 
     "Boom" 
     x))) 
  • Это возвращает требуемое значение, а не печатать его.
  • Он проверяет, что его аргумент является числовым, и, если это так, что это значение , которое может быть byte, short, int, ....
  • (rand-int 5) выбирает случайно из 0, 1, ... 4.