Imagine you're encoding morse in a protocol that has only an instant pulse. you can't do a dash, only dots.

But you can encode a dot as two dots with a short gap between them, and a dash by two dots with a long gap between them.

And you can of course merge adjacent dots: V is ···-, but you don't need eight dots to represent that, you need 5:
dot-short-dot-short-dot-short-dot-long-dot

and an extra-long gap between two dots is a space

if my math is correct, you encode "hello world" in 39 dots

this was originally going to be a math problem but I think I figured it out by the end, so I just posted it in case anyone found it interesting or can point out a way I'm fucking up.

I'm a bit sleep-deprived at the moment so I could easily be very wrong

the point of this dots-only idea was to compare it against a different encoding, which tries to minimize the number of dots by measuring the gaps between them.
so "hello world" would be encoded as 12 dots, with long distances between them

encoding algorithm:

emit('.')
for char in string:
sleep(char-32)
emit('.')

this does have the edge case that a space is encoded as no go between dots.

it could be shifted to char-31 or we could design the decoder to consider sub-1s delays as being 0

@foone Say you want to transmit values from a countable set X. Choose an injective map from X to the positive rationals. Then transmit dot numerator dot denominator dot. Minimal number of dots, maximal level of impracticability (is this a word?)
Edit: "numerator" and "denominator" meaning "wait that time" of course.
@foone NOOO THAT'S NOT AN IDEA FOR A NEW KEYBOARD!

@foone with infinite pause precision, you only need two dots for anything.

When you factor in Planck Time (~5e-44 sec), your options get more limited, but I can’t be bothered to do the math right now

@foone if X is a pulse and _ is silence, why not do X _ _ _ for a dit and X _ X _ for a dah? timing would not have to be nearly as precise

@foone
t=0
for char in string:
t = t*256 + char
emit('.')
sleep(t)
emit('.')

throughput could use some improvement, though

@foone Imagine it compressed into its version of a .zip file.

@foone
So, you need a start dot dot so the receiver knows how long a dot gap is, and a quiet period so it knows where the sequence ends, and maybe an extra dot before that, or lack of one that signals whether there are more dots than dashes so it knows it got things right.

Where have I seen this before?