pengantar
Cobalah untuk mengubah kata-kata menjadi dua font unicode yang berbeda.
Tantangan
Tugas Anda adalah mengubah string masukan Anda menjadi karakter unicode 𝖬𝖺𝗍𝗁 𝖲𝖺𝗇𝗌 dan 𝗠𝗮𝘁𝗵 𝗦𝗮𝗻𝘀 𝗕𝗼𝗹𝗱.
Semua huruf besar harus menjadi huruf kecil 𝗠𝗮𝘁𝗵 𝗦𝗮𝗻𝘀 𝗕𝗼𝗹𝗱 kata-kata.
- Sebagai Contoh:
WORD
->𝘄𝗼𝗿𝗱
Semua kata kecil harus menjadi kata 𝖬𝖺𝗍𝗁 𝖲𝖺𝗇𝗌
- Misalnya:
other words
->𝗈𝗍𝗁𝖾𝗋 𝗐𝗈𝗋𝖽𝗌
Semua kata campuran harus tetap tidak berubah
- Misalnya:
Mixed Case Words
->Mixed Case Words
Periode dan ruang harus tetap tidak berubah.
Kata-kata dipisahkan oleh spasi atau titik
- Misalnya (hal-hal yang disorot adalah kata-kata):
Hello
.This
is
a
word
.S
.O
.are
these
- Input: String yang berisi huruf, spasi, dan titik (
[A-Za-z .]+
) - Output: String yang diformat
Karena ini adalah tantangan golf, jumlah byte terendah menang
Contoh Input dan Output
Memasukkan:
Ini adalah contoh STRING yang dapat INPUTTED. Itu dapat MENGANDUNG beberapa kalimat.
Keluaran:
Ini 𝗂𝗌 𝖺𝗇 𝖾𝗑𝖺𝗆𝗉𝗅𝖾 𝘀𝘁𝗿𝗶𝗻𝗴 𝗍𝗁𝖺𝗍 𝖼.𝗈.𝘂.𝗹.𝖽. 𝖻𝖾 𝗶𝗻𝗽𝘂𝘁𝘁𝗲𝗱. Itu 𝖼𝖺𝗇 𝗰𝗼𝗻𝘁𝗮𝗶𝗻 𝗆𝗎𝗅𝗍𝗂𝗉𝗅𝖾 𝗌𝖾𝗇𝗍𝖾𝗇𝖼𝖾𝗌.
Referensi
Math Sans Bold: 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇 (karakter 120302 hingga 120327)
Math Sans: 𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓 (karakter 120250 hingga 120275)
Jawaban:
QuadR ,
4543 byte-2 Terima kasih kepada ngn.
Karena TIO mengacak keluaran Unicode dari QuadR, berikut adalah screenshot menggunakan QuadR sebagai pustaka APL dalam sesi interaktif:
\w+
ganti kata-kata dengan hasil menerapkan kode berikut ini kepada mereka:⍵M
kata yang ditemukan bahwa⎕UCS
kode U niversal C haracter S et menunjuka←
toko itu yang padaa
96>
0 atau 1 untuk apakah 96 lebih besar dari masing-masing∪
mengambil hanya yang unik;[0]
atau[1]
atau[0,1]
atau[1,0]
b←
menyimpan yang dib
⊃
pilih yang pertama dari yang84×
kalikan 84 dengan yang120153+
menambahkan 120153 untuk itu(
...)×
kalikan yang berikut dengan itu:≢b
penghitungan (panjang) darib
(1
jika satu kasus,2
jika kasus campuran)2>
0 atau 1 untuk apakah dua adalah lebih besar dari itu (1
jika satu kasus,0
jika kasus campuran)a+
poin kode asli ditambahkan ke itu⎕UCS
mengkonversi kode yang dihasilkan poin kembali ke karaktersumber
APL (Dyalog Unicode) ,
635753 byte-6 Terima kasih kepada Erik the Outgolfer. -4 Terima kasih kepada ngn.
Fungsi awalan diam-diam anonim.
Karena TIO mengacak output Unicode dari Dyalog APL, berikut adalah tangkapan layar dari kode yang sedang digunakan:
'\w+'⎕R
PCRE R eplace kata-kata dengan hasil menerapkan berikut ...{
...}
lambda anonim:⍵.Match
kata yang ditemukan⎕UCS
yang U niversal C haracter S et kode poin itua←
simpan dia
96>
0 atau 1 untuk apakah 96 lebih besar dari masing-masing∪
ambil saja yang unik;[0]
atau[1]
atau[0,1]
atau[1,0]
b←
simpan dib
⊃
pilih yang pertama dari itu84×
kalikan 84 dengan itu120153+
tambahkan 120153 ke sana(
...)×
gandakan yang berikut dengan itu:≢b
penghitungan (panjang) darib
(1
jika satu kasus,2
jika kasus campuran)2>
0 atau 1 untuk apakah dua lebih besar dari itu (1
jika kasing tunggal,0
kasing campuran)a+
poin kode asli ditambahkan ke dalamnya⎕UCS
mengkonversi kode yang dihasilkan poin kembali ke karaktersumber
'\b([A-Z]+|[a-z]+)\b'⎕R{⎕UCS(⎕UCS+120153+84×∊∘⎕A)⍵.Match}
\w+
dan menghitung jumlah untuk ditambahkan ke codepoint di dfn:'\w+'⎕R{⎕UCS a+(2>≢b)×120153+84×⊃b←∪96>a←⎕UCS⍵.Match}
Bersih ,
268265232224 byteSebagai bonus yang rapi, ini berfungsi dengan string yang berisi karakter apa pun . Termasuk nol.
Cobalah online!
Menentukan fungsi
@
, mengambilUString
dan mengembalikan aUString
sumber
C, 292 karakter, 448 byte (dalam UTF-8)
Cobalah online!
Belum dibuka:
sumber
Java 8,
221219203201 byteSaya harus menggunakan
StringBuffer
bukan biasaString
untuk menggunakan.appendCodePoint
, sayangnya ..Penjelasan:
Cobalah online.
sumber
Haskell ,
172170 byteCobalah online!
Cukup mudah. The
#
Operator mengambil sets
dari charcters (atas atau huruf kecil) kataw
, dan matematika sans setr
. Ini mengembalikan kata dalam font sans matematika jika semua karakter dalam kata berada dis
atau daftar kosong sebaliknya. Thet
fungsi mengambil kata dan mencoba semua tiga possiblities (semua atas, semua yang lebih rendah, atau campuran), kembali yang pertama yang tidak kosong. Thef
Fungsi menemukan kata pertama dengan menggunakanspan
, mengubahnya dengant
dan concatenating dengan pemisah (baik.
atau ruang) dan berulang pada sisa string. Kasing alternatif adalah jika rentang tidak dapat menemukan pemisah; kami hanya mengubah string.Sunting: Terima kasih kepada @Laikoni karena melepaskan 2 byte! Saya tidak terbiasa dengan keseluruhan "operator yang membutuhkan tiga argumen"
sumber
(['A'..'Z']#w)['𝗮'..]
bisa['A'..'Z']#w$['𝗮'..]
.Jelly , 34 byte
Cobalah online!
Program lengkap.
sumber
Retina , 84 byte
Cobalah online! Penjelasan: Retina adalah aplikasi .NET dan karenanya berfungsi di UTF-16 secara internal. Sayangnya karena karakter Math Sans tidak ada dalam BMP, saya tidak bisa langsung mentransliterasinya karena jumlah titik kode berbeda. Lebih buruk lagi, saya tidak bisa menggunakan pengganti yang tidak berpasangan sama sekali. Sebagai gantinya, saya menggeser kata-kata yang sesuai menjadi karakter dalam rentang
0xFF-0x7FF
yang dengan mudah hanya membutuhkan dua byte untuk menyandikan, ditambah saya juga mengawali mereka dengan0x135
karakter. Akhirnya saya memetakan rentang itu ke kisaran yang tumpang tindih dengan pengganti yang tidak berpasangan, membuat pasangan BMP yang valid.sumber
Python 3,
173122120 byte-51 byte dari ShreevatsaR
-2 byte dari abccd
Cobalah online!
Membagi pada batas kata (
re.split(r'\b(\w+)\b',s)
), lalu memetakan kata huruf kecil ke 𝗅𝗈𝗐𝖾𝗋𝖼𝖺𝗌𝖾 𝗆𝖺𝗍𝗁 𝗌𝖺𝗇𝗌 (+120153*t.islower()
), dan kata-kata huruf besar menjadi 𝗺𝗮𝘁𝗵 𝗺𝗮𝘁𝗵 𝘀𝗮𝗻𝘀 (+120237*t.isupper()
), dan meninggalkan kata-kata dalam huruf campuran saja, lalujoin
kembali mencadangkan kata-kata.Tidak disatukan dan tidak-lambda-red:
sumber
for
Japt ,
34333231 byteTermasuk yang tidak dicetak (charcode 153) setelah yang terakhir
#
.Cobalah
Penjelasan
Solusi Asli 32 Byte Japt v2
Cobalah
sumber
05AB1E , 33 byte
Cobalah online!
sumber
JavaScript (ES6),
99114113 byte(Terima kasih kepada @pfg karena menunjukkan kelemahan penting dalam solusi pertama saya.)
-1 byte, terima kasih kepada @Neil.
Potongan:
Tampilkan cuplikan kode
sumber
String.fromCodePoint(120237)
yang akan menambah ukuranlet 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)))
berfungsi dengan JS murni tetapi menambahkan banyak byte tambahancharCodeAt()
tanpa0
.