これは……要塞です!


11

Fortressは、Sun Programming Language Research Group(RIP Fortress)によって開発された言語であり、独自の特性があり、プログラムをさまざまなフォントスタイル(太字、太字、斜体など)でレンダリング(「強化」)することができました。ローマなど)。目標は、HTMLマークアップで1文字のFortress変数を表すことです。

1文字の変数の強化がどのように機能したかを以下に示します(コードゴルフの目的でドキュメントを簡略化/変更)。

  • 変数が繰り返し大文字(つまり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。これらはプログラム内でそれぞれ1バイトとしてカウントされます(選択した言語がこれらの文字をまったく処理できる場合)

入力は、繰り返される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 alphaの直接ダウンロード。

参照実装(これは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>");
}

それらを削除するのを忘れた、サンドボックスリンク:codegolf.meta.stackexchange.com/a/13383/55550
— ザカリー

唯一の大文字の変数は二重に繰り返される変数であり、唯一の小文字の変数は他の3つの変数ですか?
— ジョナサンアラン

大文字は、通常、斜体、および太字にすることができます。小文字は二重打てません。
— ザカリー

_____入力されません。
— ザカリー

ああ...それは、私たちが変換している文字列ではなく、1つの文字列ですか?
— 魔法のタコUr

回答:


1

ゼリー、73 バイト

コードでBBB文字を使用できないことは非常に高価であることがわかります。

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

1つの引数を取り、結果を出力する完全なプログラム。

オンラインでお試しください!またはテストスイートをご覧ください。

どうやって?

メインエントリポイントは、コードの最後の行(「メインリンク」)です。

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。
— ザカリー

ああ、それはユニコードの別の場所にありますか?彼らが行った奇妙な選択。
— ジョナサンアラン

うん、doublestruck C H N P Q RとZユニコードに異なる場所にあります。
— ザカリー

(5番目の箇条書きを読む)
— ザカリー

笑、そのようなゼリーのフロップを見るのは楽しいです!
— ザカリー

4

パイソン3.6、159の 131 128バイト

@Zacharýのおかげで1バイト節約

@VаlueInkのおかげで3バイト節約

@Rodのおかげで28バイト節約

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
— ザカリー

投稿の新しい編集を見て、それぞれ1バイトとしてカウントします。
— ザカリー


2

Ruby、104 106 105 + 1 = 105 107 106 "バイト"

おそらくRetinaでさらに良く動作します。-pフラグを使用します。

ザカリーから-1バイト。

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

オンラインでお試しください!


あなたは忘れてしまったJJ、KK、LL、TT、UU、VVとWW。!! (おそらくこれがMM与える理由ですℙ)
— ザカリー

@Zacharýが修正されました。
— バリューインク

2
を作ることでバイトを節約できると思います𝕊-𝕏𝕐 𝕊-𝕐。
— ザカリー

1バイトの節約のためにTIOリンクを更新しませんでした。また、UTF-16を使用するRetinaでは、これはひどく失敗します。そのため、単一のAYを2つのchar16_tの黒太字に変換することはできません。
— ニール

@Neilおっと。固定リンク。
— バリューインク

1

JavaScript、97文字

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

言語にString.prototype.italicsandのようなメソッドがあるのはなぜString.prototype.boldですか?

Neilのおかげで、9バイトを節約し、[...s]代わりにを使用してくださいs.match(/./u)。


これはES6ですか、それともES7ですか?
— ザカリー

uRegExpのフラグはES6機能です。String.prototype.italicsそしてString.prototype.boldほんの一部のレガシー機能です。
— tsh

私はそれがES6であることを知っていました... '太った矢が原因です。
— ザカリー

上記のコメントの「ES6」を「ES6またはES7」に変更します。
— ザカリー

[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']いくつかのバイトを節約する必要があります。
— ニール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.