Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
23
Task/Pancake-numbers/Java/pancake-numbers-1.java
Normal file
23
Task/Pancake-numbers/Java/pancake-numbers-1.java
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
public class Pancake {
|
||||
private static int pancake(int n) {
|
||||
int gap = 2;
|
||||
int sum = 2;
|
||||
int adj = -1;
|
||||
while (sum < n) {
|
||||
adj++;
|
||||
gap = 2 * gap - 1;
|
||||
sum += gap;
|
||||
}
|
||||
return n + adj;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int j = 1; j < 6; j++) {
|
||||
int n = 5 * i + j;
|
||||
System.out.printf("p(%2d) = %2d ", n, pancake(n));
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
47
Task/Pancake-numbers/Java/pancake-numbers-2.java
Normal file
47
Task/Pancake-numbers/Java/pancake-numbers-2.java
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
import static java.util.Comparator.comparing;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Queue;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
|
||||
public class Pancake {
|
||||
|
||||
private static List<Integer> flipStack(List<Integer> stack, int spatula) {
|
||||
List<Integer> copy = new ArrayList<>(stack);
|
||||
Collections.reverse(copy.subList(0, spatula));
|
||||
return copy;
|
||||
}
|
||||
|
||||
private static Map.Entry<List<Integer>, Integer> pancake(int n) {
|
||||
List<Integer> initialStack = IntStream.rangeClosed(1, n).boxed().collect(toList());
|
||||
Map<List<Integer>, Integer> stackFlips = new HashMap<>();
|
||||
stackFlips.put(initialStack, 1);
|
||||
Queue<List<Integer>> queue = new ArrayDeque<>();
|
||||
queue.add(initialStack);
|
||||
while (!queue.isEmpty()) {
|
||||
List<Integer> stack = queue.remove();
|
||||
int flips = stackFlips.get(stack) + 1;
|
||||
for (int i = 2; i <= n; ++i) {
|
||||
List<Integer> flipped = flipStack(stack, i);
|
||||
if (stackFlips.putIfAbsent(flipped, flips) == null) {
|
||||
queue.add(flipped);
|
||||
}
|
||||
}
|
||||
}
|
||||
return stackFlips.entrySet().stream().max(comparing(e -> e.getValue())).get();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
for (int i = 1; i <= 10; ++i) {
|
||||
Map.Entry<List<Integer>, Integer> result = pancake(i);
|
||||
System.out.printf("pancake(%s) = %s. Example: %s\n", i, result.getValue(), result.getKey());
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue