ЦЕ… Є… ЗАМОВЛЕННЯ!


11

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

Я забув їх видалити, посилання пісочниці: codegolf.meta.stackexchange.com/a/13383/55550
Zacharý

Чи є єдиними великими великими величинами подвійні повторювані, а єдиними малими змінними інші три?
Джонатан Аллан

Верхній регістр може бути звичайним, курсивом та жирним шрифтом. Малі регістри не можуть бути подвійними.
Zacharý

_____не буде введено.
Zacharý

О ... Отже, це не рядок символів, який ми перетворюємо, а лише один?
Чарівна восьминога урна

Відповіді:


1

Желе , 73 байти

Виявляється, неможливість використання літер BBB у коді є досить дорогим.

5ŀ”i
“Ðñṡ’Dẋ@€“¡ḞḄ’ż“¿¿Æ€¢¬µ‘+⁽ø³F⁸ṪO¤+ị¥Ọ
Ṫ
Ḣ5ŀ”b
;j“<>/”ṃ@“¢ʠf’
i”_+LµĿ

Повна програма, що бере один аргумент і друкує результат.

Спробуйте в Інтернеті! або перегляньте тестовий набір .

Як?

Основна точка введення - останній рядок коду ("Головна посилання").

5ŀ”i - Link 1: list of characters, s (length 1 & no underscore)
  ”i - literal character 'i'
5ŀ   - call link 5 as a dyad with s on the left and 'i' on the right

“Ðñṡ’Dẋ@€“¡ḞḄ’ż“¿¿Æ€¢¬µ‘+⁽ø³F⁸ṪO¤+ị¥Ọ - Link 2: list of characters, s (length 2 & no underscore)
“Ðñṡ’                                 - base 250 literal              1007245
     D                                - to decimal list               [1,0,0,7,2,4,5]
         “¡ḞḄ’                        - base 250 literal              111673
      ẋ@€                             - repeat with reversed @rguments for €ach -> [[111673],[],[],[111673,111673,111673,111673,111673,111673,111673],[111673,111673],[111673,111673,111673,111673],[111673,111673,111673,111673,111673]]
               “¿¿Æ€¢¬µ‘              - code page index list          [11,11,13,12,1,7,9]
              ż                       - zip together                  [[111673,11],[11],[13],[[111673,111673,111673,111673,111673,111673,111673],12],[[111673,111673],1],[[111673,111673,111673,111673],7],[[111673,111673,111673,111673,111673],9]]
                         ⁽ø³          - base 250 literal              8382
                        +             - addition (vectorises)         [[120055,8393],[8393],[8395],[[120055,120055,120055,120055,120055,120055,120055],8394],[[120055,120055],8383],[[120055,120055,120055,120055],8389],[[120055,120055,120055,120055,120055],8391]]
                            F         - flatten                       [120055,8393,8393,8395,120055,120055,120055,120055,120055,120055,120055,8394,120055,120055,8383,120055,120055,120055,120055,8389,120055,120055,120055,120055,120055,8391]
                                ¤     - nilad followed by link(s) as a nilad:                                                                                    ^
                             ⁸        -   chain's left argument, s  e.g.    "CC"                                                                                 |
                              Ṫ       -   tail (last character)             'C'                                                                                  |
                               O      -   cast to ordinal                   67                                                                                   |
                                   ¥  - last two links as a dyad:                                                                                                |
                                  ị   -   index into (1-indexed & modular)  8383 (this is at index 67%26=15 -----------------------------------------------------+ )
                                 +    -   add the ordinal                   8450
                                    Ọ - convert from ordinal to character   'ℂ'

Ṫ - Link 3: list of characters, s (length 2 & underscore at index 1)
Ṫ - tail (get the first character

Ḣ5ŀ”b - Link 4: list of characters, s (length 2 & underscore at index 2)
Ḣ     - head s (the non-_ character)
   ”b - literal character 'b'
 5ŀ   - call link 5 as a dyad with the non-_ character on the left and 'b' on the right

;j“<>/”ṃ@“¢ʠf’ - Link 5, wrap in a tag: element, tagName      e.g. 'a', 'i'
;              - concatenate the element with the tagName          "ai"
  “<>/”        - literal list of characters                        "<>/"
 j             - join                                              "a<>/i"
         “¢ʠf’ - base 250 literal                                  166603
       ṃ@      - base decompression with reversed @rguments
               -   "a<>/i" is 5 long, so 166603 is converted to
               -   base 5 [2,0,3,1,2,4,0,3] with digits "a<>/i"    "<i>a</i>"

i”_+LµĿ - Main link: list of characters, s (as specified only):
 ”_     - literal '_'
i       - index of '_' in s (1-indexed; 0 if not found)
    L   - length of s
   +    - addition
     µĿ - call link with that number as a monad with argument s
        - implicit print

Помилка введення ZZ.
Zacharý

О, це в іншому місці в Unicode? Спритний вибір, який вони зробили.
Джонатан Аллан

Так, подвійне руйнування C H N P Q Rі Zзнаходяться в різних місцях в unicode.
Zacharý

(Прочитайте п’яту точку кулі)
Zacharý

LOL, приємно бачити, як Jelly flop такий!
Zacharý

4

Python 3.6, 159 131 128 байт

1 байт збережено завдяки @ Zacharý

3 байти збережено завдяки @ ValueInk

28 байт збережено завдяки @Rod

lambda s:len(s)<2and f"<i>{s}</i>"or s[0]==s[1]and"𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ"[ord(s[0])-65]or[f"<b>{s[0]}</b>",s[1]][s[0]=='_']

Спробуйте в Інтернеті!


len(s)<2 and=>len(s)<2and
Zacharý

Подивіться на нову редакцію до публікації, 𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ рахуйте як 1 байт.
Zacharý


2

Рубі , 104 106 105 + 1 = 105 107 106 "байт"

Напевно, працює ще краще у Retina. Використовує -pпрапор.

-1 байт від Zacharý.

gsub /^.$/,'<i>\0</i>'
gsub(/(.)\1/){$1.tr"A-Z","𝔸𝔹ℂ𝔻-𝔾ℍ𝕀-𝕄ℕ𝕆ℙℚℝ𝕊-𝕐ℤ"}
gsub /(.)_/,'<b>\1</b>'
gsub ?_,''

Спробуйте в Інтернеті!


Ви забули JJ, KK, LL, TT, UU, VVі WW. !! (Що, мабуть, тому і MMдає )
Zacharý

@ Zacharý виправлено.
Значення чорнила

2
Я думаю, ви можете зберегти байт, створивши 𝕊-𝕏𝕐 𝕊-𝕐.
Zacharý

Ви не оновили посилання TIO для 1-байтового збереження. Крім того, це погано виходить із системи Retina, яка використовує UTF-16, і тому не може перевести один AY на два символи blackbold з двома char16_t.
Ніл

@Neil на жаль. Виправлена ​​посилання.
Значення чорнила

1

JavaScript, 97 символів

([a,b])=>a==b?[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ'][a.charCodeAt()-65]:b?b=='_'?a.bold():b:a.italics()

Чому мова має такі методи, як String.prototype.italicsі String.prototype.bold?

Завдяки Нілу, збережіть 9 байт, використовуйте [...s]замість s.match(/./u).


Це ES6 чи ES7?
Zacharý

uпрапор у RegExp є функцією ES6. String.prototype.italicsі String.prototype.boldце лише деякі застарілі функції.
tsh

Я знав, що це ES6 ... тому що жирові стрілки.
Zacharý

змінити "ES6" на "ES6 або ES7" у вищевказаному коментарі.
Zacharý

[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']має заощадити кілька байтів.
Ніл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.