একজন যাদুকরের বানান বই


10

সম্পাদনা : আমি এর আগে ডি অ্যান্ড ডি খেলি না যখন প্রথম দিকে আমি এই প্রশ্নটি তৈরি করেছিলাম তখন আমি এটি সঠিকভাবে গবেষণা করি নি। আমি এর জন্য ক্ষমা চাইছি এবং আমি কয়েকটি সম্পাদনা করছি যা ডেন্ড 5 ই বিধিগুলিতে যথাসম্ভব সত্যে থাকতে উত্তরগুলিকে অকার্যকর করতে পারে। দুঃখিত।


সাম্প্রতিক একটি হট নেটওয়ার্ক প্রশ্ন থেকে একজন ডি অ্যান্ড ফ্যান মনে হয়েছে যে কোনও যাদুকর নির্বাচিত বানান সম্ভাবনার সাথে সামঞ্জস্য করে কিনা - এবং আমার মনে হয় আমাদের সহায়তা করা উচিত!

ভূমিকা

(ইতিপূর্বে উল্লিখিত প্রশ্নে এগুলি সমস্তই বর্ণিত হয়েছে)

একজন যাদুকর শুরু থেকে দুটি স্তর 1 মন্ত্র জানেন (স্তর 1): [1, 1]

  • প্রতিবার একজন যাদুকর একটি স্তর অর্জন করে (12, 14, 16, 18, 19 এবং 20 স্তর বাদে) তারা একটি নতুন বানান শিখবে (বাধ্যতামূলক)।

  • তদ্ব্যতীত, সমতলকরণের সময় একজনের সাথে অন্য একটি বানানের প্রতিস্থাপন করতে (alচ্ছিক) চয়ন করতে পারেন ।

শিখেছি এবং প্রতিস্থাপিত বানানগুলি অবশ্যই একটি বৈধ বানান স্লট স্তর হতে হবে যা আপনার যাদুকরের স্তরের গোল গোল হয়ে গেছে half এই টেবিলটি দেখুন:

Sorcerer level  Highest spell level possible
1               1
2               1
3               2
4               2
5               3
6               3
7               4
8               4
9               5
10              5
11              6
12              6
13              7
14              7
15              8
16              8
17              9
18              9
19              9
20              9

এর অর্থ 3 স্তরে এটির [1, 1, 2, 2]মতো বানান স্তর থাকতে পারে:

Level 1: [1, 1] (initial)
Level 2: [1, 1, 1 (new)]
Level 3: [1, 1, 2 (replaced), 2 (new)]

আপনার অ্যাক্সেস রয়েছে এমন উচ্চ স্তরের বানান বাছাই করার প্রয়োজন নেই।

বানান স্তরগুলি [1, 1, 1, 1]3 স্তরের জন্য পুরোপুরি বৈধ।

শেষ অবধি, মনে রাখবেন যে একটি বানান প্রতিস্থাপন করা প্রতিটি স্তরের জন্য একটি alচ্ছিক বিকল্প । এর অর্থ হ'ল কিছু স্তর প্রতিস্থাপনটি এড়িয়ে যেতে পারে, অন্যরা এটি ব্যবহার করে।

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করুন যা 1 থেকে 20 এর মধ্যে পূর্ণসংখ্যা (স্তর) নেয় takes

এটি কোনও ক্রমের 1 থেকে 9 অবধি মানগুলির সাথে 9 (সংখ্যার সর্বোচ্চ বানান স্তর) এর পূর্ণসংখ্যার (স্পেলের স্তর) একটি অ্যারেও নেওয়া উচিত।

যদি নির্বাচিত বানান স্তরগুলি প্রদত্ত স্তরের যাদুকরের পক্ষে বৈধ হয় তবে প্রোগ্রামটির আউটপুটটি সত্যবাদী / মিথ্যা মান যাচাই করা উচিত।

পরীক্ষার মামলা

Level: 1
Spells: [1, 1]
Output: true

Level: 8
Spells: [1, 1, 2, 3, 3, 5]
Ouput: false

Reason: A level 8 can't ever have access to a level 5 spell.

Level: 5
Spells: [1, 1, 1, 2, 2, 2, 3]
Output: false

Reason: A level 5 can't have access to 7 spells

Level: 11
Spells: [3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6]
Output: false

Reason: Too many spell upgrades.
        The highest valid selection for level 11 is
        [3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6]

এটি - সবচেয়ে কম বাইট জয়!


1
আমরা কীভাবে এটি চাই তা কীভাবে বানানের তালিকাটি বাছাই করতে পারি?
ভেস্কাহ

প্রতিটি শ্রেণি স্তরের সর্বাধিক বানান স্তর কী?
নাইট্রডন

@ নাইট্রডন আমি অনুমান করি 19?
ডন হাজার হাজার

@ নাইট্রডন, সম্ভবত এটি 9 টি দেওয়া হয়েছে যে অ্যারে ইনপুটটিতে " 1 থেকে 9 এর মানগুলি " থাকতে পারে তবে সর্বাধিক স্পেল স্তরটি আমাদের পরিচালনা করতে হবে সেই অনুমানে আরও স্পষ্ট করে বলা উচিত। এবং এটি আরও কয়েকটি পরীক্ষার ক্ষেত্রে করতে পারে। ভাল চ্যালেঞ্জ, অন্যথায়।
শেগি

4
১. "এটি 1 থেকে 9 (কোনও ক্রমে) এর মান সহ পূর্ণসংখ্যার (স্পেলের স্তর) এর অ্যারেও নেওয়া উচিত" - 10-19 স্তরের কী হবে? ২. "তবে স্তরের ৪ স্তরে স্পেলের স্তরগুলি [2,2,3,3]সম্ভব হবে না কারণ এর স্তরের যাদুকরের অ্যাক্সেসের চেয়ে আরও প্রতিস্থাপনের প্রয়োজন হয়।" - তালিকাটি এখানে 5 এর চেয়ে আরও বেশি মৌলিক কারণ নয় বরং দৈর্ঘ্যের 4 নয়? (আমি অনুমান [1,3,2,2,3]স্তর 3 থেকে গিয়ে একটি স্তর 4 সম্ভব [1,1,2(replaced),2(new)]করতে [1,3(replaced),2,2,3(new)]?)
জোনাথন অ্যালান

উত্তর:


5

জাভা (জেডিকে 10) , 191 বাইট

L->S->{int m[]=new int[9],z=0,Z=0,l=0;for(m[0]++;l++<L;z+=--m[z]<1?1:0)m[Z=~-l/2-l/19]+=l<12?2:l>17?1:1+l%2;l=0;for(int s:S){if(--s>Z)l++;Z-=--m[Z>0?Z:0]<1?1:0;}for(int i:m)l|=i;return l==0;}

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

  • ইনপুট প্রয়োজনীয়তা: বানান তালিকার সর্বাধিক স্পেল স্তর থেকে সর্বনিম্ন একটিতে অর্ডার করতে হবে।

ব্যাখ্যা

L->S->{                                        // Curried-lambda with 2 parameters: sorcerer-level and spell list
 int m[]=new int[9],                           // Declare variables: m is the max level  of each spell.
     z=0,                                      // z is the minimum spell level of the maximized spell list.
     Z=0,                                      // Z is the maximum spell level for the current level.
     l=0;                                      // l is first a level counter, then a reused variable
 for(m[0]++;l++<L;z+=--m[z]<1?1:0)             // for each level, compute the maximized known spells.
  m[Z=~-l/2-l/19]+=l<12?2:l>17?1:1+l%2;        // 
                                               // Now m is the row for level L in the table below.
 l=0;                                          // l now becomes an error indicator
 for(int s:S){                                 // This loop checks if the spell-list matches the spells allowed for that level.
  if(--s>Z)l++;                                // Spell-levels are 1-based, my array is 0-based so decrease s.
  Z-=--m[Z>0?Z:0]<1?1:0;                       // Remove a max level if we've expleted all the spells, avoiding exception.
 }                                             //
 for(int i:m)l|=i;                             // Make sure there are no more values in m.
 return l==0;                                  // Return true if no miscount were encountered.
}

সারণী 1: লিঙ্কিত প্রশ্নের উপর অ্যাকোরেনের উত্তর থেকে ব্যবহৃত প্রতিটি যাদুকর-স্তরের সর্বাধিক স্পেল বিতরণ ।

এখানে চিত্র বর্ণনা লিখুন

ক্রেডিট


1
return l<1&java.util.Arrays.equals(m,new int[9]);z=0;for(int i:m)z+=i;return l+z==0;পরিবর্তে হতে পারে । অথবা যদি মানগুলি mকখনই শেষের দিকে নেতিবাচক না হয় তবে তা ==0হতে পারে <1
কেভিন ক্রুইজসেন

ধন্যবাদ কেভিন ক্রুজসেন! এবং সেই ফাঁকা ঘরটি তালিকায় অনেক বেশি স্পেল সহ একটি বাগ ঠিক করতে।
অলিভিয়ার গ্রাগোয়ার

আহ, for(int i:m)l|=i;আরও স্মার্ট! সুন্দর.
কেভিন ক্রুইজসেন

আমি নিশ্চিত যে শেষ দুটি লুপগুলি একত্রিত করা যেতে পারে, আমি ঠিক এখনই জানি না।
অলিভিয়ার গ্রাগোয়ার

1
@ ক্যামেরনআভিক আপনি সম্ভবত এটি অর্ডার করা সংখ্যার সাথে পাস করেছেন ( new int[]{5,6,6,6,7,7,7,8,8,8,9,9,9,9,9}) যদি আমি সেগুলিকে উতরিত ইনপুট করি ( new int[]{9,9,9,9,9,8,8,8,7,7,7,6,6,6,5}, গল্ফের নীচে আমি যে ইনপুট প্রয়োজনীয়তায় লিখেছি), এটি কার্যকর হয়। আমি পরীক্ষার কেসটি যুক্ত করে দেখিয়েছি যে এটি সত্যই কাজ করে।
অলিভিয়ার গ্রাগোয়ার

2

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

v=lambda L,S:(max(S)*2-2<L)&v(L-1,[1]+sorted(S)[:(chr(L*3)in'$*069<')-2])if L>1else(1,1)==tuple(S)

অনলাইনে চেষ্টা করে দেখুন!

Ungolfed:

def v(L, S):
    # recursion base case
    if L <= 1:
        return tuple(S) == (1, 1)
    # if the highest level skill is not valid for the level, then return False.
    if max(S)*2 - 2 < L:
        return False
    # hacky way to determine if the level gets a new skill
    has_new_skill = chr(L*3) in '$*069<'
    sorted_skills = sorted(S)
    # this step removes the highest skill and adds a level 1 skill (replacement)
    # if there is a new skill, then it removes the second highest skill as well
    new_skills = [1] + sorted_skills[:has_new_skill - 2]
    return v(L-1, new_skills)

সম্পাদনা করুন: সঠিক ডি ও ডি বিধি ব্যবহারের জন্য সংশোধন করা সমাধান


আমি +1 করেছি, যদিও print(v(20, [6,6,6,6,7,7,7,8,8,8,9,9,9,9,9])) # Falseপ্রিন্টগুলি সত্য। এটি মিথ্যা মুদ্রণ করা উচিত।
অলিভিয়ার গ্রাগোয়ার

@ অলিভিয়ারগ্রোগোয়ার সরবরাহের কোডে কী দক্ষতার স্তরগুলি বৈধ for তার জন্য আমি ওপির নিয়মগুলি ব্যবহার করছি। পোস্টের নীচে নোটটি দেখুন যা আসল ডিএনডি বিধি ব্যবহার করার জন্য পরিবর্তনটি দেখায়।
ক্যামেরন আভিক

ওহ! আমার দুরবস্থা. দুঃখিত। আউটপুট যে পরিবর্তন সঙ্গে সঠিক।
অলিভিয়ার গ্রাগোয়ার

ঠিক আছে, এটি নিষ্পত্তি হয়েছে: এটি ডি অ্যান্ড ডি নিয়ম যা প্রয়োগ করা দরকার, তা নয় min(9,n-1)
অলিভিয়ার গ্রাগোয়ার

1

কাঠকয়লা , 51 বাইট

Nθ≔⁺✂⭆”)⊟⊞<⁴H”×IκIιθ⎇‹θ¹²⊕⊗θ⁺⁶⁺θ⊘⁺‹θ¹⁹θ¹0θ¬ΣES›ι§θκ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। একটি স্ট্রিং হিসাবে আরোহী ক্রমে বানান স্তরগুলি নেয়। ব্যাখ্যা:

Nθ

স্তরটি ইনপুট করুন।

≔⁺✂⭆”)⊟⊞<⁴H”×IκIιθ⎇‹θ¹²⊕⊗θ⁺⁶⁺θ⊘⁺‹θ¹⁹θ¹0θ

স্ট্রিংয়ের 0544443335ফলে স্ট্রিংয়ে রান-লেংথ ডিকোডিং সম্পাদন করুন 11111222233334444555566677788899999। এর পরে এই স্ট্রিংটি স্তর থেকে শুরু করে কাটা হয় (1-ইনডেক্সড) এবং দ্বিগুণ স্তরে (12 এর কম হলে) বা 6 + 1.5 * সমাপ্ত হয়, 19 স্তর বাদে গোল হয়ে যায়, যা গোল হয় ed A 0খুব বেশি স্পেল না রয়েছে তা নিশ্চিত করার জন্য প্রত্যয়যুক্ত।

¬ΣES›ι§θκ

স্ট্রিংয়ের বিপরীতে স্পেলের স্তরগুলির তুলনা করুন এবং -সেগুলির কোনওটি অতিরিক্ত না হলে একটি মুদ্রণ করুন।


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

এছাড়াও ব্যর্থ বলে মনে হয় 11113পর্যায়ে 4যা কোন ঐচ্ছিক আপগ্রেড ফল, গ্রহণ 1স্তর 2 এ 13 য় স্তরে এবং 3স্তর 4. এ
জনাথন অ্যালান

@ জোনাথান অ্যালান আপনার সর্বাধিক বানান স্তরটি আপনার চরিত্রের স্তরের অর্ধেকের সিলিং (বা 9, এটিই সর্বাধিক সম্ভব)। সম্ভবত প্রশ্নটি পরিষ্কার করে দেয়নি।
নিল

(মূলত আমি সংযুক্ত প্রশ্নে উত্তরগুলি অনুসরণ করেছিলাম সম্ভাব্য বানানের স্তরগুলি কী তা সম্পর্কে))
নিল

আমি দুটি স্পেসিফিকেশন বোঝার এবং পুনরায় মিলনের চেষ্টা করতে চাই না, ওপি মন্তব্যগুলিতে ন্যূনতম (9, এন -1) নিশ্চিত করেছে। সম্ভবত এটি নিয়ে প্রশ্ন করুন ...
জোনাথন অ্যালান

0

জাভাস্ক্রিপ্ট (ES6), 79 বাইট

(level)(array)01

l=>a=>!a.some(x=>x>(j--,++l>30?9:l+(l<25?2:4)>>2),j=l<12?l:l>16?14:l+11>>1)&!~j

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

পরীক্ষার কোড

নীচে কিছু পরীক্ষার কোডের একটি লিঙ্ক রয়েছে যা যাদুকর স্তরটিকে ইনপুট হিসাবে গ্রহণ করে এবং উপরের ফাংশনটির মতো একই যুক্তি ব্যবহার করে সর্বাধিক বানান স্তরের একটি অ্যারে প্রদান করে।

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

কিভাবে?

রেফারেন্স সারণী

 Sorcerer level | # of spells | Maximum spell levels          
----------------+-------------+-------------------------------
        1       |      2      | 1,1                           
        2       |      3      | 1,1,1                         
        3       |      4      | 1,1,2,2                       
        4       |      5      | 1,2,2,2,2                     
        5       |      6      | 2,2,2,2,3,3                   
        6       |      7      | 2,2,2,3,3,3,3                 
        7       |      8      | 2,2,3,3,3,3,4,4               
        8       |      9      | 2,3,3,3,3,4,4,4,4             
        9       |     10      | 3,3,3,3,4,4,4,4,5,5           
       10       |     11      | 3,3,3,4,4,4,4,5,5,5,5         
       11       |     12      | 3,3,4,4,4,4,5,5,5,5,6,6       
       12       |     12      | 3,4,4,4,4,5,5,5,5,6,6,6       
       13       |     13      | 4,4,4,4,5,5,5,5,6,6,6,7,7     
       14       |     13      | 4,4,4,5,5,5,5,6,6,6,7,7,7     
       15       |     14      | 4,4,5,5,5,5,6,6,6,7,7,7,8,8   
       16       |     14      | 4,5,5,5,5,6,6,6,7,7,7,8,8,8   
       17       |     15      | 5,5,5,5,6,6,6,7,7,7,8,8,8,9,9 
       18       |     15      | 5,5,5,6,6,6,7,7,7,8,8,8,9,9,9 
       19       |     15      | 5,5,6,6,6,7,7,7,8,8,8,9,9,9,9 
       20       |     15      | 5,6,6,6,7,7,7,8,8,8,9,9,9,9,9 

মন্ত্র সংখ্যা

LNL

NL={L+1if L<12(L+13)/2if 12L1615if L>16

jNL11

সর্বাধিক বানানের স্তর

L1iNLML,ii

ML,i={(L+i+2)/4if L+i<25(L+i+4)/4if 25L+i309if L+i>30

xa


0

গ্রোভী , 155 বাইট

def f(int[]a, int b){l=[1]
b.times{n->l[0]=++n%2?n/2+1:n/2
if(n<18&(n<12|n%2>0))l.add(l[0])
l.sort()}
for(i=0;i<a.size();)if(a[i]>l[i++])return false
true}

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

অসম্পূর্ণ, অন্তর্নিহিত প্রকারের সাথে স্পষ্ট করে দেওয়া:

boolean spellChecker(int[] a, int b) {
    // l will be our best possible spellbook
    List<BigDecimal> l = [1]
    b.times { n ->
        n++ // iterate from 1 to b, not 0 to b-1
        l[0] = n % 2 != 0 ? n / 2 + 1 : n / 2 // update the lowest value to the best permitted
        if (n < 18 & (n < 12 | n % 2 > 0))
            l.add(l[0]) // if permitted, add another best spell
        l.sort() // ensure 0th position is always worst, ready for updating next loop
    }
    for (int i = 0; i < a.size(); i++)
        if (a[i] > l[i]) // if the submitted spell is of a higher level
            return false // also rejects when l[i] is undefined. (too many spells)
    return true
}

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

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