O Fortress era uma linguagem desenvolvida pelo Grupo de Pesquisa em Linguagens de Programação da Sun (RIP Fortress) que possuía uma propriedade exclusiva; era possível renderizar ("Fortify") programas em diferentes estilos de fonte (por exemplo, negrito, negrito, itálico, quadro-negro, romano etc.). O objetivo é representar uma variável Fortress de um caractere na marcação HTML.
Veja como a fortificação de variáveis de um caractere funcionou (simplificada / modificada da documentação para fins de golfe com código):
- Se a variável for um capital repetido (ou seja
ZZ
), ela será formatada em negrito (𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ
) - Se a variável for precedida por um sublinhado, a variável será renderizada em fonte romana (deixada em paz)
- Se a variável for seguida por um sublinhado, a variável será renderizada em negrito (
<b>
v</b>
) - Se a variável não for precedida nem seguida por um sublinhado, a variável será renderizada em fonte itálica (
<i>
v</i>
) - Os pontos de código dos negritos do quadro-negro são::
𝔸
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. Eles contam como um byte cada no seu programa (se o seu idioma de escolha puder lidar com esses caracteres)
A entrada será um capital ASCII repetido ou uma única letra ASCII sem sublinhado, sublinhado à esquerda ou sublinhado à direita (AKA _a_
não será uma entrada). Isso é código-golfe, e a menor contagem de bytes ganha!
Casos de teste:
a => <i>a</i>
BB => 𝔹
c_ => <b>c</b>
_d => d
E => <i>E</i>
G_ => <b>G</b>
_H => H
ZZ => ℤ
Links: Especificação , Download direto da versão 0.1 alpha .
Implementação de referência (isso seria no Fortress, mas o Fortress não gosta da maioria dos caracteres de bloqueio duplo, portanto, essa implementação é em 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>");
}
_____
não será inserido.Respostas:
Geléia , 73 bytes
Acontece que não poder usar as letras BBB no código é bastante caro.
Um programa completo tendo um argumento e imprimindo o resultado.
Experimente online! ou veja a suíte de testes .
Quão?
O ponto de entrada principal é a última linha de código ("Link principal").
fonte
ZZ
.C
H
N
P
Q
R
eZ
esteja em lugares diferentes no unicode.Python 3.6,
159131128 bytes1 byte salvo graças a @ Zacharý
3 bytes salvos graças a @ VаlueInk
28 bytes salvos graças a @Rod
Experimente online!
fonte
len(s)<2 and
=>len(s)<2and
Ruby ,
104106105 + 1 =105107106 "bytes"Provavelmente funciona ainda melhor na Retina. Usa
-p
sinalizador.-1 byte de Zacharý.
Experimente online!
fonte
JJ
,KK
,LL
,TT
,UU
,VV
eWW
. !! (Que é provavelmente por isso queMM
dáℙ
)𝕊-𝕏𝕐
𝕊-𝕐
.JavaScript, 97 caracteres
Por que uma linguagem tem métodos como
String.prototype.italics
eString.prototype.bold
?Graças a Neil, salve 9 bytes, use em
[...s]
vez des.match(/./u)
.fonte
u
O sinalizador no RegExp é o recurso ES6.String.prototype.italics
eString.prototype.bold
são apenas alguns recursos herdados.[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']
você deve economizar alguns bytes.