Чехол-фолд немецкий

9

Учитывая немецкую строку и указание регистра (нижний / верхний / заголовок), сложите строку в этот регистр.

Характеристики

  1. Ввод будет состоять только из a- zплюс äöüß-,.;:!?'"в верхнем и / или нижнем регистре.
  2. Целевой случай может быть принят за любые три уникальных значения (пожалуйста, укажите, какие они) согласованного типа; либо три символа, либо три числа, либо три бита. (Другие форматы в настоящее время не позволяют предотвратить «аутсорсинг» ответа на спецификацию случая. Прокомментируйте, если вы считаете, что дополнительный формат должен быть разрешен.)
  3. Заголовок означает все прописные буквы, кроме букв, следующих за буквой (буквы a- zплюс äöüß).

Gotchas

  1. Когда ßдолжно быть в верхнем регистре, оно должно стать . Некоторые встроенные модули и библиотеки не делают этого.

  2. Когда ßдолжен быть titlecase, он должен стать Ss. Некоторые встроенные модули и библиотеки не делают этого.

  3. ssможет встречаться в тексте и никогда не должен быть преобразован в ßили .

Примеры

Верхний регистр die Räder sagen "ßß ss" für dich, wegen des Öls!
являетсяDIE RÄDER SAGEN "ẞẞ SS" FÜR DICH, WEGEN DES ÖLS!

Нижний корпус die Räder sagen "ßß ss" für dich, wegen des Öls!
является die räder sagen "ßß ss" für dich, wegen des öls!

Название случай die Räder sagen "ßß ss" für dich, wegen des Öls!
являетсяDie Räder Sagen "Ssß Ss" Für Dich, Wegen Des Öls!

Адам
источник
2
Для чего будут выходы Ss? Кроме того, отсутствует пример вводаss
Род
@Rod SS Ss ss. Можете ли вы сказать мне, почему это неясно?
Адам
Могу ли я сделать три уникальных значения функций Python? (см. мой ответ)
HyperNeutrino
Нет, это именно то, что намеревалось предотвратить, указав, что три уникальных значения должны быть символами, числами или битовыми комбинациями.
Адам

Ответы:

6

Japt , 42 40 байт

Сохранено 2 байта благодаря @Oliver

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

Уфф, это заняло довольно много усилий. Ввод - это строка для преобразования и один символ: uдля верхнего регистра, vдля нижнего регистра, mдля регистра.

Проверьте это онлайн!

ETHproductions
источник
Вам нужен }0?
Оливер
@ Оливер Да, иначе ... подожди, а может и нет ...
ETHproductions
4

Python 3 , 92 байта

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

Попробуйте онлайн!

HyperNeutrino
источник
о нет! К сожалению, это значительная часть проблемы.
Эрик Outgolfer
@EriktheOutgolfer исправлено, спасибо
HyperNeutrino
3

Желе , 50 байт

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

Попробуйте онлайн!

Полная программа.

Фу, это заняло много времени в гольф ...

Аргумент 1: строка (может потребоваться экранировать)
Аргумент 2: 1для прописных букв, 2для заглавных букв , 3для строчных.

Эрик Аутгольфер
источник
1

Чистый , 649 279 275 274 246 байт

Да, это 123 122 94 байта импорта, что уже больше, чем любой другой ответ.

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

Попробуйте онлайн!

Определяет функцию @, беря a Intи a UStringи возвращая a UString.
Удобно, UString(способ очистки по умолчанию Юникода Clean по умолчанию), это просто псевдоним типа для [Int]- который содержит список Intкодовых точек Юникода символов в строке.
Неудобно , Text.Unicode.UCharэто действительно долго, и я не могу, import StdEnvпотому что определения StdCharконфликтуют с определениями в Text.Unicode.UChar(так как они не предназначены для совместного использования).

Три значения: 0, 1 и 2 для верхнего, нижнего и заглавного регистра.

Οurous
источник