फ्लैपस ग्रह पर इस्तेमाल किए गए संख्याओं के बोले गए नामों का आउटपुट


24

फ्लैपस के निवासी आधार -8 नंबर प्रणाली का उपयोग करते हैं। नंबर हैं:

० - कुजला
१ - पोनारा
२ - बोक्केल
३ - कोलोपी
४ - व्रूनेट
५ - फोम
६ - स्टिक्टी
1 - क्रिकोला

7 से अधिक की संख्या के लिए, अंतिम अंक का पूरा नाम पहले आता है, उसके बाद एपोस्ट्रोप और दूसरे अंक के पहले अक्षर (पहले स्वर तक) शामिल हैं:

११ - पोनारा (१) की कविता (१)
१३ - कोलोपी (३) की कविता (१)
६४ - व्रणतस्ती
५५ - फोह्मो ४ -
- क्रिकोला’वरु

जैसे-जैसे संख्याएँ बढ़ती हैं, सूत्र समान रहता है - पहला नाम अंतिम अंक पहले आता है, उसके बाद एक एपॉस्ट्रॉफ़ और दूसरे अंकों के पहले अक्षर, पहले स्वर तक और शामिल होते हैं। ध्यान दें कि अंतिम अंक (प्रथम शब्द) के अलावा, आदेश समान रहता है।

123 - कोलोपी (3) 'पो' (1) बो (2)
205 - फोम (5) 'बो (2) कू (0)
1123 - कोलोपी'पोपोबो
7654 - व्रुनाट'क्रिस्टिफो

नियम का अपवाद 0. में समाप्त होने वाली संख्याओं के लिए है। यहां यह शब्द कू से शुरू होता है और दूसरे अंकों के पहले अक्षर के साथ पूरा होता है, जिसमें पहला स्वर होता है। कोई एपोस्ट्रोफ का उपयोग नहीं किया जाता है।

10 - कूपो
70 - कुकरी
350 - कुकोफो
630 - कस्टिको
1000 - कुपोकोकु

चुनौती

एक प्रोग्राम या फ़ंक्शन लिखें जो एक मान्य आधार -8 नंबर को स्वीकार करता है, और बोले गए समकक्ष को आउटपुट करता है। आप मान सकते हैं कि आपको हमेशा एक मान्य संख्या प्राप्त होगी। आपका उत्तर ठीक होने के बाद वाइटपेस / सिंगल न्यूलाइन ट्रेस करना। पहले चरित्र को उदाहरण के अनुसार, ऊपरी-मामला होना चाहिए।

यह । बाइट्स में सबसे छोटा कोड जीतता है। मानक खामियां लागू होती हैं। उत्तर जिनकी लंबाई परिवर्तित की जाती है और इसके अलावा फ्लैपियन में अतिरिक्त कुकीज़ प्राप्त की जाती हैं।

परीक्षण के मामलों

० -> कुजला
१ -> पोनारा
२ -> बोक्कल
३ -> कोलॉपी
४ -> व्रूनेट
५ -> फोमम
६ -> स्टिकटी
> -> क्रिकोला
१०
-> कूप ११ - - पोनारापो
२३ -> कोलोपी’बो
५६ - > स्टिक्टीफो --०
-> कुकरी
१०० -> कूपोकु
२२२ -> बोक्केलबोबो
२३४५ -> फोममबोकोरू


3
अब जब कि मैं इसके बारे में सोचता हूं, सभी संख्याएं बहुत सुंदर
लगती हैं

जवाबों:


4

पायथ, 117 बाइट्स (क्रिकोला'पोपो)

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

पाइथोनिक स्यूडोकोड के लिए हाथ से ट्रांसप्लड:

                                           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अपने forलूप को एक mapऑपरेशन में बदलकर और फिर कुछ मामूली बदलाव करके, कुछ बाइट्स को एक टर्नरी में बदलकर बचा सकते हैं। यहाँ मुझे क्या मिला है मैं आपका ध्यान आकर्षित करता हूं, ."जिसका उपयोग संपीड़ित तारों पर किया जा सकता है।
फ्राईमईएग्गमैन

@FryAmTheEggman मैं इसके बारे में जानता था। ", लेकिन मुझे पूरी उम्मीद नहीं थी कि यह पहली
कड़ी

10

रेटिना , कोलोपी'पोखरी, 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

हम अनुगामी अंक को सामने लाकर शुरू करते हैं और उसके बाद एक एपॉस्ट्रॉफी डालते हैं। ध्यान दें कि यह एकल-अंक की संख्या को अपरिवर्तित छोड़ देता है, क्योंकि रेगेक्स मेल नहीं खाता है - इसलिए उन लोगों को पहले स्थान पर एक एपोस्ट्रोफ नहीं मिलता है।

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'

केवल एक चीज जो बची हुई है, वह (अष्टक) गुणकों को सही ढंग से संभाल रही है। 10. उस स्थिति में, हमारे पास एक परिणाम शुरू होगा Kuzla', जिसे हम Kuइसके बजाय शुरू करना चाहते हैं । तो हम बस के सभी घटनाओं को हटा दें zla'


मैंने रिफैक्ट किया और आपके रेगेक्स दृष्टिकोण का उपयोग किया - 10 बाइट्स बचाता है! मुझे नहीं लगता कि मैं अपने जावा समाधान से बहुत अधिक निचोड़ सकता हूं। हालांकि अभी भी आप से दूर मील!
दिनेश कोट

4

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

जावा (1.8) - व्रुनाट'फोबो ( 486 340 बाइट्स)

बस जब मैंने सोचा कि मैं संभवतः इसे किसी भी अधिक गोल्फ नहीं कर सकता, मैंने एक और 33 बाइट्स पाया! बहुत खुश! सबसे बड़ी बचत चार्ज चार्ट (छोटे से ऊपरी / निचले हिस्से) पर स्विच करने और शब्दों के लिए इनपुट स्ट्रिंग सरणी का पुन: उपयोग करने से थी।

400 से कम करने के लिए नीचे गोल्फ की चाल का पता चलता है! सिद्धांत रूप में मैं अभी भी इसे कम कर सकता था, जैसा कि मैंने कहा कि एक फ़ंक्शन नियमों में ठीक होगा, जबकि यह एक पूर्ण कार्यक्रम है।

मार्टिन बंटनर के दृष्टिकोण का उपयोग करके अपडेट किया गया , मैंने इसके बजाय रेगेक्स का उपयोग करने के लिए मना कर दिया। एक और 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);}}

Ungolfed

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 Fमुख्य विधि पर सार्वजनिक घोषणा का उपयोग और हटा सकते हैं । आप अंतरिक्ष को अंदर String[] xऔर बाहर भी निकाल सकते हैं .substring(0, v+1)
Addison Crump

1
विभाजित स्ट्रिंग से सरणी उत्पन्न करके आप कुछ और बाइट्स बचा सकते हैं: "Kuzla,Ponara,Boqkel,Colopee,Vruenat,Foham,Stikty,Kricola".split(",")70 बाइट्स है, जबकि इनलाइन सरणी 74 है।
हारून

जैसा कि मैं कर सकता हूं, कोशिश करें कि मैं इसे किसी भी मुश्किल से गोल्फ नहीं कर सकता। किसी को भी आगे के सुझावों के साथ वहाँ?
डेन्हम कोट

3

पायथन (3.5) 225 222 217 202 बाइट्स

अजगर में सूची की समझ के साथ एक काम कर समाधान

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]

डी लिस्ट को पहले 2 या 3 अक्षर रखने के लिए बदलें और लोअर केस में डालें

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

स्ट्रिंग को बिल्ली


1
2345 रिटर्न फोमोब्कोव्र। यह Foham'bocovru लौटना चाहिए। ऐसा इसलिए है क्योंकि आप केवल पहले स्वर को शामिल करने और शामिल करने के बजाय केवल 2 वर्ण पढ़ रहे हैं। पेस्की व्रिनाट
डेनहम

Problem स्टिकी ’और for क्रिकोला’ के लिए समान समस्या
डेनहम

1
@ डेंहम कोट ओप्स मैं आपकी टिप्पणियों का जवाब देना भूल गया। आपकी टिप्पणी के लिए धन्यवाद, मैंने मुद्दों को सही किया
इरवान

2

जावास्क्रिप्ट ईएस 6, 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...)के साथ forऔर आसपास fiddling के बजाय shift। मुझे लगता है कि 29 बाइट्स पहले ही बच गए हैं।
नील

किसी और के जवाब पर झांकना आपको बताता है कि आप एक और 2 बाइट बचा सकते हैं क्योंकि आपको केवल उपयोग करने की आवश्यकता है [iou] अपने "स्वर" वर्ग के रूप में ।
नील

@ नील धन्यवाद। वह में स्वयं कर लूँगा।
सुपरजेडी २२४

2

एफ #, 364 288 250 बाइट्स (कुबोफो)

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

एक फ़ंक्शन देता है जो पूर्णांक लेता है और अपने फ्लैपस समकक्ष को वापस करता है। = D


1

पायथन 3 - 181 177 बाइट्स (पोनारा'बोस्ती)

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अभिव्यक्ति के लिए तैयार था!

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