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


28

Giriş

Kelimeleri iki farklı unicode yazı tipine dönüştürmeyi deneyin.

Meydan okuma

Göreviniz giriş dizginizi 𝖬𝖺𝗍𝗁 𝖲𝖺𝗇𝗌 ve 𝗠𝗮𝘁𝗵 𝗦𝗮𝗻𝘀 𝗕𝗼𝗹𝗱 unicode karakterlerine dönüştürmektir.

Tüm büyük harfler küçük lower 𝗦𝗮𝗻𝘀 𝗕𝗼𝗹𝗱 kelimeler olmalıdır.

  • Örneğin: WORD->𝘄𝗼𝗿𝗱

Tüm küçük harfler 𝖲𝖺𝗇𝗌 𝖲𝖺𝗇𝗌 olmalı

  • Örneğin: other words->𝗈𝗍𝗁𝖾𝗋 𝗐𝗈𝗋𝖽𝗌

Tüm karışık harfli kelimeler değişmeden kalmalıdır

  • Örneğin: Mixed Case Words->Mixed Case Words

Dönemler ve boşluklar değişmeden kalmalıdır.

Kelimeler boşluk veya nokta ile ayrılır

  • Örneğin (vurgulanan şeyler kelimelerdir):

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

  • Girişler: Harfleri, boşlukları ve periodları içeren bir dize ( [A-Za-z .]+)
  • Çıktı: Biçimlendirilmiş dize

Bu bir golf mücadelesi olduğundan, en düşük bayt sayısı kazanır

Örnek Giriş ve Çıkış

Giriş:

Bu, INPUTTED olabilecek bir STRING örneğidir. Birden fazla cümle içerebilir.

Çıktı:

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

Referans

Math Sans Bold: 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇 (120302 ile 120327 arasındaki karakterler)

Math Sans: 𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓 (karakterleri 120250 ila 120275)


3
PPCG'ye Hoşgeldiniz!
Laikoni

6
Osoph Felsefe sadece 𝗆𝖺𝗍𝗁 or titizlik, duyu ve pratiklik ... ♫
Esolanging Meyve

13
Oha! Kenar çubuğunda kalın yazılmış bir başlık var mı? Ne? Ben ... anlamıyorum .... internet kırılıyor mu? Mı sen internet kırık?
Zizouz212

26
i.stack.imgur.com/R4V3C.png Bu zorluğun kutuları, çubuk çizelgeleri veya başka bir şeyi istifleme ile ilgili olduğunu düşünerek buraya geldim ...
Matteo Italia

8
Bu yakın dövülmüş olmamalıydı. Bu problem basit bir karakter çevirisinden çok daha zor. Lider cevap anılan meydan kolayca ne de rekabetçi aynı yöntemi kullanarak transfer edilemez (AFAICT benim retina büyük değil)
Conor O'Brien

Yanıtlar:


10

QuadR , 45 43 bayt

-2 sayesinde ngn.

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

TIO, QuadR'den Unicode çıkışını karıştırdığından, etkileşimli bir oturumda QuadR'yi APL kitaplığı olarak kullanma ekran görüntüsü: etkileşimli oturum metni


\w+ Aşağıdaki kodu kendilerine uygulayarak sonucu kelimeleri değiştirin:

⍵M bulunmuş olan sözcük U niversal haracter G ve bu kod noktaları  bu deposu  , 0 ya da 1 96 olup, bu her birinden daha büyük olan  , sadece tek alınması; ya da ya da ya da  bu deposu  bu birinci çekme  bu çarpın 84  edilene 120.153 add ...  çarpma bu aşağıdaki:  Tally (uzunluk) ( tek harf, eğer karışık durumda ise)  olup iki, 0 ya da 1 olduğu ondan daha büyük ( eğer tek / küçük harf karışık ise)  buna eklenen orijinal kod noktaları
⎕UCS
a←a
96>
[0][1][0,1][1,0]
b←b

84×
120153+
(
≢bb12
2>10
a+
⎕UCS sonuçtaki kod noktalarını tekrar karakterlere dönüştür


9

APL (Dyalog Unicode) , 63 57 53 bayt

-6 Outgolfer Erik'e teşekkürler. -4 sayesinde ngn.

Anonim zımni önek işlevi.

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

TIO, Dyalog APL'den Unicode çıktısını karıştırdığından, şu anda çalışmakta olan kodun bir ekran görüntüsü:

kod çalışıyor


'\w+'⎕R PCRE R , aşağıdakileri uygulama sonucu sözcükleri yerleştirir:

{... } anonim lambda:

⍵.Match bulunan kelime

⎕UCSU niversal haracter S olduğu et kod noktaları

a← sakla a

96> 96'dan her birinin daha büyük olup olmadığı için 0 mı yoksa 1 mi?

 sadece benzersiz al; [0]ya [1]ya [0,1]ya[1,0]

b← sakla b

 ondan ilk seç

84× 84 ile çarp

120153+ buna 120153 ekle

( Şununla çarpın:

  ≢b taksit (uzunluğu) b( 1eğer tek dava, 2karışık durum varsa)

  2> İkiden daha büyük olup olmadığına ilişkin 0 veya 1 ( 1eğer tek durumda, 0karışık durumda)

a+ buna eklenen orijinal kod noktaları

⎕UCS sonuçtaki kod noktalarını tekrar karakterlere dönüştür


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

@EriktheOutgolfer Teşekkürler. Neden ben taktikleri yapmayı düşünmedim
Adám

Bilmiyorum, ama yorgun olduğumda bana olur. :)
Outgolfer Erik,

@EriktheOutgolfer Aslında, bunu APL klavye düzeni olmadan karımın bilgisayarını kullanarak evden yazdım…
Ad

@ Düzenli ifadenin çok uzun olduğunu unutmayın; \w+'\w+'⎕R{⎕UCS a+(2>≢b)×120153+84×⊃b←∪96>a←⎕UCS⍵.Match}
dfn'deki

8

Temiz , 268 265 232 224 bayt

Düzgün bir bonus olarak, bu herhangi bir karakter içeren dizelerle çalışır . Boşlar dahil.

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]

Çevrimiçi deneyin!

Fonksiyonu tanımlar, @a UStringve a döndürür.UString


3
Aynı zamanda temiz bir bonus mu? : D
Conor O'Brien,

6

C, 292 karakter, 448 bayt (UTF-8'de)

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

Çevrimiçi deneyin!

unrolled:

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 bayt

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

Ne yazık ki kullanmak StringBufferiçin normal yerine kullanmak zorundayım ..String.appendCodePoint

Açıklama:

Çevrimiçi deneyin.

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 bayt

(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

Çevrimiçi deneyin!

Yeterince açıksözlü. #Operatör grubu alır smevcut karakter (büyük veya küçük harf) sözcüğü wve matematik sans grubu r. Sözcükteki tüm karakterler saksi takdirde boş listede ise, matematik sans yazı tipindeki sözcüğü döndürür. tFonksiyon boş değilse, ilk bir dönen (küçük ya da karışık tüm üst) bir kelime alır ve her üç olabilirlik çalışır. fFonksiyon kullanarak ilk kelimeyi bulursa span, ile transforme tve separatör (ya ile birleştirerek .ya da boşluk) ve dize geri kalanı üzerinde tekrar. Alternatif durum, yayılma alanının bir ayırıcı bulamaması içindir; sadece dizgiyi dönüştürürüz.

Düzenleme: 2 bayt ayırdığınız için @Likonik'e teşekkürler! Ben "üç argüman alan operatör" meselesinin tümüne alışık değilim


1
(['A'..'Z']#w)['𝗮'..]olabilir ['A'..'Z']#w$['𝗮'..].
Laikoni,


3

Retina , 84 bayt

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

Çevrimiçi deneyin! Açıklama: Retina bir .NET uygulamasıdır ve bu nedenle UTF-16'da dahili olarak çalışır. Maalesef Math Sans karakterleri BMP'de olmadığı için, kod noktalarının sayısı farklı olduğu için onları doğrudan çeviremiyorum. Daha da kötüsü, eşleştirilmemiş suretler kullanamıyorum. Bunun yerine, uygun kelimeleri 0xFF-0x7FFkodlamak için sadece iki byte alan aralıktaki karakterlere kaydırıyorum, ayrıca 0x135karakterleri de ön ekliyorum . Sonunda, bu aralığı eşlenmemiş vekillerle örtüşen bir aralıkla eşleştirerek geçerli BMP çiftleri oluşturuyorum.


3

Python 3, 173 122 120 bayt

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'dan gelen bayt sayısı

Abccd'den -2 bayt

Çevrimiçi deneyin!

Sınırları ( re.split(r'\b(\w+)\b',s)) böler , daha sonra küçük harfleri 𝗅𝗈𝗐𝖾𝗋𝖼𝖺𝗌𝖾 𝗆𝖺𝗍𝗁 𝗌𝖺𝗇𝗌 ( +120153*t.islower()) ile eşleştirir ve büyük harfleri 𝗯𝗼𝗹𝗱 𝗺𝗮𝘁𝗵 maps ( +120237*t.isupper()) ile eşleştirir ve karışık harfli kelimeleri tek başına bırakır, sonra joinkelimeleri geri alır.

Ungolfed ve 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

Bir değişkeni üst veya alt olmasına bağlı olarak 120237 veya 120153 olarak ayarlarsanız daha az bayt olabilir mi? Olabilir gibi görünüyor
pfg

1
@pfg Gerçekten, 13 byte'ı ( 160'a kadar ) kolayca tıraş edebilirsiniz .
ShreevatsaR

pfg Aslında, harita-lambda'yı değiştirmek (okunması kolay) anlamalarla onu 149 bayta indiriyor .
ShreevatsaR

5
122 :-) Burada duracağım; golf oynamanın daha kolay okunmasını sağladığı için gurur duyuyor. Sadece Python'da!
ShreevatsaR

2
-2 önce boşluklardan kurtularakfor
abccd

3

Japt , 34 33 32 31 bayt

En sondan sonra yazdırılamaz (kod 153) içerir #.

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

Dene


açıklama

                        :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

Orijinal 32 Byte Japt v2 Çözümü

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

Dene

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
Bir XXD dökümü eklemek ister misiniz?
Stan Strum,

Bir tersinir hexdump? Yazdırılamayanlar için.
Stan Strum,


1

JavaScript (ES6), 99 114 113 bayt

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

(İlk çözümümdeki önemli noktayı gösterdiği için pfg'a teşekkürler.)

@Neil sayesinde -1 bayt.

Pasaj:


Bu yalnızca kullanmak gerekir saf JS ile bunu yapmak için, çünkü & # HTML'sinde ile çalışır String.fromCodePoint(120237)boyutu artıracak
PFG

Henüz bunu takma, ama daha sonra geri döneceğim, teşekkürler.
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)))saf JS çalışır ancak çok fazla bayt ekler
pfg

Ah, anladım! Daggum.
Rick Hitchcock

3
Kullanılarak 1 byte tasarruf charCodeAt()olmadan 0.
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.