𝗠𝗮𝘁𝗵𝖲𝖺𝗇𝗌𝗔𝗹𝘁𝗲𝗿𝗻𝗮𝘁𝗼𝗿


28

บทนำ

ลองแปลงคำเป็นแบบอักษรยูนิโค้ดสองแบบ

ท้าทาย

งานของคุณคือแปลงสตริงอินพุตของคุณให้เป็นอักขระ ic 𝖲𝖺𝗇𝗌และ𝗠𝗮𝘁𝗵𝗦𝗮𝗻𝘀𝗕𝗼𝗹𝗱 unicode

คำที่เป็นตัวพิมพ์ใหญ่ทั้งหมดควรเป็นตัวพิมพ์เล็ก𝗕𝗼𝗹𝗱𝗦𝗮𝗻𝘀𝗕𝗼𝗹𝗱คำ

  • ตัวอย่างเช่น: WORD->𝘄𝗼𝗿𝗱

คำตัวพิมพ์เล็กทั้งหมดควรเป็นคำ𝖬𝖺𝗍𝗁𝖲𝖺𝗇𝗌

  • ตัวอย่างเช่น: other words->𝗈𝗍𝗁𝖾𝗋 𝗐𝗈𝗋𝖽𝗌

คำที่เป็นตัวพิมพ์ใหญ่ทั้งหมดควรไม่เปลี่ยนแปลง

  • ตัวอย่างเช่น: Mixed Case Words->Mixed Case Words

ระยะเวลาและช่องว่างควรไม่เปลี่ยนแปลง

คำถูกคั่นด้วยช่องว่างหรือจุด

  • ตัวอย่างเช่น (สิ่งที่ไฮไลต์คือคำ):

Hello. This is a word. S. O.are these

  • อินพุต: สตริงที่มีตัวอักษรช่องว่างและจุด ( [A-Za-z .]+)
  • เอาท์พุท: สตริงที่จัดรูปแบบ

เนื่องจากนี่เป็นความท้าทายในการเล่นกอล์ฟจำนวนไบต์ที่น้อยที่สุดจะเป็นผู้ชนะ

ตัวอย่างอินพุตและเอาต์พุต

การป้อนข้อมูล:

นี่คือตัวอย่าง STRING ที่สามารถป้อนได้ สามารถมีได้หลายประโยค

เอาท์พุท:

𝗂𝗌𝖺𝗇𝖾𝗑𝖺𝗆𝗉𝗅𝖾𝘀𝘁𝗿𝗶𝗻𝗴𝗍𝗁𝖺𝗍𝖼.𝗈.𝘂.𝗹.𝖽นี้ 𝖻𝖾𝗶𝗻𝗽𝘂𝘁𝘁𝗲𝗱 มัน𝖼𝖺𝗇𝗰𝗼𝗻𝘁𝗮𝗶𝗻𝗆𝗎𝗅𝗍𝗂𝗉𝗅𝖾𝗌𝖾𝗇𝗍𝖾𝗇𝖼𝖾𝗌

การอ้างอิง

Math Sans Bold: 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇 (ตัวละคร 120302 ถึง 120327)

Math Sans: 𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓 (ตัวอักษร 120250 ถึง 120275)


3
ยินดีต้อนรับสู่ PPCG!
Laikoni

6
♫ปรัชญาเพียง𝗌𝖺𝗇𝗌𝗆𝖺𝗍𝗁ความรุนแรง, ความรู้สึกและการปฏิบัติจริง ... ♫
Esolanging ผลไม้

13
โว้ว! คุณมีชื่อเป็นตัวหนาในแถบด้านข้างหรือไม่? อะไร? ฉัน ... ไม่เข้าใจ .... อินเทอร์เน็ตกำลังแตกหักหรือไม่ ได้คุณเสียอินเทอร์เน็ตหรือไม่
Zizouz212

26
i.stack.imgur.com/R4V3C.pngฉันมาที่นี่โดยคิดว่าความท้าทายนี้เกี่ยวกับการซ้อนกล่องแผนภูมิแท่งหรืออะไรบางอย่าง ...
Matteo Italia

8
สิ่งนี้ไม่ควรถูกใช้อย่างใกล้ชิด ปัญหานี้ยากกว่าการทับศัพท์ตัวละครอย่างมาก คำตอบชั้นนำในการท้าทายอ้างไม่สามารถแข่งขันหรือถูกโอนโดยใช้วิธีการเดียวกับที่ (AFAICT, จอประสาทตาของฉันไม่ดี)
Conor โอไบรอัน

คำตอบ:


10

QuadR , 45 43 ไบต์

-2 ขอบคุณ ngn

\w+
UCS a+(2>≢b120153+84×⊃b←∪96>a←⎕UCSM

เนื่องจาก TIO scrambles เอาต์พุต Unicode จาก QuadR นี่คือภาพหน้าจอของการใช้ QuadR เป็นไลบรารี APL ในเซสชันแบบโต้ตอบ: ทรานสคริปต์เซสชันแบบโต้ตอบ


\w+ แทนที่คำด้วยผลลัพธ์ของการใช้รหัสต่อไปนี้:

⍵M คำพบ U niversal C haracter S et จุดรหัสที่  ร้านว่าใน 0 หรือ 1 สำหรับ 96 ว่ามีค่ามากกว่าแต่ละคน  ใช้เวลาเพียงไม่ซ้ำกัน; หรือหรือหรือ เก็บที่ เลือกก่อนจากนั้น  คูณ 84 ด้วยที่  เพิ่ม 120153 ที่ ...  คูณต่อไปนี้ด้วย:  tally (ความยาว) ของ( ถ้ากรณีเดียวถ้าผสมกรณี)  0 หรือ 1 ไม่ว่าสองคือ มากกว่านั้น ( ถ้าเป็นกรณีเดียวถ้าผสมกัน)  จะมีการเพิ่มรหัสต้นฉบับให้
⎕UCS
a←a
96>
[0][1][0,1][1,0]
b←b

84×
120153+
(
≢bb12
2>10
a+
⎕UCS แปลงคะแนนรหัสผลลัพธ์กลับเป็นอักขระ


9

APL (Dyalog Unicode) , 63 57 53 ไบต์

-6 ขอบคุณ Erik the Outgolfer -4 ขอบคุณ ngn

ฟังก์ชันนำหน้าเงียบโดยไม่ระบุชื่อ

'\w+'R{⎕UCS a+(2>≢b120153+84×⊃b←∪96>a←⎕UCS⍵.Match}

เนื่องจาก TIO scrambles เอาต์พุต Unicode จาก Dyalog APL นี่คือภาพหน้าจอของการใช้งานโค้ด:

รหัสในการดำเนินการ


'\w+'⎕R PCRE R eplace คำที่มีผลลัพธ์ของการใช้ดังต่อไปนี้ ...

{... } แลมบ์ดานิรนาม:

⍵.Match คำที่พบ

⎕UCSU niversal C haracter Sจุด et รหัสว่า

a← เก็บที่ค่ะ a

96> 0 หรือ 1 ไม่ว่า 96 จะมากกว่าแต่ละค่าหรือไม่

 ใช้เวลาที่ไม่ซ้ำกัน; [0]หรือ[1]หรือ[0,1]หรือ[1,0]

b← เก็บที่ค่ะ b

 เลือกแรกจากที่

84× คูณด้วย 84

120153+ เพิ่ม 120153 เข้าไป

(...  คูณสิ่งต่อไปนี้ด้วย:

  ≢b นับ (ความยาว) ของb( 1ถ้าเป็นกรณีเดียว, 2ถ้าเป็นกรณีผสม)

  2> 0 หรือ 1 ไม่ว่าสองจะสูงกว่านั้น ( 1ถ้ากรณีเดียว0ถ้าผสมกรณี)

a+ จุดรหัสต้นฉบับเพิ่มไปที่

⎕UCS แปลงคะแนนรหัสผลลัพธ์กลับเป็นอักขระ


57 bytes:'\b([A-Z]+|[a-z]+)\b'⎕R{⎕UCS(⎕UCS+120153+84×∊∘⎕A)⍵.Match}
Erik the Outgolfer

@EriktheOutgolfer ขอบคุณ ไม่ได้ผมคิดว่าทำไมไปtacit‽
อดัม

ฉันไม่รู้ แต่มันเกิดขึ้นกับฉันเมื่อฉันเหนื่อย :)
Erik the Outgolfer

@EriktheOutgolfer อันที่จริงผมคิดว่าผมเขียนจากบ้านนี้ใช้คอมพิวเตอร์ภรรยาของฉันโดยไม่ต้องรูปแบบแป้นพิมพ์ APL ...
อดัม

@ Adámที่ regex ยาวเกินไป คุณดีกว่าที่จะใช้\w+และคำนวณจำนวนเพื่อเพิ่ม codepoints ใน dfn:'\w+'⎕R{⎕UCS a+(2>≢b)×120153+84×⊃b←∪96>a←⎕UCS⍵.Match}
ngn

8

ทำความสะอาด , 268 265 232 224 ไบต์

โบนัสนี้ทำงานได้กับสตริงที่มีตัวละครใด ๆ รวมไปถึงค่า Null

import StdLib,StdInt,StdBool,Text.Unicode,Text.Unicode.UChar
u=isUpper
l=isAlpha
$c|l c=fromInt(toInt c+120153+if(u c)84 0)=c
?[h,s:t]=[if(u h<>isLower s)($c)c\\c<-[h,s:t]]
?[h]=[$h]
@s=[y\\x<-groupBy(\a b=l a&&l b)s,y<- ?x]

ลองออนไลน์!

กำหนดฟังก์ชั่น@การUStringและกลับUString


3
มันเป็นโบนัสที่ดีหรือไม่? : D
Conor O'Brien

6

C, 292 ตัวอักษร, 448 ไบต์ (เป็น UTF-8)

char*t;s,i,k;p(l){for(l=s=*t/96,i=k=strlen(t);i--;)t[i]/96-s&&++l;for(l=l-s&&write(1,t,k);!l&++i<k;)write(1,s?"𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓"+t[i]*4-388:"𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇"+t[i]*4-260,4);}f(char*s){char b[strlen(s)];for(t=b;*s;++s)*s<47?(*t=0),p(t=b),putchar(*s):(*t++=*s);*t=0;p(t=b);}

ลองออนไลน์!

คลี่:

char*t;
s,i,k;

p(l)
{
    for (l=s=*t/96, i=k=strlen(t); i--;)
        t[i]/96-s && ++l;

    for (l=l-s&&write(1, t, k); !l&++i<k;)
        write(1, s ? "𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓"+t[i]*4-388
                   : "𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇"+t[i]*4-260, 4);
}

f(char*s)
{
    char b[strlen(s)];

    for (t=b; *s; ++s)
        *s<47 ? (*t=0), p(t=b), putchar(*s) : (*t++=*s);

    *t = 0;
    p(t=b);
}

5

Java 8, 221 219 203 201 ไบต์

s->{StringBuffer r=new StringBuffer();for(String x:s.split("(?<=[\\. ])|(?=[\\. ])"))x.codePoints().forEach(c->r.appendCodePoint(c+(x.matches("[A-Z]+")?120237:x.matches("[a-z]+")?120153:0)));return r;}

ฉันต้องใช้StringBufferแทนที่จะเป็นปกติStringที่จะใช้.appendCodePointโชคไม่ดี ..

คำอธิบาย:

ลองออนไลน์

s->{                           // Method with String parameter and StringBuffer return-type
  StringBuffer r=new StringBuffer();
                               //  Resulting StringBuffer
  for(String x:s.split("(?<=[\\. ])|(?=[\\. ])"))
                               //  Split by space or dot, and keep them as separate items,
                               //  and loop over all those substrings
   x.codePoints().forEach(c->  //   Inner loop over the codepoints of that substring
      r.appendCodePoint(       //    Convert int to char, and append it to the result:
        c                      //     The next codepoint of the substring
        +(x.matches("[A-Z]+")? //     If the word is fully uppercase:
           120237              //      Add 120237 to convert it to Math Sans Bold
          :x.matches("[a-z]+")?//     Else-if the word is fully lowercase:
           120153              //      Add 120153 to convert it to Math Sans
          :                    //     Else (mixed case, or a dot/space)
           0)));               //      Leave the codepoint (and thus the character) as is
  return r;}                   //  Return the resulting StringBuffer

4

Haskell , 172 170 ไบต์

(s#w)r=[x|all(`elem`s)w,c<-w,(x,k)<-zip r s,c==k]
t[]=[]
t w=filter(>[])[['A'..'Z']#w$['𝗮'..],['a'..'z']#w$['𝖺'..],w]!!0
f s|(a,b:c)<-span(>'.')s=t a++b:f c|1>0=t s

ลองออนไลน์!

ค่อนข้างตรงไปตรงมา #ผู้ประกอบการต้องใช้ชุดsของอักขระที่ (บนหรือกรณีที่ต่ำกว่า) คำและชุดซองคณิตศาสตร์w rมันจะส่งคืนคำในฟอนต์คณิตศาสตร์ sans หากอักขระทั้งหมดในคำนั้นอยู่ในรายการsหรือเป็นรายการที่ว่างเปล่า tฟังก์ชั่นใช้เวลาคำและพยายามทั้งสาม possiblities (ทั้งหมดบนทั้งหมดต่ำกว่าหรือผสม) กลับมาเป็นคนแรกที่ไม่ได้เป็นที่ว่างเปล่า fฟังก์ชั่นพบว่าคำแรกโดยใช้spanเปลี่ยนมันด้วยtและเชื่อมโยงกับตัวคั่น (อย่างใดอย่างหนึ่ง.หรือพื้นที่) และที่เกิดขึ้นในส่วนที่เหลือของสตริง กรณีอื่นใช้สำหรับถ้า span ไม่พบตัวคั่น เราแค่แปลงสตริง

แก้ไข: ขอบคุณ @Laikoni สำหรับการถอด 2 ไบต์! ฉันไม่คุ้นเคยกับโอเปอเรเตอร์ "ทั้งหมดที่ใช้อาร์กิวเมนต์สามตัว"


1
(['A'..'Z']#w)['𝗮'..]['A'..'Z']#w$['𝗮'..]สามารถ
Laikoni

3

เยลลี่ 34 ไบต์

e€ØBŒg
ṁǵŒl,Œuiị“¡ẓƬ“¡ẓġ“’×Ç+OỌµ€

ลองออนไลน์!

โปรแกรมเต็มรูปแบบ


2
มันอาจเห็นได้ชัดสำหรับนักเยลลี่มืออาชีพ แต่คุณสามารถเพิ่มคำอธิบายสั้น ๆ เพื่อแสดงẇƬƒเกิดขึ้นที่นี่ได้ไหม?
Mick Mnemonic

@MickMnemonic ขอโทษตอนนี้ฉันไม่มีเวลาไป
Erik the Outgolfer

3

เรติน่า , 84 ไบต์

/\b[A-Z]+\b/_(`.
ĵ$&
)T`L`ۮ-܇
/\b[a-z]+\b/_(`.
ĵ$&
)T`l`ں-ۓ
T`ÿ-߿`퟿-

ลองออนไลน์! คำอธิบาย: Retina เป็นแอปพลิเคชั่น. NET และทำงานได้ใน UTF-16 ภายใน น่าเสียดายที่ตัวละคร Math Sans ไม่ได้อยู่ใน BMP ฉันไม่สามารถแปลมันโดยตรงเพราะจำนวนจุดรหัสแตกต่างกัน ที่แย่กว่านั้นฉันไม่สามารถใช้ตัวแทนเสมือนที่ไม่มีคู่ได้ แต่ฉันเปลี่ยนคำที่เหมาะสมเป็นตัวอักษรในช่วง0xFF-0x7FFซึ่งใช้เวลาเพียงสองไบต์ในการเข้ารหัสอย่างสะดวกสบายและฉันยังใส่คำเหล่านั้นด้วย0x135อักขระ ในที่สุดฉันแผนที่ที่ช่วงไปยังช่วงที่ทับซ้อนตัวแทนที่ไม่ได้จับคู่สร้าง BMP คู่ที่ถูกต้อง


3

Python 3, 173 122 120 ไบต์

lambda s:''.join(chr(ord(c)+120153*t.islower()+120237*t.isupper())for t in re.split(r'\b(\w+)\b',s)for c in t)
import re

-51 ไบต์จาก ShreevatsaR

-2 ไบต์จาก abccd

ลองออนไลน์!

แยกในขอบเขตของคำ ( re.split(r'\b(\w+)\b',s)) แล้วคำแผนที่พิมพ์เล็กเพื่อ𝗌𝖺𝗇𝗌𝗆𝖺𝗍𝗁𝗅𝗈𝗐𝖾𝗋𝖼𝖺𝗌𝖾 ( +120153*t.islower()) และคำพูดของตัวพิมพ์ใหญ่เพื่อ𝘀𝗮𝗻𝘀𝗺𝗮𝘁𝗵𝗯𝗼𝗹𝗱 ( +120237*t.isupper()) และใบผสมกรณีคำพูดคนเดียวแล้วjoins คำสำรอง

Ungolfed และ un-lambda-ed:

def f(s):
    words = re.split(r'\b(\w+)\b', s)
    ret = ''
    for word in words:
        for char in word:
            if word.isupper():
                ret += chr(ord(c) + 120237)
            elif word.islower():
                ret += chr(ord(c) + 120153)
            else:
                ret += c
    return ret

มันจะน้อยกว่าไบต์ถ้าคุณตั้งค่าตัวแปรเป็น 120237 หรือ 120153 ขึ้นอยู่กับว่ามันเป็นบนหรือล่าง? ดูเหมือนว่ามันจะ
pfg

1
@pfg อันที่จริงสามารถโกนได้ 13 ไบต์ (ลดลงเหลือ160 )
ShreevatsaR

@pfg จริงแทนที่แผนที่แลมบ์ดากับ (ง่ายต่อการอ่าน) comprehensions นำมันลงไป149 ไบต์
ShreevatsaR

5
122 :-) ฉันจะหยุดที่นี่ ค่อนข้างภูมิใจที่การตีกอล์ฟให้มากขึ้นทำให้อ่านง่ายขึ้น เฉพาะในไพ ธ อน!
ShreevatsaR

2
-2โดยกำจัดช่องว่างก่อนfor
abccd

3

Japt , 34 33 32 31 ไบต์

รวมถึง unprintable (charcode 153) หลังจากที่ผ่าน#มา

rV="%b%A+%b"Èc+#x#í
rVv Èc+#x#

ลองมัน


คำอธิบาย

                        :Implicit input of string U
r                       :Replace
   "%b%A+%b"            :/\b[A-Z]+\b/g
 V=                     :Assign ^that to variable V
            È           :Run each match through a function
             c          :Map over the codepoints of the current match
              +#x#í     :  Add 120237
\n                      :Assign the result of that replacement to variable U
rVv                     :Another replacement, this time with V lowercased to give us the RegEx /\b[a-z]+\b/g
    Èc+#x#              :And, again, map over the codepoints of each match, this time adding 120153 to each

โซลูชั่น 32 Byte Japt v2 ดั้งเดิม

r/\b(\A+|\a+)\b/Èc_+#x#+#T*(X¶u

ลองมัน

r                                     :Replace
 /\b(\A+|\a+)\b/                      :...all matches of this RegEx (\A=[A-Z], \a=[a-z])
                È                     :Pass each match through a function, with X being the current match
                 c_                   :Pass the codepoints of X through a function
                   +                  :Add to the current codepoint
                    #x#               :120153 (there's an unprintable after the second #)
                        +#T           :Plus 84
                           *          :  Multiplied by
                            (X¶u      :  Is X equal to its uppercase self

1
หากต้องการเพิ่มการถ่ายโอนข้อมูล XXD
Stan Strum

Hexdump แบบพลิกกลับได้? สำหรับ unprintables
Stan Strum


1

JavaScript (ES6), 99 114 113 ไบต์

s=>s.replace(/\b([A-Z]+|[a-z]+)\b/g,e=>e.replace(/./g,f=>String.fromCodePoint(f.charCodeAt()+120153+(f<'a')*84)))

(ขอบคุณ @pfg ที่ชี้ให้เห็นข้อบกพร่องที่สำคัญในโซลูชันแรกของฉัน)

-1 ไบต์ขอบคุณ @Neil

ตัวอย่างข้อมูล:


ใช้งานได้เฉพาะกับ HTML เพราะ & # เพื่อทำด้วย JS บริสุทธิ์คุณจะต้องใช้String.fromCodePoint(120237)ซึ่งจะเพิ่มขนาด
pfg

ยังไม่ได้บ่นว่า แต่ฉันจะกลับมาในภายหลังขอบคุณ
Rick Hitchcock

let a = s=>s.replace(/\b([A-Z]+|[a-z]+)\b/g,e=>e.replace(/./g,f=>String.fromCodePoint(f.charCodeAt(0)+120153+(f<'a')*84)))ทำงาน JS บริสุทธิ์ แต่เพิ่มไบต์พิเศษจำนวนมาก
pfg

อ่าเข้าใจแล้ว! Daggum
Rick Hitchcock

3
บันทึก 1 ไบต์โดยใช้โดยไม่ต้องcharCodeAt() 0
Neil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.