Executable library: Difference between revisions
Content added Content deleted
(→{{header|Phix}}: now builtin (0.8.1+)) |
|||
Line 797: | Line 797: | ||
In 66.ijs we can not use the presence of <code>9!:29]1</code> from <code>hailseq.ijs</code> because hailseq.ijs was loaded with require which means that if it had already been loaded it will not be loaded again. |
In 66.ijs we can not use the presence of <code>9!:29]1</code> from <code>hailseq.ijs</code> because hailseq.ijs was loaded with require which means that if it had already been loaded it will not be loaded again. |
||
(And, <code>66</code> here is just an arbitrary temporary file name.) |
(And, <code>66</code> here is just an arbitrary temporary file name.) |
||
=={{header|Java}}== |
|||
Java files are compiled into bytecode class files. The CLASSPATH will specify the location of class files. |
|||
===Library=== |
|||
<lang java> |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
// task 1 |
|||
public class HailstoneSequence { |
|||
public static void main(String[] args) { |
|||
// task 2 |
|||
int n = 27; |
|||
List<Long> sequence27 = hailstoneSequence(n); |
|||
System.out.printf("Hailstone sequence for %d has a length of %d:%nhailstone(%d) = %s%n", n, sequence27.size(), n, sequence27); |
|||
// task 3 |
|||
int maxN = 0; |
|||
int maxLength = 0; |
|||
for ( int i = 1 ; i < 100_000 ; i++ ) { |
|||
int seqLength = hailstoneSequence(i).size(); |
|||
if ( seqLength > maxLength ) { |
|||
maxLength = seqLength; |
|||
maxN = i; |
|||
} |
|||
} |
|||
System.out.printf("Longest hailstone sequence less than 100,000: hailstone(%d).length() = %d", maxN, maxLength); |
|||
} |
|||
public static List<Long> hailstoneSequence(long n) { |
|||
if ( n <= 0 ) { |
|||
throw new IllegalArgumentException("Must be grater than or equal to zero."); |
|||
} |
|||
List<Long> sequence = new ArrayList<>(); |
|||
sequence.add(n); |
|||
while ( n > 1 ) { |
|||
if ( (n & 1) == 0 ) { |
|||
n /= 2; |
|||
} |
|||
else { |
|||
n = 3 * n + 1; |
|||
} |
|||
sequence.add(n); |
|||
} |
|||
return sequence; |
|||
} |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Hailstone sequence for 27 has a length of 112: |
|||
hailstone(27) = [27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1] |
|||
Longest hailstone sequence less than 100,000: hailstone(77031).length() = 351 |
|||
</pre> |
|||
===Client=== |
|||
<lang java> |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
import java.util.stream.IntStream; |
|||
public class ExecutableLibrary { |
|||
public static void main(String[] args) { |
|||
Map<Integer,Integer> lengthMap = new HashMap<>(); |
|||
IntStream.range(1, 100_000) |
|||
.map(n -> HailstoneSequence.hailstoneSequence(n).size()) |
|||
.forEach(len -> lengthMap.merge(len, 1, (v1, v2) -> v1 + v2)); |
|||
int mostOften = lengthMap.values() |
|||
.stream() |
|||
.mapToInt(x -> x) |
|||
.max().orElse(-1); |
|||
System.out.printf("The most frequent hailstone length for n < 100,000 is %d.%n", mostOften); |
|||
} |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
The most frequent hailstone length for n < 100,000 is 1467. |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |