unlisted experimental tilesets page

This commit is contained in:
David Allemang
2026-10-02 13:51:03 -04:00
parent 9b39caefff
commit be84f5b1bf
16 changed files with 1248 additions and 5407 deletions

89
content/chains.py Normal file
View File

@@ -0,0 +1,89 @@
"""Enumerate flattened redstone delay-chains for a given total delay."""
import argparse
import sys
from collections import Counter
from functools import cache
from typing import NamedTuple
class Comp(NamedTuple):
delay: int
priority: int
blocks: tuple
# Insert custom subcomponents here, e.g. Comp(6, -1, ("-", "R2", "C")).
COMPONENTS = [
Comp(8, -3, ("R4",)),
Comp(6, -3, ("R3",)),
Comp(4, -3, ("R2",)),
Comp(2, -3, ("R1",)),
Comp(8, -1, ("-", "R4")),
Comp(6, -1, ("-", "R3")),
Comp(4, -1, ("-", "R2")),
Comp(2, -1, ("C",)),
Comp(2, -1, ("-", "R1")),
Comp(2, 0, ("-", "C")),
]
assert all(c.blocks for c in COMPONENTS), "components must have >= 1 block"
_ORDERED = sorted(COMPONENTS, key=lambda c: (c.priority, -c.delay))
def _canon(comps):
seen = {}
for c in comps:
seen.setdefault((c.priority, c.delay), c)
return list(seen.values())
HEAD = _canon([c for c in _ORDERED if c.blocks[0] == "-"])
BODY = _canon(_ORDERED)
def chains(total: int):
for c in HEAD:
if c.delay > total:
continue
if total == c.delay:
yield c.blocks
else:
yield from (c.blocks + rest for rest in _body(total - c.delay))
@cache
def _body(remaining: int):
out = []
for c in BODY:
if c.delay > remaining:
continue
if remaining == c.delay:
out.append(c.blocks)
else:
out.extend(c.blocks + rest for rest in _body(remaining - c.delay))
return tuple(out)
def main():
ap = argparse.ArgumentParser(description=__doc__)
ap.add_argument("total", type=int, help="total delay to enumerate")
ap.add_argument("count", nargs="*", type=int, help="total element count")
args = ap.parse_args()
tileset = chains(args.total)
if args.count:
tileset = (chain for chain in tileset if len(chain) in args.count)
tileset = list(tileset)
for chain in tileset:
print(*chain)
counts = Counter(map(len, tileset))
print(len(tileset), "chains", file=sys.stderr)
for length in sorted(counts):
print(f"length {length} chains: {counts[length]}", file=sys.stderr)
if __name__ == "__main__":
main()

101
content/tileset-10-5.txt Normal file
View File

@@ -0,0 +1,101 @@
- R3 - C - C
- R2 R1 R1 - C
- R2 R1 C - C
- R2 R1 - C R1
- R2 R1 - C C
- R2 - R2 - C
- R2 C R1 - C
- R2 C C - C
- R2 C - C R1
- R2 C - C C
- R2 - C R1 R1
- R2 - C R1 C
- R2 - C - R2
- R2 - C C R1
- R2 - C C C
- R1 R2 R1 - C
- R1 R2 C - C
- R1 R2 - C R1
- R1 R2 - C C
- R1 R1 R2 - C
- R1 R1 R1 R1 R1
- R1 R1 R1 R1 C
- R1 R1 R1 - R2
- R1 R1 R1 C R1
- R1 R1 R1 C C
- R1 R1 - R2 R1
- R1 R1 - R2 C
- R1 R1 C R1 R1
- R1 R1 C R1 C
- R1 R1 C - R2
- R1 R1 C C R1
- R1 R1 C C C
- R1 R1 - C R2
- R1 - R3 - C
- R1 - R2 R1 R1
- R1 - R2 R1 C
- R1 - R2 - R2
- R1 - R2 C R1
- R1 - R2 C C
- R1 C R2 - C
- R1 C R1 R1 R1
- R1 C R1 R1 C
- R1 C R1 - R2
- R1 C R1 C R1
- R1 C R1 C C
- R1 C - R2 R1
- R1 C - R2 C
- R1 C C R1 R1
- R1 C C R1 C
- R1 C C - R2
- R1 C C C R1
- R1 C C C C
- R1 C - C R2
- R1 - C R2 R1
- R1 - C R2 C
- R1 - C R1 R2
- R1 - C - R3
- R1 - C C R2
- C R2 R1 - C
- C R2 C - C
- C R2 - C R1
- C R2 - C C
- C R1 R2 - C
- C R1 R1 R1 R1
- C R1 R1 R1 C
- C R1 R1 - R2
- C R1 R1 C R1
- C R1 R1 C C
- C R1 - R2 R1
- C R1 - R2 C
- C R1 C R1 R1
- C R1 C R1 C
- C R1 C - R2
- C R1 C C R1
- C R1 C C C
- C R1 - C R2
- C - R3 - C
- C - R2 R1 R1
- C - R2 R1 C
- C - R2 - R2
- C - R2 C R1
- C - R2 C C
- C C R2 - C
- C C R1 R1 R1
- C C R1 R1 C
- C C R1 - R2
- C C R1 C R1
- C C R1 C C
- C C - R2 R1
- C C - R2 C
- C C C R1 R1
- C C C R1 C
- C C C - R2
- C C C C R1
- C C C C C
- C C - C R2
- C - C R2 R1
- C - C R2 C
- C - C R1 R2
- C - C - R3
- C - C C R2

361
content/tileset-10-n.txt Normal file
View File

@@ -0,0 +1,361 @@
- R4 R1
- R4 C
- R4 - C
- R3 R2
- R3 R1 R1
- R3 R1 C
- R3 R1 - C
- R3 - R2
- R3 C R1
- R3 C C
- R3 C - C
- R3 - C R1
- R3 - C C
- R3 - C - C
- R2 R3
- R2 R2 R1
- R2 R2 C
- R2 R2 - C
- R2 R1 R2
- R2 R1 R1 R1
- R2 R1 R1 C
- R2 R1 R1 - C
- R2 R1 - R2
- R2 R1 C R1
- R2 R1 C C
- R2 R1 C - C
- R2 R1 - C R1
- R2 R1 - C C
- R2 R1 - C - C
- R2 - R3
- R2 - R2 R1
- R2 - R2 C
- R2 - R2 - C
- R2 C R2
- R2 C R1 R1
- R2 C R1 C
- R2 C R1 - C
- R2 C - R2
- R2 C C R1
- R2 C C C
- R2 C C - C
- R2 C - C R1
- R2 C - C C
- R2 C - C - C
- R2 - C R2
- R2 - C R1 R1
- R2 - C R1 C
- R2 - C R1 - C
- R2 - C - R2
- R2 - C C R1
- R2 - C C C
- R2 - C C - C
- R2 - C - C R1
- R2 - C - C C
- R2 - C - C - C
- R1 R4
- R1 R3 R1
- R1 R3 C
- R1 R3 - C
- R1 R2 R2
- R1 R2 R1 R1
- R1 R2 R1 C
- R1 R2 R1 - C
- R1 R2 - R2
- R1 R2 C R1
- R1 R2 C C
- R1 R2 C - C
- R1 R2 - C R1
- R1 R2 - C C
- R1 R2 - C - C
- R1 R1 R3
- R1 R1 R2 R1
- R1 R1 R2 C
- R1 R1 R2 - C
- R1 R1 R1 R2
- R1 R1 R1 R1 R1
- R1 R1 R1 R1 C
- R1 R1 R1 R1 - C
- R1 R1 R1 - R2
- R1 R1 R1 C R1
- R1 R1 R1 C C
- R1 R1 R1 C - C
- R1 R1 R1 - C R1
- R1 R1 R1 - C C
- R1 R1 R1 - C - C
- R1 R1 - R3
- R1 R1 - R2 R1
- R1 R1 - R2 C
- R1 R1 - R2 - C
- R1 R1 C R2
- R1 R1 C R1 R1
- R1 R1 C R1 C
- R1 R1 C R1 - C
- R1 R1 C - R2
- R1 R1 C C R1
- R1 R1 C C C
- R1 R1 C C - C
- R1 R1 C - C R1
- R1 R1 C - C C
- R1 R1 C - C - C
- R1 R1 - C R2
- R1 R1 - C R1 R1
- R1 R1 - C R1 C
- R1 R1 - C R1 - C
- R1 R1 - C - R2
- R1 R1 - C C R1
- R1 R1 - C C C
- R1 R1 - C C - C
- R1 R1 - C - C R1
- R1 R1 - C - C C
- R1 R1 - C - C - C
- R1 - R4
- R1 - R3 R1
- R1 - R3 C
- R1 - R3 - C
- R1 - R2 R2
- R1 - R2 R1 R1
- R1 - R2 R1 C
- R1 - R2 R1 - C
- R1 - R2 - R2
- R1 - R2 C R1
- R1 - R2 C C
- R1 - R2 C - C
- R1 - R2 - C R1
- R1 - R2 - C C
- R1 - R2 - C - C
- R1 C R3
- R1 C R2 R1
- R1 C R2 C
- R1 C R2 - C
- R1 C R1 R2
- R1 C R1 R1 R1
- R1 C R1 R1 C
- R1 C R1 R1 - C
- R1 C R1 - R2
- R1 C R1 C R1
- R1 C R1 C C
- R1 C R1 C - C
- R1 C R1 - C R1
- R1 C R1 - C C
- R1 C R1 - C - C
- R1 C - R3
- R1 C - R2 R1
- R1 C - R2 C
- R1 C - R2 - C
- R1 C C R2
- R1 C C R1 R1
- R1 C C R1 C
- R1 C C R1 - C
- R1 C C - R2
- R1 C C C R1
- R1 C C C C
- R1 C C C - C
- R1 C C - C R1
- R1 C C - C C
- R1 C C - C - C
- R1 C - C R2
- R1 C - C R1 R1
- R1 C - C R1 C
- R1 C - C R1 - C
- R1 C - C - R2
- R1 C - C C R1
- R1 C - C C C
- R1 C - C C - C
- R1 C - C - C R1
- R1 C - C - C C
- R1 C - C - C - C
- R1 - C R3
- R1 - C R2 R1
- R1 - C R2 C
- R1 - C R2 - C
- R1 - C R1 R2
- R1 - C R1 R1 R1
- R1 - C R1 R1 C
- R1 - C R1 R1 - C
- R1 - C R1 - R2
- R1 - C R1 C R1
- R1 - C R1 C C
- R1 - C R1 C - C
- R1 - C R1 - C R1
- R1 - C R1 - C C
- R1 - C R1 - C - C
- R1 - C - R3
- R1 - C - R2 R1
- R1 - C - R2 C
- R1 - C - R2 - C
- R1 - C C R2
- R1 - C C R1 R1
- R1 - C C R1 C
- R1 - C C R1 - C
- R1 - C C - R2
- R1 - C C C R1
- R1 - C C C C
- R1 - C C C - C
- R1 - C C - C R1
- R1 - C C - C C
- R1 - C C - C - C
- R1 - C - C R2
- R1 - C - C R1 R1
- R1 - C - C R1 C
- R1 - C - C R1 - C
- R1 - C - C - R2
- R1 - C - C C R1
- R1 - C - C C C
- R1 - C - C C - C
- R1 - C - C - C R1
- R1 - C - C - C C
- R1 - C - C - C - C
- C R4
- C R3 R1
- C R3 C
- C R3 - C
- C R2 R2
- C R2 R1 R1
- C R2 R1 C
- C R2 R1 - C
- C R2 - R2
- C R2 C R1
- C R2 C C
- C R2 C - C
- C R2 - C R1
- C R2 - C C
- C R2 - C - C
- C R1 R3
- C R1 R2 R1
- C R1 R2 C
- C R1 R2 - C
- C R1 R1 R2
- C R1 R1 R1 R1
- C R1 R1 R1 C
- C R1 R1 R1 - C
- C R1 R1 - R2
- C R1 R1 C R1
- C R1 R1 C C
- C R1 R1 C - C
- C R1 R1 - C R1
- C R1 R1 - C C
- C R1 R1 - C - C
- C R1 - R3
- C R1 - R2 R1
- C R1 - R2 C
- C R1 - R2 - C
- C R1 C R2
- C R1 C R1 R1
- C R1 C R1 C
- C R1 C R1 - C
- C R1 C - R2
- C R1 C C R1
- C R1 C C C
- C R1 C C - C
- C R1 C - C R1
- C R1 C - C C
- C R1 C - C - C
- C R1 - C R2
- C R1 - C R1 R1
- C R1 - C R1 C
- C R1 - C R1 - C
- C R1 - C - R2
- C R1 - C C R1
- C R1 - C C C
- C R1 - C C - C
- C R1 - C - C R1
- C R1 - C - C C
- C R1 - C - C - C
- C - R4
- C - R3 R1
- C - R3 C
- C - R3 - C
- C - R2 R2
- C - R2 R1 R1
- C - R2 R1 C
- C - R2 R1 - C
- C - R2 - R2
- C - R2 C R1
- C - R2 C C
- C - R2 C - C
- C - R2 - C R1
- C - R2 - C C
- C - R2 - C - C
- C C R3
- C C R2 R1
- C C R2 C
- C C R2 - C
- C C R1 R2
- C C R1 R1 R1
- C C R1 R1 C
- C C R1 R1 - C
- C C R1 - R2
- C C R1 C R1
- C C R1 C C
- C C R1 C - C
- C C R1 - C R1
- C C R1 - C C
- C C R1 - C - C
- C C - R3
- C C - R2 R1
- C C - R2 C
- C C - R2 - C
- C C C R2
- C C C R1 R1
- C C C R1 C
- C C C R1 - C
- C C C - R2
- C C C C R1
- C C C C C
- C C C C - C
- C C C - C R1
- C C C - C C
- C C C - C - C
- C C - C R2
- C C - C R1 R1
- C C - C R1 C
- C C - C R1 - C
- C C - C - R2
- C C - C C R1
- C C - C C C
- C C - C C - C
- C C - C - C R1
- C C - C - C C
- C C - C - C - C
- C - C R3
- C - C R2 R1
- C - C R2 C
- C - C R2 - C
- C - C R1 R2
- C - C R1 R1 R1
- C - C R1 R1 C
- C - C R1 R1 - C
- C - C R1 - R2
- C - C R1 C R1
- C - C R1 C C
- C - C R1 C - C
- C - C R1 - C R1
- C - C R1 - C C
- C - C R1 - C - C
- C - C - R3
- C - C - R2 R1
- C - C - R2 C
- C - C - R2 - C
- C - C C R2
- C - C C R1 R1
- C - C C R1 C
- C - C C R1 - C
- C - C C - R2
- C - C C C R1
- C - C C C C
- C - C C C - C
- C - C C - C R1
- C - C C - C C
- C - C C - C - C
- C - C - C R2
- C - C - C R1 R1
- C - C - C R1 C
- C - C - C R1 - C
- C - C - C - R2
- C - C - C C R1
- C - C - C C C
- C - C - C C - C
- C - C - C - C R1
- C - C - C - C C
- C - C - C - C - C

361
content/tileset-10.txt Normal file
View File

@@ -0,0 +1,361 @@
- R4 R1
- R4 C
- R4 - C
- R3 R2
- R3 R1 R1
- R3 R1 C
- R3 R1 - C
- R3 - R2
- R3 C R1
- R3 C C
- R3 C - C
- R3 - C R1
- R3 - C C
- R3 - C - C
- R2 R3
- R2 R2 R1
- R2 R2 C
- R2 R2 - C
- R2 R1 R2
- R2 R1 R1 R1
- R2 R1 R1 C
- R2 R1 R1 - C
- R2 R1 - R2
- R2 R1 C R1
- R2 R1 C C
- R2 R1 C - C
- R2 R1 - C R1
- R2 R1 - C C
- R2 R1 - C - C
- R2 - R3
- R2 - R2 R1
- R2 - R2 C
- R2 - R2 - C
- R2 C R2
- R2 C R1 R1
- R2 C R1 C
- R2 C R1 - C
- R2 C - R2
- R2 C C R1
- R2 C C C
- R2 C C - C
- R2 C - C R1
- R2 C - C C
- R2 C - C - C
- R2 - C R2
- R2 - C R1 R1
- R2 - C R1 C
- R2 - C R1 - C
- R2 - C - R2
- R2 - C C R1
- R2 - C C C
- R2 - C C - C
- R2 - C - C R1
- R2 - C - C C
- R2 - C - C - C
- R1 R4
- R1 R3 R1
- R1 R3 C
- R1 R3 - C
- R1 R2 R2
- R1 R2 R1 R1
- R1 R2 R1 C
- R1 R2 R1 - C
- R1 R2 - R2
- R1 R2 C R1
- R1 R2 C C
- R1 R2 C - C
- R1 R2 - C R1
- R1 R2 - C C
- R1 R2 - C - C
- R1 R1 R3
- R1 R1 R2 R1
- R1 R1 R2 C
- R1 R1 R2 - C
- R1 R1 R1 R2
- R1 R1 R1 R1 R1
- R1 R1 R1 R1 C
- R1 R1 R1 R1 - C
- R1 R1 R1 - R2
- R1 R1 R1 C R1
- R1 R1 R1 C C
- R1 R1 R1 C - C
- R1 R1 R1 - C R1
- R1 R1 R1 - C C
- R1 R1 R1 - C - C
- R1 R1 - R3
- R1 R1 - R2 R1
- R1 R1 - R2 C
- R1 R1 - R2 - C
- R1 R1 C R2
- R1 R1 C R1 R1
- R1 R1 C R1 C
- R1 R1 C R1 - C
- R1 R1 C - R2
- R1 R1 C C R1
- R1 R1 C C C
- R1 R1 C C - C
- R1 R1 C - C R1
- R1 R1 C - C C
- R1 R1 C - C - C
- R1 R1 - C R2
- R1 R1 - C R1 R1
- R1 R1 - C R1 C
- R1 R1 - C R1 - C
- R1 R1 - C - R2
- R1 R1 - C C R1
- R1 R1 - C C C
- R1 R1 - C C - C
- R1 R1 - C - C R1
- R1 R1 - C - C C
- R1 R1 - C - C - C
- R1 - R4
- R1 - R3 R1
- R1 - R3 C
- R1 - R3 - C
- R1 - R2 R2
- R1 - R2 R1 R1
- R1 - R2 R1 C
- R1 - R2 R1 - C
- R1 - R2 - R2
- R1 - R2 C R1
- R1 - R2 C C
- R1 - R2 C - C
- R1 - R2 - C R1
- R1 - R2 - C C
- R1 - R2 - C - C
- R1 C R3
- R1 C R2 R1
- R1 C R2 C
- R1 C R2 - C
- R1 C R1 R2
- R1 C R1 R1 R1
- R1 C R1 R1 C
- R1 C R1 R1 - C
- R1 C R1 - R2
- R1 C R1 C R1
- R1 C R1 C C
- R1 C R1 C - C
- R1 C R1 - C R1
- R1 C R1 - C C
- R1 C R1 - C - C
- R1 C - R3
- R1 C - R2 R1
- R1 C - R2 C
- R1 C - R2 - C
- R1 C C R2
- R1 C C R1 R1
- R1 C C R1 C
- R1 C C R1 - C
- R1 C C - R2
- R1 C C C R1
- R1 C C C C
- R1 C C C - C
- R1 C C - C R1
- R1 C C - C C
- R1 C C - C - C
- R1 C - C R2
- R1 C - C R1 R1
- R1 C - C R1 C
- R1 C - C R1 - C
- R1 C - C - R2
- R1 C - C C R1
- R1 C - C C C
- R1 C - C C - C
- R1 C - C - C R1
- R1 C - C - C C
- R1 C - C - C - C
- R1 - C R3
- R1 - C R2 R1
- R1 - C R2 C
- R1 - C R2 - C
- R1 - C R1 R2
- R1 - C R1 R1 R1
- R1 - C R1 R1 C
- R1 - C R1 R1 - C
- R1 - C R1 - R2
- R1 - C R1 C R1
- R1 - C R1 C C
- R1 - C R1 C - C
- R1 - C R1 - C R1
- R1 - C R1 - C C
- R1 - C R1 - C - C
- R1 - C - R3
- R1 - C - R2 R1
- R1 - C - R2 C
- R1 - C - R2 - C
- R1 - C C R2
- R1 - C C R1 R1
- R1 - C C R1 C
- R1 - C C R1 - C
- R1 - C C - R2
- R1 - C C C R1
- R1 - C C C C
- R1 - C C C - C
- R1 - C C - C R1
- R1 - C C - C C
- R1 - C C - C - C
- R1 - C - C R2
- R1 - C - C R1 R1
- R1 - C - C R1 C
- R1 - C - C R1 - C
- R1 - C - C - R2
- R1 - C - C C R1
- R1 - C - C C C
- R1 - C - C C - C
- R1 - C - C - C R1
- R1 - C - C - C C
- R1 - C - C - C - C
- C R4
- C R3 R1
- C R3 C
- C R3 - C
- C R2 R2
- C R2 R1 R1
- C R2 R1 C
- C R2 R1 - C
- C R2 - R2
- C R2 C R1
- C R2 C C
- C R2 C - C
- C R2 - C R1
- C R2 - C C
- C R2 - C - C
- C R1 R3
- C R1 R2 R1
- C R1 R2 C
- C R1 R2 - C
- C R1 R1 R2
- C R1 R1 R1 R1
- C R1 R1 R1 C
- C R1 R1 R1 - C
- C R1 R1 - R2
- C R1 R1 C R1
- C R1 R1 C C
- C R1 R1 C - C
- C R1 R1 - C R1
- C R1 R1 - C C
- C R1 R1 - C - C
- C R1 - R3
- C R1 - R2 R1
- C R1 - R2 C
- C R1 - R2 - C
- C R1 C R2
- C R1 C R1 R1
- C R1 C R1 C
- C R1 C R1 - C
- C R1 C - R2
- C R1 C C R1
- C R1 C C C
- C R1 C C - C
- C R1 C - C R1
- C R1 C - C C
- C R1 C - C - C
- C R1 - C R2
- C R1 - C R1 R1
- C R1 - C R1 C
- C R1 - C R1 - C
- C R1 - C - R2
- C R1 - C C R1
- C R1 - C C C
- C R1 - C C - C
- C R1 - C - C R1
- C R1 - C - C C
- C R1 - C - C - C
- C - R4
- C - R3 R1
- C - R3 C
- C - R3 - C
- C - R2 R2
- C - R2 R1 R1
- C - R2 R1 C
- C - R2 R1 - C
- C - R2 - R2
- C - R2 C R1
- C - R2 C C
- C - R2 C - C
- C - R2 - C R1
- C - R2 - C C
- C - R2 - C - C
- C C R3
- C C R2 R1
- C C R2 C
- C C R2 - C
- C C R1 R2
- C C R1 R1 R1
- C C R1 R1 C
- C C R1 R1 - C
- C C R1 - R2
- C C R1 C R1
- C C R1 C C
- C C R1 C - C
- C C R1 - C R1
- C C R1 - C C
- C C R1 - C - C
- C C - R3
- C C - R2 R1
- C C - R2 C
- C C - R2 - C
- C C C R2
- C C C R1 R1
- C C C R1 C
- C C C R1 - C
- C C C - R2
- C C C C R1
- C C C C C
- C C C C - C
- C C C - C R1
- C C C - C C
- C C C - C - C
- C C - C R2
- C C - C R1 R1
- C C - C R1 C
- C C - C R1 - C
- C C - C - R2
- C C - C C R1
- C C - C C C
- C C - C C - C
- C C - C - C R1
- C C - C - C C
- C C - C - C - C
- C - C R3
- C - C R2 R1
- C - C R2 C
- C - C R2 - C
- C - C R1 R2
- C - C R1 R1 R1
- C - C R1 R1 C
- C - C R1 R1 - C
- C - C R1 - R2
- C - C R1 C R1
- C - C R1 C C
- C - C R1 C - C
- C - C R1 - C R1
- C - C R1 - C C
- C - C R1 - C - C
- C - C - R3
- C - C - R2 R1
- C - C - R2 C
- C - C - R2 - C
- C - C C R2
- C - C C R1 R1
- C - C C R1 C
- C - C C R1 - C
- C - C C - R2
- C - C C C R1
- C - C C C C
- C - C C C - C
- C - C C - C R1
- C - C C - C C
- C - C C - C - C
- C - C - C R2
- C - C - C R1 R1
- C - C - C R1 C
- C - C - C R1 - C
- C - C - C - R2
- C - C - C C R1
- C - C - C C C
- C - C - C C - C
- C - C - C - C R1
- C - C - C - C C
- C - C - C - C - C

2
content/tileset-2-n.txt Normal file
View File

@@ -0,0 +1,2 @@
- R1
- C

7
content/tileset-4-n.txt Normal file
View File

@@ -0,0 +1,7 @@
- R2
- R1 R1
- R1 C
- R1 - C
- C R1
- C C
- C - C

26
content/tileset-6-n.txt Normal file
View File

@@ -0,0 +1,26 @@
- R3
- R2 R1
- R2 C
- R2 - C
- R1 R2
- R1 R1 R1
- R1 R1 C
- R1 R1 - C
- R1 - R2
- R1 C R1
- R1 C C
- R1 C - C
- R1 - C R1
- R1 - C C
- R1 - C - C
- C R2
- C R1 R1
- C R1 C
- C R1 - C
- C - R2
- C C R1
- C C C
- C C - C
- C - C R1
- C - C C
- C - C - C

32
content/tileset-8-4.txt Normal file
View File

@@ -0,0 +1,32 @@
- R2 R1 - C
- R2 C - C
- R2 - C R1
- R2 - C C
- R1 R2 - C
- R1 R1 R1 R1
- R1 R1 R1 C
- R1 R1 - R2
- R1 R1 C R1
- R1 R1 C C
- R1 - R2 R1
- R1 - R2 C
- R1 C R1 R1
- R1 C R1 C
- R1 C - R2
- R1 C C R1
- R1 C C C
- R1 - C R2
- C R2 - C
- C R1 R1 R1
- C R1 R1 C
- C R1 - R2
- C R1 C R1
- C R1 C C
- C - R2 R1
- C - R2 C
- C C R1 R1
- C C R1 C
- C C - R2
- C C C R1
- C C C C
- C - C R2

97
content/tileset-8-n.txt Normal file
View File

@@ -0,0 +1,97 @@
- R4
- R3 R1
- R3 C
- R3 - C
- R2 R2
- R2 R1 R1
- R2 R1 C
- R2 R1 - C
- R2 - R2
- R2 C R1
- R2 C C
- R2 C - C
- R2 - C R1
- R2 - C C
- R2 - C - C
- R1 R3
- R1 R2 R1
- R1 R2 C
- R1 R2 - C
- R1 R1 R2
- R1 R1 R1 R1
- R1 R1 R1 C
- R1 R1 R1 - C
- R1 R1 - R2
- R1 R1 C R1
- R1 R1 C C
- R1 R1 C - C
- R1 R1 - C R1
- R1 R1 - C C
- R1 R1 - C - C
- R1 - R3
- R1 - R2 R1
- R1 - R2 C
- R1 - R2 - C
- R1 C R2
- R1 C R1 R1
- R1 C R1 C
- R1 C R1 - C
- R1 C - R2
- R1 C C R1
- R1 C C C
- R1 C C - C
- R1 C - C R1
- R1 C - C C
- R1 C - C - C
- R1 - C R2
- R1 - C R1 R1
- R1 - C R1 C
- R1 - C R1 - C
- R1 - C - R2
- R1 - C C R1
- R1 - C C C
- R1 - C C - C
- R1 - C - C R1
- R1 - C - C C
- R1 - C - C - C
- C R3
- C R2 R1
- C R2 C
- C R2 - C
- C R1 R2
- C R1 R1 R1
- C R1 R1 C
- C R1 R1 - C
- C R1 - R2
- C R1 C R1
- C R1 C C
- C R1 C - C
- C R1 - C R1
- C R1 - C C
- C R1 - C - C
- C - R3
- C - R2 R1
- C - R2 C
- C - R2 - C
- C C R2
- C C R1 R1
- C C R1 C
- C C R1 - C
- C C - R2
- C C C R1
- C C C C
- C C C - C
- C C - C R1
- C C - C C
- C C - C - C
- C - C R2
- C - C R1 R1
- C - C R1 C
- C - C R1 - C
- C - C - R2
- C - C C R1
- C - C C C
- C - C C - C
- C - C - C R1
- C - C - C C
- C - C - C - C

View File

@@ -0,0 +1,161 @@
= Experimental Low-Latency Tilesets
#let stylesheet = ```
.tile {
display: inline-block;
font-size: 1.4em;
width: 1em;
margin-block: -0.25em;
aspect-ratio: 1;
background-image: url('/wiki-schematic-sprite.png'), url('/wiki-schematic-sprite.png');
background-color: white;
background-size: 31.99em;
image-rendering: pixelated;
}
.r1-l { background-position: -8em -5em, -0em -2em; }
.r2-l { background-position: -9em -5em, -0em -2em; }
.r3-l { background-position: -10em -5em, -0em -2em; }
.r4-l { background-position: -11em -5em, -0em -2em; }
.c-l { background-position: -12em -7em, -0em -2em; }
.block { background-position: -7em -0em, -0em -2em; }
.wire-lr { background-position: -10em -2em, -0em -2em; }
```
#let tileset(file, summary: none, start: 1) = html.details(open: false)[
#if summary != none { html.summary(summary) }
#html.div(style: "font-size: larger", {
show "R1": html.i(class: "tile r1-l", title: "2gt Repeater")
show "R2": html.i(class: "tile r2-l", title: "4gt Repeater")
show "R3": html.i(class: "tile r3-l", title: "6gt Repeater")
show "R4": html.i(class: "tile r4-l", title: "8gt Repeater")
show "C": html.i(class: "tile c-l", title: "Comparator")
show "-": html.i(class: "tile wire-lr", title: "Redstone Wire (or opaque block)")
show " ": none
let lines = read(file).trim().split("\n").map(it => it.trim("-"))
enum(start: start, ..lines)
})
]
#html.style(stylesheet.text)
#link("chains.py", `chains.py`) enumerates generalized tilesets, accounting for priorities 0, -1,
and -3 with various delays. Note it does _not_ account for inverted components or pulses, so cannot
include priority -2.
Still, this means we have 3 priorities and 4 delays to work with. The number of chains with total
delay $n$ is $O(9^(n\/2))$. For example, at 8gt delay, there are 97 generalized tilesets but only
$2^4 = 16$ binary tileset.
The generalized tilesets are highly irregular, but they may be useful for static prefixes or
suffixes where latency is critical.
== Variable-length tilesets 2gt - 10gt.
I don't include them all explicitly here since the plain lists are unweildy, but at various delays
the number of general chains grows quickly:
#html.table(
{
html.colgroup({
html.col(style: "width: 15ch")
html.col(style: "width: auto")
html.col(style: "width: 15ch")
})
html.thead({
html.th[Total Delay]
html.th[\# General]
html.th[\# Binary]
})
html.tbody({
html.tr({
html.td[2gt]
html.td(tileset("tileset-2-n.txt", summary: [2]))
html.td[2]
})
html.tr({
html.td[4gt]
html.td(tileset("tileset-4-n.txt", summary: [7]))
html.td[4]
})
html.tr({
html.td[6gt]
html.td(tileset("tileset-6-n.txt", summary: [26]))
html.td[8]
})
html.tr({
html.td[8gt]
html.td(tileset("tileset-8-n.txt", summary: [97]))
html.td[16]
})
html.tr({
html.td[10gt]
html.td[361]
html.td[32]
})
html.tr({
html.td[12gt]
html.td[1343]
html.td[64]
})
html.tr({
html.td[14gt]
html.td[4497]
html.td[128]
})
})
},
)
== Uniform subsets
The variable-length tilesets are difficult to wire, so some useful subsets are those with a fixed
number of _blocks_. These still grow faster in $n$ than the equivalent binary tilesets.
Note that the output of #link("chains.py", `chains.py`) always includes a trailing redstone wire,
since the last diode in the tileset can never be facing another diode. You must then add one to the
block count to account for this extra wire. For example, the command to generate the "10gt, 5 block"
list below is `python chains.py 10 6`, and it produces output like "`- R1 C R2 - C`" (where the
signal flows right-to-left).
#html.table(
{
html.colgroup({
html.col(style: "width: 15ch")
html.col(style: "width: auto")
html.col(style: "width: 15ch")
})
html.thead({
html.th[Total Delay]
html.th[\# General]
html.th[\# Binary]
})
html.tbody({
html.tr({
html.td[8gt, 4 block]
html.td(tileset("tileset-8-4.txt", summary: [32]))
html.td[16]
})
html.tr({
html.td[10gt, 5 block]
html.td(tileset("tileset-10-5.txt", summary: [101]))
html.td[32]
})
html.tr({
html.td[12gt, 6 block]
html.td[331]
html.td[64]
})
html.tr({
html.td[14gt, 7 block]
html.td[1114]
html.td[128]
})
})
},
)

File diff suppressed because it is too large Load Diff

View File

@@ -304,23 +304,6 @@ take to make things easier to reason about.
== Lexicographic Tilesets == Lexicographic Tilesets
#html.details[
#html.summary[all 361 distinct 10gt priority/delay chains]
#show raw.where(lang: "mc-diorama"): it => diorama(
theta: 270,
phi: 50,
speed: 0.33,
radius: 10,
aspect: 8,
orbit: false,
target: (0.5, 0, 5),
it.text,
)
#include "tilesets-lexicographic.typ"
]
== Jamming == Jamming
== Observer Bug <observer-bug> == Observer Bug <observer-bug>

View File

@@ -66,4 +66,10 @@
// doc("channel-selectors.html", include "content/channels.typ") // doc("channel-selectors.html", include "content/channels.typ")
// doc("bulk-transmission.html", include "content/bulk.typ") // doc("bulk-transmission.html", include "content/bulk.typ")
// doc("network-protocols.html", include "content/network.typ") // doc("network-protocols.html", include "content/network.typ")
set heading(outlined: false)
doc("tilesets-low-latency.html", include "content/tilesets-experimental.typ")
asset("chains.py", read("content/chains.py"))
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View File

@@ -1,48 +0,0 @@
<!DOCTYPE html>
<html lang="en_US">
<head>
<style>
html {
<!-- font-size: x-large; -->
}
.tile {
display: inline-block;
font-size: 1.5em;
width: 1em;
aspect-ratio: 1;
background-image: url('https://minecraft.wiki/images/SchematicSprite.png');
background-size: calc(1em * 32) calc(1em * 32);
image-rendering: pixelated;
alignment-baseline: middle;
}
.r1-l {
background-position: -8em -5em;
}
.r2-l {
background-position: -9em -5em;
}
.r3-l {
background-position: -10em -5em;
}
.r4-l {
background-position: -11em -5em;
}
.c-l {
background-position: -12em -7em;
}
</style>
</head>
<body>
<p>
Repeater : <i class="tile r1-l"></i><i class="tile r2-l"></i><i class="tile r3-l"></i><i class="tile r4-l"></i><i class="tile c-l"></i><br>
Repeater : <i class="tile r1-l"></i><i class="tile r2-l"></i><i class="tile r3-l"></i><i class="tile r4-l"></i><i class="tile c-l"></i>
</p>
</body>
</html>

View File

@@ -80,6 +80,10 @@ pre code {
border: 1px outset rgb(from currentColor r g b / 30%); border: 1px outset rgb(from currentColor r g b / 30%);
} }
table td details {
margin-block: 0;
}
.callout { .callout {
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
font-size: 1em; font-size: 1em;
@@ -104,6 +108,7 @@ summary::marker {
table { table {
border-collapse: collapse; border-collapse: collapse;
table-layout: fixed;
width: 100%; width: 100%;
td { td {