Introducción
Intente convertir palabras a dos fuentes Unicode diferentes.
Reto
Su tarea es transformar su cadena de entrada en los caracteres unicode 𝖬𝖺𝗍𝗁 𝖲𝖺𝗇𝗌 y 𝗠𝗮𝘁𝗵 𝗦𝗮𝗻𝘀 𝗕𝗼𝗹𝗱.
Todas las palabras en mayúscula deben convertirse en minúsculas 𝗠𝗮𝘁𝗵 𝗦𝗮𝗻𝘀 𝗕𝗼𝗹𝗱
- Por ejemplo:
WORD
->𝘄𝗼𝗿𝗱
Todas las palabras en minúsculas deberían convertirse en palabras 𝖬𝖺𝗍𝗁 𝖲𝖺𝗇𝗌
- Por ejemplo:
other words
->𝗈𝗍𝗁𝖾𝗋 𝗐𝗈𝗋𝖽𝗌
Todas las palabras con mayúsculas y minúsculas deben permanecer sin cambios.
- Por ejemplo:
Mixed Case Words
->Mixed Case Words
Los períodos y los espacios deben permanecer sin cambios.
Las palabras están separadas por espacios o puntos.
- Por ejemplo (las cosas resaltadas son palabras):
Hello
.This
is
a
word
.S
.O
.are
these
- Entradas: una cadena que contiene letras, espacios y puntos (
[A-Za-z .]+
) - Salida: la cadena formateada
Como se trata de un desafío de golf, gana el menor número de bytes
Ejemplo de entrada y salida
Entrada:
Este es un ejemplo de STRING que PODRÍA ENTRARSE. Puede contener múltiples oraciones.
Salida:
Esto 𝗂𝗌 𝖺𝗇 𝖾𝗑𝖺𝗆𝗉𝗅𝖾 𝘀𝘁𝗿𝗶𝗻𝗴 𝗍𝗁𝖺𝗍 𝖼.𝗈.𝘂.𝗹.𝖽. 𝖻𝖾 𝗶𝗻𝗽𝘂𝘁𝘁𝗲𝗱. Es 𝖼𝖺𝗇 𝗰𝗼𝗻𝘁𝗮𝗶𝗻 𝗆𝗎𝗅𝗍𝗂𝗉𝗅𝖾 𝗌𝖾𝗇𝗍𝖾𝗇𝖼𝖾𝗌.
Referencia
Math Sans Bold: 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇 (caracteres 120302 a 120327)
Math Sans: 𝖺𝖻𝖼𝖽𝖾𝖿𝗀𝗁𝗂𝗃𝗄𝗅𝗆𝗇𝗈𝗉𝗊𝗋𝗌𝗍𝗎𝗏𝗐𝗑𝗒𝗓 (caracteres 120250 a 120275)
Respuestas:
QuadR ,
4543 bytes-2 gracias a ngn.
Dado que TIO codifica la salida Unicode de QuadR, aquí hay una captura de pantalla del uso de QuadR como una biblioteca APL en una sesión interactiva:
\w+
reemplace las palabras con el resultado de aplicarles el siguiente código:⍵M
la palabra que se encuentra⎕UCS
la U NIVERSAL C r incón dele S et puntos de código de esaa←
tienda que ena
96>
0 o 1 para si 96 es mayor que cada uno de los∪
tomar sólo el único;[0]
o[1]
o[0,1]
o[1,0]
b←
almacenar eso enb
⊃
elegir el primero de ese84×
multiplicar 84 con eso120153+
sumar 120153 a eso(
...)×
multiplicar lo siguiente con eso:≢b
el recuento (longitud) deb
(1
si es un caso,2
si es un caso mixto)2>
0 o 1 para si dos es mayor que eso (1
si es un caso simple,0
si es un caso mixto),a+
el código original apunta a eso⎕UCS
convertir los puntos de código resultantes a caracteresfuente
APL (Dyalog Unicode) ,
635753 bytes-6 gracias a Erik the Outgolfer. -4 gracias a ngn.
Función de prefijo tácito anónimo.
Dado que TIO codifica la salida Unicode de Dyalog APL, aquí hay una captura de pantalla del código en acción:
'\w+'⎕R
PCRE R palabras EColoque con el resultado de aplicar la siguiente ...{
...}
lambda anónima:⍵.Match
la palabra encontrada⎕UCS
la U NIVERSAL C r incón dele S puntos et código de esea←
almacenar eso ena
96>
0 o 1 para saber si 96 es mayor que cada uno de esos∪
toma solo lo único;[0]
o[1]
o[0,1]
o[1,0]
b←
almacenar eso enb
⊃
elige el primero de eso84×
multiplicar 84 con eso120153+
agregue 120153 a eso(
...)×
multiplique lo siguiente con eso:≢b
el recuento (longitud) deb
(1
si está en mayúsculas2
y minúsculas)2>
0 o 1 para saber si dos es mayor que eso (1
si es un caso,0
si es un caso mixto)a+
los puntos de código originales añadidos a eso⎕UCS
convertir los puntos de código resultantes a caracteresfuente
'\b([A-Z]+|[a-z]+)\b'⎕R{⎕UCS(⎕UCS+120153+84×∊∘⎕A)⍵.Match}
\w+
y calcular la cantidad para agregar a los puntos de código en el dfn:'\w+'⎕R{⎕UCS a+(2>≢b)×120153+84×⊃b←∪96>a←⎕UCS⍵.Match}
Limpio ,
268265232224 bytesComo una buena ventaja, esto funciona con cadenas que contienen cualquier personaje. Incluidos nulos.
Pruébalo en línea!
Define la función
@
, tomando aUString
y devolviendo unUString
fuente
C, 292 caracteres, 448 bytes (en UTF-8)
Pruébalo en línea!
Desenrollado:
fuente
Java 8,
221219203201 bytesTengo que usar un en
StringBuffer
lugar de unString
uso regular.appendCodePoint
, desafortunadamente ...Explicación:
Pruébalo en línea.
fuente
Haskell ,
172170 bytesPruébalo en línea!
Bastante sencillo. El
#
operador toma el conjuntos
de caracteres (mayúsculas o minúsculas) la palabraw
y el conjunto matemático sinr
. Devuelve la palabra en la fuente math sans si todos los caracteres de la palabra están ens
la lista vacía o si no. Lat
función toma una palabra e intenta las tres posibilidades (todas superiores, todas inferiores o mixtas), devolviendo la primera que no está vacía. Laf
función encuentra la primera palabra mediante el usospan
, transformándolat
y concatenada con el separador (.
o espacio) y recurriendo en el resto de la cadena. El caso alternativo es para si span no puede encontrar un separador; solo transformamos la cadena.Editar: ¡Gracias a @Laikoni por despegar 2 bytes! No estoy acostumbrado a toda la cosa del "operador que toma tres argumentos"
fuente
(['A'..'Z']#w)['𝗮'..]
puede ser['A'..'Z']#w$['𝗮'..]
.Jalea , 34 bytes
Pruébalo en línea!
Programa completo
fuente
Retina , 84 bytes
Pruébalo en línea! Explicación: Retina es una aplicación .NET y, por lo tanto, funciona internamente en UTF-16. Desafortunadamente, como los caracteres de Math Sans no están en el BMP, no puedo transcribirlos directamente porque la cantidad de puntos de código difiere. Peor aún, no puedo usar sustitutos no apareados en absoluto. En cambio, cambio las palabras apropiadas a caracteres en el rango
0xFF-0x7FF
que convenientemente solo requieren dos bytes para codificar, además también los prefijo con el0x135
carácter. Finalmente, mapeo ese rango en el rango que se superpone a los sustitutos no emparejados, creando pares BMP válidos.fuente
Python 3,
173122120 bytes-51 bytes de ShreevatsaR
-2 bytes de abccd
Pruébalo en línea!
Se divide en los límites de las palabras (
re.split(r'\b(\w+)\b',s)
), luego asigna las palabras en minúsculas a 𝗅𝗈𝗐𝖾𝗋𝖼𝖺𝗌𝖾 𝗆𝖺𝗍𝗁 𝗌𝖺𝗇𝗌 (+120153*t.islower()
), y las palabras en mayúsculas a 𝗯𝗼𝗹𝗱 𝗺𝗮𝘁𝗵 𝘀𝗮𝗻𝘀 (+120237*t.isupper()
), y deja solo las palabras en mayúsculas y minúsculas , luegojoin
las palabras vuelven a aparecer.Sin golf y sin lambda:
fuente
for
Japt ,
34333231 bytesIncluye un no imprimible (charcode 153) después del último
#
.Intentalo
Explicación
Solución original de 32 bytes Japt v2
Intentalo
fuente
05AB1E , 33 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
99114113 bytes(Gracias a @pfg por señalar una falla importante en mi primera solución).
-1 bytes gracias a @Neil.
Retazo:
Mostrar fragmento de código
fuente
String.fromCodePoint(120237)
lo que aumentaría el tamañolet 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)))
funciona JS puro pero agrega muchos bytes adicionalescharCodeAt()
sin el0
.