Фортеця була мовою, яку розробляла дослідницька група мови програмування Сонця (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, але фортеці не подобається більшість символів подвійного коду, тому ця реалізація знаходиться в 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>");
}
_____не буде введено.