Case-fold German

9

Dada uma string alemã e uma indicação de maiúsculas e minúsculas (inferior / superior / título), dobre a string nesse caso.

Especificações

  1. A entrada consistirá apenas de a- zmais äöüß-,.;:!?'"em maiúsculas e / ou minúsculas.
  2. O caso de destino pode ser considerado como três valores únicos (especifique o que são) de um tipo consistente; três caracteres ou três números ou padrões de três bits. (Atualmente, outros formatos não estão autorizados a impedir a "terceirização" da resposta à especificação do caso. Comente se você acha que um formato adicional deve ser permitido.)
  3. Titlecase significa tudo em maiúsculas, exceto as letras que seguem uma letra (as letras são a- zmais äöüß).

Pegadinhas

  1. Quando ßprecisa estar em maiúsculas, deve se tornar . Algumas embutidas e bibliotecas dobráveis ​​em maiúsculas não fazem isso.

  2. Quando ßprecisa ser um titlecase, ele deve se tornar Ss. Algumas embutidas e bibliotecas dobráveis ​​em maiúsculas não fazem isso.

  3. sspode ocorrer no texto e nunca deve ser convertido para ßou .

Exemplos

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

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

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

Adão
fonte
2
Para que seriam os resultados Ss? Além disso, a entrada de exemplo está faltando ass
Rod
@Rod SS Ss ss. Você pode me dizer por que isso não está claro?
Adám
Posso criar os três valores exclusivos de funções Python? (ver minha resposta)
HyperNeutrino
Não, é exatamente isso que pretende impedir especificando que os três valores exclusivos devem ser caracteres, números ou padrões de bits.
Adám 11/01/19

Respostas:

6

Japt , 42 40 bytes

Guardado 2 bytes graças a @Oliver

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

Ufa, isso exigiu bastante esforço. Entrada é a sequência a ser convertida e um único caractere:u para maiúsculas, vminúsculas e mmaiúsculas.

Teste online!

ETHproductions
fonte
Você precisa do }0?
Oliver
@Oliver Sim, caso contrário ele vai ... espera, talvez não ...
ETHproductions
4

Python 3 , 92 bytes

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

Experimente online!

HyperNeutrino
fonte
Ah não! Infelizmente, essa é uma parte significativa do desafio.
Erik the Outgolfer
@EriktheOutgolfer corrigido, obrigado
HyperNeutrino 11/01
3

Geléia , 50 bytes

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

Experimente online!

Programa completo.

Ufa, isso levou muito tempo para jogar golfe ...

Argumento 1: String (pode precisar ser escapado)
Argumento 2: 1para maiúsculas, 2para maiúsculas e 3minúsculas.

Erik, o Outgolfer
fonte
1

Limpos , 649 279 275 274 246 bytes

Sim, são 123 122 94 bytes de importações, que já são mais longos do que qualquer outra resposta.

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

Experimente online!

Define a função @, obtendo um Inte a UString, e retornando a UString.
Convenientemente, UString(a maneira padrão do Clean de lidar com Unicode), é apenas um alias de tipo para [Int]- que é uma lista de Intpontos de código unicode contendo os caracteres na string.
Inconvenientemente , Text.Unicode.UCharé realmente longo, e não posso, import StdEnvporque as definições estão em StdCharconflito com as definições emText.Unicode.UChar (pois elas não se destinam ao uso conjunto).

Os três valores são 0, 1 e 2 para maiúsculas, minúsculas e título.

Furioso
fonte