Fortress是由Sun编程语言研究小组(RIP Fortress)开发的一种语言,具有独特的属性,可以用不同的字体样式(例如,黑板粗体,粗体,斜体,罗马等)。目标是在HTML标记中表示一个单字符的Fortress变量。
这是一字符变量设防的工作方式(出于代码查询目的,从文档中进行了简化/修改):
- 如果该变量是重复的大写字母(例如
ZZ),则其格式为黑板粗体(𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ) - 如果该变量前面带有下划线,则该变量将以罗马字体呈现(单独保留)
- 如果变量后面带有下划线,则该变量将以粗体(
<b>v</b>)呈现。 - 如果该变量既不带下划线也不带下划线,则该变量以斜体(
<i>v</i>)呈现。 - 黑板粗体的代码点是::
𝔸1D538,𝔹:1D539,ℂ:2102,𝔻:1D53B,𝔼:1D53C,𝔽:1D53D,𝔾:1D53E,ℍ:210D,𝕀:1D540,𝕁:1D541,𝕂:1D542,𝕃:1D543,𝕄:1D544,ℕ:2115,𝕆:1D546,ℙ:2119,ℚ:211A,ℝ:211D,𝕊:1D54A,𝕋:1D54B,𝕌:1D54C,𝕍:1D54D,𝕎:1D54E,𝕏:1D54F,𝕐:1D550,ℤ:2124。它们在程序中每个占一个字节(如果您选择的语言完全可以处理这些字符)
输入将是重复的ASCII大写字母,或者是没有下划线,前导下划线或末尾下划线的单个ASCII字母(AKA _a_将不是输入)。这是代码高尔夫球,因此最低字节数为准!
测试用例:
a => <i>a</i>
BB => 𝔹
c_ => <b>c</b>
_d => d
E => <i>E</i>
G_ => <b>G</b>
_H => H
ZZ => ℤ
链接:规范,直接下载版本0.1 alpha。
参考实现(这在Fortress中,但是Fortress不喜欢大多数双连字符,因此该实现在D中):
dstring fortify(string arg) {
import std.string, std.conv;
alias D = to!dstring; //Convert to a string that accepts the unicode needed
dstring BB = "𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ"d; //blackboard bold capitals
string UC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //normal ASCII capitals
if(arg.length == 1)
return D("<i>" ~ arg ~ "</i>");
if(arg[0] == a[1])
return D(BB[UC.indexOf(arg[0])]);
if(arg[0] == '_')
return D(arg[1]);
return D("<b>" ~ arg[0] ~ "</b>");
}
我忘了删除,沙箱链接:codegolf.meta.stackexchange.com/a/13383/55550
—
扎卡里
唯一的大写变量是重复的双精度变量,还是其他三个小写变量?
—
乔纳森·艾伦
大写可以是正常,斜体和粗体。小写不能重复使用。
—
扎卡里
_____将不会输入。
哦...所以这不是我们要转换的字符串,只是一个字符?
—
魔术章鱼缸