ডি অ্যান্ড ডি 5 ই এইচপি ক্যালকুলেটর


11

ডি অ্যান্ড ডি চরিত্রটি সমতল করার সময় আমার যা কিছু করতে হবে তা মনে রাখতে আমার সমস্যা হয়। যে কারণেই হোক না কেন, আমাকে যে সমস্যা দেয় তাগুলির মধ্যে একটি হল তাদের নতুন সর্বোচ্চ এইচপি মানটি কী হওয়া উচিত তা নির্ধারণ করা। এই চ্যালেঞ্জের জন্য, আপনি স্বয়ংক্রিয়ভাবে সঠিক মান গণনা করতে একটি প্রোগ্রাম বা ফাংশন লিখবেন।

পরিভাষা

সর্বোচ্চ এইচপি গণনা করার জন্য আপনার প্রথম যে জিনিসটি জানতে হবে তা হ'ল "সংবিধান সংশোধক"। প্রতিটি ডিএনডি চরিত্রের সংবিধানের জন্য একটি সহ ছয়টি পূর্ণসংখ্যার দক্ষতার স্কোর রয়েছে। এই চ্যালেঞ্জের জন্য প্রয়োজনীয় একমাত্র প্রাসঙ্গিক জ্ঞান হ'ল সংবিধানের ক্ষমতা স্কোর কীভাবে অন্য স্ট্যাটাকে প্রভাবিত করে, যা সংবিধান সংশোধক। সংক্ষেপে, সংশোধকটি সমান floor( (ability_score - 10) / 2 )। অ্যাডভেঞ্চারারদের মধ্যে 1 থেকে 20 পর্যন্ত কেবলমাত্র যোগ্যতার স্কোর থাকতে পারে। আপনার কোডটিকে কখনই সেই ব্যাপ্তির বাইরে স্কোর পরিচালনা করতে হবে না, এর অর্থ এটি কখনও -5 এর চেয়ে কম বা +5 এর চেয়ে বেশি সংশোধককে পরিচালনা করতে হবে না। যদিও সংবিধান সংশোধক একটি চরিত্রের স্তর হিসাবে উপরে পরিবর্তন করতে পারে, এইচপির উপর এর প্রভাবগুলি প্রত্যাবর্তনমূলকভাবে প্রয়োগ করা হয়, সুতরাং বর্তমান সর্বাধিক এইচপি গণনা করার জন্য কেবলমাত্র তার বর্তমান মান প্রয়োজন।

(এটি পুরোপুরি চ্যালেঞ্জের কাছে অপ্রাসঙ্গিক, তবে আপনি কীভাবে এটি সর্বোচ্চ এইচপিকে প্রভাবিত করে সে সম্পর্কে আগ্রহী হন: আপনি "শক্ত" কৃতিত্বটি এইচপি গণনার উদ্দেশ্যে একটি চরিত্রের সংবিধান সংশোধনকারীকে 2 যোগ করতে পারেন, যেহেতু কার্যকরভাবে এটি কী করে এটি কীর্তিটির পাঠ্য নয়, তবে গণিতটি হুবহু একই রূপে কাজ করে answer আপনার উত্তরে আপনাকে এই কীর্তিটি পরিচালনা করতে হবে না))

এরপরে, প্রতিটি শ্রেণীর একটি নির্ধারিত "হিট ডাই" টাইপ থাকে যা এইচপি গণনার সাথে জড়িত। নিম্নলিখিত ক্লাবটি প্রতিটি শ্রেণীর জন্য হিট ডাইস তালিকাভুক্ত করে।

Sorcerer:  d6
Wizard:    d6
Bard:      d8
Cleric:    d8
Druid:     d8
Monk:      d8
Rogue:     d8
Warlock:   d8
Fighter:   d10
Paladin:   d10
Ranger:    d10
Barbarian: d12

অবশেষে, চরিত্রের স্তর। এটি যা প্রভাবিত করে তা হ'ল নিম্নলিখিত বিভাগে চলমান মোটে কতবার একটি মান যুক্ত করতে হয়। একটি অক্ষর স্তর 1 থেকে 20 একটি পূর্ণসংখ্যা, সমেত 1 । আপনার কোডটি কখনই এই ব্যাপ্তির বাইরে কোনও স্তর পরিচালনা করতে হবে না। স্তরে পৌঁছতে n, একটি অক্ষর স্তর 1 থেকে শুরু হয়ে যায় এবং n-1সময় পর্যন্ত স্তরে যায় । উদাহরণস্বরূপ, একটি স্তর 3 অক্ষরটি যেখানে তারা স্তরের 1 স্তরের হয়ে গিয়েছে এবং দুবার সমতল হয়েছে level

কীভাবে সর্বোচ্চ এইচপি গণনা করবেন

একটি চরিত্রের সর্বাধিক এইচপি তাদের স্তরের 1 স্তরের এইচপির সমতুল্য এবং প্রতিটি স্তরে প্রাপ্ত বর্ধনের যোগফল।

স্তর 1

স্তর 1 এ, কোনও চরিত্রের এইচপি তাদের হিট ডাইয়ের সর্বোচ্চ সম্ভাব্য রোলের সমান (ডাইসের নামে সংখ্যা, আপনারা যাদের পাশ্বের সাথে অপরিচিত যাদের পক্ষে 6 টিরও বেশি দিক রয়েছে) এবং তাদের সংবিধান সংশোধক। মনে রাখবেন যে পরবর্তী স্তরে এইচপি গণনা করার সময়, আপনি ধরে নিতে পারেন যে কোনও চরিত্রের গঠনতন্ত্র সর্বদা একই ছিল, কারণ সংবিধানের এই অংশটি প্রতিবার সংবিধান পরিবর্তন হওয়ার সাথে সাথে পুনরায় করা হয়।

সমতলকরণ যখন

প্রতিবার যখন কোনও চরিত্র স্তরে যায়, তখন তাদের দুটি বিকল্প থাকে। তারা হয় তাদের একটি হিট পাশা রোল করতে পারে বা সেই ডাইয়ের গড় রোল নিতে পারে (বৃত্তাকার)। তারা যে কোনও নির্বাচন করুন, তাদের সংবিধান সংশোধক ফলাফলটিতে যুক্ত করা হবে। এই মোট পরিমাণ হ'ল তাদের এইচপি বৃদ্ধি পায়। এই চ্যালেঞ্জের জন্য, গড় রোল সর্বদা নেওয়া হয়, সুতরাং আউটপুট হ'ল নির্বিচারক। (আবার, আপনি যদি> 6 পার্শ্বযুক্ত ডাইসের সাথে পরিচিত না হন তবে আপনি গোলাকার আপ গড় রোল হিসাবে গণনা করতে পারেন (highest_possible_roll / 2) + 1))

একটি উল্লেখযোগ্য ব্যতিক্রম আছে। একটি চরিত্রের সর্বাধিক এইচপি সর্বদা সর্বনিম্ন 1 দ্বারা বৃদ্ধি পায় প্রতিবার যখন তারা 2 বাড়ায় । উপরের অনুচ্ছেদে থাকা নির্দেশাবলী যদি সমতলকরণের সময় 0 বা তারও কম বাড়ে, তবে এটি পরিবর্তে 1 দ্বারা বৃদ্ধি পায়।

চ্যালেঞ্জ

আপনার প্রোগ্রাম বা ফাংশনটিতে তিনটি ইনপুট লাগবে :

  • চরিত্রের শ্রেণি, একটি স্ট্রিং হিসাবে
  • চরিত্রের স্তর
  • চরিত্রের সংবিধান ক্ষমতা স্কোর ( সংশোধক নয় )

এটি কেবল একটি জিনিস আউটপুট দেবে : চরিত্রের বর্তমান সর্বাধিক এইচপি।

উদাহরণ

ইনপুট এবং তাদের সম্পর্কিত আউটপুটগুলির প্রতিটি সম্ভাব্য সংমিশ্রণ এই লিঙ্কটিতে পাওয়া যাবে। এই পৃষ্ঠায় কিছু দেখার জন্য, এখানে এলোমেলোভাবে 30 টি পরীক্ষার কেস বেছে নেওয়া হয়েছে:

Barbarian, 15th level, 13 CON: 125
    Rogue, 10th level, 18 CON: 93
   Wizard, 15th level, 18 CON: 122
   Wizard, 16th level,  1 CON: 16
Barbarian, 15th level,  7 CON: 80
  Warlock, 15th level,  3 CON: 18
   Ranger, 14th level,  1 CON: 18
  Warlock,  3rd level, 14 CON: 24
    Druid,  3rd level,  4 CON: 9
   Cleric, 11th level,  5 CON: 25
     Bard, 20th level, 11 CON: 103
Barbarian, 11th level, 13 CON: 93
     Bard,  8th level, 19 CON: 75
     Bard, 16th level, 17 CON: 131
  Fighter, 10th level,  6 CON: 44
     Monk, 10th level,  2 CON: 13
   Cleric, 14th level, 17 CON: 115
   Cleric,  6th level,  5 CON: 15
    Rogue,  7th level, 13 CON: 45
   Cleric,  4th level, 14 CON: 31
    Rogue, 19th level, 15 CON: 136
  Paladin, 13th level, 13 CON: 95
   Cleric, 13th level, 15 CON: 94
     Bard,  8th level,  5 CON: 19
     Monk, 20th level, 11 CON: 103
Barbarian,  8th level, 20 CON: 101
     Monk,  1st level,  4 CON: 5
     Bard,  5th level, 17 CON: 43
     Monk, 18th level,  7 CON: 57
   Wizard, 17th level,  5 CON: 19

১. কড়া কথা বললে, আমি মনে করি না যে এমন কোনও নিয়ম আছে যা বলে 20 সর্বাধিক স্তর। যাইহোক, 21 হ'ল বিন্দু যেখানে বইতে টেবিল থাকা বন্ধ করে দেওয়া আপনাকে নিয়মের বিভিন্ন সংখ্যার কিছু হওয়া উচিত, এটির কাছে পৌঁছানোর জন্য আপনার যে পরিমাণ অভিজ্ঞতার দরকার তা অন্তর্ভুক্ত। এটি আমার জন্য যথেষ্ট পর্যাপ্ত স্তর cap

২. আমি আসলে মনে করি না যে এটি RAW এর সাথে সত্য। আমি আরপিজি.এসে জিজ্ঞাসা করেছি এবং এ জাতীয় জিনিস কোথাও লেখা আছে বলে মনে হয় না। যাইহোক, ডি অ্যান্ড ডি এর প্রধান ডিজাইনার মাইক মার্লস 2015 সালের মার্চ মাসে এটি টুইট করেছেন । আপনি যেভাবে নেতৃত্বের নিয়ম বিকাশকারী জেরেমি ক্রফোর্ডের কাছ থেকে একটি টুইটকে বিতর্ক করতে পারতেন তা এইভাবে অনুমোদনযোগ্য নয় তবে এটি প্রমাণ যে তারা তাদের উদ্দেশ্য কী তাই আমি এই চ্যালেঞ্জের জন্য এটি ব্যবহার করব।


ক্লাসকে কি স্ট্রিং হিসাবে দিতে হবে, বা এটি হিট ডাইয়ের সংখ্যা হিসাবে দেওয়া যেতে পারে, এটিই কেবল কোনও শ্রেণীর জন্য প্রাসঙ্গিক তথ্য। তা না হলে মানুষ শুধু একটি জেনেরিক টেবিল প্রয়োজন হবে "এই শ্রেণীর তারপর এই ডাই করেন তাহলে এই শ্রেণীর তাহলে এই ডাই" ইত্যাদি
Skidsdev

এছাড়াও স্তর এবং সংবিধানগুলি কি পূর্ণসংখ্যা হিসাবে পাস হয়, বা "xth স্তর" এবং "y CON" বলে স্ট্রিং হিসাবে?
স্কিডেদেব

1
গোশ, আমি বুড়ো, আমি এখনও এই টেবিলটি স্মরণ করছি: প্রাচীনকর্মস্রোতগুলি
নীল

@ মায়ুব সম্ভবত কোনও প্রশ্ন জিজ্ঞাসা করা উচিত নয় এবং সঙ্গে সঙ্গে পিৎজার জন্য বেরিয়ে গেলেন, হাহ? : পি ক্লাসটি একটি স্ট্রিং হতে হবে, কারণ আমি মনে করি যে টেবিলগুলি সংক্ষিপ্ত করার জন্য নিদর্শনগুলি খুঁজে পাওয়ার জন্য এই স্ট্রিংগুলিতে পর্যাপ্ত ডেটা রয়েছে (যা এতক্ষণে আসা উত্তরগুলির উপর ভিত্তি করে কেস হিসাবে উপস্থিত হয়)। স্তর এবং সংবিধান ints হয়।
আন্ডারগ্রাউন্ডোমোনাইল

3
আমার কাছে ছুঁড়ে দেওয়া সমস্ত তথ্য থেকে প্রাসঙ্গিক তথ্য পার্স করা খুব কঠিন বলে মনে হয়েছিল।
জোনাথন অ্যালান

উত্তর:


2

জেলি , 34 বাইট

OSị“#®Ʋ?[’ṃ6¤ð+‘»1×⁵’¤+⁸Ḥ¤+ð⁹_10:2

ক্লাস, স্কোর, স্তর: তিনটি কমান্ড লাইন আর্গুমেন্ট গ্রহণ সম্পূর্ণ প্রোগ্রাম।

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

কিভাবে?

কোডের মাঝামাঝি, ðএস দ্বারা বিভাজিত একটি ডায়াডিক লিঙ্ক যা কিছু পূর্বে গণনা করা মানগুলি থেকে ফলাফল গণনা করে:

+‘»1×⁵’¤+⁸Ḥ¤+ - maxHitPoints(halfDieValue, modifier)
+             - add: halfDieValue + modifier
 ‘            - increment
  »1          - maximum of that and 1: this is the level-up delta
       ¤      - nilad followed by links as a nilad:
     ⁵        -   program's 3rd argument, level (5th command line argument)
      ’       -   decrement: this is the number of level-ups
    ×         - multiply: level-ups * level-up delta
           ¤  - nilad followed by links as a nilad:
         ⁸    -   link's left argument: halfDieValue
          Ḥ   -   double: dieValue
        +     - add: level-ups * level-up delta + dieValue
            + - add: level-ups * level-up delta + dieValue + modifier

সংশোধকটি ডানদিকে গণনা করা হয়:

⁹_10:2 - getModifier(class, score)
⁹      - link's right argument, the 2nd argument, the score
 _10   - minus 10
    :2 - integer divide by 2

বাম হাতের অর্ধেক ডাই মান গণনা করা হয়:

OSị“#®Ʋ?[’ṃ6¤ - getHalfDieValue(class)
O             - cast to ordinals
 S            - sum
            ¤ - nilad followed by link(s) as a nilad:
   “#®Ʋ?[’    -   base 250 literal 140775266092
          ṃ6  -   convert to base 6 but with 6s in place of 0s
  ị           - index into (1-indexed and modular)

শ্রেণীবদ্ধের সংখ্যার পরিমাণগুলি বিবেচনা করা mযেমন মডুলো যেমন mসংক্ষিপ্ত ফলন থেকে শ্রেণিবদ্ধকরণ (ডাই দ্বারা) রাখার সময় ন্যূনতম m=15। 15 এর দৈর্ঘ্যের তালিকায় সেই সূচকগুলিতে প্রয়োজনীয় মানগুলি (অর্ধ-ডাই রোল) স্থাপন করা জেলির মডুলার ইনডেক্স সহ এর সাথে দেখার জন্য অনুমতি দেয় । বেইন 6দ্বারা প্রতিস্থাপিত একা দিয়ে বেস 6 নম্বর হিসাবে তালিকাটি সংকোচন করা 0বেস -7 সংক্ষেপণের বা বেস -4 সংক্ষেপণের বিকল্পগুলির চেয়ে বাইট সংক্ষিপ্ত এবং মান বাড়ানো (শৃঙ্খলে অতিরিক্ত নীলাদ ব্যবহারের সাথে যুক্ত বাইট ওভারহেড সহ) । Than-এর পরিবর্তে বেস base, ডিকম্প্রেশনটি ডেসক্র্যাশনটি অর্জন করে যে বেস ডিকম্প্রেশন, (বেস রূপান্তর পরিবর্তে b) এর অন্তর্নিহিত পরিসীমা নির্মাণ রয়েছে যখন এটি সঠিক যুক্তিযুক্ত,r, একটি পূর্ণসংখ্যা, যার মানে হল বেস রূপান্তর মত হল rএবং তারপর কোনো পরিবর্তন 0একটি থেকে rএক বারেই সব।

এটাই:

         class: Sorcerer,Wizard,Bard,Cleric,Druid,Monk,Rogue,Warlock,Fighter,Paladin,Ranger,Barbarian
   Ordinal sum: 837,     625,   377, 594,   504,  405, 514,  723,    713,    697,    607,   898
        mod 15:  12,      10,     2,   9,     9,    0,   4,    3,      8,      7,      7,    13
required value:   3,       3,     4,   4,     4,    4,   4,    4,      5,      5,      5,     6

তালিকায় পুনরায় সাজানো, ১৩ সূচকে 6 টি শূন্যে রূপান্তর করা এবং এটি 6 বেসকে ন্যূনতম করা:

mod 15:    2   3   4           7   8   9  10      12  13      0  
 value: 1, 4,  4,  4,  0,  0,  5,  5,  4,  3,  0,  3,  0,  0,  4

কোড তৈরি করা হচ্ছে

                list: [1,4,4,4,0,0,5,5,4,3,0,3,0,0,4]
         from base 6: 140775266092
         to base 250: [36,9,154,64,92]
code page characters:   # ®   Ʋ  ?  [
          final code: “#®Ʋ?[’ṃ6

8

জাভাস্ক্রিপ্ট (ES6), 81 78 76 74 বাইট

(শ্রেণি, স্তর, সংবিধান_যোগ্যতা_স্কোর) হিসাবে ইনপুট নেয় । বর্গটি কেস-সংবেদনশীল।

(c,l,s,h=(d=parseInt(c,34)*59.9%97%77%6|4)+(s-10>>1))=>(h>0?h*l:h+l-1)+d-2

এটি মূলত আমার প্রাথমিক সংস্করণ হিসাবে একই গণিতটি ব্যবহার করছে, তবে ডি এখন কোনও অনুসন্ধান সারণী ছাড়াই গণনা করা হয়েছে।

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


প্রাথমিক সংস্করণ, 87 84 বাইট

(c,l,s,h=(d=+'55654607554506'[parseInt(c,35)%24%15])+(s-10>>1))=>(h>0?h*l:h+l-1)+d-2

কিভাবে এটা কাজ করে

চতুর অংশ বর্গ স্ট্রিং রূপান্তর করতে হয় সংশ্লিষ্ট হিট পাশা মধ্যে। আরও স্পষ্টভাবে, আমরা যে মানটি সংরক্ষণ করতে যাচ্ছি তা হ'ল ডি = ডাইস / 2 + 1

আমরা যে সূত্রটি parseInt(c, 35) % 24 % 15দেয় তা ব্যবহার করি :

Class       | Base 35 -> decimal | MOD 24 | MOD 15 | d
------------+--------------------+--------+--------+---
"Sorcerer"  |      1847055419467 |     19 |      4 | 4
"Wizard"    |               1138 |     10 |     10 | 4
"Bard"      |             484833 |      9 |      9 | 5
"Cleric"    |          662409592 |     16 |      1 | 5
"Druid"     |           20703143 |     23 |      8 | 5
"Monk"      |             973475 |     11 |     11 | 5
"Rogue"     |           41566539 |      3 |      3 | 5
"Warlock"   |        59391165840 |      0 |      0 | 5
"Fighter"   |        28544153042 |      2 |      2 | 6
"Paladin"   |        46513817828 |     20 |      5 | 6
"Ranger"    |         1434103117 |     13 |     13 | 6
"Barbarian" |     25464249364423 |      7 |      7 | 7

স্ট্রিংয়ের সাথে সম্পর্কিত পজিশনে ডি এর মান সন্নিবেশ করে এবং জিরো দিয়ে অব্যবহৃত স্লটগুলিকে প্যাড করে আমরা পাই:

00000000001111
01234567890123
--------------
55654607554506

অতএব চূড়ান্ত সূত্র:

d = +'55654607554506'[parseInt(c, 35) % 24 % 15]

একবার আমাদের ডি হয়ে গেলে , আমরা গণনা:

h = d + ((s - 10) >> 1))

যা প্রতিটি স্তরের আপগুলিতে প্রাপ্ত পয়েন্টগুলির তাত্ত্বিক সংখ্যা।

তাহলে ইতিবাচক, কেবলমাত্র আমরা গনা:

h * l

যদি তা না হয় তবে আমাদের প্রতিটি লেভেল-আপে কমপক্ষে 1 পয়েন্ট অর্জন করা উচিত তা বিবেচনায় নেওয়া দরকার। সুতরাং আমরা পরিবর্তে গণনা:

h + l - 1

উভয় ক্ষেত্রেই, আমরা d - 2 যোগ করে ফলাফলটি সামঞ্জস্য করি , যাতে প্রাথমিক পয়েন্টগুলির সংখ্যার সঠিকভাবে সংহত করা হয়।

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


আপনার কোডটিতে কিছু ভুল বলে মনে হচ্ছে; 1 এর সিওএন বা উইজার্ডস 2 বা 3 এর সিওনযুক্ত বার্ডগুলি তাদের স্তরের যাই হোক না কেন একই সংখ্যক হিট পয়েন্ট পায়।
নিল

1
@ নীল লক্ষ্য করার জন্য ধন্যবাদ আমি মনে করি এটি স্থির।
আর্নল্ড

3

ব্যাচ, 172 বাইট

@set/aa=1-%3/2,h=4-a
@for %%c in (-1.Sorcerer -1.Wizard 1.Fighter 1.Paladin 1.Ranger 2.Barbarian)do @if %%~xc==.%1 set/aa-=c=%%~nc,h+=c*2
@cmd/cset/a"a*=(a>>9),-~a*~-%2+h

বর্গ, স্তর এবং সংবিধানকে কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে। ব্যাখ্যা: এইচপি গণনা করা যেতে পারে (স্তর 1 এ এইচপি) + (স্তর - 1) + মিনিট (আরও স্তরের প্রতি এইচপি, 0) * (স্তর - 1) স্তরের প্রতি আরও এইচপি হ'ল হিট ডাই প্লাস এবং সংবিধান সংশোধক half বেশিরভাগ ক্লাসে ডি 8 ব্যবহার করা হয় সুতরাং এটি সংবিধানের অর্ধেকের চেয়ে কম হয়ে যায় (1 %3/2-1), যখন এইচপি 1 স্তরের চেয়ে 3 টি বেশি more স্তরের প্রতি আরও এইচপি এবং স্তরের 1 এ এইচপি এর পরে ছয়টি শ্রেণীর জন্য সামঞ্জস্য করা হয় যা ডি 8 ব্যবহার করে না। স্তরের প্রতি আরও এইচপি 0 এর মধ্যে সীমাবদ্ধ থাকে (এটি আসলে নেতিবাচক মানটি ব্যবহার করে কারণ এটি এইভাবে সামান্য গল্ফায়ার হয়))


2

আর, 181 163 বাইট

function(s,n,t){a=Hmisc::Cs(rc,za,rd,er,ui,mk,gu,rl,gh,la,ng,rb)
b=c(6,6,rep(8,6),rep(10,3),12)
d=b[a == substr(s,3,4)]
m=floor((t-10)/2)
d+m+(n-1)*max(d/2+1+m,1)}

বেনামে ফাংশন। হিসাবে চালায় f(class, level, CON)

ব্যাখ্যা: শ্রেণীর নামের তৃতীয় এবং চতুর্থ অক্ষর ব্যবহার করে শ্রেণি sথেকে সর্বাধিক ডাইস ভেক্টর তৈরি করে d(আমি খুঁজে পেয়েছি সবচেয়ে ছোট অনন্য ম্যাপিং)।

কন মোড mস্পেস থেকে সরাসরি, এবং এইচপি = প্রথম স্তর ( d + m) + বাকি স্তরগুলি () (n-1) * max(average_die + m, 1)

> f("Barbarian", 15, 13)
[1] 125
> f("Rogue", 10, 18)
[1] 93
> f("Wizard", 15, 18)
[1] 122
> f("Wizard", 16, 1)
[1] 16
> f("Barbarian", 15, 7)
[1] 80
> f("Warlock", 15, 3)
[1] 18
> f("Ranger", 14, 1)
[1] 18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.