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)