इंस्टा-नाम… बस कोडर जोड़ें!


17

अंग्रेजी भाषा में, एक उच्चारण योग्य बकवास पत्र संयोजन बनाने का एक निश्चित तरीका यह है कि इसे पूरी तरह से व्यंजन-स्वर जोड़े से बाहर किया जाए, जैसे, वू को पा हा , या, मुझे। fa ro , व्यंजन पहले, स्वर के बाद ।

चुनौती:

एक प्रोग्राम या फ़ंक्शन लिखें, जो उपयोगकर्ता द्वारा निर्दिष्ट अक्षरों को दिया जाएगा, इस सिद्धांत का उपयोग करके एक यादृच्छिक नाम बनाएं। यह इत्ना आसान है।

इनपुट:

2 से अधिक या बराबर एक पूर्णांक जो आउटपुट में अक्षरों की आवश्यक संख्या को नामित करता है। इनपुट STDIN, कमांड लाइन तर्क, या फ़ंक्शन तर्क से लिया जा सकता है।

आउटपुट:

दी गई लंबाई की एक स्ट्रिंग जिसमें बेतरतीब ढंग से चयनित व्यंजन-स्वर जोड़े हैं। इसे STDOUT या निकटतम विकल्प पर मुद्रित किया जा सकता है या किसी फ़ंक्शन के मामले में लौटाया जा सकता है।

नियम:

  1. अंग्रेजी वर्णमाला के प्रत्येक व्यंजन को प्रत्येक जोड़ी के पहले वर्ण के लिए चुने जाने की समान संभावना होनी चाहिए, और अंग्रेजी वर्णमाला के प्रत्येक स्वर में प्रत्येक जोड़ी के दूसरे वर्ण के लिए चुने जाने की समान संभावना होनी चाहिए।
  2. पत्र जोड़े को दोहराया जा सकता है।
  3. चूंकि यह एक नाम है, इसलिए पहले अक्षर को कैपिटल में लाना चाहिए।
  4. यदि इनपुट विषम है, तो नाम में एक बेतरतीब ढंग से चयनित पत्र जोड़ी के अंत में y या h होना चाहिए । Y या h का चुनाव यादृच्छिक होना चाहिए।
  5. मानक खामियों की अनुमति नहीं है।
  6. बाइट्स में सबसे छोटा कोड जीतता है।

पत्र की परिभाषा:

व्यंजन:

bcdfghjklmnpqrstvwxyz

स्वर वर्ण:

aeiou

उदाहरण I / O:

Input: 6
Output: Mefaro

Input: 9
Output: Wukohpaha

का आनंद लें!


3
और वैसे, प्रोग्रामिंग पजल्स और कोड गोल्फ में आपका स्वागत है। एसई :)
ट्राइकोप्लेक्स 2

मुझे लगता है कि मेरा नया प्रारूप अधिक स्पष्ट है। क्या यह? @trichoplax
jman294

1
मैं अपने सभी संभावित प्रश्नों को सैंडबॉक्स में पोस्ट करता हूं जहां उन्हें यहां पोस्ट करने से पहले भरपूर प्रतिक्रिया मिल सकती है। यह चीजों को आसान बनाता है - मैं इसे भविष्य के सवालों के लिए सुझाता हूं।
ट्राइकोप्लाक्स

धन्यवाद, @alex, चूंकि यह मेरा पहला प्रश्न है, मुझे अब इस साइट का उपयोग करने के बारे में कुछ अच्छी तकनीक पता है। मैंने बहुत कुछ सीखा है, और मुझे आशा है कि मेरा अगला प्रश्न बेहतर होगा!
jman294

1
@ASCIIThenANSI प्रति नियम # 4, एक बेतरतीब ढंग से चयनित पत्र जोड़ी को ay या h मिलेगा। उस उदाहरण में, यह ko था जिसे h मिला, हा नहीं । jman: यदि आपके मन में ऐसा नहीं है, तो बेहतर जवाब देने से पहले नियमों को जल्दी से संशोधित करें!
एलेक्स ए।

जवाबों:



6

जावास्क्रिप्ट ईएस 6, 187 180 168 बाइट्स

f=l=>{r=m=>Math.random()*m|0
d=l%2&&r(--l/2)*2+1
for(s='';l--;s+=s?a:a.toUpperCase())a=l%2?'bcdfghjklmnpqrstvwxyz'[r(21)]:'aeiou'[r(5)]+(l==d-1?'hy'[r(2)]:'')
return s}

संपादित करें: मैंने लूप के लिए रेगेक्स की जगह एक साधारण से स्विच किया, जिसने लंबाई में काफी सुधार किया। नीचे दिया गया UI अनप्लग्ड कोड और परीक्षण UI। अपने स्वयं के जोखिम पर एक नकारात्मक संख्या इनपुट करें क्योंकि यह एक अनंत लूप बनाता है। (यह इंगित करने के लिए चाचा का धन्यवाद)

f=function(l){
  // Function to return a random integer between 0 and m-1 inclusive
  r=function(m){
    return Math.random()*m|0
  }
  // d is the position the h or y will be added
  // l is decremented only if l is odd so an extra consonant won't be added to the end
  d=l%2&&r(--l/2)*2+1
  
  for(s='';l--;){
    a=l%2?'bcdfghjklmnpqrstvwxyz'[r(21)]:'aeiou'[r(5)]+(l==d-1?'hy'[r(2)]:'')
    // If `s` is empty (i.e. this is the first leter), make it uppercase
    s+=s?a:a.toUpperCase()
  }
  return s
}

run=function(){ip=parseInt(document.getElementById('input').value);if(ip<2)return alert('Input must be greater than one.');document.getElementById('output').innerHTML=f(ip)};document.getElementById('run').onclick=run;run()
<input type="number" id="input" value="7" min="2" /><button id="run">Run</button><br />
<pre id="output"></pre>


1
नोट: परीक्षण यूआई में एक नकारात्मक संख्या मत डालो ..
चाचा

4

एसडब्ल्यूआई-प्रोलॉग, 286 285 बाइट्स

a(I):-a(I,[]).
a(I,R):-(I=1,r(1,K),nth0(K,`hy`,V),length(R,L),random(1,L,W),nth0(W,[O:P|Q],V:0xFEFF,R);I=0,[O:P|Q]=R),N is O-32,p([N:P|Q]);r(5,A),nth0(A,`aeiou`,X),r(21,B),nth0(B,`bcdfghjklmnpqrstvwxyz`,Y),J is I-2,a(J,[Y:X|R]).
p([A:B|R]):-put(A),put(B),p(R);!.
r(I,R):-random(0,I,R).

उदाहरण: a(13).आउटपुट Leqihsekeqira

ध्यान दें: आप को बदलने के लिए आवश्यकता हो सकती है `के साथ "अगर आप SWI-Prolog के एक पुराने संस्करण है।


3

पायथ, 52 42 बाइट्स

V/Q2=k++kO-GJ"aeiou"OJ;rs.SXZck2*%Q2O"hy"4

आप इसे यहाँ ऑनलाइन कंपाइलर में आज़मा सकते हैं।

इसे आगे बढ़ाने के लिए जकूबे के लिए धन्यवाद, चुनौती को स्पष्ट करने के लिए निनजाबियरमोनकी, और पाइथ बनाने के लिए issacg और अनजाने में मुझे सिखाने के बारे में X

यह कार्यक्रम बेतरतीब ढंग से एक व्यंजन और स्ट्रिंग को भरने के लिए एक स्वर का चयन करता है, 'h' या 'y' को एक जोड़ी में जोड़ता है यदि इनपुट विषम है, तो पहले वर्ण को कैपिटल करता है। यहाँ ब्रेकडाउन है:

V/Q2                                              For N in range(1, input/2):
    =k                                            Set k to:
        k                                         k (defaults to ""),
       + O G                                      plus a random letter from the alphabet... 
          - J"aeiou"                              without the vowels,
      +             OJ                            plus a random vowel
                      ;                           End the loop
                             ck2                  Chop k into strings of length 2
                           XZ                     Append to the first string:
                                    O"hy"         'h' or 'y' picked at random,
                                *%Q2              repeated input mod 2 times
                         .S                       Shuffle the strings
                        s                         Convert them back to a single string
                       r                 4        Capitalize and print the string

यह पहले व्यंजन-स्वर जोड़ी में 'h' या 'y' को जोड़ने के लिए अक्षम लगता है और फिर सूची को हाथापाई करता है। मैंने एक यादृच्छिक जोड़ी से जुड़ने की कोशिश की, लेकिन कोड हमेशा इससे अधिक था।


पायथ, और कोडर्स जो इसे जानते हैं, हमेशा मुझे विस्मित करते हैं।
jman294

1
बस कुछ तरकीबें: rX1पूंजीकरण Xtके रूप में एक ही बात है _P_
जक्यूब

1
आप केवल एक बार Jउपयोग करने के बाद से असाइनमेंट निकाल सकते हैं J
जुलुब

2
मुझे लगता है कि यह अंत में h या y को जोड़ता है, न कि एक बेतरतीब ढंग से चुनी गई जोड़ी को।
निंजाबियरमोनकी

@Jakube आपकी मदद के लिए एक बार फिर धन्यवाद!
माइक ब्यूफेरेसी

2

पर्ल, 253 238 बाइट्स

@c=split"","bcdfghjklmnpqrstvwxyz";@v=split"","aeiou";@t=();chomp($n=<>);for(1..$n/2){$l=$c[$$=rand(21)];if($_<2){$l=uc$l};push@t,$l.$v[$$=rand(5)]};$x=0;$y=int(rand(@t));for(@t){print;if($x==$y&&$n%2>0){print qw(h y)[int(rand(1))]};$x++}

मैं शायद इसे और आगे बढ़ा सकता हूं, लेकिन अभी के लिए यह करना चाहिए।

परिवर्तन:

  • अपने आप को 10 बाइट्स से बचाया, और एलेक्स ए के लिए 5 धन्यवाद।

2

जूलिया, 141 बाइट्स

n->(R=rand;r=isodd(n)?R(1:n÷2):0;ucfirst(join([string("bcdfghjklmnpqrstvwxyz"[R(1:21)],"aeiou"[R(1:5)],i==r?"yh"[R(1:2)]:"")for i=1:n÷2])))

यह एक अनाम लंबो फ़ंक्शन बनाता है जो एक पूर्णांक को इनपुट के रूप में स्वीकार करता है और एक स्ट्रिंग लौटाता है। यह इस तथ्य का लाभ उठाता है कि जूलिया में तार को अनुक्रमित किया जा सकता है और चरित्र सरणियों की तरह संदर्भित किया जा सकता है। इसे कॉल करने के लिए, इसे एक नाम दें, जैसे f=n->...

असंगठित + स्पष्टीकरण:

function f(n)
    # There will be n÷2 consonant-vowel pairs
    p = n ÷ 2

    # Determine which pair will get a y or h, if any
    r = isodd(n) ? rand(1:p) : 0

    # Consonants and vowels
    c = "bcdfghjklmnpqrstvwxyz"
    v = "aeiou"

    # Randomly select letters for pairs, appending y or h as needed
    s = [string(c[rand(1:21)], v[rand(1:5)], i == r ? "yh"[rand(1:2)] : "") for i in 1:p]

    # Join s into a string and convert the first letter to uppercase
    ucfirst(join(s))
end

उदाहरण:

julia> f(9)
"Luyvunize"

julia> f(2)
"Fe"

julia> f(16)
"Pahonapipesafuze"

2

अजगर 2, 148 169 156

from random import*
I=input()
R=choice
i=I/2
S=[R('hybcdfgjklmnpqrstvwxz')+R('aeiou')for _ in[0]*i]
if I%2:S[R(range(i))]+=R('hy')
print ''.join(S).title()

संपादित करें: एहसास हुआ कि यह पहले अक्षर को कैपिटलाइज़ नहीं करता था। बीमार देखते हैं कि क्या मैं इसे कल वापस गोल्फ कर सकता हूं।
संपादित 2: याद किया गया, .titleलेकिन मुझे लगता है कि यह होगा।


यदि केवल तार समर्थित आइटम असाइनमेंट ...
mbomb007

2

स्माइलबासिक 2 (पेटिट कंप्यूटर), 197 177 बाइट्स

CONTEMPORARY EDIT MAY 2018 : लगभग 3 साल पहले यह मेरा पहला सबमिशन था! मेरे कौशल में तब से बहुत सुधार हुआ है; -20 सिर्फ मामूली समायोजन से।

यह एक प्रॉम्प्ट के साथ शुरू होता है (यह बाइट्स को बचाने के लिए खाली छोड़ दिया जाता है, इसलिए यह सिर्फ एक है?) जहां आप लंबाई (चर में संग्रहीत L) में डालते हैं ।

C$="bcdfgjklmnpqrstvwxzhyaeiou"INPUT L
J=0 OR L/2K=-1IF L%2THEN K=RND(J)
FOR I=0TO J-1?CHR$(ASC(MID$(C$,RND(21),1))-32*!I)+MID$(C$,RND(5)+21,1)+MID$(C$,RND(2)+19,1)*(K==I);
NEXT

मुझे यकीन है कि एक अस्पष्ट बुनियादी भाषा के साथ भाग लेने वाला मुझे कुछ भी नहीं मिलेगा, लेकिन अजीब लग रहा है, लेकिन मैं इसे BASIC के लिए बहुत छोटा बनाने में कामयाब रहा। यह एसबी की अजीब quirks (जैसे 1 या 0 का मूल्यांकन करने वाले सशर्त हैं क्योंकि कोई बूलियन प्रकार नहीं है) का लाभ उठाता है, क्योंकि मुझे 3AM पर यह लिखने के बाद संभवत: कई बाइट्स समाप्त हो सकते हैं।


1

मारबेलस, 203 बाइट्स

}0}0@1
>>^0&1
--=0@1FF
??&0}0&0
&1
qqqqqq\\\\
//\\pppppp
:p
0000
?K\\?4..}2
<G++<4+5=0\/}0
<B++<3+5?111>1!!
<6++<2+3Mult-2
<3++<1+3+7}2{<
++//mm//mm--
mm..{1..{2{>
{0
:q
}2{2}0
pppppp{0{1
-W
:m
}061
{0{0

इसका परीक्षण यहाँ (ऑनलाइन दुभाषिया) करें। तर्कों के माध्यम से इनपुट। पुस्तकालय और बेलनाकार बोर्ड सक्षम होना चाहिए।

टिप्पणी / पठनीय संस्करण:

}0 }0 @1 .. .. # 1st column: generate a number from 0 to length/2-1, wait on &1
>> ^0 &1 .. .. # 2nd column: check bottom bit; if zero activate &1, otherwise &0
-- =0 @1 FF .. # FF (wait on &0): if no h/y, set counter to 255 (0xFF)
?? &0 }0 &0 .. # Send copy of full length to :q
&1 .. .. .. .. 
qq qq qq \\ \\ # Call :q with counter and length
// \\ pp pp pp # Output of :q falls into :p, which is called repeatedly until done

:p                      # prints a consonant/vowel pair, and h/y if needed
00 00 .. .. .. .. .. .. # two zeros, to be passed into ?K and ?4
?K \\ ?4 .. }2 .. .. .. # pass through ?K (0-20 = consonants) and ?4 (0-4 = vowels)
<G ++ <4 +5 =0 \/ }0 .. # 1st/2nd column: add 1-4 to skip vowels
<B ++ <3 +5 ?1 11 >1 !! # 3rd/4th column: add 3/6/11/16 to create nth vowel
<6 ++ <2 +3 Mu lt -2 .. # 5th/6th column: if counter is 0, generate either h or y 
<3 ++ <1 +3 +7 }2 {< .. # 7th/8th column: if length left to print is 0-1, terminate
++ // mm // mm -- .. .. # mm: add 'a'. 1st/2nd start at 'b' (++)
                        #              5th/6th start at 'h' (+7)
mm .. {1 .. {2 {> .. .. # output consonant, vowel, h/y to {0, {1, {2
{0 .. .. .. .. .. .. .. # left input (length left): -2 + output to left
                        # right input (counter until print h/y): -1 + output to right

:q             # calls :p, but with the first letter capitalized
}2 {2 }0 .. .. # {2 is an unused output which prevents exit when all outputs are filled
pp pp pp {0 {1 # call :p, and forward return outputs to MB to start loop
-W .. .. .. .. # subtract W (0x20) from the first letter = capitalize it

:m    # add 0x61 ('a')
}0 61
{0 {0 # input + 0x61 is returned

यह मोटे तौर पर निम्नलिखित छद्मकोड के बराबर है ( सम्मिलित और random(a,b)बीच की संख्या उत्पन्न करता है ):ab

main(length)
    if length & 0x01 == 0 then
        counter, length_left = q(0xFF, , length)
    else
        counter, length_left = q(random(0, (length >> 1) - 1), , length)
    end
    while true do
        length_left, counter, consonant, vowel, hy = p(length_left, , counter) 
        print consonant, vowel, hy
    end
p(length_left, , counter)
    if length_left <= 1 then terminate_program end
    consonant = random(0, 20)
    switch consonant
        case >16: ++consonant
        case >11: ++consonant
        case >6:  ++consonant
        case >3:  ++consonant
    ++consonant
    consonant = m(consonant)
    vowel = random(0, 4)
    switch vowel
        case >4: vowel += 5
        case >3: vowel += 5
        case >2: vowel += 3
        case >1: vowel += 3
    vowel = m(vowel)
    if counter == 0 then
        hy = random(0, 1) * 0x11
        hy += 7
        hy = m(hy)
    return length_left - 2, counter - 1, consonant, vowel, hy
q(counter, , length_left)
    length_left, counter, consonant, vowel, hy = p(length_left, , counter)
    print consonant - 0x20, vowel, hy
    return counter, length_left
m(number)
    return number + 'a'

1

रूबी, 119 बाइट्स

पूंजीकरण के लिए 13 बाइट्स ...

->n{z=(0...n/2).map{([*(?a..?z)]-v=%w[a e i o u]).sample+v.sample}
n.odd?&&z[rand n/2]+='yh'[rand 2]
(z*'').capitalize}

उपयोग:

f=
->n{z=(0...n/2).map{([*(?a..?z)]-v=%w[a e i o u]).sample+v.sample}
n.odd?&&z[rand n/2]+='yh'[rand 2]
(z*'').capitalize}

2.upto(20) do |i|
  puts f[i]
end

आउटपुट:

Qo
Gah
Gilu
Baygu
Tevaba
Rohyori
Jigupadi
Diguvareh
Bidifenaji
Xohsuyileze
Depixoyizili
Boqizurejupiy
Buhuboketedasa
Vuwuhojetayduno
Forigikedawojawe
Qacetihxiheciyaju
Zoqigafukedugusoku
Bavuhlarofetucebapi
Zusiraxoxureqimavugo

0

सी, 219 अक्षर

काम करने लगता है, मैं अभी भी इसके लिए नया हूं।

char o[]="aeiouqwrtypsdfghjklzxcvbnm";n,i=0;main(int h,char**v){n=atol(v[1]);srand(time(0));h=n%2;for(;i<n-n%2;i+=2)printf("%c%c%c",o[rand()%21+5]-(i?0:32),o[rand()%5],(rand()%(n-1)<(i+2)&h)?h=0,'h'+(rand()%2?17:0):0);}

1
आपको एक समान वितरण प्राप्त करने के rand()%(n-1-i)<2बजाय इसकी आवश्यकता है rand()%(n-1)<(i+2), जब तक कि आप केवल एक बार इस यादृच्छिक संख्या को उत्पन्न नहीं करते हैं और इसे कहीं बचा लेते हैं।
jimmy23013

क्या प्रत्येक वर्ण एक बाइट है, या कितने बाइट्स हैं?
jman294

@ jman294 क्योंकि ASCII वर्णमाला में प्रति वर्ण 8 बिट का उपयोग होता है, एक वर्ण एक बाइट होता है। आपको केवल बाइट्स का उपयोग करने की आवश्यकता है यदि आप गैर-एएससीआईआई पात्रों का उपयोग कर रहे हैं जैसे 🙋कि एक से अधिक बाइट का उपयोग करता है।
बीटा डेके

0

आर, 166 बाइट्स

STDIN से इनपुट लेता है और STDOUT को आउटपुट देता है।

l=letters;s=sample;n=scan();v=c(1,5,9,15,21);o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));o[1]=toupper(o[1]);cat(o,sep='')

व्याख्या

# Alias letters and sample
l=letters;
s=sample;
# Get input
n=scan();
# Vowel positions
v=c(1,5,9,15,21);
# Create a matrix with a row of 
# consonants and a row of vowels 
o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));
# If odd paste either h or y to a vowel
if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));
# Upper case first letter
o[1]=toupper(o[1]);
# Output
cat(o,sep='')

कुछ परीक्षण

> l=letters;s=sample;n=scan();v=c(1,5,9,15,21);o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));o[1]=toupper(o[1]);cat(o,sep='')
1: 13
2: 
Read 1 item
Vetigiysurale
> l=letters;s=sample;n=scan();v=c(1,5,9,15,21);o=rbind(s(l[-v],i<-n/2),s(l[v],i,T));if(n%%2)o[a]=paste0(o[a<-s(i,1)*2],s(c('h','y'),1));o[1]=toupper(o[1]);cat(o,sep='')
1: 12
2: 
Read 1 item
Mucowepideko

0

K5, 131 बाइट्स

{r:(`c$-32+c@1?#c),{*d@1?#d:(v;(c::(`c$97+!26)^v::"aeiou"))@2!x}'1+1_!x;$[x=p:2*_x%2;r;,/(*w),("yh"@1?2),*|w:(0,2+2**1?_(#r)%2)_r]}

यह Kona या kdb + पर काम नहीं करेगा; आपको ओ के जैसे K5 दुभाषिया का उपयोग करने की आवश्यकता है ।

लाइव डेमो। ( 5अलग-अलग इनपुट आज़माने के लिए किसी भिन्न संख्या के अंत में सेट करने का प्रयास करें।)


0

रूबी, 316 238 216 चर

v=%w{a e i o u};c=[];(?a..?z).map{|i|v.include?(i)||c.push i};combos=[];c.map{|i| v.map{|j| combos.push i+j}};i=gets.to_i;o="";(i/2).times{o+=combos.sample};if i%2==1;(rand(4)==1?o+=?y:o+=?h); end; puts o.capitalize;

विषम संख्या के कॉम्बो अंत में hया y

माणिक गोल्फ टिप्स के पूर्ण शब्दकोश के लिए @blutorange का धन्यवाद।

वाह, मैंने अपना कोड 100 वर्णों से छोटा कर दिया।


अतिरिक्त कॉम्बो अनावश्यक हैं। मुझे लगता है कि वहां के कुछ व्हाट्सएप अनावश्यक भी हैं। शायद अपने कोड को छोटा करने में मदद करने के लिए रूबी में गोल्फ के लिए कुछ सुझावों पर एक नज़र डालें । इसके अलावा, क्या यह इनपुट लेता है?
एलेक्स ए।

हाँ, यह इनपुट लेता है, अतिरिक्त कॉम्बो थे पहले प्रश्न पुनः किया गया, और मैंने सोचा था कि वे अभी भी काम होगा अतिरिक्त अंक के लिए आवश्यक। jएक टाइपो था।
ताली

माणिक के साथ कुछ चालें: के for i in ?a..?z;...;endसाथ प्रतिस्थापित किया जा सकता है (?a..?z).map{...}; thenके बाद ifवैकल्पिक है। v.include?(i)||c.push(i)के लिए छोटा है unless v.include?(i);c.push(i)। का प्रयोग करें c<<iके लिए c.push(i)c.map{}से छोटा है c.each{}i%2==1?1:2के लिए छोटा है if i%2==1;1;else;2;endprint "Enter..."Codegolf में की जरूरत नहीं है; )
ब्लुटोरेंज

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