Fortress был языком, разрабатываемым исследовательской группой Sun Programming Language Research Group (RIP Fortress), у которого было уникальное свойство: можно было отображать («укреплять») программы в разных стилях шрифтов (например, полужирный шрифт, полужирный, курсив, римский и т. д.). Цель состоит в том, чтобы представить переменную Fortress с одним символом в разметке HTML.
Вот как работает обогащение переменных с одним символом (упрощено / изменено из документации для целей игры в код):
- Если переменная повторяется с большой буквы (то есть
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 альфа .
Ссылочная реализация (это будет в 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>");
}
_____не будет вход