« first day (249 days earlier)      last day (1410 days later) » 

9:45 AM
I came up with an idea to check whether a number is even or odd.
1. Take an integer: 3 OR 4
2. Generate a range, and the reverse range. [1 2 3] [3 2 1] OR [1 2 3 4] [4 3 2 1]
3. Vectorizing equality, on corresponding indices. [0 1 0] OR [0 0 0 0]
4. Sum the resulting list. 1 OR 0
 
10:31 AM
I can't think of a language where that's the shortest method
Given that x%2, x&2 or even while(x > 1){x -= 2} exist
 
10:56 AM
But it is the shortest method without built-ins! ;P
Speaking of which, how does one choose an effective and efficient list of built-ins for a golfing language?
 
11:42 AM
@Memberfor3months To find the parity (of the bit count), my evil answer to "Is this number evil?" creates a circular list of zeroes (a circular list is built-in in evil; adding an element is 1 byte), sets the first cell to 1 and the second cell to -1, and traverses it with a step of 2 until it finds a non-zero number. I think it is the shortest method (especially because it's hard to increment a counter conditionally in a doubly nested loop in evil)
 
 
1 hour later…
12:52 PM
@Lyxal But wouldn't it use the range builtin? Or the reverse, equality and sum builtins
@Lyxal I usually grab the list of either Jelly or 05AB1E's builtins, then remove the ones I don't wat
 
1:09 PM
@cairdcoinheringaahing Make a language where this is the shortest method.
Like, every command preserves an "original" and "reversed" form of the operand on the stack.
 
It would need to not have % or &
and while loops
 
Just 1-ranges, reduction, addition, equality etc.
Actually, this is one of my various ideas in my "magic notebook".
(I've filled up every single page in the notebook)
@cairdcoinheringaahing Language Unknown: R=+
 
It could be interesting to work with as a base
like what else can you add to make it TC, but the range way is still the shortest equality test
not equality, parity
 
Explanation: R: Pop x, push [1..x] and [x..1]
=: Dyadic operand taking two lists: vectorize by default.
+: Dyadic where TOS is a list: Reduce by the dyadic operand.
@cairdcoinheringaahing I'm not sure, any ideas?
(Dyadic without any list operands: directly apply)
 
Well, you could add in overloading for types/argument numebrs
 
1:24 PM
!?!?!?
 
Like = is x == y, but is also bool(x)
and + is x + y when x and y are numbers, but x.upper() if string
For example
 
I mean, its just an idea
Same with R: range(x) or range(x, y)
 
Implicit input is going to mess the arity up, how are you going to deal with it?
(There's also implicit output BTW)
 
Sameway MATL does it
 
1:27 PM
(list-wrap syntax: TODO)
 
Don't have implicit input, have it so that if it needs another argument, it reads one in from input
 
Ahh. I.e. lazy implicit input
 
For example, let's say + is either is_prime(x) or x + y
Then running + would change depending on the inputs
Running 1+ would run x+1
 
BTW I would be extremely glad if anyone could prove DIVCON Turing Complete!
It seems extremely capable, but I can't seem prove the TC-ness.
 
If anyone needs help with proving the TCness of a language, the answers here have some great methods/tricks/tips:
119
Q: Fewest (distinct) characters for Turing Completeness

Julian LachnietSummary: For any given language, what is the smallest amount of unique characters for your language to be Turing-Complete? Challenge: For any language of your choice, find the smallest subset of characters that allows your language to be Turing-Complete. You may reuse your set of characters as ma...

@Memberfor3months I don't think it is, as it doesn't have unbounded storage
There's no way to store two separate values
 
1:37 PM
@cairdcoinheringaahing You can partition accumulators infinitely, and there's reverse computation...
 
Also, it doesn't seem as tho there's any way to conditionally branch, meaning it has basically no control flow
 
@cairdcoinheringaahing Did you not see the # instruction!?
 
@Memberfor3months That only skips the next byte tho
There's no way to conditionally completely skip an entire section of code
 
@cairdcoinheringaahing What do you mean by conditional branch here? Just if or if/else?
 
Either if + looping, or while
 
1:40 PM
If you mean if, you can do this: #a #b #c Where abc is your block.
As for looping, you can construct a conditional reverse computation based on whether accumulator = 0.
 
For instance, could you write a program which took in an input n and if it's even, calculate the nth prime, and if odd print n?
Because i don't think there's any way to chain commands together based off of a single conditional
So "if <condition>, do <multi-step algorithm>" doesn't seem possible
 
Adding a {while acc != 0} structure should alleviate that
As is {abcdef} runs abcdef until the accumulator is 0
tbh i'm not very good at determining TC-ness, my goto is to just equate commands with bf's command set
 
Actually, DIVCON allows a limited form of that structure, on the end of a branch.
S ... #
Is that sufficient as a while loop?
 
I'm not sure
The docs aren't the easiest to understand
You created DIVCON right?
 
1:48 PM
I indeed created DIVCON.
 
Would you mind creating a while structure?
Pick any algorithm you want, idc, but you'll probably be the best to do it
 
@cairdcoinheringaahing Sorry to hear that. Can you describe which parts exactly do you not understand?
@cairdcoinheringaahing Sorry, creating a while structure will make DIVCON inconsistent.
That means, usually, control flow is on a branch. But the while loop does not involve a branch.
 
@Memberfor3months No, I mean writing a program in DIVCON as in, that uses a while loop kinda structure
Not adding anything to DIVCON
 
Then, fair enough.
 
@Memberfor3months Do you mind if I try to rewrite a section of the wiki in a text file to make it more understandable to me, while still keeping the meaning I think you're trying to say, and then show you?
 
1:53 PM
@cairdcoinheringaahing Go ahead, I don't have time to edit the page right now.
 
2:09 PM
@Memberfor3months How far back does the "we execute the code block A reversed." go? if you have 50 commands, then a branch, do you reexecute all 50 but reversed?
 
@cairdcoinheringaahing You re-execute all 50, until you encounter a S instruction.
S reverses execution, so it re-executes all instructions so far in reverse order.
 
When re-executing the entire program but in reverse, how does branching work?
For instance, what's the X command here when in reverse: +[A;B]*?
 
@cairdcoinheringaahing X is +. Everything after [...;...] is ignored.
(Although the implementation doesn't do that; that's on my TODO list.)
 
So every program is either AAAA or AAAX[BBB;CCC]?
 
@cairdcoinheringaahing Exactly.
 
2:21 PM
Jeez
Also, "The execution of DIVCON is linear."
 
(The 2D version doesn't have this problem. But it's too hard to implement for me.)
 
It most definitely is not
So, I think the issue with the docs is a super common one: you've written them assuming that the reader is already familiar with DIVCON. You've done this because you're familiar with the language, which makes it a very easy trap to fall into
For instance, at no point in the docs does it say that all programs are either in the form AAA or AAAX[BBB;CCC]
 
Go ahead, any more problems in the docs?
 
The whole "from leaf to the root" is kinda difficult to get your head around tbh
 
But, do you understand the accumulator partitioning in the docs here?
 
2:26 PM
Like its used to mean start and finish, but then you say "If encountered on root", which doesn't make a lot of sense if root = start and leaf = end
@Memberfor3months Yeah, I think so
Personally I'd tinker a bit with the wording in the Branching section, but I think it works
 
Any more problems? I need to get rid of all problems in the docs...
 
Nothing ovbious, no
what would happen with a[b[c;d][e;f]]?
 
@cairdcoinheringaahing Is the ommission of the ; in the outer layer of [] intentional?
That's a syntax error, evidently.
 
@Memberfor3months Ah, sorry I mean a[b[c;d][e;f];g]
So using a branch as the partition
 
Well, after partitioning by a, the two branches become b[c;d][e;f] and g respectively.
And, partitioning by b yields c and d.
The trailing [e;f] is ignored here.
 
2:42 PM
I bring it up because of "It's already a branch. What are you thinking of? :)"
 
Sorry, I joked in the docs too much.
 
No, it just got me wondering
 
I shouldn't have made any jokes in the docs, obviously.
 
because I don't know what I'd think it would do
 
Alright, I fixed that.
Ahh, I forgot to put "undefined behavior" for I and O.
@cairdcoinheringaahing CMQ: What do you think the behavior of i and o on a branch should be?
It just feels terrible typing "undefined behavior" all the time.
So, I guess something useful must be done when i or o is on a branch, instead of throwing a syntax error.
 
2:49 PM
@Memberfor3months As in i[a;b]?
 
Take input and partition to the left
 
By what? Examples please?
 
So a would get the input and b would get 0
And then when reversing, it doesn't do anything
For instance i[o;o] with input of 10 would output 10\n0
 
Ahh, exactly. i-[a;b] will do the exact same job...
So it's probably not really useful...
 
2:52 PM
You could have an if statement kinda thing
 
(And at least this construction does something when reverse-computed...)
@cairdcoinheringaahing Really clever idea!
 
Like i[a;b] gives it to a if <something> or b if not
Like if the input is even vs odd
Or prime vs composite
 
*Applause*
The long-ignored if-else statement!
 
Not sure how you'd "recombine" afterwards tho
 
(Curious about why I haven't thought about this idea before.)
 
2:53 PM
I'm guessing just set the accumulator to the side which got given the input
 
@cairdcoinheringaahing I guess, we need to work out a reverse of if...
 
e.g. let's say i goes left if even and right if odd
#oi[+;] would always output an odd number
cause if the input is even, it is incremented, and the accumulator is set to that value, and if odd, nothing happens
 
You forgot to take input though... i#oi[+;]
 
I was thinking i takes input even as a branch, but yeah
 
So, during reverse computation, you'll take input again?
 
2:56 PM
Perhaps? Idk
The specifics are up to you
 
Well, we're better off being consistent, I'll just avoid direction-related input stuff.
Well, any idea on "recombining"?
 
5 mins ago, by caird coinheringaahing
I'm guessing just set the accumulator to the side which got given the input
That's my best idea
 
(Like, if a is executed, the combined value is true, and otherwise false (?))
What if both sides got the input?
And, I'm not sure what you mean by "got the input"...
You mean, if a block is empty, then the block hasn't "got the input"?
 
So with i#oi[a;b] and partitioning on parity, if odd, b would get accumulator, and if even then a
And when recombing, the side that got the accumulator would set the new value of the accumulator
 
Ahh, I see. I was indeed being an idiot.
(I'm going to be afk)
 
3:03 PM
@Memberfor3months Dw about it, I wasn't being very clear
 
 
7 hours later…
9:36 PM
@Memberfor3months Love it!
@cairdcoinheringaahing My thoughts exactly!
 
9:55 PM
As I was saying, 19 (i think) on TIO
 
To summarize from our convo that started elsewhere, @cairdcoinheringaahing just revealed he has ~19 langs on TIO, in addition to the 8 ideas in dev. mentioned earlier
 
Sorry, 16 on TIO, 18 fully developed, 7 in development and 2 or 3 still in the ideas phase
 
@cairdcoinheringaahing Haha, no worries!
Do you have a name on the Wiki which'll link me to your langs?
 
Good luck
Levels is currently in the "Can you add this to TIO phase"
 
@cairdcoinheringaahing Oh no... so many
 
10:00 PM
@AviF.S. Only some usable
 
@cairdcoinheringaahing Highly recommend making a GitHub.io for your languages to give a little more info on each
 
@AviF.S. Wow, forgot about that
 
@cairdcoinheringaahing :)
I haven't done it, but I don't have anything interesting on my page
 
@AviF.S. Maybe at some point
I might finish my in dev languages first
> Date modified: 22/12/19
 
@cairdcoinheringaahing Any recs for most interesting language, to start?
 
10:01 PM
A good sign
 
@cairdcoinheringaahing Hahahahah
 
@AviF.S. To learn? My top 4 are Add++, Rutger, Whispers v2 and Verbosity v2
 
Most interested in the ones that would be most different; don't care about useful/usable
 
Although Add++ and Whispers are probably the most well developed
 
@cairdcoinheringaahing Sounds good :)
@cairdcoinheringaahing Thanks!
 
10:03 PM
Orst is a massive headache to work with, and therefore so is Geo
 
@cairdcoinheringaahing ,←':p'
@cairdcoinheringaahing For now, we should probably work on understanding DIVCON, no?
Sounds like that's the current thing in dev & under discussion
 
No and Uno aren't super complex, but don't have much functionality. Verbosity v1 isn't worth looking at, neither are Adapt, Flipbit or Bitwise Fuckery and Levels isn't on TIO, meaning its difficult to use, ignoring the complexities of the language itself
@AviF.S. Yeah, I think so, but really it's not worth talking about if Memberfor3months isn't around
 
@cairdcoinheringaahing Thanks for the insider knowledge ;)
@cairdcoinheringaahing True
 
I only kinda understand it, and that's after checking with them for how some of the stuff works
 
Well, I know we'd said BF variants aren't usually very interesting. But occasionally I think one is different enough to warrant interest:
Other Idea I Forgot to Mention: Working on a lang called Brainmuck = Brainfuck + Modulus
 
10:07 PM
How would that work
 
Basically, I adds numbers and particular letters
You know how each cell is automatically set to 256 cycle? Usually
Why should it be that way? So much potential there!
 
@AviF.S. That usually depends on the interpreter
IIRC TIO uses unbounded cells
 
@cairdcoinheringaahing IK
So, if you enter a number in Brainmuck, it'll 'rehash' whatever cell it's on to cycle around that many whatevers
 
So you could set a cell to cycle around 10 for instance?
 
Eg. >>2<< will make the third cell a flipbit switch thing
3 would make it go 0 → 1 → 2 → 0 → 1 → 2
 
10:10 PM
That could be interesting
Kinda like having a mixed base number
 
Like for Tic Tac Toe (storing whether empty, O or X)
@cairdcoinheringaahing Neat way to look at it; hadn't occurred to me!
I think there's a ton of potential there because it introduces div trivially which otherwise is really hard, without fundamentally changing the language
All of a sudden, primality checking, factor checking, so forth is trival
But that's not all
There'd be certain reserved characters
 
Of course, as interesting as it is, I can't really name any well-known bf derivatives
 
Like 'A' for alphabet, something for ASCII, 'U' for Unicode
 
The closest is probably Brain-Flak, but that's not really a bf derivavtive
 
Eg. 'A' will set the cycle to 26 and every one will be a letter
 
10:13 PM
How would U work?
Isn't Unicode supposed to be unbounded, to allow ever more new characters?
 
Printing words before was impossible, but here, to print you just do eg. A+++ would print the third letter of the alphabet
It's actually a cycle of 27, because the 0th index would be 'space' so you can type multiple words
@cairdcoinheringaahing Hmmm... maybe. I thought there was 2^n Unicode things
If not, then just ASCII, which would work like bounded BF does
But the alphabet is what I find really exciting!
Well, not by itself, but it's neat how many windows it opens!
 
How would >>10<< work?
 
Should note that hashing it to a number makes it go 0,1,2...,n-1,n
 
Would it set the 3rd cell to 1 then 0, or just to 10?
 
It doesn't do the first n symbols of the ASCII table
It prints strictly numbers
Which is why the alphabet thing is so useful
Rather than having to set it to 64 or whatever
@cairdcoinheringaahing Just 10
 
10:17 PM
That instantly makes writing the interpreter much more difficult
 
@cairdcoinheringaahing It doesn't write/re-write it's own code (LISP-style) so there's no reason anyone would ever write 125320433239354999999 if they just meant 9
 
As soon as you treat numbers as multiple digits, rather than individual digits, you have to introduce parsing
 
@cairdcoinheringaahing As hard as any language that has numbers
@cairdcoinheringaahing Agreed & understood!
@cairdcoinheringaahing Not worried... Most languages have it
 
@AviF.S. Yeah, but it makes it a pain to code
For all the fun it is to imagine functionality to a language, actually making that a reality is worse
 
@cairdcoinheringaahing Not particularly... You don't even need to import anything real. You just run through it once and group together the numbers
 
10:20 PM
@AviF.S. Personally, I'd use regex, but even so, it's just another layer of complexity
Take a look at the commit messages for Add++, half of them are swearing because something got too complicated
 
Quite easy to transform ">+>-421-<+87>>987>4<<<" → [">+>-", "421","-<+", "87", ">>", "987", ">", "4", "<<<"] → ...
@cairdcoinheringaahing Haha! I promise I don't intend to make it much more complicated than this. Honestly not so bad!
But appreciate the advice :)
@cairdcoinheringaahing Even better!!
Hey @Lyxal!
So far, the one thing I've come across that I haven't totally made up my mind on, though I'm pretty sure what I want to do, is:
What should "+++++4 3" end up with?
Those are are two separate numbers by the way. So 5 stamped with 4, then stamped with 3
It might also evolve into its own language, in which case I think I'll call it "Short Circuit"
As in to short circuit, when you make the cycle short and forcibly wrap around the prior value
 
Also, super useful because if you, say, want to check parity, you just do '2' on top of it. Same with divisibility by any other number. And it also makes Fizz Buzz much easier, for instance
 
10:56 PM
@AviF.S. I'd say 1 because +++++ -> 5, then 4 mods by 4, leaving 1 so 3 has no effect
 
@cairdcoinheringaahing That's by far the easier interpretation to implement!
 
@AviF.S. Personally, that way seems much more consistent
 
@cairdcoinheringaahing You already know the alternative?
 
@cairdcoinheringaahing So how can it be way more consistent?
In a way, you're right!
But I don't think you know why yet
 
11:06 PM
Way more consistent than any other interpretation
 
Haha, well there's also the philosophy that a 5 is a 5 is a 5
In which case 5 stamped with 4 makes 1, but then if you stamp it with 3, you get 2
 
I see it as having a beaker full of water. If you change the beaker to a different container, you may have to lose some of the water
And once the water is lost, you can't put it back
 
In other words, there was still a 5 there the whole time. You just put it under a mod 4 mask where 5 ←→ 1, so that's what you saw
 
But by running the 4 command, you've changed the value
 
@cairdcoinheringaahing Neat analogy! I like it if I choose that interp. but I don't know that it makes the most sense
@cairdcoinheringaahing Or are you just living in another world where 1 ≡ 5?
 
11:09 PM
Its kinda like if you run "+" on a value, then "-", it goes back to the original value, it doesn't have a "+" mask on it
 
Like if the whole world become flatland, and then came back to 3D, would we not pop right up?
 
Which is then "removed" or "changed" when running "-"
@AviF.S. Probably not
 
@cairdcoinheringaahing LOL
 
Most, if not all, changes have permanent effects
 
I think it's far more practical though; I'd forgotten my reasoning
If not, how do you do a primality checker easily?
Or Fizzbuzz easily?
Or factoring easily?
 
11:11 PM
Besides, if you want to keep the value, then copy it to another cell and mod that cell
 
Of course you can copy, but all of these endless examples are far simpler if you simply think of it as a mask
 
Are you going to have a command which sets the cycle of one cell to the value of another?
 
I think it's far more elegant that way
@cairdcoinheringaahing I want to be really careful in adding any more commands to Brainfuck, lest I dilute it or lose the minimalism/elegance unnecessarily
 
@AviF.S. "easier" and "brainfuck" generally aren't supposed to mix
@AviF.S. Oh for sure
 
@cairdcoinheringaahing So no, I haven't seen that it would exponentially increase elegance/usefulness, but I'm a long way from done
 
11:13 PM
I'm just interested, because its basically like adding a mod x command
 
I intend to write a bunch of "serious" programs, and then implement any primitives I find myself wishing for
 
That's a really good way to create a minimalist language]
 
@cairdcoinheringaahing If you're able to provide good use cases and such, I'll be more than happy to! Everyone is equal here; just that there's only one implementor
But if we have ideas that don't make it, no reason not to make Brainmuck++ with all the other possibly helpful/fun things!!
 
@AviF.S. I'm not suggesting you do, it just seems like a natural extension to the "hardcoded" mod commands of changing the cycle: making it possible to be dynamically change
 
I want the main one to have a reasonably minimalist philosophy though
@cairdcoinheringaahing :) Thanks!
@cairdcoinheringaahing Of course, I also want it to be reasonably manageable... So conflict of interests there
Trying to think of a good analogy, in terms of how easy/hard things should be to implement
But I can't think of any similarly difficult langs, somehow
Most are either near-impossible, like ///, BF and all other barely TC
Or impossible to read, but 'infinitely' powerful, like 05AB1E/Jelly
Or just fun, like Hexagony/Roulette, but those are very hard to compare to
I think that's a reasonable classification of esolangs, no?
Or multiple of the above, esp. impossible to do anything & impossible to read, looking at langs like you Brain-Flak & Whitespace
 
11:20 PM
There are a few which are "cutting-edge" kinda languages
 
@cairdcoinheringaahing 'Course but can you imagine any cases where it might actually be desired?
 
For example Piet
@AviF.S. It'd make division much easier
 
@cairdcoinheringaahing That's just both 1 & 2, in my mind
Whitespace/Brainflak category
 
Do actually usable languages count as esolangs?
e.g. I'd class Add++ as an esolang, but it isn't really in any of those categories
 
@cairdcoinheringaahing If it were just a 2D lang with a 2-tuple in each cell, there'd be nothing cutting edge. Nothing special about encoding 2-tuples with colors IMO
@cairdcoinheringaahing Of course! Usable languages have a whole 'nother realm of classifications though
 
11:22 PM
@AviF.S. Yeah but it's the encoding as an image which makes it interesting
 
@cairdcoinheringaahing 'Course! Definitely interesting! As are many, many languages methinks. Just not cutting edge IMO
 
@AviF.S. Well, it was the first to do so
 
Phenomenal idea, yes. Cutting-edge, no
 
Just like bf was the first to be that minimilised
 
@cairdcoinheringaahing If by cutting-edge, you mean first to use an image, then I suppose
I guess somehow cutting-edge & pioneering have slightly different connotations in my head
As does revolutionary
In my head, cutting-edge is somehow more technically important, whatever that means
But, anyway, that's just me
 
11:25 PM
Personally, I'd view languages such as Jelly as cutting edge
 
@cairdcoinheringaahing How would that work?
 
@AviF.S. a div b would just work by modding by b and adding 1 to a separate cell each time, until a < b
Or rather, until a = 0
 
Another way to put it: Would it add anything more to BM than it would to BF?
AKA: If BF didn't add it, why should I?
 
Well it would add the ability to divide by arbitrary numbers
But if you want that, you might as well add a builting
 
@cairdcoinheringaahing But you're just advocating a copy mechanism, no?
AKA [->+<] or whatever
 
11:29 PM
No, it would allow you to go to a cell and mod the value by an arbitrary, pre-set value
 
@cairdcoinheringaahing Oh my goodness!!! I'm so sorry!!!
I kept misreading what you said...
 
I thought you were just saying copy the val from one cell to another
 
I've no idea if it's useful, but it's such a cool, meta idea that I have to add it just for the kicks!
And then I'll just let people see if they can figure out any Uber-cool programs to write with it :p
 
11:30 PM
How would you get the second value though?
 
@cairdcoinheringaahing ?
 
It'd have to be saved in a separate memory structure, like an accumulator
All of BF's commands are unary (i.e. that take a single argument). This would be binary
 
@cairdcoinheringaahing Yeah, each cell is implemented as a class right now. They can store a fair bit
@cairdcoinheringaahing Wait... I see what you're saying
 
You could solve it by having two tapes, or by having a separate accumulator, but either of those deviates from BF a fair amount
 
Well you want to hear the really fun idea re: division that takes Brainmuck to a whole new absurd level?
 
11:33 PM
Go on
 
@cairdcoinheringaahing Haha
When you stamp something, eg. 17 stamped with 5, you hold on to the div/rem
 
Stamping is when you have a number in the instructions yeah? Changing the cycle?
 
@cairdcoinheringaahing That's what I randomly started calling it 5 minutes ago, yeah
I've no idea why
So you have 3 / 2 in the cell. By default, you access the remainder value; much cleaner!
But there's a toggle primitive which toggles which value you access
Say, ~, for now
 
@AviF.S. That would solve it, and add the certain brainfuck flair of complexity :P
 
So ++++++3~.~. → 2 0
That'd be the div/rem program
I don't know why that all sounded so exciting in my head...
But it sort of seems it!
@cairdcoinheringaahing Your idea is super exciting too, but I'm afraid the binary op. might be more than can be afforded atm
 
11:38 PM
Honestly, that's a great idea
 
@cairdcoinheringaahing Haha, thanks!
@cairdcoinheringaahing Kind of looking forward to how it ends up looking...
 
@AviF.S. Me too!
 
@cairdcoinheringaahing :D
@cairdcoinheringaahing I love having internet friends!
 
@AviF.S. It's always good to have someone to bounce ideas off
And I've designed enough crappy languages to know what's good or bad :P
 
@cairdcoinheringaahing Haha, far more political way of putting it. Was being silly/childish on purpose :)
Unfortunately, I have to go to bed now. Will be back tomorrow, though
 
11:50 PM
@AviF.S. Night!
 

« first day (249 days earlier)      last day (1410 days later) »