Day 11: Plutonian Pebbles
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
Zee
Zee is my Dutch dialect of C. Since Dutch has compound words, so does Zee: “const char **” becomes vasteletterverwijzingsverwijzing, not vaste letter verwijzing verwijzing, which would be incorrect. A pointer to a long long unsigned int is, obviously, a zeergrootnatuurlijkgetalverwijzing.
Code
#ingesloten "zee.kop"
#ingesloten "algemeen.kop"
besloten getal
splits(
zeer groot natuurlijk getal x,
zeergrootnatuurlijkgetalverwijzing a,
zeergrootnatuurlijkgetalverwijzing b)
{
zeer groot natuurlijk getal m;
getal n, g;
mits (!x) lever 0;
voor (n=0, m=1; m<=x; n++, m*=10) ; mits (n%2) lever 0;
voor (g=0, m=1; g<n/2; g++, m*=10) ;
volg a = x/m;
volg b = x%m; lever 1;
}
#definieer GEHL (1024*1024)
besloten zeer groot natuurlijk getal geh[GEHL][76];
besloten zeer groot natuurlijk getal
afdalen(zeer groot natuurlijk getal w, getal n)
{
zeer groot natuurlijk getal a,b;
mits (n<1 ) lever 1;
mits (w==0) lever afdalen(1, n-1);
mits (w<10) lever afdalen(w*2024, n-1);
mits (w<GEHL && geh[w][n]) lever geh[w][n];
mits (!splits(w, naar a, naar b)) lever afdalen(w*2024, n-1);
lever w<GEHL ? geh[w][n] =
afdalen(a, n-1) + afdalen(b, n-1) :
afdalen(a, n-1) + afdalen(b, n-1);
}
getal
aanvang(getal parametersom, vasteletterverwijzingsverwijzing parameters)
{
zeer groot natuurlijk getal d1=0,d2=0, waarde;
mits (parametersom > 1)
VERWERP(heropen(parameters[1], "r", standaardinvoer));
zolang (invorm(" %llu", &waarde) == 1) {
d1 += afdalen(waarde, 25);
d2 += afdalen(waarde, 75);
}
uitvorm("11: %llu %llu\n", d1, d2);
lever 0;
}
And of course we don’t have a Makefile but a Maakbestand:
alles: €{DAGEN}
schoon:
€{WIS} -f €{DAGEN} *.o
...
.TWIJFELACHTIG: alles schoon oplossingen
.UITGANGEN: .zee .o
.zee.o:
€{ZEE} €{VOORWERKVLAG} €{ZEEVLAG} -o €@ -c €<
Yet more proof that the dutch are mad :D
Is it your own esolang, or is it commonly used by dutch speakers?
No it’s just me messing about with macros (but it does work!)
I do want to explore the type naming rules, see if I can write a parser for it. The C rules are funky by themselves but this is another level. “vaste letterverwijzing” is “char * const” but “vasteletterverwijzing” (without the space) is “const char *”. Then there’s grammatical gender: “vast getal” (const int) but “vaste letter” (const char)