음소 아부이다


12

캐릭터

이 유니 코드 문자를 영어 IPA 자음 이라고하겠습니다 .

bdfhjklmnprstvwzðŋɡʃʒθ

이 유니 코드 문자를 영어 IPA 모음 이라고하겠습니다 .

aeiouæɑɔəɛɜɪʊʌː

(예, ː긴 모음 표시 일 뿐이지 만이 문제를 해결하기 위해 모음으로 취급합니다.)

마지막으로, 이는 1 차 및 2 차 응력 표시입니다 .

ˈˌ

주의 ɡ( U + 0261는 ) 소문자 g없고, 응력 차 마커 ˈ( U + 02C8는 ) 아포스트로피없고, ː( U + 02D0는 ) 콜론 아니다.

당신의 작업

단어가 주어지면, 따라 오는 자음 위에 모음을 쌓고 그 앞에있는 자음 아래에 스트레스 표식을 놓습니다. 질문 제목 힌트로서 자음 모음 시퀀스가 ​​하나의 단위로 함께 묶여있는 쓰기 시스템을 abugida 라고합니다 . 입력이 주어지면 ˈbætəlʃɪp출력을 생성합니다.

æə ɪ
btlʃp
ˈ

단어는 앞에서 정의한 바와 같이, 자음, 모음, 스트레스 마크의 문자열로 보장됩니다. 연속적인 스트레스 표시는 없으며 항상 단어의 시작 및 / 또는 자음 앞에 배치 됩니다.

테스트 사례

모음이 연속되어있을 수 있습니다. 예를 들어, kənˌɡrætjʊˈleɪʃən진다

      ɪ
ə  æ ʊeə
knɡrtjlʃn
  ˌ   ˈ

단어가 모음으로 시작하는 경우, 자음과 함께 "기준"에 인쇄 : əˈpiːl이된다

 ː
 i
əpl
 ˈ

초기 스트레스 모음 ˈælbəˌtrɔs이 있는 테스트 사례 :

  ə ɔ 
ælbtrs
ˈ  ˌ  

긴 말 : ˌsuːpərˌkaləˌfrædʒəˌlɪstɪˌkɛkspiːæləˈdoʊʃəs된다

               æ    
ː              ː ʊ  
uə aə æ əɪ ɪɛ  iəoə 
sprklfrdʒlstkkspldʃs
ˌ  ˌ ˌ   ˌ  ˌ    ˈ  

초기 diphthong, 많은 모음 쌓기 및 스트레스 마커 eɪbaeioubaabaaa가 없는 넌센스 예제 :

 u
 o
 i a
 eaa
ɪaaa
ebbb

참조 구현

프로그램은이 Python 스크립트와 동일한 출력을 생성해야합니다.

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

Ideone에서 사용해보십시오.

규칙

  • 함수 또는 전체 프로그램을 작성할 수 있습니다.

  • 프로그램에 유니 코드 문자 / 문자열 유형이있는 경우 입력 및 출력에서이를 사용한다고 가정 할 수 있습니다. 그렇지 않은 경우 또는 STDIN에서 읽고 쓰는 경우 UTF-8 인코딩을 사용하십시오.

  • 줄 바꿈이 포함 된 문자열이나 행을 나타내는 문자열 목록 또는 유니 코드 문자 배열을 생성 할 수 있습니다.

  • 각 출력 행에는 임의의 양의 후행 공백이 포함될 수 있습니다. 문자열을 생성하면 단일 후행 줄 바꿈이있을 수 있습니다.

  • 프로그램은 임의로 긴 모음 체인을 사용하여 임의로 긴 단어에 대해 올바른 출력을 생성해야하지만 입력 단어가 항상 유효한 것으로 가정 할 수 있습니다.

  • 응력 마커가없는 경우 출력에 선택적으로 마지막 빈 행 (아무것도 포함하거나 공백이 없음)이 포함될 수 있습니다.

  • 가장 짧은 답변 (바이트)이 이깁니다.


불쌍한 ɜ, 당신은 그것을 떠났다 :-) 그리고 영국은 그들의에 대해 불평 할 것이다ɒ
Luis Mendo

죄송합니다! 나는을 추가 ɜ했으므로 지금은 전체 일반 미국 모음이되어야합니다.
Lynn

이러한 문자 중 하나가 발생하면 경쟁하는 골프 언어 사이의 균형을 맞추기 위해 또는 어떤 언어가 실제로 수행 할 수 있는지 찾기 위해 코드베이스와 상관없이 사용되는 언어 중 하나의 바이트로만 계산됩니까? 적어도 바이트, 기간?
Jonathan Allan

우리 프로그램이 인식해야 할 자음 뒤에 최대 모음이 있습니까? 다음과 같은 테스트 사례를 추가하지 않으면 biiiiiiiiiiiʒ( "꿀벌이 아닌")
DanTheMan

1
@JonathanAllan 후자; 유니 코드 I / O는 문제의 일부입니다. 그것에 대한 메모를 추가하겠습니다.
Lynn

답변:


2

NARS2000 APL, 138 바이트

⍉⌽⊃E,⍨¨↓∘' '¨∨/¨∊∘M¨E←(1+(W∊M←'ˌˈ')++\W∊'bdfhjklmnprstvwzðŋɡʃʒθ')⊂W←⍞

⍞←출력이 암시 되면 이니셜 을 제거 할 수 있습니다 . 또한, 바이트 수는 정확히 따라 두 번 글자 수,해야 . 따라서 이것은 138 바이트 여야합니다.
Adám

1

파이썬, 222 바이트

(202 자)

import re
def f(s):y=[w[0]in'ˈˌ'and w or' '+w for w in re.split('([ˈˌ]?[bdfhjklmnprstvwzðŋɡʃʒθ]?[aeiouæɑɔəɛɜɪʊʌː]*)',s)[1::2]];return[[x[i-1:i]or' 'for x in y]for i in range(max(len(w)for w in y),0,-1)]

각 행마다 배열이있는 유니 코드 문자 배열을 반환합니다 (필요한 각 공백마다 단일 공백 ​​포함).

어느 곳에서 온라인으로 적절한 출력을 얻을 수 있는지 확실하지 않습니다 (그리고 여기에서도 제대로 테스트 할 수있는 도구가 없습니다).
나는에 버전 넣은 ideone 단지 영어의 자음과 모음을 사용 ,하고 .내가 준수하기 위해 테스트 케이스를 과장되어있는 스트레스 표시로합니다.


1

자바 스크립트 (ES6), 181 바이트

f=
s=>(a=s.match(/[ˈˌ]?.[aeiouæɑɔəɛɜɪʊʌː]*/g).map(s=>/[ˈˌ]/.test(s)?s:` `+s)).map(s=>(l=s.length)>m&&(t=s,m=l),m=0)&&[...t].map(_=>a.map(s=>s[m]||` `,--m).join``).join`
`
;
<input oninput=o.textContent=f(this.value)><pre id=o>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.