স্বয়ংক্রিয়ভাবে অ্যান্টি-প্রেডিকটিটেবলভাবে একটি এলিট্রেটিভ এরিয়া একত্রিত করে


15

শিরোনামের জন্য @ কমরেডস্পার্কলপোনিকে ধন্যবাদ।

এই চ্যালেঞ্জটি খুব সহজ হওয়া উচিত। আপনি তিনটি তালিকা দেওয়া হয়।

প্রথমটি শিরোনামের ক্ষেত্রে প্রথম নামগুলির একটি তালিকা।

দ্বিতীয়টি নিম্নতর ক্ষেত্রে বিশেষণের একটি তালিকা।

তৃতীয়টি নামগুলির একটি তালিকা, নিম্ন ক্ষেত্রে।

দয়া করে এলোমেলোভাবে একটি নাম, alচ্ছিক বিশেষণ এবং বিশেষ্য এবং আউটপুট নির্বাচন করুন <Name>'s <adjective> <noun>। যাইহোক, প্রতিটি শব্দ একই অক্ষর দিয়ে শুরু করা আবশ্যক। আপনি ধরে নিতে পারেন যে সমস্ত শব্দ একটি চিঠি দিয়ে শুরু হয়। আপনি ধরে নিতে পারেন (তবে আপনি যদি উত্তর দেন তবে নোট করুন):

  • সমস্ত শব্দ সম্পূর্ণ বর্ণানুক্রমিক অক্ষর দ্বারা রচিত হয়
  • প্রতিটি নামের জন্য কমপক্ষে একটি বিশেষ্য রয়েছে
  • প্রতিটি বিশেষ্যের জন্য কমপক্ষে একটি নাম রয়েছে

তবে আপনি এটি ধরে নিতে পারবেন না যে নাম এবং বিশেষ্যের একটি নির্দিষ্ট জোড়ার জন্য একটি বিশেষণ বিদ্যমান, কারণ বিশেষণটি alচ্ছিক তাই আউটপুটটি এখনও বৈধ থাকবে।

আপনাকে ভাগ করে নেওয়া চিঠিটি অভিন্নভাবে নির্বাচন করতে হবে না, যদিও সমস্ত উপলব্ধ অক্ষরের অবশ্যই উপস্থিত হওয়ার শূন্য-সম্ভাবনা থাকতে পারে। তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কোনও প্রদত্ত চিঠির সমস্ত আউটপুটগুলি আপনার ভাষার এলোমেলো নম্বর জেনারেটরের সীমাতে যতটা সম্ভব সম্ভব হওয়ার সমান সম্ভাবনা রয়েছে। বিশেষণের ক্ষেত্রে এটি অতিরিক্ত প্রবেশের সমান, যার অর্থ "এই চিঠির জন্য কোনও বিশেষণ নয়" যার চিঠির জন্য অন্যান্য সমস্ত বিশেষণের মতো একই সুযোগ রয়েছে।

উদাহরণ ইনপুট তালিকা:

Joan Neil Nicola Oswald Sherman Stephanie
new novel old original second silent
jeep noun novel output second sheep snake

এই ইনপুটগুলির জন্য ফলাফল আউটপুট (প্রতিটি লাইন একটি পৃথক উদাহরণ):

Stephanie's second second
Sherman's silent snake
Oswald's original output
Nicola's novel novel
Neil's noun
Joan's jeep

শেষ দুটি উদাহরণে শব্দের মধ্যে কোনও অতিরিক্ত স্থান নোট করুন।

এটি , তাই সংক্ষিপ্ততম কোড যা কোনও মানক লফোলগুলি জয় করে না!

এটি যে অসম্ভব ঘটায় তা ঘটতে আপনি আপার ক্ষেত্রে সব কিছু ইনপুট করতে পারেন, তবে আপনার এখনও বাক্য ক্ষেত্রে আউটপুট প্রয়োজন।


প্রোগ্রামটি ফিরে আসা উচিত: আমরা কি ধরে নিছি: 1 নাম 1 বিশেষণ (যদি কোনওটির সাথে মিল হয়) 1 বিশেষ্য? বা আপনি প্রতিটি নামের জন্য একটি আউটপুট উত্পাদন জিজ্ঞাসা করছেন?
ডেভিডসি

1
প্রদত্ত চিঠির জন্য কোনও বিশেষণই না থাকতে পারে এই সত্যটি বর্ণনা করার জন্য আপনার উদাহরণটিতে 'জোয়ান' এবং 'জিপ' যুক্ত করা উচিত?
আর্নল্ড

আপনার উদাহরণটি দেওয়া ইনপুটটি কি 3 টির মধ্যে 1 টি বিশেষণের সম্ভাবনা নেই (যেহেতু সমস্ত বিশেষণ "তালিকাগুলি" 2 দীর্ঘ)? ... এবং যদি 'জোয়ান' এবং 'জিপ' কোনও jঅভি-উদ্দেশ্য না করে থাকত তবে সুযোগটি 9-তে 4 হয়ে যাবে? আউটপুটগুলির বিপক্ষে সম্ভাব্যতা রাখার বা সমস্ত আউটপুট গণনার পক্ষে উপযুক্ত হতে পারে - যেহেতু আমি এটি বুঝতে পারি "প্রদত্ত চিঠির জন্য সমস্ত আউটপুট ..." নয় তবে সমস্ত স্বতন্ত্র ফলাফলেরও সমান সম্ভাবনা থাকা উচিত (প্রতিটি তালিকার মধ্যে স্বতন্ত্র মান দেওয়া)।
জোনাথন অ্যালান

@ ডেভিডসি দুঃখিত, আমি বুঝতে পারি অতিরিক্ত উদাহরণ যুক্ত করা অস্পষ্ট করে তুলেছে; আপনি প্রতিটি অনুরোধের জন্য কেবলমাত্র এক লাইন আউটপুট উত্পাদন করেন।
নিল

1
@ জোনাথান অ্যালান "জোয়ান" এবং "জিপ" যুক্ত করা "নীল" এবং "বিশেষ্য" যুক্ত অন্যান্য বিকল্পের তুলনায় "নীলের বিশেষ্য" আউটপুট হওয়ার তুলনামূলক সম্ভাবনাগুলিকে প্রভাবিত করবে না।
নিল

উত্তর:


5

জেলি ,  27 25  24 বাইট

-১ এরিক দ্য আউটগোল্ফারকে ধন্যবাদ (একটি স্থানের অক্ষরের পরিবর্তে শূন্য ব্যবহার করুন)

Ż€2¦Œpḟ€0ZḢŒuEƲƇXż“'s“”K

পাইথন ফর্ম্যাটযুক্ত স্ট্রিংয়ের তালিকার তালিকার আকারে একটি আর্গুমেন্ট গ্রহণ করার একটি সম্পূর্ণ প্রোগ্রাম যা STDOUTt এ আউটপুট প্রিন্ট করে।

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

Ż€2¦Œpḟ€0ZḢŒuEƲƇXż“'s“”K - Main Link: list of lists of lists of characters
 € ¦                     - sparse application...
  2                      - ...to indices: [2]
Ż                        - ...action: prepend a zero (place holder for no adjective)
    Œp                   - Cartesian product (all choices, including invalid ones)
       €                 - for each:
      ḟ 0                -   filter out any zeros
               Ƈ         - filter keep those for which:
              Ʋ          -   last four links as a monad:
         Z               -     transpose
          Ḣ              -     head
           Œu            -     upper-case
             E           -     all equal?
                X        - random (uniform) choice  e.g. [['B','o','b'],['b','l','u','e'],['b','a','g']]
                 ż       - zip with:
                  “'s“”  -   list [["'", 's'], []]       [[['B','o','b'],["'", 's']],[['b','l','u','e'],[]],['b','a','g']]
                       K - join with spaces              [['B','o','b'],["'", 's'],' ',['b','l','u','e'],[],' ','b','a','g']
                         - implicit (smashing) print     Bob's blue bag


আহ্ হ্যাঁ, দুর্দান্ত :)
জোনাথন অ্যালান

5

05 এ বি 1 ই ,  24 23  21 বাইট

ধরে নিই যে প্রতিটি নামের জন্য একটি বিশেষ্য রয়েছে, যেমন চ্যালেঞ্জ অনুমোদিত allowed

„'s«I¯ªâI‘ʒl€нË}Ωðý

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

„'s«                    # append "'s" to all names in the name-list
    I¯ª                 # append an empty list to the adjective-list
       â                # cartesian product between the lists
        Iâ              # cartesian product with the noun-list
          €˜            # deep flatten each sublist
            ʒ    }      # filter, keep only lists that when
             l          # converted to lowercase
              €н        # with only heads kept
                Ë       # have all elements equal
                  Ω     # pick a valid list uniformly at random
                   ðý   # and join by spaces

ওহ, ¯ªএবং €˜স্মার্ট! আমার একটি 26 বাইট উত্তর ছিল, তবে যখন কোনও বিশেষণ নেই তখন ডাবল-স্পেস ঠিক করতে সমস্যা হচ্ছিল ..
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন: হ্যাঁ, আমিও বেশিরভাগ সমস্যা নিয়ে এসেছি। আমাকে বুঝতে পেরেছিলাম যে আমি ¯খালি স্ট্রিংগুলি পূরণ করার পরিবর্তে আমাকে নিজেই পরে পরিষ্কার করতে হয়েছিল।
এমিগনা

4

আর , 155 148 বাইট

-7 বাইট জিউসেপ্পিকে ধন্যবাদ (এর *জন্য ব্যবহার করে sample)

function(x,y,z){`*`=sample
while(T)T=length(unique(c(tolower(substr(c(a<-x*1,b<-c(y,"")*1,c<-z*1),1,1)),"")))-2
paste0(a,"'s ",b,if(nchar(b))" ",c)}

এটি অনলাইন চেষ্টা করুন!

প্রত্যাখ্যানের নমুনা ব্যবহার করে: প্রথম অক্ষরের মিল না পাওয়া পর্যন্ত এলোমেলোভাবে একটি নাম, একটি বিশেষণ (সম্ভবত খালি স্ট্রিং) এবং একটি বিশেষণ আঁকুন। এই শর্তটি গণনা করে পরীক্ষা করা হয় যদি প্রথম বর্ণগুলির সাথে গঠিত ভেক্টরের অনন্য উপাদানের সংখ্যা, খালি স্ট্রিংয়ের দৈর্ঘ্য 2 হয় - এটি খালি বিশেষণটির জন্য অনুমতি দেয়।

তারপরে ফলাফলটি মুদ্রণ করুন, বিশেষণটি খালি না হলে অতিরিক্ত স্থান দিয়ে।

একই অক্ষর দিয়ে শুরু হওয়া বিভিন্ন সম্ভাবনার সমান সম্ভাবনার সম্ভাবনা রয়েছে, যেহেতু sampleঅভিন্ন বিতরণ থেকে অঙ্কিত হয়। এটি দেখার সবচেয়ে সহজ উপায় হ'ল নাম এবং বিশেষ্যটি একই বর্ণ দিয়ে শুরু হওয়া ইভেন্টটিতে শর্ত করা (যা ভাল: যদি তারা না দেয় তবে আমরা প্রত্যাখ্যান করব)। এখন আমরা যে ইভেন্টটি মেনে নেব তাতে শর্ত দিন: এর অর্থ আমরা ফাঁকা বিশেষণ বা একই বর্ণ দিয়ে শুরু হওয়া একটি বিশেষণ আঁকছি। এই সম্ভাবনার প্রত্যেকটির সমান সম্ভাবনা রয়েছে।

105


এটি প্রদত্ত কোনও প্রথম চিঠির জন্য একে অপরের সম্ভাবনার খালি বিশেষণের সমান সুযোগ রয়েছে?
নিক কেনেডি

@ নিক কেনেডি হ্যাঁ, যেহেতু sampleইউনিফর্ম বিতরণ থেকে আসে। এটি দেখার সবচেয়ে সহজ উপায় হ'ল নাম এবং বিশেষ্যটি একই বর্ণ দিয়ে শুরু হওয়া ইভেন্টটিতে শর্ত করা (যা ভাল: যদি তারা না দেয় তবে আমরা প্রত্যাখ্যান করব)। এখন আমরা যে ইভেন্টটি মেনে নেব তাতে শর্ত দিন: এর অর্থ আমরা ফাঁকা বিশেষণ বা একই বর্ণ দিয়ে শুরু হওয়া একটি বিশেষণ আঁকছি। এই সম্ভাবনার প্রত্যেকটির সমান সম্ভাবনা রয়েছে।
রবিন রাইডার

ধন্যবাদ, ভালভাবে ব্যাখ্যা করা হয়েছে।
নিক কেনেডি

@ নিক কেনেডি ধন্যবাদ, আমি সম্ভাব্যতা সমান যে অনুগতভাবে যাচাই করার জন্য একটি লিঙ্কের সাথে পোস্টটিতে এই ব্যাখ্যাটি যুক্ত করব।
রবিন রাইডার


3

জাভাস্ক্রিপ্ট (ES6),  139 124 122  120 বাইট

@ নীলকে ধন্যবাদ 2 বাইট সংরক্ষণ করুন

হিসাবে ইনপুট লাগে (names,adjectives)(nouns)

(N,a)=>F=n=>/^(.)\S+( \1\S+)+$/i.test(s=(g=a=>a[Math.random()*a.length|0])(N)+"'s "+[(o=g([,...a]))&&o+' ']+g(n))?s:F(n)

এটি অনলাইন চেষ্টা করুন!

বা 5 মিলিয়ন ড্রয়ের বিতরণটি পরীক্ষা করুন

কিভাবে?

g = a => a[Math.random() * a.length | 0]

গুলি

s = g(N) + "'s " +
    [(o = g([, ...a])) && o + ' '] +
    g(n)

তারপরে আমরা যাচাই করি যে সমস্ত প্রাথমিক বর্ণগুলি নিম্নলিখিত নিয়মিত অভিব্যক্তির সাথে অভিন্ন কিনা:

/^(.)\S+( \1\S+)+$/i

এটি নয়, আমরা কেবল পর্যন্ত পুনরায় চেষ্টা করবগুলি বৈধ ।


+[(o=g([,...a]))&&o+' ']+2 বাইট বাঁচায়, আমার মনে হয়?
নীল

@ নীল আহ, হ্যাঁ সুন্দর.
আর্নল্ড

3

পাইথন ঘ , 161 154 151 147 145 বাইট

( ধন্যবাদ আরবো, অলৌকিক ঘটনা, অজ্ঞতা, নীল যারা আমার প্রথম গল্ফটিতে 2, 3 এবং 4 বাইট অবদান রেখেছেন! )

from random import*
c=choice
def f(N,a,n):
 s=c(N);w=s[0].lower();o=N
 while o[0]!=w:o=c(n)
 print(s+"'s",c([x+" "for x in a if x[0]==w]+[""])+o)

এটি অনলাইন চেষ্টা করুন!(500 কে মৃত্যুদণ্ড কার্যকর করা সহ)

  • ইনপুট হিসাবে তিনটি তালিকা নেয়।

  • প্রতিটি নামের জন্য কমপক্ষে একটি বিশেষ্য ধরে নেওয়া হয়।


একই স্কোর, আরও গল্ফ-ওয়াই:

পাইথন 3 , 145 বাইট

from random import*
c=choice
def f(N,a,n):
 s=c(N);y=lambda p,e=[]:c([x+" "for x in p if x[0]==s[0].lower()]+e);print(s+"'s",y(a,[""])+y(n)[:-1])

এটি অনলাইন চেষ্টা করুন!(500 কে মৃত্যুদণ্ড কার্যকর করা সহ)

এটি কেবল ১৪০ টি যদি পিছনের সাদা জায়গার অনুমতি দেওয়া হয় (বর্গক্ষেত্র মুখ সরিয়ে [:-1])


1
প্রথম উত্তর! আপনিই প্রথম যখন লুপ একটি বাইট সংরক্ষণ করতে পারেন: while t>""<t[0]!=w। আপনি শেষ লাইনটি তৃতীয় লাইনে print(s+"'s",t+(t and" ")+o)ফেলে রেখে প্রতিস্থাপন করতে পারেন u=
আরবো

আমি আমার সমাধানটি পরিবর্তন করে শেষ করেছি কারণ পূর্ববর্তীগুলির প্রয়োজনীয়তাগুলি মাপসই করা হয়নি
নিকোলা স্যাপ

1
152 বাইট (মন্তব্যে ইউআরএল ফিট করার জন্য পাদলেখ সরিয়ে দেওয়া হয়েছে)
অজ্ঞতার

1
আপনি কেবল tএকবার ভেরিয়েবল ব্যবহার করছেন যাতে আপনি কোডটি ইনলাইন করে 4 বাইট সংরক্ষণ করতে পারেন। আমার মনে হয় আপনি oএকই ধরণের কোড প্যাটার্ন ব্যবহার করতে স্যুইচ করতে পারেন tএবং তারপরেও এটিকে ইনলাইন করে আরও 4 টি বাইট সংরক্ষণ করতে পারেন।
নিল

ধন্যবাদ, আপনি ছেলেরা সত্যিই সাহায্য করছেন! @ নীল, আমি রিফ্যাক্টর রাখতে পারিনি o: আমি এটি পৌঁছেছি :from random import* c=choice def f(N,a,n): s=c(N);y=lambda p,e=[]:c([x for x in p if x[0]==s[0].lower()]+e);print(s+"'s",y(a,[""])+y(n)) ( ১৩7 ) তবে মাধ্যমে yআমার জন্য 11 বাইট খরচ হয়
নিকোলা স্যাপ

0

জেলি , 28 বাইট

1ịZḢXɓŒuḢ=ɗƇ€Ż€2¦X€ḟ0ż“'s“”K

এটি অনলাইন চেষ্টা করুন!

আমি @ জোনাথন অ্যালানের সংক্ষিপ্ত উত্তর দেখার আগে এটি লিখেছিলাম, তবে এটি পোস্ট করার পক্ষে ভেবেছিল যেহেতু এটি ভিন্ন পদ্ধতির ব্যবহার করে। উত্তরটিতে এরিকথ আউটগলফারের পরামর্শ অনুসারে 3 বাইট সংরক্ষণ করা হয়েছে।

একটি সম্পূর্ণ প্রোগ্রাম স্ট্রিংগুলির তালিকার একটি তালিকা নিচ্ছে এবং এলোমেলোভাবে এলোমেলোভাবে নির্বাচিত আবদ্ধকরণ মুদ্রণ করছে। নাম অনুসারে কমপক্ষে একটি বিশেষ্য ধরে।


0

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 176 বাইট

(a,b,c)=>(a=a[z.Next(a.Count)])+"'s "+b.Where(x=>(x[0]&95)==a[0]).Append("").OrderBy(x=>z.Next()).Last()+" "+c.OrderBy(x=>z.Next()).Last(x=>(x[0]&95)==a[0]);var z=new Random();

এটি অনলাইন চেষ্টা করুন!


আপনি ধরে নিতে পারেন নামগুলি একটি বড় হাতের অক্ষর দিয়ে শুরু হয়, যাতে আপনি তুলনা করার জন্য কেবল অন্য অক্ষরগুলি বড় হাতের অক্ষরে রাখতে পারেন, যা আপনাকে 10 বাইট সংরক্ষণ করতে হবে?
নিল

@ নীল ইয়েপ, ঠিক 10 বাইট :)
অজ্ঞতার

0

লাল , 179 বাইট

func[a b c][random a random c
foreach k c[if k/1 = h: a/1/1 + 32[g: rejoin[sp k]]]collect/into[foreach
d b[if d/1 = h[keep rejoin[sp d]]]]e: copy[""]random e rejoin[a/1"'s"e/1 g]]

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

Red[]
f: func[a b c][                     ; a function with 3 arguments
    random a                        ; shuffle the list of names in place
    random c                        ; shuffle the list of nouns in place
    foreach k c [                   ; for each item in the shuffled list of nouns
        if k/1 = h: a/1/1 + 32 [    ; check if it begins with the same lowercase letter
                                    ; as the first name in the shuffled list of names
            g: rejoin [" " k]       ; if yes, then insert a " " in front of it save it as g
        ]                           ; thus I always get the last match
    ]
    collect/into [                  ; collect in a new list e
        foreach d b [               ; all items form the adjectives list
            if d/1 = h [            ; that start with the same lowercase letter as the 1st noun
                keep rejoin [" " d] ; insert a " " in form of the adjective
            ]
        ]
    ] e: copy[""]                   ; the list initially has a single item - the empty string
   random e                         ; shuffle the extracted adjectives list
   rejoin [a/1 "'s" e/1 g]          ; return the formatted string
]

0

স্কালা , 234 226 234 206 বাইট

-২৮ বাস্তবতার কারণে আমি ভেবেছিলাম এটি স্টিডিন গ্রহণ করতে হবে, এটি এখন একটি ফাংশন

def f(a:List[String],b:List[String],c:List[String])=scala.util.Random.shuffle(for(d<-a;e<-("" +: b);g<-c;if(d.head.toLower==g.head&&(e.isEmpty||e.head==g.head))) yield s"$d's $e $g".replace("  ", " ")).head

এটি অনলাইন চেষ্টা করুন!

Ungolfed:

def f(names: List[String], adjectives: List[String], nouns: List[String]) = {
  val allPossible = for {
    name <- names
    adjective <- ("" +: adjectives) // Add the choice of no adjective
    noun <- nouns
    if (name.head.toLower == noun.head && (adjective.isEmpty || adjective.head == noun.head)) // Filter out so only matching entries remain
  } yield
    s"$name's $adjective $noun"
      .replace("  ", " ") // Get rid of artifact created by the empty adjective selection

  scala.util.Random.shuffle(allPossible.toList).head // Get a random element
}


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.