INI ... IS ... FORTRESS!

11

Fortress adalah bahasa yang dikembangkan oleh Grup Penelitian Bahasa Pemrograman Sun (RIP Fortress) yang memiliki properti unik di dalamnya, dimungkinkan untuk membuat program ("Fortify") dalam berbagai gaya font (yaitu papan tulis tebal, tebal, cetak miring, roman, dll.). Tujuannya adalah untuk mewakili variabel Benteng satu karakter di markup HTML.

Inilah cara fortifikasi variabel satu-char bekerja (disederhanakan / dimodifikasi dari dokumentasi untuk keperluan kode-golf):

  • Jika variabel adalah modal berulang (yaitu ZZ), itu menjadi diformat dalam papan tulis tebal ( π”Έπ”Ήβ„‚π”»π”Όπ”½π”Ύβ„π•€π•π•‚π•ƒπ•„β„•π•†β„™β„šβ„π•Šπ•‹π•Œπ•π•Žπ•π•β„€)
  • Jika variabel didahului dengan garis bawah, variabel tersebut diterjemahkan dalam font roman (dibiarkan sendiri)
  • Jika variabel diikuti oleh garis bawah, variabel tersebut diterjemahkan dalam huruf tebal ( <b>v </b>)
  • Jika variabel tidak didahului atau diikuti oleh garis bawah, variabel tersebut dibuat dalam huruf miring ( <i>v </i>)
  • Codepoint dari papan tulis tebal adalah:: 𝔸1D538,: 1D539 𝔹,: β„‚2102 𝔻,: 1D53B,: 1D53C,: 1D53D 𝔼,: 𝔽1D53E 𝔾,: ℍ210D 𝕀,: 𝕁1D540 𝕂,: 𝕃1D541 𝕄,: 1D543,: 1D544,: 1D544,: 1155 β„•: 2115, 𝕆: 1D546,: β„™2119 β„š,: ℝ211A π•Š,: 𝕋211D π•Œ,: 𝕍1D54A π•Ž,: 𝕏1D54B 𝕐,: 1D54C,: 1D54D,: 1D54E,: 1D54F,: 1D550,: 1D550,: β„€2124. Ini dihitung sebagai masing-masing satu byte dalam program Anda (jika bahasa pilihan Anda dapat menangani karakter ini sama sekali)

Input akan berupa modal ASCII yang diulang, atau satu huruf ASCII tanpa garis bawah, garis bawah terkemuka, atau garis bawah trailing (AKA _a_tidak akan menjadi input). Ini adalah kode-golf sehingga jumlah byte terendah menang!

Kasus uji:

a => <i>a</i>
BB => 𝔹
c_ => <b>c</b>
_d => d
E => <i>E</i>
G_ => <b>G</b>
_H => H
ZZ => β„€

Tautan: Spesifikasi , Unduh langsung versi 0.1 alpha .

Implementasi referensi (Ini akan di Fortress, tetapi Fortress tidak suka sebagian besar karakter doublestruck, jadi implementasi ini di 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>");
}
ZacharΓ½
sumber
Saya lupa menghapusnya, tautan sandbox: codegolf.meta.stackexchange.com/a/13383/55550
ZacharΓ½
Apakah satu-satunya variabel huruf besar dua kali lipat, dan apakah hanya huruf kecil tiga lainnya?
Jonathan Allan
Huruf besar bisa normal, miring, dan tebal. Huruf kecil tidak dapat dilipatgandakan.
ZacharΓ½
_____tidak akan menjadi input.
ZacharΓ½
Oh ... Jadi itu bukan serangkaian karakter yang kita konversi, hanya satu?
Magic Gurita Guci

Jawaban:

1

Jelly , 73 byte

Ternyata tidak bisa menggunakan huruf BBB dalam kode itu cukup mahal.

5ŀ”i
β€œΓΓ±αΉ‘β€™DαΊ‹@β‚¬β€œΒ‘αΈžαΈ„β€™ΕΌβ€œΒΏΒΏΓ†β‚¬Β’Β¬Β΅β€˜+⁽ø³F⁸αΉͺOΒ€+α»‹Β₯Ọ
αΉͺ
αΈ’5ŀ”b
;jβ€œ<>/”ṃ@β€œΒ’Κ f’
i”_+LΒ΅ΔΏ

Program lengkap mengambil satu argumen dan mencetak hasilnya.

Cobalah online! atau lihat test suite .

Bagaimana?

Titik masuk utama adalah baris kode terakhir ("Tautan utama").

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
Jonathan Allan
sumber
Gagal input ZZ.
ZacharΓ½
Oh, apakah itu di tempat yang berbeda di Unicode? Pilihan aneh yang mereka buat.
Jonathan Allan
Ya, doublestruck C H N P Q Rdan Zberada di tempat yang berbeda di unicode.
ZacharΓ½
(Baca poin kelima)
ZacharΓ½
LOL, sangat menyenangkan melihat Jelly flop seperti itu!
ZacharΓ½
4

Python 3.6, 159 131 128 byte

1 byte disimpan berkat @ ZacharΓ½

3 byte disimpan berkat @ VΠ°lueInk

28 byte disimpan berkat @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]=='_']

Cobalah online!

Uriel
sumber
len(s)<2 and=>len(s)<2and
ZacharΓ½
Lihatlah hasil edit baru pada posting, π”Έπ”Ήβ„‚π”»π”Όπ”½π”Ύβ„π•€π•π•‚π•ƒπ•„β„•π•†β„™β„šβ„π•Šπ•‹π•Œπ•π•Žπ•π•β„€ hitung masing-masing 1 byte.
ZacharΓ½
2

Ruby , 104 106 105 + 1 = 105 107 106 "byte"

Mungkin bekerja lebih baik di Retina. Menggunakan -pbendera

-1 byte dari ZacharΓ½.

gsub /^.$/,'<i>\0</i>'
gsub(/(.)\1/){$1.tr"A-Z","𝔸𝔹ℂ𝔻-𝔾ℍ𝕀-π•„β„•π•†β„™β„šβ„π•Š-𝕐℀"}
gsub /(.)_/,'<b>\1</b>'
gsub ?_,''

Cobalah online!

Nilai Tinta
sumber
Anda lupa JJ, KK, LL, TT, UU, VVdan WW. !! (Yang mungkin mengapa MMmemberi β„™)
ZacharΓ½
@ ZacharΓ½ memperbaiki.
Nilai Tinta
2
Saya pikir Anda dapat menyimpan byte dengan membuat π•Š-𝕏𝕐 π•Š-𝕐.
ZacharΓ½
Anda tidak memperbarui tautan TIO Anda untuk penghematan 1-byte. Juga, ini gagal parah di Retina yang menggunakan UTF-16 dan karenanya tidak dapat menerjemahkan satu AY ke karakter blackbold dua-char16_t.
Neil
@Neil oops. Memperbaiki tautan.
Nilai Tinta
1

JavaScript, 97 karakter

([a,b])=>a==b?[...'π”Έπ”Ήβ„‚π”»π”Όπ”½π”Ύβ„π•€π•π•‚π•ƒπ•„β„•π•†β„™β„šβ„π•Šπ•‹π•Œπ•π•Žπ•π•β„€'][a.charCodeAt()-65]:b?b=='_'?a.bold():b:a.italics()

Mengapa bahasa memiliki metode seperti String.prototype.italicsdan String.prototype.bold?

Berkat Neil, simpan 9 byte, gunakan [...s]sebagai ganti s.match(/./u).

tsh
sumber
Apakah ini ES6, atau ES7?
ZacharΓ½
uflag di RegExp adalah fitur ES6. String.prototype.italicsdan String.prototype.boldhanya beberapa fitur warisan.
tsh
Saya tahu itu ES6 ... karena panah gemuk.
ZacharΓ½
ubah "ES6" menjadi "ES6 atau ES7" di komentar di atas.
ZacharΓ½
[...'π”Έπ”Ήβ„‚π”»π”Όπ”½π”Ύβ„π•€π•π•‚π•ƒπ•„β„•π•†β„™β„šβ„π•Šπ•‹π•Œπ•π•Žπ•π•β„€'] harus menghemat beberapa byte.
Neil