# Shiftnanigans This crate contains useful, generic, commonly needed functionality, data structures, and algorithms for iterating sequentially forward and backward via "shifting". These "shifters" allow for controlled traversal of tree-like data structures in a manner that permits easier detection of fast-failing scenarios, rather than checking collections of items. ## Features ### Shifters - SegmentPermutationShifter - Transforms unpositioned line segments into localized line segments - IndexShifter - Traverses a tree-like structure of items, indexing over them - ScalingSquareBreadthFirstSearchShifter - Progressively shifts over all possible depths of the internal tree of integers, only permitting reaching deeper children after first iterating over all permutations of children closer to the root in a square-like pattern - ShiftingSquareBreadthFirstSearchShifter - Similar to the ScalingSquareBreadthFirstSearchShifter, but the integers are now the items at the respective index - HyperGraphClicheShifter - Returns the fully connected cliche graphs as they exist in the provided hypergraph, but each stateful node is provided singularly as the shifter is traversed over ### Incrementers - BinaryDensityIncrementer - Returns a collection of boolean values such that each subsequent iteration increases the total number of ones progressively starting from having zero true values to having all true values - BinaryValueIncrementer - Returns the binary representation of all integers from zero to the provided maximum power of two based on the provided length - LimitedIncrementer - A wrapper over another incrementer, only permitting a certain number of iterations as provided to the constructor - RoundRobinIncrementer - A wrapper over other incrementers that traverses around to each incrementer internally, giving each a chance to return a sequence of items - ShifterIncrementer - A wrapper over a shifter that traverses iteratively in a depth-first search pattern - ShiftingCellGroupDependencyIncrementer - A rather complex incrementer that compares groups of cell (pixels) to each other, disallowing overlaps (specific and general), and ensuring adjacency between non-wall cell groups and wall cell groups ### PixelBoard - PixelBoardRandomizer - When provided a PixelBoard, it randomizes where the pixels (cell groups) are located while avoiding overlap and maintaining adjacency between detected cell groups ## Usage Coming soon ## Examples None (at the moment)