Menulis sebuah program yang mengambil dalam sebuah string yang berisi spasi saja, baris baru, dan kurung sudut: <
, >
( chevrons ). Output string ruang, baris, dan garis miring: /
, \
( soliduses ) yang bentuk sesuai dengan masukan, tapi diputar seperempat gilirannya searah jarum jam, dengan kolom ruang disisipkan di antara setiap baris dari input asli (untuk estetika).
Misalnya, jika inputnya adalah ini:
<>
Outputnya akan seperti ini:
/\
\/
Jika inputnya ini:
><<<>
<><
Outputnya akan seperti ini:
\/
/\ /\
\/ /\
/\ /\
\/
Jika inputnya ini:
>> <<
<> <>
<
><
Outputnya akan seperti ini:
/\ \/
\/ \/
\/ /\
/\
/\ /\
\/ /\
Perhatikan bagaimana ada satu kolom spasi di antara baris input asli dalam dua contoh terakhir.
Anda dapat menulis program lengkap yang mengambil input dengan cara biasa (baris perintah, stdin) dan mencetak output, atau Anda dapat menulis fungsi dengan argumen string, yang mencetak atau mengembalikan output.
Baris atau kolom spasi dan spasi kosong di input tidak perlu ada di output. Selain itu, mungkin ada jumlah ruang memimpin dan / atau trailing dan / atau baris baru dalam output, di lokasi mana pun, selama bentuk yang dihasilkan benar. Dengan kata lain, terjemahan seni ascii tidak penting, hanya bentuk dan hubungannya satu sama lain .
Anda dapat secara opsional menganggap input memiliki baris baru.
Kode terpendek dalam byte menang.
Jawaban:
CJam, 35 byte
Cobalah online di sini
sumber
$
trik pintar itu, panjangnya masih 37 byte ...$
trik telah menyelamatkan hidup saya banyak kali sudah;)CJam, 37 byte
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
Python 2, 105 byte
Untuk semua alasan yang salah, ini harus menjadi salah satu kegunaan terbaik yang
map(None, ...)
saya miliki sejauh ini. Output genap untuk menyempurnakan persegi panjang.Mari kita ambil contoh kedua:
map(None,*s.split("\n"))
melakukan yang miskinzip_longest
, memberikan:Perhatikan bagaimana baris kedua lebih pendek dari yang pertama, jadi kita dapatkan
None
di akhir. Biasanya ini akan menjadi masalah, tetapi untuk beberapa alasan hampir semuanya sebanding dengan Python 2, dan khususnyaIni berarti bahwa ekspresi
1-cmp(c,"<")
kembali0, 1, 2
untuk">", "<", None
masing - masing, memungkinkan kita untuk menggunakan trik pengiris string untuk mengekstrak salah satunya"\/", "/\", " "
. Dengan ini, kami mencetak garis keluaran per baris, bergabung dengan grup 2-char dengan spasi.sumber
Scala,
201188180 karaktercatatan:
ini hanya berfungsi jika string yang disediakan memiliki semua garis dengan panjang yang sama (mis. diisi dengan spasi)
penjelasan:
Saya menggunakan lipatan dengan nilai awal tuple dari
Seq[String]
danInt
(bukannya menulisSeq.empty[String]
im menulis lebih pendekSeq("")
dan.init
setelah flip), lipatan beroperasi pada kumpulan string, masing-masing string adalah garis dalam input asli, dan setiap baris dua kali lipat. triknya di sini adalah untuk menguji modulo dari char. karena'<'
nilainya 60, dan'>'
nilainya 62, menguji modulo 4, akan menghasilkan 0 atau 2. itu sebabnya lipatan juga membawaInt
set flipping ke 0. dan membalik antara 0 dan 2 dengan2-i
. setiap garis ganjil harus memetakan'>'
ke'/'
dan'<'
ke'\\'
, dan setiap garis genap harus memetakan'>'
ke'\\
dan'<'
ke'/'
. Inilah sebabnya saya mengujic%4==i
dan pukul 2 burung dengan 1 batu. lipatan "membangun kembali" urutan awal string secara terbalik, dan kemudian (setelah menjatuhkan baris terakhir), saya mengubah urutan urutan (inilah sebabnya mengapa semua string harus memiliki panjang yang sama persis). karena implisit yang terlibat, saya harus_.mkString
di setiap baris (sebelumnya kolom), dan kemudianmkString("\n")
untuk hasil akhir.sumber
Perl - 119
Pertama,
@l
ditugaskan sebagai daftar daftar yang mewakili karakter pada setiap baris input dengan garis dalam urutan terbalik. Kemudian loop melalui kolom karakter, menggantikan kurung sudut dengan garis miring yang sesuai, bergabung dengan elemen dengan spasi, dan mencetak garis miring bergabung sebagai garis.sumber