pengantar
Tulis program lengkap yang memutar blok persegi panjang karakter ASCII 90 derajat searah jarum jam. Ketika program itu sendiri diputar 90 derajat searah jarum jam, ia memutar blok karakter ASCII 90 berlawanan arah jarum jam.
Aturan
- Anda banyak yang tidak menggunakan built-in yang memutar atau mengubah posisi matriks. Misalnya, dalam MATLAB / Oktaf
rot90
dan operator transpos'
tidak diperbolehkan. - Anda harus menulis program lengkap yang menggunakan STDIN dan STDOUT atau yang setara terdekat.
- Program Anda harus persegi panjang dan menganggap inputnya juga persegi panjang.
- Input dan output adalah string yang dipisahkan baris baru dan tidak akan memiliki baris baru.
Ketika dijalankan dengan kode sumbernya sebagai input, program Anda harus memutar sendiri 90 derajat searah jarum jam. Output harus berupa program kedua dalam bahasa yang sama yang memutar inputnya 90 derajat berlawanan arah jarum jam. Ketika program yang diputar diberi kode sumbernya sebagai input, itu harus menampilkan kode sumber dari program asli.
Catatan: Kedua program harus bekerja untuk input apa pun , bukan hanya kode sumbernya sendiri, sehingga quine satu karakter tidak diperbolehkan.
Contoh
Katakanlah berikut ini adalah program yang valid yang memutar inputnya 90 derajat dalam bahasa hipotetis ExampleLang.
^f a2% 3
lk (^_^&
v
D8 $4 /
Ketika dijalankan dengan sendirinya sebagai input, output program lain yang valid yang memutar inputnya berlawanan arah jarum jam:
D l^
8 kf
$ (a
4 ^2
_%
^
/v&3
Program kedua ini, ketika diberikan kepada dirinya sendiri sebagai input, output program asli. Perhatikan bahwa baris kosong harus memiliki empat spasi dan ada spasi tambahan di baris kedua hingga terakhir yang tidak dapat dirender dalam penurunan harga. Untuk memperjelas:
$ examplelang program < program > rotProg
$ examplelang rotProg < rotProg > program1
$ diff -s program program1
Files program and program1 are identical
Kemenangan program terpendek. Celah standar dilarang.
sumber
:.+
dapat dipecah beberapa baris?:
dan.
tergantung pada karakter setelah mereka, dan umpan garis tidak valid setelah salah satu dari mereka (dan bahkan jika mereka, itu akan mengubah arti dari program).C (gcc) ,
14201399463 byteAh ... kegembiraan senar yang tak ditentukan panjangnya!
Asumsi
sizeof(char*) == sizeof(int)
dansizeof(char**) <= 16
.Pendekatan baru
Cobalah online!
Output di atas
Solusinya pada akhirnya mudah. Anda membuat satu program A yang memutar hal-hal searah jarum jam, dan satu program B yang berputar berlawanan arah jarum jam:
SEBUAH
B
Buatlah persegi panjang dengan proporsi yang masuk akal dan batasi A untuk itu, dan letakkan penjaga komentar di sekitarnya:
Batasi program B ke bujur sangkar dengan lebar yang sama dengan satu untuk A ditambah dua (untuk garis komentar tambahan di tepi bawah), putar CCW dan tampar ke kanan program A dan Anda mendapatkan solusi di atas.
Pendekatan lama
Cobalah online!
Output di atas
sumber