10
\$\begingroup\$

Given a German string and an indication of a case (lower/upper/title), fold the string to that case.

Specifications

  1. Input will consist only of az plus äöüß-,.;:!?'" in uppercase and/or lowercase.
  2. The target case may be taken as any three unique values (please specify what they are) of a consistent type; either three characters, or three numbers, or three bit patterns. (Other formats are currently not allowed to prevent "outsourcing" the answer to the case specification. Comment if you think that an additional format should be allowed.)
  3. Titlecase means uppercase everything except letters that follow a letter (letters are az plus äöüß).

Gotchas

  1. When ß needs to be uppercase, it must become . Some case-folding built-ins and libraries do not do this.

  2. When ß needs to be titlecase, it must become Ss. Some case-folding built-ins and libraries do not do this.

  3. ss may occur in the text, and should never be converted to ß or .

Examples

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

Lower case die Räder sagen "ßß ss" für dich, wegen des Öls!
is die räder sagen "ßß ss" für dich, wegen des öls!

Title case die Räder sagen "ßß ss" für dich, wegen des Öls!
is Die Räder Sagen "Ssß Ss" Für Dich, Wegen Des Öls!

\$\endgroup\$
16
  • 2
    \$\begingroup\$ What would be the outputs for Ss? Also, the example input is missing a ss \$\endgroup\$
    – Rod
    Jan 11, 2018 at 14:48
  • \$\begingroup\$ @Rod SS Ss ss. Can you tell me why that's unclear? \$\endgroup\$
    – Adám
    Jan 11, 2018 at 15:00
  • \$\begingroup\$ Related \$\endgroup\$
    – Poke
    Jan 11, 2018 at 15:02
  • \$\begingroup\$ Am I allowed to make the three unique values Python functions? (see my answer) \$\endgroup\$
    – hyper-neutrino
    Jan 11, 2018 at 15:05
  • \$\begingroup\$ No, that's exactly what intended to prevent by specifying that the three unique values must be either characters, numbers or bit patterns. \$\endgroup\$
    – Adám
    Jan 11, 2018 at 15:20

5 Answers 5

6
\$\begingroup\$

Japt, 42 40 bytes

Saved 2 bytes thanks to @Oliver

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

Whew, that took quite some effort. Input is the string to convert, and a single character: u for uppercase, v for lowercase, m for title case.

Test it online!

\$\endgroup\$
2
  • \$\begingroup\$ Do you need the }0? \$\endgroup\$
    – Oliver
    Jan 12, 2018 at 15:55
  • \$\begingroup\$ @Oliver Yeah, otherwise it'll... wait, maybe not... \$\endgroup\$ Jan 12, 2018 at 17:35
4
\$\begingroup\$

Python 3, 92 bytes

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

Try it online!

\$\endgroup\$
2
  • \$\begingroup\$ Oh no! Unfortunately, that's a significant part of the challenge. \$\endgroup\$ Jan 11, 2018 at 18:44
  • \$\begingroup\$ @EriktheOutgolfer fixed, thanks \$\endgroup\$
    – hyper-neutrino
    Jan 11, 2018 at 20:17
3
\$\begingroup\$

05AB1E, 23 bytes

Uses 0 = lower, 1 = upper, 2 = title

•^ŠX•4ôçIiR}`:"lu™"¹è.V

Try it online!

\$\endgroup\$
0
3
\$\begingroup\$

Jelly, 50 bytes

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

Try it online!

Full program.

Phew, this took much time to golf...

Argument 1: String (may need to be escaped)
Argument 2: 1 for uppercase, 2 for title case, 3 for lowercase.

\$\endgroup\$
1
\$\begingroup\$

Clean, 649 279 275 274 246 bytes

Yes, that's 123 122 94 bytes of imports, which is already longer than every other answer.

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

Try it online!

Defines the function @, taking an Int and a UString, and returning a UString.
Conveniently, UString (Clean's default way of handling Unicode), is just a type alias for [Int] - which is a list of Int containing unicode codepoints of the characters in the string.
Inconveniently, Text.Unicode.UChar is really long, and I can't import StdEnv because the definitions in StdChar conflict with the definitions in Text.Unicode.UChar (as they are not intended for use together).

The three values are 0, 1, and 2 for Upper, Lower, and Title case.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.