Weźmy siatkę 16 x 16 drukowalnych znaków ASCII (punkty kodowe od 0x20 do 0x7E). Istnieje 30 ścieżek do wyboru z 15 od lewego górnego do prawego dolnego rogu, wykonujących tylko ruchy ortogonalne, jak w poniższym przykładzie:
##..............
.#..............
.######.........
......##........
.......##.......
........#.......
........#.......
........#.......
........###.....
..........###...
............#...
............####
...............#
...............#
...............#
Każda taka ścieżka składa się z dokładnie 31 znaków. Zauważ, że każda z tych postaci znajduje się na innym z 31 anty-przekątnych:
0123456789ABCDEF
123456789ABCDEFG
23456789ABCDEFGH
3456789ABCDEFGHI
456789ABCDEFGHIJ
56789ABCDEFGHIJK
6789ABCDEFGHIJKL
789ABCDEFGHIJKLM
89ABCDEFGHIJKLMN
9ABCDEFGHIJKLMNO
ABCDEFGHIJKLMNOP
BCDEFGHIJKLMNOPQ
CDEFGHIJKLMNOPQR
DEFGHIJKLMNOPQRS
EFGHIJKLMNOPQRST
FGHIJKLMNOPQRSTU
To nie jest przykładowa siatka. Jest to wizualizacja 31 anty przekątnych.
Nazwiemy siatkę unikatową po przekątnej, jeśli żadna anty-przekątna nie zawiera dwukrotnie tego samego znaku. Jeśli siatka ma tę właściwość, żadne dwie ścieżki nie będą zawierały tego samego łańcucha. (Aby to wyjaśnić, sama wizualizacja jest w zasadzie przeciwieństwem unikalnej po przekątnej).
Wyzwanie
Zaprojektuj unikatową po przekątnej siatkę 16 x 16, tak aby jak najwięcej ścieżek było prawidłowymi kodami do wydrukowania Jabberwocky
do STDOUT (z opcjonalnym łamaniem linii końcowej) w jak największej liczbie języków. Każdy kod może być pełnym programem lub treścią funkcji bez parametrów, bez instrukcji return (ma to na celu nie zniechęcać języków, które muszą mieć swój kod w niektórych funkcjach / klasach / przestrzeni nazw).
Uwaga: Dla uproszczenia możesz użyć znaku zastrzeżonego dla nieużywanych komórek tak jak zrobił to Ypnypn .
Dla każdej prawidłowej ścieżki proszę wyraźnie podać jeden język programowania, w którym jest ona ważna.
Zwycięzcą jest zgłoszenie z największą liczbą języków objętych powyższą listą. (Alternatywnie, dla każdego języka, który chcesz policzyć, pokaż jedną ścieżkę, która jest poprawna w tym języku, ale pamiętaj, aby nie liczyć żadnej ścieżki dla dwóch języków.)
W przypadku remisu policz komórki siatki, które nie są objęte żadną prawidłową ścieżką. Wygrywa mniej nieużywanych komórek. Jeśli nadal jest remis, zaakceptuję najwięcej głosów (netto).
Skrypt sprawdzania poprawności
Właśnie szybko stworzyłem mały fragment CJam, którego możesz użyć, aby sprawdzić, czy siatka jest unikatowa po przekątnej.
- Przejdź do internetowego tłumacza CJam .
Wklej następujący kod
l:A; qN/W%A16**33/z{A-__|=}%:*"D""Not d"?"iagonally unique"
W polu wejściowym umieść zarezerwowany znak w pierwszym wierszu (użyj nieużywanego znaku, jeśli nie pozywasz znaku zastrzeżonego), a następnie siatkę w wierszach od 2 do 17. Np. Dla odpowiedzi Ypnypn:
~ pr~~~~~~~~~~~~~ tin~~~~~~~~~~~~ ~ypt(~~~~~~~~~~~ ~~ef(~~~~~~~~~~~ ~~ "J~~~~~~~~~~ ~~~~~ab~~~~~~~~~ ~~~~~~be~~~~~~~~ ~~~~~~~rwo~~~~~~ ~~~~~~~~~ck~~~~~ ~~~~~~~~~~y~~~~~ ~~~~~~~~~~\n~~~~ ~~~~~~~~~~~")) ~ ~~~~~~~~~~~ ; ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~
Biegać.
Daj mi znać, jeśli uważasz, że występuje błąd.