Đường cong khâu


8

Khâu đường cong là quá trình "khâu" lại nhiều đường thẳng để tạo đường cong, như vậy:

Imgur

Để được giải thích về khâu đường cong, hãy truy cập trang web này .

Chúng tôi sẽ vẽ đường cong của chúng tôi ở phía trên bên trái của màn hình, như thể hiện trong hình trên.

Cho một số nguyên n(thông qua STDIN hoặc tham số hàm), là số lượng đường cần vẽ và một ppixel nguyên , là khoảng giữa các điểm bắt đầu, vẽ một đường cong thẳng.

Các đường ngang / dọc là cần thiết và phải là một phần của số dòng.


Kết quả đầu ra:

n = 25, p = 15

Imgur

n = 20, p = 20

Imgur


Đây là một thử thách , vì vậy mã ngắn nhất sẽ thắng .


Ồ vâng! À ...
James Williams

Các đường cong trong thực tế là một parabola. Tôi không thể nhớ nơi tôi đã đọc. Nếu tôi là một giáo viên, tôi sẽ chỉ ra rằng đó không phải là "đường cong thẳng" mà là xấp xỉ đường cong được xây dựng từ các đường thẳng :-)
Level River St

@Martin Yup, pixel.
James Williams

@Martin Đường ngang không cần thiết, vì đường viền của cửa sổ sẽ tạo thành các đường.
James Williams

2
Ôi ngày nào tôi cũng từng làm điều này để giải trí khi buồn chán trong lớp ... không biết người khác đã làm điều tương tự!
Claudiu

Câu trả lời:


5

Toán học, 55 51 50 47 64 68 byte

f=Graphics[Line@Table[#2{{i-1,#+1},{0,i+1}},{i,#}],ImageSize->#*#2]&

Xác định hàm mang lại hình ảnh như được chỉ định khi được gọi như

f[25,15]

Năng suất

nhập mô tả hình ảnh ở đây

Chỉnh sửa : Phải thêm một số ký tự để đảm bảo rằng tham số thứ hai thực sự được hiểu là pixel.

Chỉnh sửa : thêm bốn byte để vẽ các đường ngang.


4

Con trăn - 74

Vì câu hỏi không chỉ định đơn vị, tỷ lệ trục, v.v. Tôi sẽ đưa ra giải pháp tối thiểu sau:

import pylab
n,p=input()
for i in range(n):pylab.plot([0,i*p],[(i-n)*p,0])

nhập mô tả hình ảnh ở đây


Bỏ qua các đơn vị và tỷ lệ trục, giải pháp tối thiểu lưu bốn ký tự bằng cách bỏ qua *p;). Ngoài ra, bạn có chắc chắn rằng bạn không thêm một đường ngang và / hoặc dọc? những người không có trong các ví dụ đầu ra. cuối cùng, tôi nhận thấy ở tôi, rằng nó ngắn hơn để bù tọa độ đầu tiên theo chiều ngang thay vì tọa độ thứ hai (vì bạn có thể lưu -và dấu ngoặc đơn)
Martin Ender

2
(Câu hỏi hiện chỉ định đơn vị là pixel bây giờ, btw.)
Martin Ender

3

Bash + Imagemagick + xview, 124 byte

for((;i<$1;));{
s+=" -draw 'line $[i*$2],0 0,$[($1-i++)*$2]'"
}
eval convert -size $[$1*$2]x$[$1*$2] xc:$s png:-|xview stdin

Đầu ra cho ./curvestitch.sh 25 15:

nhập mô tả hình ảnh ở đây


Yay cho tràn chiều dài dòng lệnh tối đa nếu bạn không cẩn thận. Nice one
tomsmeding

2

Perl, 121 130 byte

Đầu vào là thông qua STDIN. Các giá trị được phân tách bằng dấu phẩy.

EDIT: Chúng tôi có các quy tắc mới. Tôi không chắc tại sao, nhưng hai pixel đầu tiên là vô hình và tôi phải thêm một phần bù ...

use Tk;<>=~/,/;$c=tkinit->Canvas(-width=>$w=$`*$'-$',-height=>$w)->pack;$c->createLine(2,2+$_*$',2+$w-$_*$',2)for 0..~-$`;MainLoop

Dưới đây là một số bài kiểm tra:

25x15:

25x15

6x72:

6x72


2

BBC Basic, 58 ký tự ascii, tokenised file 49

INPUTn,p:p*=2FORi=1TOn:MOVEi*p-p,974DRAW0,974-(n-i)*p:NEXT

Tải xuống trình giả lập tại http://www.bbcbasic.co.uk/bbcwin/bbcwin.html

p*=2 là cần thiết bởi vì trong chế độ mặc định, BBC Basic ánh xạ một hình vuông logic là 2x2 đến một pixel vật lý.

BBC Basic có nguồn gốc ở góc dưới bên trái của màn hình, với y phối hợp đi lên. Trên máy của tôi, cửa sổ mặc định có tọa độ y phía trên là 974 (của bạn có thể khác.) 7 ký tự có thể được lưu nếu được phép vẽ ở góc dưới bên trái của màn hình. Thêm MODE16sau lần đầu tiên :sẽ thay đổi kích thước cửa sổ để tọa độ y phía trên được đảm bảo là 799.

nhập mô tả hình ảnh ở đây


Điều này nhanh chóng trở thành một ngôn ngữ golf nguy hiểm. Ai là ai?
Soham Chowdhury

1

Html + JavaScript 155 157 183

Chỉnh sửa: tìm hiểu những thứ tôi có thể cắt mà không mất chức năng
Chỉnh sửa 2: theo đề xuất của @Optimizer

<canvas id='c'/><script>
p=prompt,s=p(l=p(t=c.getContext("2d")));for(c.width=c.height=y=s*l,x=0;l--;x-=s)t.moveTo(0,y-=s),t.lineTo(-x,0);t.stroke()
</script>

Fiddle Số dòng đầu vào đầu tiên , khoảng pixel đầu vào thứ hai

Fiddle Ungolfed


l = p (s = p (t = c.getContext ("2d")))
Trình tối ưu hóa

@Optimizer Tôi nghĩ rằng tôi cần đặt chiều rộng và chiều cao trước khi lấy bối cảnh
edc65

1
Không, cái này hoạt động: jsfiddle.net/6ke43m7c/10
Trình tối ưu hóa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.