Loop until… with Ramda

前端 未结 2 747
轻奢々
轻奢々 2020-12-17 05:34

I was trying to refactor few pieces of code using Ramda and I was wondering, What could be a good approach in Ramda/Functional Programming to solve the following code:

2条回答
  •  旧时难觅i
    2020-12-17 05:58

    I don't know if this does what you want, but Ramda's until might be what you need:

    const operation = ({val, ctr}) => ({val: val % 2 ? (3 * val + 1) : (val / 2), ctr: ctr + 1})
    
    const indexCondition = ({ctr}) => ctr > 100
    const valCondition = ({val}) =>  val === 1
    const condition = R.either(indexCondition, valCondition)
    
    const check = R.until(condition, operation)
    
    const collatz = n => check({ctr: 0, val: n})
    
    console.log(collatz(12)) 
    // 12 -> 6 -> 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1 //=> {"ctr": 9, "val": 1}
    console.log(collatz(5)) 
    // 5 -> 16 -> 8 -> 4 -> 2 -> 1 //=> {"ctr": 5, "val": 1}
    console.log(collatz(27)) 
    //27 -> 82 -> 41 -> 124 -> 62 -> .... //=> {"ctr": 101, "val": 160}

提交回复
热议问题