planet Flapusで使用される数字の音声名を出力します


24

Flapusの居住者は、ベース8の番号システムを使用します。番号は次のとおりです。

0-クズラ
1-ポナラ
2-ボクケル
3-コロペ
4-ヴルーナ
5-フォーハム
6-スティクティ
7-クリコラ

7を超える数の場合、最後の数字の完全な名前が最初に来て、その後にアポストロフィと最初の母音を含む他の数字の最初の文字が続きます。

11-ポナーラ(1) 'po(1)
13-コロペ(3)' po(1)
64-ヴルナッティスティ
55-
フォーハムフォ47-クリコラヴルー

数字が増えても、式は変わりません。フルネームの最後の桁が最初に来て、その後にアポストロフィと最初の母音までのその他の数字の最初の文字が続きます。最後の数字(最初の単語)を除き、順序は同じままであることに注意してください。

123-Colopee(3) 'po(1)bo(2)
205-Foham(5)' bo(2)ku(0)
1123-Colopee'popobo 7654
-Vruenat'kristifo

規則の例外は、0で終わる数字の場合です。ここでは、単語はKuで始まり、最初の母音まで、他の数字の最初の文字で完了します。アポストロフィは使用されません。

10 - Kupo
70 -ククリ
350 - Kucofo
630 - Kustico
- 1000 Kupokuku

チャレンジ

有効な8進数を受け入れ、音声で同等の音声を出力するプログラムまたは関数を作成します。常に有効な番号を受け取ると仮定できます。末尾の空白/回答後の単一改行は問題ありません。例のように、最初の文字は大文字である必要があります。

これはです。バイト単位の最短コードが優先されます。標準の抜け穴が適用されます。長さが変換され、Flapussianで追加送信される回答には、追加のCookieが追加されます。

テストケース

0 - > Kuzla
1 - > Ponara
2 - > Boqkel
3 - > Colopee
4 - > Vruenat
5 - > Foham
6 - > Stikty
7 - > Kricola
10 - > Kupo
11 - > Ponara'po
23 - > Colopee'bo
56 - > Stikty'fo
70-> Kukri
100-> Kupoku 222-
> Boqkel'bobo 2345-
> Foham'bocovru


3
今、私はそれについて考えることを、数字はすべてかわいい音
busukxuan

回答:


4

Pyth、117バイト(Kricola'popo)

Jc"Ku Po Bo Co Vru Fo Sti Kri";K+kc"nara qkel lopee enat ham kty cola";=TsezIszp@JTp@KTp?&T>sz7\'kVPzpr@JsN0;.?"Kuzla

pythonic擬似コードに手動で変換:

                                           z = input()      # unevaluated, raw
                                           k = ""
Jc"Ku Po Bo Co Vru Fo Sti Kri";            J = "Ku Po...Kri".split()
K+kc"nara qkel lopee enat ham kty cola";   K = k + "nara...cola".split() # k casted to [""]
=Tsez                                      T = int(end(z))  # end(z) means z[-1]
Isz                                        if int(z):
  p@JT                                         print(J[T])
  p@KT                                         print(K[T])
  p?&T>sz7\'k                                  print("'" if T and s > z else k)
  VPz                                          for N in z[:-1]:  # P(z) is z[:-1]
    pr@JsN0                                        print(J[int(N)].lower())
.?                                         else:
  "Kuzla                                       print("Kuzla")

よくやった!ループを操作にif ... else変更して3進数に変更し、いくつかの小さな変更を加えることで、数バイトを節約できます。ここに私が得たものがあります。また、圧縮文字列で使用できるものにも注意を向けたいと思います。formap."
FryAmTheEggman

。@FryAmTheEggman私は"知っていたが、私は完全にそれが最初の文字列を圧縮する可能性が期待していなかった!
busukxuan

10

網膜、Colopee'pokri、165の 157 143 127 123バイト

(.+)(.)
$2'$1
0
Kuzla
1
Ponara
2
Boqkel
3
Colopee
4
Vruenat
5
Foham
6
Stikty
7
Kricola
(?<='.*[iou])[a-z]+

T`L`l`'.+
zla'

後続の改行は重要です。

オンラインでお試しください!

説明

(.+)(.)
$2'$1

まず、末尾の数字を先頭に置き、その後にアポストロフィを挿入します。正規表現が一致しないため、これにより1桁の数字が変更されないことに注意してください。したがって、そもそもアポストロフィは取得されません。

0
Kuzla
1
Ponara
2
Boqkel
3
Colopee
4
Vruenat
5
Foham
6
Stikty
7
Kricola

これにより、表示される場所に関係なく、各桁がフルネームに置き換えられます。

(?<='.*[iou])[a-z]+

これにより、アポストロフィの後に表示されるすべての数字の名前が短縮されます。唯一の母音は注意iou我々は右それらのものの後で位置を確認し、ので、数字の名前で最初に表示さ、その位置に続くすべての小文字をアポストロフィの後にして、一致(および削除)。タイトルケースに数字の名前を挿入したため、次の数字の前で停止します。

T`L`l`'.+

これは、(先頭の大文字をそのままにするために)で始まる一致で見つかったL場合、音訳を使用してすべての大文字を小文字の対応するに変換します。l'

zla'

残っている唯一のものは、(8進数)10の倍数を正しく処理することです。その場合、代わりKuzla'に開始したいで始まる結果が得られKuます。したがって、すべての出現を削除するだけですzla'


私はあなたの正規表現アプローチをリファクタリングして使用しました-10バイト節約します!私は自分のJavaソリューションからこれ以上絞ることができないと思います。それでもあなたからは何マイルも離れています!
デンハムクート

4

JavaScript(ES6)、171

n=>(x='Kuzla Ponara Boqkel Colopee Vruenat Foham Stikty Kricola ku po bo co vru fo sti kri'.split` `,r=x[d=+(n=[...n]).pop()],n.map(d=>r+=x[+d+8],n[0]?r=d?r+"'":'Ku':0),r)

テスト

F=n=>(
  x='Kuzla Ponara Boqkel Colopee Vruenat Foham Stikty Kricola ku po bo co vru fo sti kri'.split` `,
  r=x[d=+(n=[...n]).pop()],
  n.map(d=>r+=x[+d+8],n[0]?r=d?r+"'":'Ku':0),
  r
)  


console.log=x=>O.textContent+=x+'\n'

o=''
for(i=0;i<999;i++)
  o+=i.toString(8) +':'+ F(i.toString(8))+(i%8!=7?' ':'\n')
console.log(o)
#O { font-size:12px }
<pre id=O></pre>


4

Java(1.8)-Vruenat'fobo(486 340バイト)

これ以上ゴルフができないと思ったとき、33バイトを見つけました!非常に満足して!最大の節約は、char配列への切り替え(大文字/小文字の短縮)、および単語の入力文字列配列の再利用です。

400に至るまで、多くのゴルフトリックを発見!これは完全なプログラムですが、理論的には、ルールで関数が大丈夫だと言ったので、これをさらに減らすことができます。

MartinBüttnerのアプローチを使用して更新し、代わりに正規表現を使用するようにリファクタリングしました。さらに10バイト節約できました!ありがとう、マーティン。

interface F{static void main(String[]n){String t="",o,a=n[0];n="Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",");int i=0,l=a.length()-1;char f=a.charAt(l);o=n[f-48]+(l>0?"'":"");while(i<l)t+=n[a.charAt(i++)-48];o+=t.replaceAll("(?<=.*[iou])[a-z]+","").toLowerCase();if(f==48)o=o.replace("zla'","");System.out.print(o);}}

非ゴルフ

interface Flapus {
static void main(String[] names) {
    String temp="",out, a = names[0];
    names = "Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",");
    int i=0, last = a.length()-1;
    char lastchar = a.charAt(last);

    out=names[lastchar-48]+(last>0?"'":"");
    while(i<last) {
        temp+=names[a.charAt(i++)-48];
    }
    out+=temp.replaceAll("(?<=.*[iou])[a-z]+", "").toLowerCase();
    if (lastchar==48) {
        out=out.replace("zla'","");
    }
    System.out.print(out);
}
}

1
interface Fmainメソッドでpublic宣言を使用および削除できます。String[] xおよびのスペースを削除することもでき.substring(0, v+1)ます。
アディソンクランプ

1
あなたは、分割文字列から配列を生成することにより、いくつかのより多くのバイトを救うことができる:"Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")インライン配列が74であるのに対し、70バイトである
アーロン

試してみてください、これ以上難しいゴルフはできないようです。さらなるヒントがありますか?
デナムクーテ

3

パイソン(3.5)225 222 217 202バイト

Pythonでリストを理解できる実用的なソリューション

s=input()
d="Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(',')
r=d[int(s[-1])]+"'"if s[-1]!='0'else'Ku'
d=[i[:2+(i[2]in'ui')].lower()for i in d]
for i in s[:-1]:r+=d[int(i)]
print(r)

説明

d="Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(',')

(以前のバージョン:スプリットバージョンと3バイトに勝ちますd="Kuzla","Ponara",...

r=d[int(s[-1])]+"'"if s[-1]!='0'else'Ku'

最終桁の関数での結果の初期化

d=[i[:2+(i[2]in'ui')].lower()for i in d]

dリストを変更して、最初の2文字または3文字を保持し、小文字にします

for i in s[:-1]:r+=d[int(i)]

ひもの猫


1
2345はFoham'bocovrを返します。Foham'bocovruが返されます。これは、最初の母音までではなく、2文字しか読み取っていないためです。厄介なVruenat
デンハムクート

「Stikty」と「Kricola」の同じ問題
デンハムクート

1
@Denham Cooteおっと、あなたのコメントに答えるのを忘れました。ご意見ありがとうございます、私は問題を修正しました
Erwan

2

ジャバスクリプトES6、231の 228 225 222 204バイト

a=[...prompt(c="Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split`,`)];b=c[a.pop()];a.length?b=b==c[0]?"Ku":b+"'":0;for(;a.length;)b+=c[a.shift()].match(/.+?[iou]/)[0].toLowerCase();alert(b)

ニールのおかげで大量のバイトを節約できました。


1
一般的なゴルフのヒント:[...s]代わりにs.split``; b=b==c[0]?"Ku":b+"'"代わりにif(b==c[0]){b="Ku"}else b+="'"; 同様のためのif(a.length)(ちょうど使用0するためのelse一部)a.map(d=>b+=c[d].match...)代わりに周りいじるのforshift。既に29バイトは保存されていると思います。
ニール

他の誰かの答えを覗く[iou]と、「母音」クラスとして使用するだけでよいので、さらに2バイト節約できます。
ニール

@ニールありがとう。やります。
SuperJedi224

2

F#、364 288 250バイト(Kubofo)

let M="Ku-Ponara-Boqkel-Colopee-Vruenat-Foham-Stikty-Kricola".Split '-'
let m="Ku-Po-Bo-Co-Vru-Fo-Sti-Kri".Split '-'
let rec r a=function|0->a|i->r(m.[i%10].ToLower()::a)(i/10)
fun i->String.concat""<|M.[i%10]::((if(i%10)=0 then""else"'")::r[](i/10))

整数を取り、それに相当するFlapusを返す関数を返します。= D


1

Pythonの3 - 181 177バイト(Ponara'bosti)

a='Ku Po Bo Co Vru Fo Sti Kri zla nara qkel lopee enat ham kty cola'.split()
*y,x=map(int,input())
u=x>0
v=y>[]
print(a[x]+a[x+8]*u**v+"'"*(u&v)+''.join(a[i].lower()for i in y))

powあなたの人生で最も驚くべき使用法に注意してください。u**vブール式コンテキストu|(not v)では、以前は素敵な~v+2|u式にゴルフされていたものと同等です!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.