สิ่งนี้ ... คือ ... ความสำเร็จ!


11

Fortress เป็นภาษาที่พัฒนาโดยกลุ่มวิจัยภาษาโปรแกรมของซัน (RIP Fortress) ซึ่งมีคุณสมบัติที่ไม่เหมือนใครมันเป็นไปได้ที่จะเรนเดอร์โปรแกรม "Fortify" ในรูปแบบฟอนต์ต่าง ๆ (เช่นตัวหนากระดานดำตัวหนาตัวเอียง โรมัน ฯลฯ ) เป้าหมายคือแสดงตัวแปร Fort-One Fortress ใน HTML มาร์กอัป

ต่อไปนี้เป็นวิธีการเสริมความแข็งแกร่งของตัวแปรหนึ่งตัว (ทำงาน / แก้ไขจากเอกสารเพื่อวัตถุประสงค์ในการเล่นกอล์ฟ):

  • หากตัวแปรนั้นเป็นตัวพิมพ์ใหญ่ซ้ำ (เช่นZZ) มันจะกลายเป็นรูปแบบในกระดานดำตัวหนา ( 𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ)
  • หากตัวแปรนำหน้าด้วยเครื่องหมายขีดล่างตัวแปรจะแสดงผลในแบบอักษรโรมัน (เหลือเพียงอย่างเดียว)
  • หากตัวแปรตามด้วยขีดล่างตัวแปรจะแสดงผลในแบบอักษรตัวหนา ( <b>v </b>)
  • หากตัวแปรนั้นไม่ได้นำหน้าหรือตามด้วยเครื่องหมายขีดล่างตัวแปรนั้นจะแสดงผลในแบบอักษรตัวเอียง ( <i>v </i>)
  • codepoints ของ bolds กระดานดำมีดังนี้𝔸: 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 แต่ Fortress ไม่ชอบตัวละคร doublestruck ส่วนใหญ่ดังนั้นการนำไปใช้งานจะเป็น 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>");
}

ฉันลืมที่จะลบลิงก์ Sandbox: codegolf.meta.stackexchange.com/a/13383/55550
Zacharý

มีตัวแปรตัวพิมพ์ใหญ่เพียงตัวเดียวที่ทำซ้ำซ้ำสองตัว
Jonathan Allan

ตัวพิมพ์ใหญ่สามารถเป็นปกติตัวเอียงและตัวหนา ตัวพิมพ์เล็กไม่สามารถทวีคูณได้
Zacharý

_____จะไม่ได้รับการป้อนข้อมูล
Zacharý

โอ้ ... ดังนั้นมันไม่ได้เป็นตัวละครที่เรากำลังแปลงเพียงหนึ่งเดียว?
Magic Octopus Urn

คำตอบ:


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 หรือไม่? ทางเลือกที่แปลกประหลาดที่พวกเขาทำ
Jonathan Allan

ใช่ทวีคูณC H N P Q RและZอยู่ในสถานที่ที่แตกต่างกันในยูนิโค้ด
Zacharý

(อ่านหัวข้อย่อยที่ห้า)
Zacharý

ฮ่า ๆ มันสนุกที่ได้เห็น Jelly flop แบบนั้น!
Zacharý

4

Python 3.6, 159 131 128 ไบต์

บันทึก 1 ไบต์ขอบคุณ @ Zacharý

บันทึก 3 ไบต์ด้วย @ VаlueInk

บันทึก 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

Ruby , 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

@ Neil Oops ลิงก์ถาวร
หมึกมูลค่า

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ý

[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']ควรช่วยคุณไบท์
Neil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.