Dari semua karakter ASCII, mudah untuk mengatakan bahwa beberapa dari mereka membentuk grup yang merupakan rotasi dari karakter dasar yang sama. Misalnya V > ^ <
,. Hal ini memungkinkan kemungkinan untuk membangun seni ASCII yang dapat diputar dengan kelipatan 90 derajat dan masih tetap seni ASCII.
Tantangan
Tujuan Anda adalah mengubah program yang menerima seni ASCII dan jumlah derajat untuk memutarnya dari STDIN, dan mencetak seni ASCII yang diputar ke STDOUT.
Pada baris input pertama, program Anda akan menerima angka N. Angka ini mewakili lebar dan tinggi dari seni ASCII.
Anda kemudian akan menerima N lebih banyak baris dengan karakter persis N masing-masing (baris baru tidak dihitung dalam angka ini). Ukuran karya seni akan selalu berupa bujur sangkar, meskipun mungkin memiliki bantalan dalam bentuk spasi untuk membuatnya menjadi bujur sangkar.
Anda kemudian akan menerima satu nomor lagi pada baris terakhir: 90, 180, atau 270. Ini mewakili berapa derajat searah jarum jam gambar harus diputar.
Catatan: Gambar yang dimasukkan hanya akan berisi karakter yang dapat diputar dengan jumlah yang benar. Jika input tidak sesuai dengan persyaratan ini dengan tepat, tidak ada perilaku spesifik yang diperlukan.
Sebagai output, program Anda harus mencetak persis N baris karakter N, dengan baris baru setelah setiap baris. Gambar harus diputar sehingga setiap karakter dalam aslinya telah diganti oleh versi yang diputar dan telah dipindahkan ke tempat yang benar dalam gambar.
Contoh (seni ASCII tidak terlalu indah)
Memasukkan
5
<- ||
| |V
+->+
|O
<--+
90
Keluaran
^ +-^
| | |
| V
+-+--
O <-
(Rotasi 90 dan 270 tidak akan terlihat sangat bagus karena karakternya bukan kotak)
Memasukkan
6
+ /\ +
| \ \|
( \/|
\ )
I \ /
:) V $
180
Keluaran
$ ^ (:
/ \ I
( \
|/\ )
|\ \ |
+ \/ +
Diperlukan Karakter yang Didukung
Untuk semua rotasi (90, 180, dan 270), program harus dapat memutar:
- Spasi,
+
,@
,X
danO
yang tidak pernah berubah V
>
<
^
|
-
dan\
/
(diputar 180 mereka tetap sama)
Untuk rotasi 180 derajat, karakter tambahan ini harus didukung
I
N
Z
%
:
0
=
S
~
$
#
yang tetap samaP
d
,(
)
,[
]
,{
}
,M
W
, Dan9
6
v
, yang bukan karakter yang didukung. Saya menganggap itu dimaksudkan menjadi huruf besarV
. Juga, baris terakhir di dalamnya tidak empuk menjadi 5 karakter.P d, ( ), [ ], { }, M W, and 9 6
dapatkah diputar 90º atau 270º?Jawaban:
GolfScript,
79757367 karakterSepertinya solusi saya dan Peter Taylor sedang mengalami sejumlah konvergensi. Ngomong-ngomong, sepertinya aku masih beberapa karakter di depan untuk saat ini. :-) Terima kasih (dan +1) untuk Peter dan salin untuk ide-ide yang telah saya curi tanpa malu-malu.
Kode ini sepenuhnya mengabaikan ukuran yang diberikan pada baris pertama, karena ini informasi yang berlebihan. Ia bahkan harus menangani input dengan dimensi non-kuadrat, tetapi sangat tergantung pada semua jalur input yang diisi dengan panjang yang sama. Mencoba untuk memutar karakter
P
,d
,(
,)
,[
,]
,{
,}
,M
,W
,9
, atau6
90 atau 270 derajat mungkin menghasilkan output yang tak terduga; semua karakter lain yang tidak dipetakan ulang secara eksplisit dipertahankan tidak berubah.Ps. Inilah solusi 79-char asli saya:
sumber
C, 336 karakter
Saya yakin ada ruang untuk perbaikan.
sumber
javascript (181 karakter)
Membutuhkan setiap baris untuk diisi dengan panjang yang diberikan.
sumber
\n
, salin tempel normal dan menyeimbangkan spasi ke baris pertama / terakhir dan gagal membuatnya bekerjaGolfscript (
80 79 78 7776 karakter)NB Memasuki "perilaku tidak terdefinisi" yang diizinkan oleh input yang tidak valid dapat menghasilkan output yang agak aneh, karena karakter placeholder (di luar ASCII) digunakan untuk karakter tertentu yang rotasinya 90 derajat tidak ditentukan. Sebagai contoh,
(
akan dipetakan ke titik kode 160, yang dalam ISO-8859-1 dan Unicode adalah ruang non-breaking.sumber