Rząd, kolumna, przekątna, blok

13

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:

  1. Po wyodrębnieniu górnego wiersza i uruchomieniu go jako programu dokładny tekst rowmusi zostać wydrukowany na standardowe wyjście.

    Na przykład ThisIwydrukuje row.

  2. Po wyodrębnieniu lewej kolumny i uruchomieniu jej jako programu dokładny tekst colmusi zostać wydrukowany na standardowe wyjście.

    Na przykład Tsyekwydrukuje col.

  3. Kiedy główna przekątna od lewego górnego do prawego dolnego rogu zostanie wyciągnięta i uruchomiona jako program, dokładny tekst diamusi zostać wydrukowany na standardowe wyjście.

    Na przykład TMCoywydrukuje dia.

  4. Gdy cały blok jest uruchamiany jako program, w tym nowe linie (z opcjonalnym końcowym znakiem nowej linii), dokładny tekst blkmusi 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.

Hobby Calvina
źródło
Biorąc pod uwagę, że z pewnością istnieje rozwiązanie w jakimś ezoterycznym języku
składającym się z
@ xnor Prawdopodobnie. Chociaż jednoznaczna odpowiedź Lenguage nie jest poza zasięgiem możliwości. Mimo to ta metoda punktacji jest bardziej interesująca niż pierwsza najmniejsza wygrana N.
Calvin's Hobbies
Jak działa Lenguage, biorąc pod uwagę, że programy wierszy i kolumn mają tę samą długość?
xnor
@ xnor Ah, masz rację. To by nie działało.
Calvin's Hobbies
Czy programy nieblokujące mogą również kończyć się znakiem nowej linii?
jimmy23013

Odpowiedzi:

6

> <> (Ryba) , 3 unikalne znaki (N = 2000)

Kod używa 1i -do umieszczania dowolnych liczb na stosie oraz pdo (samodzielnego) modyfikowania kodu na podstawie 3 najlepszych liczb na stosie. Np. Ustawienie !pozycji 0 0wyglądałoby jak 003b*pw normalnym> <> i wraz z p1-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):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

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 .

randomra
źródło
14

CJam, 13 12 unikalnych znaków, N = 5

"row"
cd;"a
oaiaa
l"aa;
"blk"

Tak prosto, jak to możliwe

AKTUALIZACJA : Przekształcono spację na a(w tym przypadku brak operacji), jak wskazał Runner112

Wypróbuj online tutaj

Optymalizator
źródło
2
Każde pole może zostać przekształcone w postać, aktóra sprowadza unikalną postać do 12, prawda?
Runer112,
@ Runer112 Cholera! Dzięki za wskazówkę!
Optymalizator
8

Bash, 19 unikalnych postaci, N = 19

trap echo\ row exit
t=t trap exit      
t=t echo blk       
exit               
=                  
t    e             
      c            
e      h           
c       o          
h                  
o         d        
           i       
c           a      
o                  
l                  
  • Pierwszy rząd to trap echo\ row exit. To powoduje, echo rowże skrypt kończy pracę (tylko pierwszy wiersz)
  • Pierwsza kolumna to ttt=t echo col
  • Przekątna jest t=tt echo dia
  • Pełny blok działa poprzez anulowanie procedury obsługi EXIT ustawionej w pierwszym wierszu, a echo blknastępnie kończy działanie.
Cyfrowa trauma
źródło
1
Możesz użyć małych liter, exitaby zmniejszyć liczbę unikatowych znaków o 4. Możesz także przenieść exitpolecenie do następnego wiersza i zastąpić wszystkie średniki spacjami.
jimmy23013
6

> <> , 14 unikalnych znaków, N = 10

"wor"\ooo;
     "    
l a  k    
o  i l    
c   db    
"    "    
o    oo   
o    o o  
o    o  o 
;    ;   ;

Całkiem proste w języku 2D. Jedyną trudną częścią jest to, że potrzebujemy \rozróżnić między rowi blk.

Sp3000
źródło
notatki randomra, które p1-dałyby rozwiązanie trzech znaków , ale wygenerowanie (i prawdopodobnie nie wygra) byłoby naprawdę denerwujące.
Sp3000,
3

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, coli diaprogramy 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 blkprogramie występuje niewielkie wyginanie reguł. Aby wydrukować „dokładny tekst blk” 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ów row/ 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.

DPenner 1
źródło
2

C (gcc) , 26 unikalnych znaków, N = 29

*w;main(){printf(w?w:"row");}
ww;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;/*;;;;;;;;;;;;;;;;;;;;;;;;
m;;m;;;;;;;;;;;;;;;;;;;;;;;;;
a;;;a;;;;;;;;;;;;;;;;;;;;;;;;
i;;;;i;;;;;;;;;;;;;;;;;;;;;;;
n;;;;;n;;;;;;;;;;;;;;;;;;;;;;
(;;;;;;(;;;;;;;;;;;;;;;;;;;;;
);;;;;;;);;;;;;;;;;;;;;;;;;;;
{;;;;;;;;{;;;;;;;;;;;;;;;;;;;
p;;;;;;;;;p;;;;;;;;;;;;;;;;;;
r;;;;;;;;;;r;;;;;;;;;;;;;;;;;
i;;;;;;;;;;;i;;;;;;;;;;;;;;;;
n;;;;;;;;;;;;n;;;;;;;;;;;;;;;
t;;;;;;;;;;;;;t;;;;;;;;;;;;;;
f;;;;;;;;;;;;;;f;;;;;;;;;;;;;
(;;;;;;;;;;;;;;;(;;;;;;;;;;;;
";;;;;;;;;;;;;;;;";;;;;;;;;;;
c;;;;;;;;;;;;;;;;;d;;;;;;;;;;
o;;;;;;;;;;;;;;;;;;i;;;;;;;;;
l;;;;;;;;;;;;;;;;;;;a;;;;;;;;
";;;;;;;;;;;;;;;;;;;;";;;;;;;
);;;;;;;;;;;;;;;;;;;;;);;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
};;;;;;;;;;;;;;;;;;;;;;;};;*/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;*w="blk";

Wypróbuj online!

gastropner
źródło
1

Ruby, 24 unikalne znaki, N = 17

trap(0){$><<:row}
rr=a=:blk;%;00000
a0a00000000000000
p00p0000000000000
(000(000000000000
00000000000000000
)00000)0000000000
{000000{000000000
$0000000$00000000
>00000000>0000000
<000000000<000000
<0000000000<00000
:00000000000:0000
c000000000000d000
o0000000000000i00
l;;trap(0){$><<a;
};000000000000;{}

Wypróbuj online!

Lynn
źródło