फोनीमिक अबुगीदा


12

पात्र

चलो इन यूनिकोड वर्णों को अंग्रेजी IPA व्यंजन कहते हैं :

bdfhjklmnprstvwzðŋɡʃʒθ

और चलो इन यूनिकोड वर्णों को अंग्रेजी IPA स्वर कहते हैं :

aeiouæɑɔəɛɜɪʊʌː

(हां, ːसिर्फ लंबा स्वर चिह्न है, लेकिन इस चुनौती के उद्देश्य के लिए इसे एक स्वर के रूप में माना जाता है।)

अंत में, ये प्राथमिक और द्वितीयक तनाव के निशान हैं :

ˈˌ

ध्यान दें कि ɡ( U + 0261 ) कोई लोअरकेस g नहीं है, और प्राथमिक तनाव मार्कर ˈ( U + 02C8 ) एपोस्ट्रोफ नहीं है, और ː( U + 02D0 ) कोई कोलोन नहीं है।

आपका कार्य

एक शब्द को देखते हुए, उनके द्वारा अनुसरण किए जाने वाले व्यंजन के शीर्ष पर स्वरों को स्टैक करें, और उनके पूर्ववर्ती व्यंजन के नीचे तनाव मार्कर रखें। (जैसा कि प्रश्न शीर्षक संकेत देता है, इस तरह की एक लेखन प्रणाली, जहां व्यंजन-स्वर अनुक्रम एक इकाई के रूप में एक साथ पैक किए जाते हैं, को एबगिडा कहा जाता है ।) इनपुट को देखते हुए ˈ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
ˌ  ˌ ˌ   ˌ  ˌ    ˈ  

प्रारंभिक डिप्थॉन्ग के साथ एक बकवास उदाहरण, बहुत सारे स्टैकिंग, और कोई तनाव मार्कर नहीं: eɪbaeioubaabaaaबन जाता है

 u
 o
 i a
 eaa
ɪaaa
ebbb

संदर्भ कार्यान्वयन

आपके प्रोग्राम को इस पाइथन स्क्रिप्ट के समान आउटपुट का उत्पादन करना चाहिए:

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 एन्कोडिंग का उपयोग करें।

  • आप एक स्ट्रिंग का निर्माण कर सकते हैं जिसमें newlines, या पंक्तियों का प्रतिनिधित्व करने वाले तार की एक सूची या यूनिकोड वर्णों की एक सरणी हो।

  • आउटपुट की प्रत्येक पंक्ति में अनुगामी रिक्त स्थान की कोई भी राशि हो सकती है। यदि आप एक स्ट्रिंग का उत्पादन करते हैं, तो इसमें एक एकल अनुगामी न्यूलाइन हो सकती है।

  • आपके कार्यक्रम को मनमाने ढंग से लंबे स्वर श्रृंखलाओं के साथ मनमाने ढंग से लंबे शब्दों के लिए सही उत्पादन करना चाहिए, लेकिन यह मान सकते हैं कि इनपुट शब्द हमेशा मान्य है।

  • यदि कोई तनाव मार्कर नहीं हैं, तो आपका आउटपुट वैकल्पिक रूप से एक अंतिम खाली पंक्ति (जिसमें कुछ भी नहीं है, या रिक्त स्थान हो सकता है) शामिल हो सकता है।

  • सबसे छोटा जवाब (बाइट्स में) जीतता है।


गरीब ɜ, आपने इसे छोड़ दिया है :-) और ब्रिटिश उनके बारे में शिकायत करेंगेɒ
लुइस मेंडो सेप

उफ़, मैंने किया! मैंने जोड़ा ɜ, इसलिए यह अब एक पूर्ण सामान्य अमेरिकी स्वर सेट होना चाहिए।
लिन

इनमें से किन्हीं भी वर्णों की घटनाओं को केवल एक बाइट के रूप में गिना जाता है, जो कि किसी भी भाषा में उनके कोड आधार की परवाह किए बिना प्रतिस्पर्धा की गोल्फ भाषाओं के बीच संतुलन बनाने के लिए उपयोग की जाती है या चुनौती का हिस्सा है, आपकी राय में, यह जानने के लिए कि कौन सी भाषा वास्तव में प्रदर्शन कर सकती है यह कम से कम बाइट्स, अवधि में है?
जोनाथन एलन

क्या एक व्यंजन के बाद स्वर की अधिकतम संख्या है जिसे हमारे कार्यक्रम को पहचानना चाहिए? यदि टेस्ट केस नहीं जोड़ा जाता है, जैसे biiiiiiiiiiiʒ("
बीज़

1
@JonathanAllan उत्तरार्द्ध; यूनिकोड I / O चुनौती का हिस्सा है। मैं उस बारे में एक नोट जोड़ूंगा।
लिन

जवाबों:


2

NARS2000 APL, 138 बाइट्स

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

⍞←आउटपुट के निहित होने पर आप प्रारंभिक को हटा सकते हैं । इसके अलावा, बाइट की गिनती वर्ण गणना से दुगनी होनी चाहिए, जैसा कि यह है । तो यह 138 बाइट्स होना चाहिए।
अडाम

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

प्रत्येक पंक्ति के लिए एक सरणी के साथ यूनिकोड वर्णों की एक सरणी लौटाता है (प्रत्येक स्थान के लिए एकल स्थान युक्त)

निश्चित नहीं है कि कोई व्यक्ति अभी तक ऑनलाइन आउटपुट कैसे प्राप्त कर सकता है (और मुझे इसे यहां ठीक से जांचने के लिए उपकरण भी नहीं मिले हैं)।
मैंने आइडोन के लिए एक संस्करण लोड किया है जो सिर्फ अंग्रेजी व्यंजन और स्वर के साथ ,और .तनाव के निशान के रूप में उपयोग करता है, जहां मैंने परीक्षण के मामलों को मूर्त रूप दिया है।


1

जावास्क्रिप्ट (ईएस 6), 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>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.