pengantar
Ini 2600 SM dan orang-orang membangun piramida sekarang. Mereka sudah membuat dasar piramida tetapi tidak tahu bagaimana melanjutkannya. Jadi, mereka memanggil Anda untuk meminta bantuan.
Aturan membuat piramida cukup sederhana. Untuk layer di atas layer sebelumnya, yang perlu Anda lakukan adalah mengikuti panduan langkah demi langkah ini:
Potong ujung-ujungnya dari lapisan sebelumnya.
Di atas
/
karakter, harus ada\
karakter dan sebaliknya. Ini berlaku untuk setiap karakter kecuali tepi.Karakter paling kiri selalu a
/
dan karakter paling kanan selalu\
.
Mari kita ambil contoh dasar untuk piramida:
//\/\/\\
Kami memotong tepi, meninggalkan:
/\/\/\
Kami mengubah garis miring ke depan dengan garis miring ke belakang dan sebaliknya:
\/\/\/
Karakter paling kiri selalu a /
dan karakter paling kanan selalu a \
, jadi kami mengubahnya:
//\/\\
Kami menempatkan layer ini pada layer sebelumnya:
//\/\\
//\/\/\\
Kami terus sampai bagian atas tercapai (yang terlihat seperti /\
). Jadi, akhirnya kita dapatkan:
/\
//\\
//\/\\
//\/\/\\
Ini yang Anda butuhkan untuk output.
Tugas
Diberi dasar piramida (dengan panjang lebih besar dari 3), menghasilkan piramida lengkap. Anda dapat dengan aman berasumsi bahwa karakter paling kiri adalah /
dan karakter paling kanan adalah a \
. Anda juga dapat mengasumsikan bahwa panjang dasar selalu sama . Penggunaan spasi tambahan diperbolehkan. Penggunaan ruang terdepan juga diperbolehkan, selama piramida tetap di tempatnya. Penggunaan 1 membuntuti dan 1 terkemuka baris diperbolehkan.
Uji kasus
Input: /\\\
Output:
/\
/\\\
Input: //\\///\/\
Output:
/\
/\\\
/\///\
///\\\/\
//\\///\/\
Input: /////////////\
Output:
/\
/\\\
/////\
/\\\\\\\
/////////\
/\\\\\\\\\\\
/////////////\
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Jawaban:
Jelly ,
28 26 2524 byte-4 byte terima kasih kepada Dennis
Resep:
(sajikan bersama limun, piramida-piramida itu dibuat untuk para pekerja yang haus)
Masak piramida tebas Anda sendiri di TryItOnline , atau coba semua campur sari yang disarankan OP
sumber
Retina ,
59565452 byteCobalah online!
Output sampel
sumber
Pyth -
2726 byteMengurangi oleh operasi yang diberikan dalam OP sampai berulang, yang merupakan kasus untuk baris kosong.
Test Suite .
sumber
Python 2, 78 byte
Fungsi rekursif yang menghasilkan string. Setiap lapisan piramida ditambahkan ke panggilan rekursif dengan lapisan di atasnya. Awalan
p
, yang dimulai saat karakter baris baru mendapatkan satu ruang lagi untuk membuat segitiga. Lapisan berikutnya diproduksi dengan menukar garis miring, memotong dua simbol pertama dan terakhir, dan memasukkannya ke dalam garis miring kiri dan kanan.Python 3 dapat menyimpan byte dengan melakukan
*99
ditranslate
, karena persyaratan panjang-256 dijatuhkan.sumber
Haskell,
98949085 byteContoh penggunaan (catatan: dalam backslash Haskell dalam string literal harus dilepaskan
\\
):Pendekatan perulangan sederhana:
#
melakukan pekerjaan dengan memetakans
, yang membalik/
dan\
, pada elemen dalam. Parameter tambahant
melacak tingkat indentasi dan diperluas oleh spasi pada setiap panggilan rekursif.Catatan: panggilan rekursif kedua dari
#
(->l#""
) melompat langsung ke case dasar dan hanya cara singkat untuk menambahkanl
,\
dan baris baru, yaitu menggantikan++l++"\\\n"
.Sunting: @xnatau disimpan 5 byte. Terima kasih!
sumber
l++"\\\n"
Sepertinyal#""
.s
adalah[c|x<-s,c<-"ab",c/=x]
.++"\\\n"
, tetapi melewatkan yang ini. Terima kasih!Python 3,
108 104 101 94 91 8988 byte-7 byte terima kasih kepada xnor (beri tahu saya bahwa kami tidak perlu mencetak!)
-3 byte terima kasih kepada xnor (mengambil deklarasi di luar deklarasi fungsi [d'oh])
-1 byte berkat Dennis (ganti
f,b='/\\'
denganb,f='\/'
)Uji di ideone . Catatan: input disesuaikan dengan garis miring terbalik ganda (bahkan string mentah tidak akan berfungsi jika berakhir dengan jumlah garis miring terbalik yang aneh).
sumber
f,b='/\\'
luar fungsi.JavaScript (ES6),
9186 byteKeluaran mencakup karakter baris baru terkemuka.
sumber
Ruby, 80 byte
Tidak disatukan
Lihat di ideone: http://ideone.com/HN0l0Y
sumber
f
Batch, 137 byte
Mudah digunakan
%~2
dan%1
berarti saya menghindari harus menghabiskan bytesetlocal
. Penjelasan: Karena Batch tidak akan melakukan penggantian pada string kosong, kita harus mengatur lapisan berikutnya dengan tepi "salah", yang kemudian akan dikoreksi sebagai bagian dari penggantian string.sumber
BASH (sed + sort)
7166 Bytesinput berasal dari stdin.
Contoh:
Penjelasan:
-n
- tekan cetak otomatis:l
- dantl
cabang kembali ke awal jika baris ini adalah sesuatu selain/\
p
- cetak baris iniy|\\/|1\\|;y|1|/|
- ganti\
dengan1
,/
dengan\
, dan kemudian1
dengan/
th;:h
- tes dan lompati tempat yang sama, sehingga hanya penggantian berikutnya yang diuji. nantis|\\.(.*)./| /\1\\|
- ganti dua bagian luar yang dipotong pada masing-masing sisi dengan{space}/
dan\
sort
-space
ada sebelum/
jadi ini menempatkan semuanya dalam urutan yang benarsumber
05AB1E,
423836 byteCobalah online!
Penjelasan:
(Terima kasih kepada Emigna karena menunjukkan itu
DD -> Ð
danDR -> Â
).sumber
Dg;GDðK¦¦¨¨„/\‡'\«R'/«ðN׫R}r»
menghemat 7 byte.Pergi,
300276 byteVersi panjang:
sumber
import(."regexp";."os")
menghemat 2 bytePerl,
5352 byteTermasuk +1 untuk
-p
Jalankan dengan input pada STDIN, mis
pyramid.pl
:sumber
05AB1E , 31 byte
Penjelasan
Cobalah online
sumber
> <> ,
186179175171 byteoooh man ini pasti jawaban terbesar saya> <>.
Mungkin masih ada beberapa golf yang harus dilakukan (area bawah cukup boros)
Cobalah online
sumber
Powershell, 142 byte
sumber
C #, 250 byte
Pasti bisa bermain golf lebih jauh tetapi otak saya mati sehingga saya memutuskan untuk membiarkannya seperti saat ini.
sumber