Napisz kwadratowy blok kodu o szerokości N znaków i wysokości N znaków, dla pewnej dodatniej liczby całkowitej N.
Na przykład, twoja N może wynosić 5, a blok wygląda następująco:
ThisI
sMy5B
y5Cod
eBloc
kOkay
Ten blok musi zachowywać się w następujący sposób:
Po wyodrębnieniu górnego wiersza i uruchomieniu go jako programu dokładny tekst
row
musi zostać wydrukowany na standardowe wyjście.Na przykład
ThisI
wydrukujerow
.Po wyodrębnieniu lewej kolumny i uruchomieniu jej jako programu dokładny tekst
col
musi zostać wydrukowany na standardowe wyjście.Na przykład
Tsyek
wydrukujecol
.Kiedy główna przekątna od lewego górnego do prawego dolnego rogu zostanie wyciągnięta i uruchomiona jako program, dokładny tekst
dia
musi zostać wydrukowany na standardowe wyjście.Na przykład
TMCoy
wydrukujedia
.Gdy cały blok jest uruchamiany jako program, w tym nowe linie (z opcjonalnym końcowym znakiem nowej linii), dokładny tekst
blk
musi zostać wydrukowany na standardowe wyjście.Na przykład,
ThisI sMy5B y5Cod eBloc kOkay
wydrukuje
blk
.
Detale
- Wszystkie cztery programy są uruchamiane w tym samym języku programowania.
- Znaki N 2 w oryginalnym bloku mogą być dowolnymi znakami kreskowymi .
- Jeśli twój język nie ma standardowego wyjścia, możesz użyć innej popularnej metody wyjściowej. Musi to być ta sama metoda we wszystkich czterech programach.
Zgłoszenie, którego oryginalny blok zawiera najmniej wyraźnych znaków (nie licząc nowych wierszy), wygrywa. Tiebreaker przechodzi do złożenia z mniejszym N.
źródło
Odpowiedzi:
> <> (Ryba) , 3 unikalne znaki (N = 2000)
Kod używa
1
i-
do umieszczania dowolnych liczb na stosie orazp
do (samodzielnego) modyfikowania kodu na podstawie 3 najlepszych liczb na stosie. Np. Ustawienie!
pozycji0 0
wyglądałoby jak003b*p
w normalnym> <> i wraz zp1-
nią staje się111-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1--11-11-p
.Po modyfikacji wskaźnik instrukcji (IP) otacza kod i uruchamia zmodyfikowaną część. W przypadku „bloku” adres IP jest przekierowywany w celu dalszej modyfikacji (a następnie przekierowywany z powrotem) w celu odróżnienia od przypadku „wiersz”. W przypadku „wiersza” zdarzają się te same dwa przekierowania, ale nie ma między nimi kodu, więc nie mają żadnego efektu.
Ostatecznie wygenerowane kody dla 4 przypadków (pomijając niezmienione
p1-
części):Rozmiar kodu wynosi 4 MB, a kod jest dostępny tutaj . (Nie ma trudności z uruchomieniem go.)
Generatorowy program python3 jest dostępny tutaj .
źródło
CJam,
1312 unikalnych znaków, N = 5Tak prosto, jak to możliwe
AKTUALIZACJA : Przekształcono spację na
a
(w tym przypadku brak operacji), jak wskazał Runner112Wypróbuj online tutaj
źródło
a
która sprowadza unikalną postać do 12, prawda?Bash, 19 unikalnych postaci, N = 19
trap echo\ row exit
. To powoduje,echo row
że skrypt kończy pracę (tylko pierwszy wiersz)ttt=t echo col
t=tt echo dia
echo blk
następnie kończy działanie.źródło
exit
aby zmniejszyć liczbę unikatowych znaków o 4. Możesz także przenieśćexit
polecenie do następnego wiersza i zastąpić wszystkie średniki spacjami.> <> , 14 unikalnych znaków, N = 10
Całkiem proste w języku 2D. Jedyną trudną częścią jest to, że potrzebujemy
\
rozróżnić międzyrow
iblk
.źródło
p1-
dałyby rozwiązanie trzech znaków , ale wygenerowanie (i prawdopodobnie nie wygra) byłoby naprawdę denerwujące.Brainfuck, 2 unikalne postacie, N = 378
Z możliwym lekkim zginaniem reguł.
Program jest trochę duży, więc tutaj jest link do niego na Pastebin .
Te
row
,col
idia
programy są proste. Po prostu zwiększają komórkę bajtu, aż zostanie osiągnięty odpowiedni kod ASCII, a następnie wyprowadzany. Jeśli litera już minęła, zwiększa się, aż komórka się przepełni, aby mogła zacząć od nowa od 0.W
blk
programie występuje niewielkie wyginanie reguł. Aby wydrukować „dokładny tekstblk
” zgodnie z pytaniem w wyzwaniu, używane są spacje (kod ASCII 8), który wymaga obsługi konsoli / terminala wyświetlającego. Ilekroć drukowane są błędne wartości z programówrow
/col
/dia
, upewniam się, że zostały one usunięte, wysyłając kilka kodów sterujących cofania. Dla uproszczenia upewniłem się, że wszystkie błędne wartości wyprowadzone w jednym punkcie są częścią zakresu ASCII do wydruku.źródło
C (gcc) , 26 unikalnych znaków, N = 29
Wypróbuj online!
źródło
Ruby, 24 unikalne znaki, N = 17
Wypróbuj online!
źródło