Pertimbangkan spiral ini
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
Mulai di tengah:
- Baris pertama (ke atas) memiliki 3 karakter.
- Baris kedua memiliki jumlah karakter yang sama (3)
- Selanjutnya, kita menambahkan dua karakter (5) untuk dua sisi berikutnya.
- Pola ini berlanjut, dua sisi dengan panjang yang sama kemudian menambah panjangnya dengan 2.
Saya ingin menghasilkan spiral ini untuk garis N.
- Tulis dalam bahasa apa pun.
- Input / argumen, dll. Adalah jumlah baris dalam spiral Anda.
- Setiap baris dimulai dengan karakter akhir dari baris sebelumnya ke arah 90 derajat searah jarum jam dari baris sebelumnya.
- Saya tidak peduli berapa banyak spasi putih sebelum atau setelah setiap baris, selama elemen-elemen dari spiral naik.
- Keluarkan teks untuk menggambar spiral dengan karakter non-spasi apa pun yang Anda pilih.
- Coba lakukan ini dalam jumlah byte terkecil.
Uji kasus (menggunakan hash sebagai output):
N = 1
#
#
#
N = 2
###
#
#
N = 3
###
# #
# #
#
#
N = 10
###########
#
# #######
# # #
# # ### #
# # # # #
# # # # #
# # # #
# ##### #
# #
#########
*
bukan#
. Diharapkan?Jawaban:
05AB1E ,
1311 byteKode:
Terima kasih kepada Emigna karena telah menghemat dua byte!
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan
Panjang setiap tepi individu pada spiral dimulai dengan panjang 3 dan secara bertahap meningkat setiap dua langkah dengan dua:
Ini pada dasarnya memberi kita daftar panjang yang diinginkan.
Kanvas berfungsi sebagai fungsi yang muncul tiga parameter (di mana parameter paling kanan muncul pertama): <length (s)> , <char (s)> , <direction (s)> . Parameter penunjuk dalam hal ini adalah daftar angka. Angka-angka yang sesuai dengan arah adalah:
Dalam hal ini, [0, 2, 4, 6] sesuai dengan daftar arah
[↑, →, ↓, ←]
. Kanvas iterate atas setiap panjang yang diambil dari daftar panjang, menggunakan karakter '#' dan berulang secara berulang di atas daftar arah.sumber
0246S
=3Ý·
Python 2 ,
176170165161157 byteCobalah online!
Berulang: Penggunaan
g
untuk memutarn
iterasi spiral ke posisi 'kanonik' (mirip dengan N = 3 atau N = 7), menambahkan segmen baru dengan menambahkan 2 spasi di sebelah kiri setiap baris yang ada, kemudian mengganti baris terakhir dengan semua'#'
s (menghasilkan posisi yang sebanding dengan N = 4 atau N = 8), dan akhirnya menggunakang
lagi untuk memutarnya kembali ke posisi yang benar. Busa, bilas, ulangi.sumber
Arang ,
161514 byte-2 byte terima kasih kepada @Neil .
Cobalah online (verbose) atau Coba online (murni) .
Penjelasan:
Arah pencetakan ke kanan secara default, dan kami ingin memulai ke atas, jadi kami mulai dengan memutar 45 derajat berlawanan arah jarum jam:
Kemudian putar
i
dalam kisaran[0, input)
:Cetak baris baru untuk meniru efek mundur satu posisi:
Cetak "#"
x
jumlah kali dalam arah saat ini:Dimana
x
adalah:3 + i // 2 * 2
:Dan kemudian putar 45 derajat searah jarum jam untuk iterasi loop berikutnya:
sumber
⊗÷ι²
byte lebih pendek dari⁻ι﹪ι²
. Juga, Anda bisa mendapatkan efek bergerak kembali dengan mencetak huruf a\n
sebelum huruf#
s, yang akan memungkinkan Anda menghapusnya»#
untuk penghematan byte keseluruhan tambahan.⊗÷ι²
, tapi apa perubahan untuk mencetak\n
sebelum#
s? Spiral tidak benar jika saya menambahkanPrint("\n")
.#
lama.Python 2 ,
179178 byteterima kasih kepada Kevin Cruijssen untuk -1 byte.
Cobalah online!
Python 2 , 179 byte
Dalam pendekatan ini, rumus digunakan untuk
x
dany
delta alih-alih daftar pencarian.Cobalah online!
sumber
n+1+n%2
ken%2-~n
untuk -1 byte. Dan saya harus ingat0--n/4*2
1 lebih pendek dari-(-n/4*2)
. Jawaban yang bagus, +1 dari saya.JavaScript (ES6), 185 byte
Tentu ini bisa bermain golf lebih banyak, mungkin dengan kari, tapi inilah upaya saya yang sangat rendah hati. Jeda baris ditambahkan untuk dibaca kecuali karakter kedua dari belakang
Penggunaan:
d(10)
mengembalikan string sesuai dengan contoh tantangan N = 10.Menentukan fungsi
r(a,n)
untuk memutar arraya
secaran
bergantian; fungsis(n)
untuk menghasilkan array 2 dimensi yang mewakili ukuran spiraln
dengan memutar dan menambahkan spasi dan garis secara rekursif (tidak diputar kembali ke posisi awal); dan sebuah fungsid(n)
untuk menggambar spiral ukurann
, diputar secara konsisten sesuai tantangan, dan diberikan sebagai string yang dikembalikan.Ini adalah tantangan yang sangat menyenangkan: ¬)
sumber