BU… OLDUĞUNUZ!


11

Fortress, Güneş Programlama Dil Araştırma Grubu (RIP Fortress) tarafından geliştirilen ve kendine özgü bir özelliği olan bir dildi, farklı yazı tipi stillerinde (yani, yazı tahtası kalın, kalın, italik, roman vb.). Amaç, HTML işaretlemesinde tek karakterlik bir Fortress değişkenini temsil etmektir.

Tek karakterlik değişkenlerin tahkimatı şu şekilde çalıştı (kod golf amaçlı belgelerden basitleştirildi / değiştirildi):

  • Değişken tekrarlanan bir büyük harfse (ie ZZ), yazı tahtası kalın ( 𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ) olarak biçimlendirilir
  • Değişkenin önünde bir alt çizgi varsa, değişken roman yazı tipinde (yalnızca solda) oluşturulur
  • Değişkenin ardından bir alt çizgi varsa, değişken kalın yazı tipiyle ( <b>v </b>) oluşturulur
  • Değişkenin öncesinde veya ardından alt çizgi yoksa, değişken italik yazı tipinde ( <i>v </i>) oluşturulur
  • Karatahta 𝔸kalınlarının kod noktaları şunlardır: 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. Bunlar , programınızdaki her bir bayt olarak sayılır (eğer tercih ettiğiniz dil bu karakterleri işleyebilirse)

Girdi, yinelenen bir ASCII sermayesi veya alt çizgi, ön alt çizgi veya sondaki alt çizgi olmayan tek bir ASCII harfi _a_olacaktır (AKA girdi olmayacaktır). Bu kod golf kadar düşük bayt sayısı kazanır!

Test senaryoları:

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

Bağlantılar: Özellikler , Sürüm 0.1 alfa doğrudan indir .

Referans uygulaması (Bu, Fortress'de olurdu, ancak Fortress, en çok düşünülen karakterlerin çoğunu sevmiyor, bu nedenle bu uygulama D'de):

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>");
}

Onları kaldırmayı unuttum, sandbox bağlantısı: codegolf.meta.stackexchange.com/a/13383/55550
Zacharý

Sadece büyük harfli değişkenler çift yinelenen değişkenler mi ve sadece küçük harfli değişkenler diğer üçü mü?
Jonathan Allan

Büyük harf normal, italik ve kalın olabilir. Küçük harf ikiye katlanamaz.
Zacharý

_____girilmez.
Zacharý

Oh ... Yani dönüştürdüğümüz bir karakter dizisi değil, sadece tek bir karakter mi?
Sihirli Ahtapot Urn

Yanıtlar:


1

Jöle , 73 bayt

Kodda BBB harflerini kullanamamanın oldukça pahalı olduğu ortaya çıkıyor.

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

Bir argüman alan ve sonucu basan tam bir program.

Çevrimiçi deneyin! veya test takımına bakın .

Nasıl?

Ana giriş noktası, kodun son satırıdır ("Ana bağlantı").

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

Giriş başarısız ZZ.
Zacharý

Oh, bu Unicode'da farklı bir yerde mi? Tuhaf bir seçim yaptılar.
Jonathan Allan

Evet, iki katına çıktı C H N P Q Rve Zunicode'un farklı yerlerinde.
Zacharý

(Beşinci mermi noktasını okuyun)
Zacharý

LOL, Jelly flopunu böyle görmek çok eğlenceli!
Zacharý

4

Python 3.6, 159 131 128 bayt

@ Zacharý sayesinde 1 bayt kaydedildi

@ VаlueInk sayesinde 3 bayt kaydedildi

@Rod sayesinde 28 bayt kaydedildi

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]=='_']

Çevrimiçi deneyin!


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

Gönderinin yeni düzenlemesine bakın, each her biri 1 bayt olarak sayın.
Zacharý


2

Yakut , 104 106 105 + 1 = 105 107 106 "bayt"

Muhtemelen Retina'da daha da iyi çalışıyor. -pBayrak kullanır .

Zacharý'dan -1 bayt.

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

Çevrimiçi deneyin!


Sen unuttun JJ, KK, LL, TT, UU, VVve WW. !! (Muhtemelen neden MMverir )
Zacharý

@ Zacharý düzeltildi.
Değer Mürekkebi

2
Sanırım bir bayt yaparak tasarruf edebilirsiniz 𝕊-𝕏𝕐 𝕊-𝕐.
Zacharý

1 baytlık tasarruf için TIO bağlantınızı güncellemediniz. Ayrıca, UTF-16 kullanan Retina'da bu başarısız olur ve bu nedenle tek bir AY'yi iki char16_t blackbold karakterine çeviremez.
Neil

@Neil ayy. Sabit bağlantı.
Değer Mürekkebi

1

JavaScript, 97 karakter

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

Neden bir dilin String.prototype.italicsve gibi yöntemleri vardır String.prototype.bold?

Neil sayesinde, 9 bayt kaydedin, [...s]yerine kullanın s.match(/./u).


Bu ES6 veya ES7 mi?
Zacharý

uRegExp bayrağı ES6 özelliğidir. String.prototype.italicsve String.prototype.boldsadece bazı eski özellikler.
tsh

ES6 olduğunu biliyordum ... çünkü şişman oklar.
Zacharý

yukarıdaki yorumda "ES6" yı "ES6 veya ES7" olarak değiştirin.
Zacharý

[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']size bazı bayt tasarruf etmelidir.
Neil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.