Zeichen
Nennen wir diese Unicode-Zeichen englische IPA-Konsonanten :
bdfhjklmnprstvwzðŋɡʃʒθ
Und nennen wir diese Unicode-Zeichen englische IPA-Vokale :
aeiouæɑɔəɛɜɪʊʌː
(Ja, es ː
ist nur das lange Vokalzeichen, aber behandeln Sie es als einen Vokal für den Zweck dieser Herausforderung.)
Schließlich sind dies primäre und sekundäre Spannungsspuren :
ˈˌ
Beachten Sie, dass
ɡ
( U + 0261 ) kein Kleinbuchstabe g ist und der primäre Spannungsmarkerˈ
( U + 02C8 ) kein Apostroph undː
( U + 02D0 ) kein Doppelpunkt ist.
Deine Aufgabe
Stapeln Sie mit einem Wort die Vokale auf die Konsonanten, denen sie folgen, und platzieren Sie die Spannungsmarkierungen unter den Konsonanten, denen sie vorangehen. (Wie der Fragentitel andeutet, wird ein solches Schriftsystem, bei dem Konsonant-Vokal-Sequenzen als Einheit gepackt sind, als Abugida bezeichnet .) Bei gegebener Eingabe ˈbætəlʃɪp
erzeugen Sie die Ausgabe:
æə ɪ
btlʃp
ˈ
Ein Wort besteht garantiert aus einer Reihe von Konsonanten, Vokalen und Betonungszeichen, wie oben definiert. Es wird niemals aufeinanderfolgende Betonungszeichen geben, und sie werden immer am Anfang des Wortes und / oder vor einem Konsonanten platziert.
Testfälle
Es kann aufeinanderfolgende Vokale geben. Zum Beispiel kənˌɡrætjʊˈleɪʃən
wird
ɪ
ə æ ʊeə
knɡrtjlʃn
ˌ ˈ
Wenn ein Wort mit einem Vokal beginnt, drucken Sie es auf der "Grundlinie" mit den Konsonanten: əˈpiːl
wird
ː
i
əpl
ˈ
Ein Testfall mit einem ersten, betonten Vokal: ˈælbəˌtrɔs
wird
ə ɔ
ælbtrs
ˈ ˌ
Ein langes Wort: ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs
wird
æ
ː ː ʊ
uə aə æ əɪ ɪɛ iəoə
sprklfrdʒlstkkspldʃs
ˌ ˌ ˌ ˌ ˌ ˈ
Ein unsinniges Beispiel mit einem anfänglichen Diphthong, viel Vokalstapel und keinen Stressmarkern: eɪbaeioubaabaaa
wird
u
o
i a
eaa
ɪaaa
ebbb
Referenzimplementierung
Ihr Programm sollte dieselbe Ausgabe wie dieses Python-Skript erzeugen:
consonants = 'bdfhjklmnprstvwzðŋɡʃʒθ'
vowels = 'aeiouæɑɔəɛɜɪʊʌː'
stress_marks = 'ˈˌ'
def abugidafy(word):
tiles = dict()
x = y = 0
is_first = True
for c in word:
if c in stress_marks:
tiles[x + 1, 1] = c
elif c in consonants or is_first:
y = 0
x += 1
tiles[x, y] = c
is_first = False
elif c in vowels:
y -= 1
tiles[x, y] = c
is_first = False
else:
raise ValueError('Not an IPA character: ' + c)
xs = [x for (x, y) in tiles.keys()]
ys = [y for (x, y) in tiles.keys()]
xmin, xmax = min(xs), max(xs)
ymin, ymax = min(ys), max(ys)
lines = []
for y in range(ymin, ymax + 1):
line = [tiles.get((x, y), ' ') for x in range(xmin, xmax + 1)]
lines.append(''.join(line))
return '\n'.join(lines)
print(abugidafy(input()))
Regeln
Sie können eine Funktion oder ein vollständiges Programm schreiben.
Wenn Ihr Programm einen Unicode-Zeichen- / String-Typ hat, können Sie davon ausgehen, dass Ein- und Ausgaben diese verwenden. Wenn dies nicht der Fall ist oder Sie von STDIN aus lesen / schreiben, verwenden Sie die UTF-8-Codierung.
Sie können eine Zeichenfolge mit Zeilenumbrüchen oder eine Liste von Zeichenfolgen, die Zeilen darstellen, oder ein Array von Unicode-Zeichen erstellen.
Jede Ausgabezeile kann beliebig viele nachgestellte Leerzeichen enthalten. Wenn Sie eine Zeichenfolge erstellen, wird möglicherweise nur eine Zeile am Zeilenende nachgestellt.
Ihr Programm sollte die richtige Ausgabe für beliebig lange Wörter mit beliebig langen Vokalketten erzeugen, kann jedoch davon ausgehen, dass das Eingabewort immer gültig ist.
Wenn keine Belastungsmarkierungen vorhanden sind, kann Ihre Ausgabe optional eine letzte leere Zeile enthalten (die nichts oder Leerzeichen enthält).
Die kürzeste Antwort (in Bytes) gewinnt.
quelle
ɜ
, du hast es ausgelassen :-) Und die Briten werden sich über ihreɒ
ɜ
, also sollte dies jetzt ein vollständiger allgemeiner amerikanischer Vokal sein.biiiiiiiiiiiʒ
(Wie in "nicht die Bienen")Antworten:
NARS2000 APL, 138 Bytes
quelle
⍞←
wenn die Ausgabe impliziert ist. Auch sollte Byteanzahl genau das Doppelte der Anzahl der Zeichen, wie pro diese . Das sollten also 138 Bytes sein.Python, 222 Bytes
(202 Zeichen)
Gibt ein Array von Unicode-Zeichen mit einem Array für jede Zeile zurück (mit einzelnen Leerzeichen für jedes erforderliche Leerzeichen).
Ich bin mir nicht sicher, wo man noch eine anständige Ausgabe online bekommen kann (und ich habe nicht einmal die Werkzeuge, um sie hier richtig zu testen).
Ich habe eine Version zu ideone geladen , die nur englische Konsonanten und Vokale mit
,
und.
als Stressmarkierungen verwendet, wobei ich die Testfälle durcheinandergebracht habe, um sie anzupassen.quelle
JavaScript (ES6), 181 Byte
quelle