Bunlar ASCII karahindiba:
\|/ \ / |
/|\ | \|/ |
| | | _\|/_
| | | /|\
ASCII karahindiba üç parametreye sahiptir: Sapın uzunluğu (1 ile 256 arasında pozitif sayı, tohum sayısı (0 ile 7 arasında pozitif sayı) ve yönlendirme (^ veya v). Yukarıdaki karahindibada uzunluk, tohum ve yönelim, ( 3,5, ^), (3,2, ^), (2,3, ^) ve (3,7, v).
Tohumlar, uzunluğu 2 olan bir karahindiba üzerinde gösterilen aşağıdaki sırayla (baş aşağı dandelions için baş aşağı çevrilmiş) doldurulur:
seeds: 0 1 2 3 4 5 6 7
| \ / \|/ \ / \|/ _\ /_ _\|/_
| | | | /|\ /|\ /|\ /|\
| | | | | | | |
Meydan okuma:
Giriş olarak ASCII karahindiba verildiğinde, yukarıdaki örneklere benzer şekilde biçimlendirilmiş uzunluğunu, tohum sayısını ve yönünü döndüren ve bu formatta parametreler verildiğinde bu parametrelerle ASCII karahindiba döndüren bir program / işlev yazın. Parantezi yok sayabilir ve giriş / çıkışın bir sayı, virgül, sayı, virgül ve ya ^
ya olacağını varsayabilirsiniz v
. Sen diğer karakterler yerine kullanabilir ^
/ v
hala kolayca 'yukarı' olarak yorumlanabilir sürece / 'aşağı' (örneğin, u
/ d
). (2,1, ^) ve (3,0, ^) veya (2,1, ^) ve (2,1, v) gibi aynı görünen karahindibaları ayırmanız gerekmez. ASCII sanatı göz önüne alındığında, her iki parametre seti de kabul edilebilir bir çıktı olacaktır ve her iki parametre seti de aynı ASCII sanatını verebilir.
Bu kod golf , bayt en kısa kod kazanır.
C # 'da örnek bir program (biraz golf oynamamış bile):
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() + ",^";
}
}
^
vev
?