LỚN NÀY LÀ LỚN!


11

Pháo đài là ngôn ngữ được phát triển bởi Nhóm nghiên cứu ngôn ngữ lập trình mặt trời (Pháo đài RIP) có một thuộc tính duy nhất, có thể kết xuất các chương trình ("Fortify") theo các kiểu phông chữ khác nhau (ví dụ như bảng đen, đậm, in nghiêng, La Mã, v.v.). Mục tiêu là đại diện cho biến Pháo đài một ký tự trong đánh dấu HTML.

Dưới đây là cách củng cố các biến one-char hoạt động (đơn giản hóa / sửa đổi từ tài liệu cho mục đích chơi gôn mã):

  • Nếu biến là một số vốn lặp lại (nghĩa là ZZ), nó sẽ được định dạng trong bảng đen in đậm ( 𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ)
  • Nếu biến được đặt trước dấu gạch dưới, biến được hiển thị bằng phông chữ La Mã (còn lại một mình)
  • Nếu biến được theo sau bởi dấu gạch dưới, biến được hiển thị bằng phông chữ đậm ( <b>v </b>)
  • Nếu biến không được đặt trước hoặc theo sau bởi dấu gạch dưới, biến được hiển thị ở phông chữ in nghiêng ( <i>v </i>)
  • Các codepoints của bolds bảng đen là: 𝔸: 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. Chúng được tính là một byte trong mỗi chương trình của bạn (nếu ngôn ngữ bạn chọn có thể xử lý tất cả các ký tự này)

Đầu vào sẽ là một chữ viết hoa ASCII lặp đi lặp lại hoặc một chữ cái ASCII duy nhất không có dấu gạch dưới, dấu gạch dưới hàng đầu hoặc dấu gạch dưới (AKA _a_sẽ không phải là đầu vào). Đây là mã golf nên số byte thấp nhất sẽ thắng!

Các trường hợp thử nghiệm:

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

Liên kết: Thông số kỹ thuật , Tải xuống trực tiếp phiên bản 0.1 alpha .

Triển khai tham chiếu (Điều này sẽ có trong Pháo đài, nhưng Pháo đài không giống như hầu hết các nhân vật doublestruck, vì vậy việc triển khai này nằm ở 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>");
}

Tôi quên xóa chúng, liên kết hộp cát: codegolf.meta.stackexchange.com/a/13383/55550
Zacharý

Là các biến chữ hoa duy nhất là hai biến lặp lại, và là các chữ thường duy nhất ba chữ cái khác?
Jonathan Allan

Chữ hoa có thể là bình thường, in nghiêng và đậm. Chữ thường không thể là doublestruck.
Zacharý

_____sẽ không được đầu vào.
Zacharý

Ồ ... Vậy đó không phải là một chuỗi các ký tự mà chúng ta đang chuyển đổi, chỉ là một ký tự?
Bạch tuộc ma thuật Urn

Câu trả lời:


1

Thạch , 73 byte

Hóa ra việc không thể sử dụng các chữ cái BBB trong mã là khá tốn kém.

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

Một chương trình đầy đủ lấy một đối số và in kết quả.

Hãy thử trực tuyến! hoặc xem bộ thử nghiệm .

Làm sao?

Điểm vào chính là dòng mã cuối cùng ("Liên kết chính").

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

Thất bại trong đầu vào ZZ.
Zacharý

Ồ, đó là ở một nơi khác trong Unicode? Sự lựa chọn kỳ lạ họ đã thực hiện.
Jonathan Allan

Vâng, doublestruck C H N P Q RZđang ở những nơi khác nhau trong unicode.
Zacharý

(Đọc điểm đạn thứ năm)
Zacharý

LOL, thật vui khi thấy Jelly flop như thế!
Zacharý

4

Python 3.6, 159 131 128 byte

Lưu 1 byte nhờ @ Zacharý

3 byte được lưu nhờ vào @ VаlueInk

28 byte được lưu nhờ @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]=='_']

Hãy thử trực tuyến!


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

Nhìn vào chỉnh sửa mới cho bài viết, 𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ được tính là 1 byte mỗi bài.
Zacharý


2

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

Có lẽ hoạt động thậm chí còn tốt hơn trong Retina. Sử dụng -pcờ.

-1 byte từ Zacharý.

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

Hãy thử trực tuyến!


Bạn quên JJ, KK, LL, TT, UU, VVWW. !! (Đó có thể là lý do tại sao MMcho )
Zacharý

@ Zacharý cố định.
Mực giá trị

2
Tôi nghĩ bạn có thể tiết kiệm một byte bằng cách thực hiện 𝕊-𝕏𝕐 𝕊-𝕐.
Zacharý

Bạn đã không cập nhật liên kết TIO của mình để tiết kiệm 1 byte. Ngoài ra, điều này thất bại nặng nề ở Retina, sử dụng UTF-16 và do đó không thể dịch một chữ Á sang một ký tự blackbold hai char16_t.
Neil

@Neil ôi. Liên kết cố định.
Mực giá trị

1

JavaScript, 97 ký tự

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

Tại sao một ngôn ngữ có phương pháp như String.prototype.italicsString.prototype.bold?

Nhờ Neil, lưu 9 byte, sử dụng [...s]thay vì s.match(/./u).


Đây là ES6, hay ES7?
Zacharý

ucờ trong RegExp là tính năng ES6. String.prototype.italicsString.prototype.boldchỉ là một số tính năng di sản.
tsh

Tôi biết đó là ES6 ... 'gây ra mũi tên béo.
Zacharý

thay đổi "ES6" thành "ES6 hoặc ES7" trong nhận xét trên.
Zacharý

[...'𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ']sẽ giúp bạn tiết kiệm một số byte.
Neil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.