Baris, Kolom, Diagonal, Blok

13

Tulis blok kode persegi yang lebar N karakter dan tinggi N karakter, untuk beberapa bilangan bulat positif N.

Misalnya, N Anda mungkin 5 dan blok terlihat seperti ini:

ThisI
sMy5B
y5Cod
eBloc
kOkay

Blok ini perlu berperilaku sebagai berikut:

  1. Ketika baris teratas diekstraksi dan dijalankan sebagai program, teks yang tepat rowperlu dicetak ke stdout.

    Misalnya ThisImau cetak row.

  2. Ketika kolom kiri diekstraksi dan dijalankan sebagai program, teks yang tepat colperlu dicetak ke stdout.

    Misalnya Tsyekmau cetak col.

  3. Ketika diagonal utama dari kiri atas ke sudut kanan bawah diekstraksi dan dijalankan sebagai program, teks yang tepat diaperlu dicetak ke stdout.

    Misalnya TMCoymau cetak dia.

  4. Ketika seluruh blok dijalankan sebagai program, termasuk baris baru (dengan baris tambahan opsional), teks yang tepat blkharus dicetak ke stdout.

    Sebagai contoh,

    ThisI
    sMy5B
    y5Cod
    eBloc
    kOkay
    

    akan dicetak blk.

Detail

  • Keempat program dijalankan dalam bahasa pemrograman yang sama.
  • N 2 karakter dalam blok asli mungkin bukan terminator garis .
  • Jika bahasa Anda tidak memiliki stdout, Anda dapat menggunakan metode keluaran umum lainnya. Itu harus metode yang sama di keempat program.

Kiriman yang blok aslinya berisi karakter berbeda paling sedikit (tidak termasuk baris baru) menang. Tiebreaker pergi ke pengiriman dengan N. yang lebih kecil

Hobi Calvin
sumber
Mengingat bahwa pasti ada solusi dalam beberapa bahasa esoterik dua simbol, saya pikir ini akan menjadi solusi untuk memerasnya ke dalam N. terkecil
xnor
@ xnor Mungkin. Meskipun 1-berbeda lenguage jawabannya tidak keluar dari wilayah kemungkinan. Namun, metode penilaian ini lebih menarik daripada memiliki N menang terkecil terlebih dahulu.
Hobi Calvin
Bagaimana bahasa dapat bekerja mengingat bahwa program baris dan kolom memiliki panjang yang sama?
xnor
@xnor Ah, Anda benar. Itu tidak akan berhasil.
Hobi Calvin
Bisakah program non-blok juga diakhiri dengan baris baru tambahan?
jimmy23013

Jawaban:

6

> <> (Ikan) , 3 karakter unik (N = 2000)

Kode ini menggunakan 1dan -untuk meletakkan angka acak pada stack dan puntuk (self) memodifikasi kode berdasarkan 3 angka teratas pada stack. Misal, menempatkan !posisi pada 0 0akan terlihat seperti 003b*pnormal> <> dan dengan p1-itu menjadi 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.

Setelah modifikasi, penunjuk instruksi (IP) membungkus kode dan menjalankan bagian yang dimodifikasi. Dalam kasus "blok" IP dialihkan untuk modifikasi lebih lanjut (kemudian dialihkan kembali) berbeda dari kasus "baris". Dalam kasus "baris" dua pengalihan yang sama terjadi tetapi tidak ada kode di antara mereka sehingga mereka tidak berpengaruh.

Kode akhir yang dihasilkan untuk 4 kasus (menghilangkan bagian yang tidak berubah p1-):

row:      "wor"\ooo;

column:   "loc"ooo;

diagonal: "dia"ooo;

block:    "wor"\"klb"ooo;

Ukuran kode adalah 4 MB dan kode dapat diakses di sini . (Tidak ada kesulitan menjalankannya.)

Program generator python3 dapat diakses di sini .

randomra
sumber
14

CJam, 13 12 karakter unik, N = 5

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

Sejujurnya

UPDATE : Ruang yang dikonversi ke a(no-op dalam kasus ini) seperti yang ditunjukkan oleh Runner112

Cobalah online di sini

Pengoptimal
sumber
2
Setiap ruang dapat diubah menjadi karakter seperti auntuk membawa jumlah karakter unik ke 12, kan?
Runer112
@ Runer112 Sial! Terima kasih atas tipnya!
Pengoptimal
8

Bash, 19 karakter unik, 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                  
  • Baris pertama adalah trap echo\ row exit. Ini menyebabkan echo rowdieksekusi ketika skrip keluar (hanya baris pertama)
  • Kolom pertama adalah ttt=t echo col
  • Diagonal adalah t=tt echo dia
  • Blok penuh berfungsi dengan membatalkan pengaturan EXIT yang diatur di baris pertama, echo blklalu keluar.
Trauma Digital
sumber
1
Anda dapat menggunakan huruf kecil exituntuk mengurangi karakter unik sebesar 4. Anda juga dapat memindahkan exitperintah ke baris berikutnya dan mengganti semua titik koma dengan spasi.
jimmy23013
6

> <> , 14 karakter unik, N = 10

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

Cukup mudah dalam bahasa 2D. Satu-satunya bagian yang sulit adalah bahwa kita perlu \membedakan antara rowdan blk.

Sp3000
sumber
catatan acak yang p1-akan memberikan solusi tiga karakter, tetapi akan sangat mengganggu untuk menghasilkan (dan mungkin tidak akan menang).
Sp3000
3

Brainfuck, 2 karakter unik, N = 378

Dengan sedikit kemungkinan pembengkokan aturan.

Program ini sedikit besar, jadi inilah tautannya di Pastebin .

Program row, coldan diaprogramnya sangat mudah. Mereka hanya menambah sel byte sampai kode ASCII yang tepat tercapai dan kemudian dikeluarkan. Jika surat sudah lewat, ia naik sampai sel meluap sehingga bisa mulai lagi pada 0.

Itu blk program ini di mana aturan lentur sedikit terjadi. Untuk mencetak "teks persis blk" seperti yang ditanyakan dalam tantangan, backspaces digunakan (kode ASCII 8), yang mengharuskan konsol / terminal tampilan untuk mendukungnya. Setiap kali nilai yang salah dari row/ col/ diaprogram dicetak, saya memastikan mereka dihapus dengan mengeluarkan beberapa kode kontrol backspace. Untuk mempermudah, saya telah memastikan bahwa semua nilai yang salah dihasilkan pada satu titik adalah bagian dari rentang ASCII yang dapat dicetak.

DPenner1
sumber
2

C (gcc) , 26 karakter unik, 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";

Cobalah online!

gastropner
sumber
1

Ruby, 24 karakter unik, 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;{}

Cobalah online!

Lynn
sumber