สุริยวรมันที่ญี่ปุ่นกำลังแปลงข้อความภาษาญี่ปุ่นเป็นตัวอักษรละติน ในการท้าทายนี้คุณจะได้รับสตริงอักขระภาษาญี่ปุ่นเป็นอินพุตและคาดว่าจะแปลงเป็นสตริง ASCII ที่ถูกต้อง
สิ่งที่คุณต้องรู้
ภาษาญี่ปุ่นมีระบบการเขียนสามระบบ: ฮิระงะนะ (ระบบโค้งใช้สำหรับคำศัพท์สั้น ๆ ) คาตาคานะ (ระบบมุม - y ใช้สำหรับเสียงและคำที่ยืมมาจากภาษาอื่น) และคันจิ (ตัวอักษรหนาแน่นจากจีน) ในการท้าทายนี้เราจะกังวลเกี่ยวกับฮิรางานะเท่านั้น
ในพยางค์ฮิระงะนะมีทั้งหมด 46 ตัวอักษร ตัวละครแต่ละตัวแทนพยางค์ ตัวละครถูกจัดระเบียบโดยเสียงแรก (พยัญชนะ) และเสียงที่สอง (สระ) aiueo
คอลัมน์ในการสั่งซื้อ
: あいうえお
k: かきくけこ
s: さしすせそ
t: たちつてと
n: なにぬねの
h: はひふへほ
m: まみむめも
y: や ゆ よ
r: らりるれろ
w: わ を
N: ん
(หากคุณคัดลอกและวางตารางนี้โปรดทราบว่าฉันได้ใช้ช่องว่างในเชิงอุดมการณ์ U + 3000 เพื่อเว้นวรรค y และ w)
ดังนั้นสำหรับตัวอย่างเช่นあとめatome
ควรผลิตการส่งออกของ ตัวอักษรตัวแรกเป็นa
ที่สองคือและคนที่สามคือto
me
ข้อยกเว้น
เช่นเดียวกับภาษาที่ดีใด ๆ ภาษาญี่ปุ่นมีข้อยกเว้นกฎของมันและตารางฮิรางานะมีหลาย อักขระเหล่านี้มีความเด่นชัดแตกต่างจากตำแหน่งของพวกเขาในตารางเล็กน้อยซึ่งแปลว่า:
し: shi
ไม่ใช่si
ち: chi
ไม่ใช่ti
つ: tsu
ไม่ใช่tu
ふ: fu
ไม่ใช่hu
Dakuten ゛
คำว่า 'dakuten' หมายถึง 'เครื่องหมายโคลน': dakuten เปลี่ยนเสียงเป็นเสียงที่เปล่งออกมาเทียบเท่า (ปกติ); ตัวอย่างเช่นかka
กลายเป็น ga
か゛ รายการเปลี่ยนแปลงทั้งหมด:
k
→การg
s
→การz
t
→การd
h
→การb
ข้อยกเว้นมีการเปลี่ยนแปลงเช่นกัน: し゛: ji
(หรือzhi
), ไม่zi
ち゛: ji
, ไม่di
つ゛: dzu
, ไม่du
(ふ゛ทำตามที่คุณคาดหวัง; ไม่ใช่ข้อยกเว้น)
Handakuten เป็นอักขระเพิ่มเติม゜ที่ใช้กับh
แถว ถ้าวางอยู่หลังตัวละครจะเปลี่ยนเสียงของตัวละครไปมากกว่าp
b
ทั้ง dakuten และ handakuten จะได้รับเป็นอักขระแต่ละตัว คุณไม่จำเป็นต้องจัดการกับแบบฟอร์มที่ precomposed หรือตัวละครรวม
ตัวละครขนาดเล็ก
ในที่สุดก็มีตัวละครบางเวอร์ชั่นขนาดเล็ก พวกเขาแก้ไขตัวละครที่มาก่อนหรือหลังพวกเขา
ゃゅょ
เหล่านี้เป็นรูปแบบที่เล็ก ๆya
, และyu
yo
พวกมันถูกวางหลังจากเสียงในi
-column เท่านั้น พวกเขาลบi
และเพิ่มเสียงของพวกเขา ดังนั้นきやกลายเป็นkiya
; きゃkya
กลายเป็น
หากวางไว้หลังchi
หรือshi
(หรือแบบฟอร์ม dakuten-ed) y
จะถูกลบออกด้วย しゆคือshiyu
; しゅshu
มี
tsu
สิ่งสุดท้ายที่คุณจะต้องจัดการกับเป็นขนาดเล็ก cons ตัวสะกดที่เพิ่มขึ้นเป็นสองเท่าไม่ว่าจะเกิดอะไรขึ้น มันไม่ทำอะไรเลย ตัวอย่างเช่นきたคือkita
; きったkitta
มี
สรุปอินพุตและเอาต์พุต
โปรแกรมของคุณจะต้องสามารถถอดเสียงได้: ฮิระงะนะพื้นฐาน 46 รูปแบบ dakuten และ handakuten และชุดค่าผสมที่มีตัวอักษรขนาดเล็ก
พฤติกรรมที่ไม่ได้กำหนดรวมถึง: small ya
, yu
และyo
ไม่ใช่หลังจากตัวละครที่มีi
ขนาดเล็กtsu
ที่ส่วนท้ายของสตริง, dakuten กับตัวละครที่ไม่ได้รับผลกระทบ, handakuten ที่ไม่ใช่p
ตัวละคร, และสิ่งอื่น ๆ ที่ไม่ได้กล่าวถึงใน
คุณอาจจะสมมติว่าอินพุตทั้งหมดนั้นถูกต้องและมีเพียงตัวอักษรญี่ปุ่นที่กล่าวถึงข้างต้น
เคสไม่สำคัญในเอาต์พุต คุณยังอาจแทนที่r
ด้วยl
หรือคนเดียวกับn
m
เอาต์พุตสามารถมีหนึ่งช่องว่างระหว่างทุกพยางค์หรือไม่มีช่องว่างเลย
นี่คือcode-golf : รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
กรณีทดสอบ
กรณีทดสอบจำนวนมากสำหรับแต่ละส่วนจะได้รับในสเป็ค บางกรณีเพิ่มเติม:
ならか゛な→ hiragana
かたかな→ katakana
ん゛いき゛ゃんんんんんんんんんんん daigyakutensaiban
ふ゜ろく゛らふふふふふふふふふふふふふふふふふふふふふふふふ puroguramingupazurucoudogorufu
て゛んほ゛って→ ganbatte
หมายเหตุ
ฉันไม่รู้ภาษาญี่ปุ่นมากนอกจากสิ่งที่ฉันเขียนที่นี่ โปรดแจ้งให้เราทราบหากฉันทำผิดพลาด
เดิมทีฉันวางแผนที่จะรวมคาตาคานะด้วย (ดังนั้นกรณีทดสอบการถอดเสียงภาษาอังกฤษของฉันอาจแม่นยำกว่านี้เล็กน้อย ) แต่นั่นอาจจะมากเกินไปสำหรับความท้าทายของรหัสกอล์ฟ
ชื่อ Unicode รวมถึงการทับศัพท์ของอักขระแต่ละตัวแยกกัน แต่ไม่มีข้อยกเว้น สิ่งนี้อาจเป็นประโยชน์กับคุณหรือไม่ก็ได้
ขอบคุณ squeamishossifrage สำหรับการแก้ไขความผิดพลาดสองประการ!
ฉันขอโทษถ้ามันยาวเกินไป ฉันพยายามใส่ฮิระงะนะส่วนใหญ่ให้เข้ากับความท้าทาย แต่บางสิ่ง (เช่นฮิระงะนะเฉพาะสระเล็กการเปลี่ยน n เป็น m ต่อหน้าพยัญชนะบางตัวและเครื่องหมายการทำซ้ำ) ต้องถูกตัดออกเพื่อรักษาความท้าทายที่จัดการ
ฉันไม่เสียใจเลยสำหรับชื่อเรื่อง มันเป็นงานชิ้นเอก
っし
จะเป็นsshi
หรือshshi
?
I'm not at all sorry for the title. It's a masterpiece.
Downvoted
きっった
?