Saya punya kotak ASCII-art dan saya butuh program untuk membukanya.
Contohnya
Memasukkan:
-------
| |
|_____|
Keluaran:
/
/
/
/
/
/
/
| |
|_____|
Spesifikasi
- Baris pertama hanya akan terdiri dari
-
, setidaknya 3 dari mereka - Baris tengah akan mulai dengan
|
memiliki spasi, dan diakhiri dengan|
- Semua baris tengah akan sama
- Baris terakhir akan mulai dengan
|
memiliki_
dan diakhiri dengan a|
- Semua baris akan memiliki panjang yang sama
Membuka kotak:
- Masing
-
- masing harus diganti dengan/
garis dan posisi naik.
Jawaban:
CJam, 14 byte
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript ES6, 57 byte
Menghasilkan baris baru terkemuka. Bekerja dengan mengambil deretan
-
s dan mengonversinya menjadi segitiga, lalu mengganti-
s dengan spasi.Sunting: Disimpan 5 byte berkat @ edc65.
sumber
f=s=>s[R='replace'](/-+/,s=>s[R](/-/g,"\n$'/"))[R](/-/g,' ')
\n
dan dikonversi setelahnya).pb (NONCOMPETING), 125 byte
Versi pbi yang perlu Anda jalankan jawaban ini lebih baru dari pertanyaan. Itu akan bekerja di versi yang lebih lama kecuali bahwa saya tidak pernah sempat membiarkan baris baru dalam input. Baiklah.
Pertama, ini menentukan ketinggian kotak dengan menghitung baris baru di input. Setelah mengetahui hal itu, ia pergi ke lokasi Y di sisi kanan kotak, turun ke tempat yang seharusnya dan menggambar dinding dan lantai, diakhiri dengan tutupnya.
Lihat animasi yang asyik ini!
Jeda panjang adalah sikat memeriksa input.
Tidak Disatukan:
sumber
Pyth,
1614 bytePenjelasan
Terima kasih @FryAmTheEggman untuk algoritma baru!
Coba di sini.
sumber
Retina,
3420 bytePada langkah pertama setiap
-
diganti dengan yang-
mengikutinya, a/
dan baris baru. Baris baru di akhir baris pertama asli dihapus. Pada langkah kedua kami mengubah yang baru-
ke spasi yang menghasilkan output yang diinginkan.Cobalah online di sini.
sumber
$%'
untuk menangkap jejak-
yang menghemat 5 byte: Coba online!MATL , 14
15byteInput harus memiliki baris tambahan tambahan.
Cobalah online!
Penjelasan
sumber
Japt,
282625221817 bytesUji secara online!
Menghasilkan baris baru terkemuka, yang dapat diterima menurut OP.
Bagaimana itu bekerja
Ini akan menjadi 4 byte lebih pendek jika engsel dibiarkan berada di tepi kanan kotak:
sumber
JavaScript (ES6), 66
UJI
sumber
Java 8,
158118 byteIni baru permulaan, tapi hei, FGITWFTW.
Mengharapkan input sebagai string, mengembalikan kotak.
sumber
Python 3, 1̶7̶0̶ 88 byte
Berikut ini adalah kode pendek saya: EDIT: Sekarang 82 byte Lebih Pendek Dengan @Dennis's Edit Kode!
Python 3, 421 byte
Atau, hanya untuk bersenang-senang, Anda bisa menggunakan yang membukanya perlahan:
Untuk menggunakan salah satu, Anda harus membuat file teks dalam direktori yang sama berisi kotak ascii dengan lebar atau kedalaman apa pun yang disebut 'f.txt'. Ini kemudian akan membuka kotak itu.
sumber
Bash,
858479 karakter(Versi Pure Bash, tidak ada perintah eksternal yang digunakan.)
Menghasilkan baris baru terkemuka.
Contoh dijalankan:
sumber
echo
adalah perintah eksternal -/usr/bin/echo
;)echo
dieksekusi ada untuk kesesuaian sistem operasi dengan standar. Saat ini yang satu hanya digunakan jika portabilitas penting, karena yang satu sudah memenuhi standar , Tetapi kebanyakan shell modern memiliki builtin sendiriecho
yang digunakan secara default: pastebin.com/RnxhweBv @Levi, jika Anda mengganti nama / memindahkan Anda/usr/bin/echo
, saya kode akan tetap berfungsi.Perl,
615433 + 3 = 36 karakterJalankan sebagai
Setiap
-
baris pertama digantikan oleh string yang merupakan hasil penggabungan beberapa angka,
/
dan\n
.${chr 39}
mengevaluasi untuk perl's (in) terkenal$'
alias$POSTMATCH
variabel khusus. Terakhir, chomp menghilangkan karakter baris baru yang ditambahkan untuk yang terakhir-
karakter .Terima kasih kepada @manatwork karena telah menyimpan 7+ lebih banyak karakter.
Bonus -
s^-^" "x$i++."\\\n"^ge&&chop
membuka kotak dari tepi kanan dalam 29 + 3 karakter :). Jalankan sebagai:sumber
-
, jadi ya, saya bisa bermain golf lebih banyak lagi. Terima kasih!$.==1
→$.<2
,&&chop
→&chop
, hapus pasangan kurung tambahan sekitarlength
, hitung{chr 39}
sebagai 1, karena tidak hanya diperlukan oleh versi baris perintah karena sintaks shell:$.<2&&s^-^" "x(length$')."/\n"^ge&chop
+ 2 karakter untuk opsi baris perintah = 40 sesuai dengan penghitungan saya. pastebin.com/iDhUs9XX$.==1
or$.<2
can be eliminated because only first line contains-
\n
.s^-^$'=~y/-/ /r."/\n"^ge&chomp
Pyth,
2623 bytesYuck. Can definitely be shorter; still working on it.
sumber
Python3, 76 bytes
/
preceded by a decreasing number of spaces.stdin
straight tostdout
.EDIT: I've just noticed that my code is almost identical to @Dennis' comment edit of @Monster's shorter Python3 code, the only difference being print the remainder of
stdin
directly instead of store it in a variable. Great minds!sumber
Canvas,
64 bytesTry it here!
Explanation:
sumber
Python 2, 100 bytes
Defines a function
o
that takes a string as its input. (Full program wasn't specified in the question).sumber
PowerShell, 55 bytes
Takes input
$args
as a string,-split
s on newlines`n
(reference link), stores the first line into$d
(as a string) and the remaining into$b
(as an array of strings). We then loop from thelength
of the first line (minus 1) to0
and each iteration output that number of spaces plus a/
. Finally, output$b
(the rest of the input string) which by default will output one per line.Example Run
sumber
JavaScript (Node.js), 56 bytes
Try it online!
Should be written as a comment of @Neil's answer but I can't create comments yet
sumber
05AB1E (legacy), 9 bytes
Try it online! (legacy-only)
How it works
sumber
Charcoal, 14 bytes
Try it online (verbose) or try it online (pure).
Explanation:
Split the input by newlines, take the length of the first line, and print a line of that length from the Top-Right to Down-Left:
Move once to the right:
Split the input by newlines again, and remove the first item, and print what's left implicitly:
(NOTE: Putting the input split by newlines in a variable (since I do it twice above) is
1 byte longeralso 14 bytes by using a slightly different method (thanks to @Neil):≔⮌⪪θ¶θ↙L⊟θM→⮌θ
Try it online (verbose) or try it online (pure)).sumber
JavaScript ES6, 106 bytes
Simple enough: getting the length of the first line, creating a spaced-triangle with trailing
/
, and adding that to the original, sliced and joined.Test it out! (ES6 only
:(
)Show code snippet
sumber
.repeat(n-i-1)
=>.repeat(n+~i)
Python 2.7,
120122 charsNeeds a file
f
with the original/closed box, output is the opened one. Cheers to @Monster for the idea... will try to figure out multi-line input later and see if it's shorter.Edit
/
has a space in front; +2 bytessumber
Ruby, 59 characters
(57 characters code + 2 characters command line options.)
Sample run:
sumber
Bash, 129 characters
Requires a file called
a
with the closed box, outputs to stdout.It might be possible to make it shorter by using
sed
and using stdin and piping.sumber
for i in $(seq `awk 'NR<2&&$0=length-1' a` -1 1);{ for j in `seq 1 $i`;{ printf \ ;};echo /;};echo /;tail -n2 a
PHP, 127 characters
Ungolfed version :
sumber
$argv
. There are a couple of minor tricks you could apply:$l=strlen(strtok($s=$argv[1],"↵"));while($l)$s=preg_replace("/-/","↵".str_repeat(" ",--$l-$i)."/",$s,1);echo$s;
(Use a literal newline in your code where is “↵”: pastebin.com/36t2fb0P )Python, 125 bytes (110 without box)
If anyone has any idea how to shorten it, please let me know!
sumber
Awk,
4746 characters(44 characters code + 2 characters command line option.)
Sample run:
sumber
Gema,
514931 charactersSample run:
sumber
K (ngn/k), 18 bytes
Try it online!
sumber
05AB1E (legacy), 12 bytes
Try it online!
sumber