Case-fold allemand

9

Étant donné une chaîne allemande et une indication d'un cas (bas / haut / titre), pliez la chaîne à ce cas.

Caractéristiques

  1. L'entrée consistera uniquement en a- zplus äöüß-,.;:!?'"en majuscules et / ou en minuscules.
  2. Le cas cible peut être considéré comme trois valeurs uniques (veuillez préciser quelles sont) d'un type cohérent; soit trois caractères, soit trois chiffres, soit des motifs à trois bits. (Les autres formats ne sont actuellement pas autorisés pour empêcher la «sous-traitance» de la réponse à la spécification de cas. Commentez si vous pensez qu'un format supplémentaire devrait être autorisé.)
  3. Titlecase signifie tout en majuscules, sauf les lettres qui suivent une lettre (les lettres sont a- zplus äöüß).

Gotchas

  1. Quand ßdoit être en majuscule, il doit le devenir . Certaines bibliothèques et bibliothèques intégrées de pliage de cas ne le font pas.

  2. Lorsque ßdoit être titlecase, il doit devenir Ss. Certaines bibliothèques et bibliothèques intégrées de pliage de cas ne le font pas.

  3. sspeut apparaître dans le texte et ne doit jamais être converti en ßou .

Exemples

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

Les minuscules die Räder sagen "ßß ss" für dich, wegen des Öls!
sont die räder sagen "ßß ss" für dich, wegen des öls!

La casse du titre die Räder sagen "ßß ss" für dich, wegen des Öls!
estDie Räder Sagen "Ssß Ss" Für Dich, Wegen Des Öls!

Adam
la source
2
Quelles seraient les sorties Ss? En outre, il manque un exemple d'entréess
Rod
@Rod SS Ss ss. Pouvez-vous me dire pourquoi cela n'est pas clair?
2018
Suis-je autorisé à créer les trois valeurs uniques des fonctions Python? (voir ma réponse)
HyperNeutrino
Non, c'est exactement ce que l'on voulait empêcher en spécifiant que les trois valeurs uniques doivent être soit des caractères, des nombres ou des modèles de bits.
Adám

Réponses:

6

Japt , 42 40 octets

Enregistré 2 octets grâce à @Oliver

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

Ouf, cela a demandé pas mal d'efforts. L'entrée est la chaîne à convertir et un seul caractère: upour les majuscules, vpour les minuscules, mpour la casse du titre.

Testez-le en ligne!

ETHproductions
la source
Avez-vous besoin du }0?
Oliver
@Oliver Ouais, sinon ça va ... attendre, peut-être pas ...
ETHproductions
4

Python 3 , 92 octets

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

Essayez-le en ligne!

HyperNeutrino
la source
Oh non! Malheureusement, c'est une partie importante du défi.
Erik the Outgolfer le
@EriktheOutgolfer corrigé, merci
HyperNeutrino
3

Gelée , 50 octets

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

Essayez-le en ligne!

Programme complet.

Ouf, ça a pris beaucoup de temps au golf ...

Argument 1: chaîne (il peut être nécessaire de l'échapper)
Argument 2: 1pour les majuscules, 2pour la casse du titre, 3pour les minuscules.

Erik le Outgolfer
la source
1

Propre , 649 279 275 274 246 octets

Oui, c'est 123 122 94 octets d'importations, ce qui est déjà plus long que toutes les autres réponses.

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

Essayez-le en ligne!

Définit la fonction @, en prenant un Intet un UStringet en retournant un UString.
De manière pratique, UString(la méthode par défaut de Clean pour gérer Unicode), est juste un alias de type pour [Int]- qui est une liste Intcontenant les points de code Unicode des caractères de la chaîne.
Inconvénient , Text.Unicode.UCharc'est vraiment long, et je ne peux pas import StdEnvparce que les définitions sont en StdCharconflit avec les définitions de Text.Unicode.UChar(car elles ne sont pas destinées à être utilisées ensemble).

Les trois valeurs sont 0, 1 et 2 pour les majuscules, les minuscules et les majuscules.

Οurous
la source