Alemán plegable

9

Dada una cadena alemana y una indicación de un caso (inferior / superior / título), doble la cadena a ese caso.

Especificaciones

  1. La entrada consistirá solo en a- zmás äöüß-,.;:!?'"en mayúsculas y / o minúsculas.
  2. El caso objetivo puede tomarse como tres valores únicos (especifique cuáles son) de un tipo consistente; ya sea tres caracteres, o tres números, o patrones de tres bits. (Actualmente, otros formatos no están permitidos para evitar "externalizar" la respuesta a la especificación del caso. Comente si cree que debería permitirse un formato adicional).
  3. Titlecase significa todo en mayúscula excepto las letras que siguen a una letra (las letras son a- zmás äöüß).

Gotchas

  1. Cuando ßnecesita ser mayúscula, debe convertirse . Algunas bibliotecas y empotrados plegables no hacen esto.

  2. Cuando ßnecesita ser un título, debe convertirse Ss. Algunas bibliotecas y empotrados plegables no hacen esto.

  3. sspuede aparecer en el texto y nunca se debe convertir a ßo .

Ejemplos

Mayúscula die Räder sagen "ßß ss" für dich, wegen des Öls!
esDIE RÄDER SAGEN "ẞẞ SS" FÜR DICH, WEGEN DES ÖLS!

Minúscula die Räder sagen "ßß ss" für dich, wegen des Öls!
es die räder sagen "ßß ss" für dich, wegen des öls!

El caso del título die Räder sagen "ßß ss" für dich, wegen des Öls!
esDie Räder Sagen "Ssß Ss" Für Dich, Wegen Des Öls!

Adán
fuente
2
¿Para qué serían los resultados Ss? Además, falta la entrada de ejemploss
Rod
@ Rod SS Ss ss. ¿Me puede decir por qué eso no está claro?
Adám
¿Se me permite hacer los tres valores únicos de las funciones de Python? (ver mi respuesta)
HyperNeutrino
No, eso es exactamente lo que pretendía evitar al especificar que los tres valores únicos deben ser caracteres, números o patrones de bits.
Adám el

Respuestas:

6

Japt , 42 40 bytes

Guardado 2 bytes gracias a @Oliver

r'ßQ=7838d)u mV,@W¦vW=X ?Xv :X¥Q?"Ss":Xu

Menos mal, eso requirió bastante esfuerzo. La entrada es la cadena a convertir y un solo carácter: uen mayúsculas, ven minúsculas, men mayúsculas y minúsculas .

¡Pruébelo en línea!

ETHproducciones
fuente
¿Necesitas el }0?
Oliver
@Oliver Sí, de lo contrario será ... espera, tal vez no ...
ETHproductions
4

Python 3 , 92 bytes

lambda s,c:[str.lower,str.upper,str.title][c](s.replace("ẞ","ß").replace("ß"*c,"ẞ"*c))

Pruébalo en línea!

Hiperneutrino
fuente
¡Oh no! Desafortunadamente, esa es una parte importante del desafío.
Erik the Outgolfer
@EriktheOutgolfer solucionado, gracias
HyperNeutrino
3

Jalea , 50 bytes

⁽ñWỌ”ß;y⁸Œu
Ñ⁾SsÇ⁼?€1¦”ß
Œl
Çe€“Ġẹṇṣ‘ỌÇ;Øa¤Œg⁸ṁ⁹Ŀ€

Pruébalo en línea!

Programa completo

Uf, esto tomó mucho tiempo para jugar golf ...

Argumento 1: Cadena (puede ser necesario escapar)
Argumento 2: 1para mayúsculas, 2para mayúsculas y 3minúsculas.

Erik el Outgolfer
fuente
1

Limpias , 649 279 275 274 246 bytes

Sí, eso es 123 122 94 bytes de importación, que ya es más largo que cualquier otra respuesta.

from StdList import++,map,flatten
import StdLib,StdInt,StdBool,Text.Unicode,Text.Unicode.UChar
$ =fromInt
? =isAlpha
^ =toUpper
@0s=map^s
@1s=map toLower s
@2s=flatten(map(\[h:t]=if($223==h||h> $999)[$83,$115][^h]++ @1t)(groupBy(\a b= ?a== ?b)s))

Pruébalo en línea!

Define la función @, tomando a Inty a UString, y devolviendo a UString.
Convenientemente, UString(la forma predeterminada de Clean de manejar Unicode), es solo un alias de tipo para [Int], que es una lista de Intpuntos de código Unicode que contienen los caracteres en la cadena.
Inconvenientemente , Text.Unicode.UChares realmente largo, y no puedo import StdEnvporque las definiciones están en StdCharconflicto con las definiciones en Text.Unicode.UChar(ya que no están destinadas a usarse juntas).

Los tres valores son 0, 1 y 2 para mayúsculas, minúsculas y título.

Οurous
fuente