Yellowstone sequence: Difference between revisions
Content added Content deleted
(Add PARI/GP implementation) |
(Add Scala implementation) |
||
Line 2,536: | Line 2,536: | ||
</pre> |
</pre> |
||
[[Media:Yellowstone sequence rust.png]] |
[[Media:Yellowstone sequence rust.png]] |
||
=={{header|Scala}}== |
|||
{{trans|Java}} |
|||
<syntaxhighlight lang="Scala"> |
|||
import scala.util.control.Breaks._ |
|||
object YellowstoneSequence extends App { |
|||
println(s"First 30 values in the yellowstone sequence:\n${yellowstoneSequence(30)}") |
|||
def yellowstoneSequence(sequenceCount: Int): List[Int] = { |
|||
var yellowstoneList = List(1, 2, 3) |
|||
var num = 4 |
|||
var notYellowstoneList = List[Int]() |
|||
while (yellowstoneList.size < sequenceCount) { |
|||
val foundIndex = notYellowstoneList.indexWhere(test => |
|||
gcd(yellowstoneList(yellowstoneList.size - 2), test) > 1 && |
|||
gcd(yellowstoneList.last, test) == 1 |
|||
) |
|||
if (foundIndex >= 0) { |
|||
yellowstoneList = yellowstoneList :+ notYellowstoneList(foundIndex) |
|||
notYellowstoneList = notYellowstoneList.patch(foundIndex, Nil, 1) |
|||
} else { |
|||
breakable({ |
|||
while (true) { |
|||
if (gcd(yellowstoneList(yellowstoneList.size - 2), num) > 1 && |
|||
gcd(yellowstoneList.last, num) == 1) { |
|||
yellowstoneList = yellowstoneList :+ num |
|||
num += 1 |
|||
// break the inner while loop |
|||
break |
|||
} |
|||
notYellowstoneList = notYellowstoneList :+ num |
|||
num += 1 |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
yellowstoneList |
|||
} |
|||
def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b) |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
First 30 values in the yellowstone sequence: |
|||
List(1, 2, 3, 4, 9, 8, 15, 14, 5, 6, 25, 12, 35, 16, 7, 10, 21, 20, 27, 22, 39, 11, 13, 33, 26, 45, 28, 51, 32, 17) |
|||
</pre> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |