Tulis sebuah program atau fungsi yang mengambil dalam bilangan bulat positif N, dan mencetak atau mengembalikan string seni ASCII N × N yang bagian atasnya adalah setengah lingkaran yang terbuat dari (
's dan yang bagian bawahnya adalah segitiga yang menunjuk ke bawah terbuat dari V
' s, dengan ruang yang digunakan sebagai bantalan.
Dengan kata lain, buat kerucut es krim ASCII: (output untuk N = 17)
(((((
(((((((((
(((((((((((((
(((((((((((((
(((((((((((((((
(((((((((((((((
(((((((((((((((((
(((((((((((((((((
VVVVVVVVVVVVVVVVV
VVVVVVVVVVVVVVV
VVVVVVVVVVVVV
VVVVVVVVVVV
VVVVVVVVV
VVVVVVV
VVVVV
VVV
V
Contohnya
Berikut adalah output untuk N = 1 hingga 5. Perhatikan bahwa untuk N aneh, segitiga selalu harus menjadi setengahnya lebih besar.
V
((
VV
(((
VVV
V
((
((((
VVVV
VV
(((
(((((
VVVVV
VVV
V
Dan inilah implementasi referensi Python ungolfed 3:
N = int(input())
ic = [[' '] * N for _ in range(N)]
for y in range(N//2):
for x in range(N):
if (x - (N - 1) / 2)**2 + (y - (N - 1) / 2)**2 < (N / 2)**2:
ic[y][x] = '('
for y in range(N//2, N):
for x in range(y - N//2, N - (y - N//2)):
ic[y][x] = 'V'
for line in ic:
print(''.join(line))
Detail
- Ambil input dari stdin, baris perintah, atau sebagai argumen fungsi. Output ke stdout atau serupa, atau Anda dapat mengembalikan string jika Anda menulis suatu fungsi.
- Bagian kerucut harus sama persis dengan implementasi referensi untuk semua N.
- Bagian es krim tidak perlu sama persis dengan implementasi referensi selama itu jelas dalam bentuk setengah lingkaran untuk semua N. (Ini adalah sehingga Anda tidak perlu khawatir tentang sedikit perbedaan dalam setengah lingkaran karena kesalahan putaran) .)
- Seharusnya tidak ada ruang mengarah yang tidak perlu tetapi mungkin ada ruang trailing berlebihan.
- Output secara opsional dapat berisi baris tambahan.
- Anda opsional dapat menggunakan 3 berbeda lainnya ASCII printable karakter di tempat
(
,V
dan ruang.
Mencetak gol
Pengajuan terpendek dalam byte menang. Tiebreaker pergi ke pengiriman tertua.
Jawaban:
CJam, 46 byte
Cobalah online.
Saya percaya ini saat ini persis meniru spesifikasi asli, yang diperlukan ketika saya mulai menghasilkan jawaban ini. Mungkin ada potensi untuk menyimpan beberapa byte dengan membuat matematika kurang akurat dengan spesifikasi asli, tetapi sampai saya melihat cara untuk menyimpan lebih dari satu atau dua byte melakukannya, saya akan membiarkannya apa adanya.
Penjelasan
sumber
2
'dan1
' dan bukan(
'danV
'?inca2
129123121111107Ini sebagian besar menggunakan rumus dari contoh python, tetapi menggunakan jot-dots dan iota bukannya double-looping. The
i
fungsi melakukan tes melingkar untukj
fungsi yang memanggil iota-dot atasnya. Dank
fungsi melakukan tes segitiga untukl
fungsi tersebut. Thec
Fungsi catenates hasilj
danl
dan membentuk ulang untuk N × N.sunting: -6 gabungkan 2 peta menjadi 1.
sunting: -2 menghapus kekacauan yang tidak berguna.
sunting: naskah yang lebih bagus.
sunting: -10 terapkan array ekspresi yang bijak.
sunting: -4 faktor keluar ekspresi berulang sebagai fungsi.
sunting: komentar baris per baris.
Secara lebih rinci, entry-point adalah
c
fungsi yang mengambil satu argumen secara implisit dinamaiy
.The
j
Fungsi menerima masukan nilai yang sama sebagai yangy
parameter.Titik-titik di sini melakukan loop ganda. Ini memanggil
i
fungsi dengan setiap kombinasi elemen dari array kiri dan kanan (0..n / 2 dan 0..n). Jadii
fungsi menerima sebagaix
yang y indeks tabel, dan menerima sebagaiy
yang x indeks. Nama-nama mendapat sedikit mundur di sini :).di mana
q
tidakkembali ke
i
Lantai seharusnya tidak perlu. Namun ternyata ada bug pada interpreter.
The
l
fungsi bekerja sama denganj
fungsi, menggunakan Iota-dot.The
k
Fungsi menghasilkan boolean skala oleh 2 sehingga nilai-nilai dapat dibedakan dari nilai-nilai es krim nanti, dalam pemetaan.Dalam aksi (
tr
memipis untuk menghapus tab tab yang merupakan prompt REPL):sumber
Python 2,
193192Tidak menggunakan string, hanya matematika
s(L,U)
mengembalikan sejumlah bentuk "U
-digits denganL
nol paling kanan dan yang lainnya"f(N,m)
mengembalikan angka N-digit dengan bagian dalam2
dan perbatasan selebar m1
di setiap sisig(N,m)
melakukan hal yang sama, tetapi menggunakan7
untuk 'warna' bagian dalam karena cocok dengan tekstur kerucut lebih dekatKeluaran
sumber
Perl 6, 175
Implementasi yang cukup mudah tanpa banyak bermain golf, hanya menghilangkan spasi / tanda baca spasi:
sumber