Fortress był językiem opracowywanym przez Sun Programming Language Research Group (RIP Fortress), który miał unikalną właściwość, możliwe było renderowanie („Fortify”) programów w różnych stylach czcionek (tj. Pogrubienie, pogrubienie, kursywa, rzymskie itp.). Celem jest reprezentowanie jednoznakowej zmiennej Fortress w znacznikach HTML.
Oto jak działa fortyfikacja zmiennych jednoznakowych (uproszczonych / zmodyfikowanych z dokumentacji do celów gry w golfa kodowego):
- Jeśli zmienna jest kapitałem powtarzalnym (tj.
ZZ
), Zostaje sformatowana pogrubioną czcionką (𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ
) - Jeśli zmienna jest poprzedzona znakiem podkreślenia, zmienna jest renderowana czcionką rzymską (pozostawiona sama)
- Jeśli po zmiennej następuje znak podkreślenia, zmienna jest renderowana pogrubioną czcionką (
<b>
v</b>
) - Jeśli zmienna nie jest poprzedzona ani nie jest podkreślona, zmienna jest renderowana kursywą (
<i>
v</i>
) - Punkty kodowe pogrubionej tablicy to::
𝔸
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. Liczą się one jako jeden bajt w twoim programie (jeśli twój wybrany język w ogóle obsługuje te znaki)
Dane wejściowe będą albo powtarzaną wielką literą ASCII, albo pojedynczą literą ASCII bez podkreślenia, wiodącego podkreślenia lub końcowego podkreślenia (AKA _a_
nie będzie wejściem). To jest golf golfowy, więc wygrywa najmniej bajtów!
Przypadki testowe:
a => <i>a</i>
BB => 𝔹
c_ => <b>c</b>
_d => d
E => <i>E</i>
G_ => <b>G</b>
_H => H
ZZ => ℤ
Linki: Specyfikacja , Bezpośrednie pobieranie wersji 0.1 alfa .
Implementacja referencyjna (byłaby to w Fortress, ale Fortress nie lubi większości podwójnie uderzonych postaci, więc ta implementacja jest w 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>");
}
_____
nie zostaną wprowadzone.Odpowiedzi:
Galaretka , 73 bajty
Okazuje się, że niemożność użycia liter BBB w kodzie jest dość droga.
Pełny program przyjmujący jeden argument i wypisujący wynik.
Wypróbuj online! lub zobacz pakiet testowy .
W jaki sposób?
Głównym punktem wejścia jest ostatni wiersz kodu („Główny link”).
źródło
ZZ
.C
H
N
P
Q
R
iZ
są w różnych miejscach w Unicode.Python 3.6,
159131128 bajtów1 bajt zapisany dzięki @ Zacharý
3 bajty zapisane dzięki @ VаlueInk
28 bajtów zapisanych dzięki @Rod
Wypróbuj online!
źródło
len(s)<2 and
=>len(s)<2and
Rubinowy ,
104106105 + 1 =105107106 „bajtów”Prawdopodobnie działa jeszcze lepiej w siatkówce. Używa
-p
flagi.-1 bajt z Zacharý.
Wypróbuj online!
źródło
JJ
,KK
,LL
,TT
,UU
,VV
iWW
. !! (I prawdopodobnie dlategoMM
dajeℙ
)𝕊-𝕏𝕐
𝕊-𝕐
.JavaScript, 97 znaków
Dlaczego język ma metody takie jak
String.prototype.italics
iString.prototype.bold
?Dzięki Neilowi zaoszczędź 9 bajtów, użyj
[...s]
zamiasts.match(/./u)
.źródło
u
Flaga w RegExp jest funkcją ES6.String.prototype.italics
iString.prototype.bold
to tylko niektóre starsze funkcje.[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']
powinien zaoszczędzić trochę bajtów.