เหล่านี้เป็นดอกแดนดิไล ASCII:
\|/ \ / |
/|\ | \|/ |
| | | _\|/_
| | | /|\
ดอกแดนดิไลต์ ASCII มีสามพารามิเตอร์: ความยาวของก้าน (จำนวนบวกระหว่าง 1 ถึง 256, จำนวนเมล็ด (จำนวนบวกระหว่าง 0 และ 7), และการวางแนว (^ หรือ v) ดอกแดนดิไลอันเหนือมีความยาว, เมล็ดและทิศทาง, ( 3,5, ^), (3,2, ^), (2,3, ^) และ (3,7, v) ตามลำดับ
เมล็ดจะถูกเติมในลำดับต่อไปนี้ (พลิกคว่ำสำหรับหัว dandelions ลง), ภาพประกอบบนดอกแดนดิไลอันที่มีความยาว 2:
seeds: 0 1 2 3 4 5 6 7
| \ / \|/ \ / \|/ _\ /_ _\|/_
| | | | /|\ /|\ /|\ /|\
| | | | | | | |
ความท้าทาย:
เขียนโปรแกรม / ฟังก์ชั่นซึ่งเมื่อได้รับดอกแดนดิไลอันแบบ ASCII ส่งกลับความยาวจำนวนเมล็ดและทิศทางที่จัดรูปแบบคล้ายกับตัวอย่างข้างต้นและเมื่อพารามิเตอร์ที่กำหนดในรูปแบบนั้นส่งกลับดอกแดนดิไลอัน ASCII พร้อมพารามิเตอร์เหล่านั้น คุณสามารถละเว้นวงเล็บและถือว่าเข้า / ส่งออกจะมีจำนวนจุลภาคจำนวนที่เครื่องหมายจุลภาคและทั้งหรือ^
v
คุณอาจจะใช้แทนตัวละครอื่น ๆ สำหรับ^
/ v
ตราบเท่าที่พวกเขายังคงสามารถตีความได้อย่างง่ายดายเช่น 'ขึ้น' / 'ลง' (เช่นu
/ d
) คุณไม่จำเป็นต้องแยกแยะระหว่างดอกแดนดิไลอันที่มีหน้าตาเหมือนกันเช่น (2,1, ^) และ (3,0, ^) หรือ (2,1, ^) และ (2,1, v) จาก ASCII art ชุดของพารามิเตอร์ทั้งสองจะเป็นเอาต์พุตที่ยอมรับได้และพารามิเตอร์ทั้งสองชุดสามารถให้ ASCII art เดียวกันได้
นี่คือcode-golfดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
ตัวอย่างโปรแกรมใน C # (ไม่ตีกอล์ฟแม้แต่เล็กน้อย):
string Dandelion(string s)
{
if (s.Contains(','))
{
//got parameters as input
string[] p = s.Split(',');
//depth and width (number of seeds)
int d = int.Parse(p[0]);
int w = int.Parse(p[1]);
//draw stem
string art = " |";
while (d > 2)
{
d--;
art += "\n |";
}
//draw head
string uhead = (w % 2 == 1 ? "|" : " ");
string dhead = uhead;
if (w > 1)
{
uhead = "\\" + uhead + "/";
dhead = "/" + dhead + "\\";
if (w > 5)
{
uhead = "_" + uhead + "_\n /|\\";
dhead = "_\\|/_\n " + dhead;
}
else if (w > 3)
{
uhead = " " + uhead + " \n /|\\";
dhead = " \\|/ \n " + dhead;
}
else
{
uhead = " " + uhead + " \n |";
dhead = " |\n " + dhead;
}
}
else
{
uhead = " " + uhead + "\n |";
dhead = " |\n " + dhead;
}
//add head to body
if (p[2] == "^")
{
return uhead + "\n" + art;
}
return art + "\n" + dhead;
}
else
{
//ASCII input
string[] p = s.Split('\n');
int l = p.Length - 1;
int offset = 0;
//find first non-' ' character in art
while (p[0][offset] == ' ')
{
offset++;
}
int w = 0;
if (p[0][offset] == '|')
{
//if '|', either head-down or no head.
if (offset == 0 || p[l][offset - 1] == ' ')
{
//if no space for a head to the left or no head at the bottom, no head.
return l.ToString() + ",1,^";
}
//head must have at least size 2, or else indistinguishable from no head case
w = 6;
if (p[l][offset] == '|')
{
//odd sized head
w = 7;
}
if (offset == 1 || p[l - 1][offset - 2] == ' ')
{
//not size 6 or 7
w -= 2;
if (p[l - 1][offset - 1] == ' ')
{
//not size 4 or 5
w -= 2;
}
}
return l.ToString() + "," + w.ToString() + ",v";
}
else if (p[0][offset] == '\\')
{
//head at least size 2 and not 6/7, or indistinguishable from no head.
w = 4;
if (p[0][offset + 1] == '|')
{
w = 5;
}
if (p[1][offset] == ' ')
{
w -= 2;
}
}
else
{
w = 6;
if (p[0][offset + 2] == '|')
{
w = 7;
}
}
return l.ToString() + "," + w.ToString() + ",^";
}
}
^
และv
?