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>");
}
_____
не будет входОтветы:
Желе , 73 байта
Оказывается, что неспособность использовать буквы BBB в коде довольно дорого.
Полная программа, принимающая один аргумент и печатающая результат.
Попробуйте онлайн! или посмотрите набор тестов .
Как?
Основной точкой входа является последняя строка кода («Основная ссылка»).
источник
ZZ
.C
H
N
P
Q
R
иZ
находятся в разных местах в юникоде.Python 3,6,
159131128 байт1 байт сохранен благодаря @ Zacharý
3 байта сохранены благодаря @ VаlueInk
28 байтов сохранено благодаря @Rod
Попробуйте онлайн!
источник
len(s)<2 and
=>len(s)<2and
Рубин ,
104106105 + 1 =105107106 "байтов"Вероятно, работает даже лучше в Retina. Использует
-p
флаг.-1 байт от Zacharý.
Попробуйте онлайн!
источник
JJ
,KK
,LL
,TT
,UU
,VV
иWW
. !! (Что, вероятно, поэтомуMM
даетℙ
)𝕊-𝕏𝕐
𝕊-𝕐
.JavaScript, 97 символов
Почему у языка есть такие методы, как
String.prototype.italics
иString.prototype.bold
?Благодаря Нейлу, сэкономьте 9 байт, используйте
[...s]
вместоs.match(/./u)
.источник
u
Флаг в RegExp является функцией ES6.String.prototype.italics
иString.prototype.bold
только некоторые унаследованные особенности.[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']
должен сэкономить вам несколько байтов.