이것은… ……


11

Fortress는 Sun 프로그래밍 언어 리서치 그룹 (RIP Fortress)이 개발 한 언어로 고유 한 속성을 지니고 있으며, 다양한 글꼴 스타일 (예 : 칠판 굵은 체, 굵은 체, 이탤릭체, 로마 등). 목표는 HTML 마크 업으로 한 문자 요새 변수를 나타내는 것입니다.

한 문자 변수의 강화가 작동하는 방법은 다음과 같습니다 (코드 골프 목적으로 문서에서 단순화 / 수정).

  • 변수가 반복 된 대문자 (예 :) 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 알파의 직접 다운로드 .

참조 구현 (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
Zacharý

유일한 대문자 변수는 이중 반복 변수이고 다른 하나는 다른 세 변수입니까?
Jonathan Allan

대문자는 보통, 기울임 꼴 및 굵게 표시 될 수 있습니다. 소문자를 두 번 칠 수 없습니다.
Zacharý

_____입력되지 않습니다.
Zacharý

오 ... 그래서 그것은 우리가 변환하고있는 문자열이 아닙니다. 단 하나입니까?
매직 문어 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ý

아, 그것은 유니 코드의 다른 장소에 있습니까? 그들이 만든 기괴한 선택.
Jonathan Allan

예, 이중 타격을 C H N P Q R받고 Z유니 코드의 다른 장소에 있습니다.
Zacharý

(5 번째 글 머리 기호 읽기)
Zacharý

LOL, 젤리 플럽을 보는 것이 재미 있어요!
Zacharý

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
Zacharý

게시물에 대한 새로운 수정 사항을 확인하십시오. 𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ는 각각 1 바이트로 계산됩니다.
Zacharý


2

루비 , 104 (106) 105 + 1 = 105 107 106 "바이트"

아마도 Retina에서 더 잘 작동합니다. -p플래그를 사용합니다 .

Zacharý에서 -1 바이트

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

온라인으로 사용해보십시오!


당신은 잊었 JJ, KK, LL, TT, UU, VVWW.! (어쩌면 아마 MM주는 이유 )
Zacharý

@ Zacharý 고정.
밸류 잉크

2
나는 당신이 바이트를 절약 할 수 있다고 생각합니다 𝕊-𝕏𝕐 𝕊-𝕐.
Zacharý

1 바이트 절약을 위해 TIO 링크를 업데이트하지 않았습니다. 또한 이것은 UTF-16을 사용하는 Retina에서 잘못 실패하므로 단일 AY를 two-char16_t 블랙 볼드 문자로 변환 할 수 없습니다.
Neil

@ 닐 죄송합니다. 고정 링크.
밸류 잉크

1

자바 스크립트, 97 자

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

왜 언어는 같은 방법이 String.prototype.italicsString.prototype.bold?

Neil 덕분에 9 바이트를 절약하고 [...s]대신 사용하십시오 s.match(/./u).


이 ES6 또는 ES7입니까?
Zacharý

uRegExp의 플래그는 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.