একটি সৌর সিস্টেম তৈরি করুন


39

ইন্ট্রো

এটি একটি কম্পিউটার গেম তৈরি করার সময় সাম্প্রতিক সময়ে আমি যে সত্যিকারের সমস্যার মুখোমুখি হয়েছিল তার উপর ভিত্তি করে এবং আমি ভেবেছিলাম এটি একটি দুর্দান্ত গোল তৈরি করবে ।

নক্ষত্রের সাতটি মূল বর্ণালী শ্রেণি রয়েছে যা বিভিন্ন পরিমাণে তাপকে রেখে দেয়। নক্ষত্রের চারপাশের গ্রহগুলির ভূতত্ত্বটি তারকা থেকে প্রাপ্ত তাপের পরিমাণ দ্বারা ব্যাপকভাবে প্রভাবিত হয়, যা বর্ণালী শ্রেণীর একটি কারণ এবং তারা থেকে দূরত্ব। সুতরাং বুধ কার্যত গলিত, নেপচুন হিমায়িত।

আমার গেমের গ্যালাক্সিটি প্রক্রিয়াগতভাবে উত্পন্ন হয় এবং এলোমেলোভাবে দেওয়া নক্ষত্রের জন্য গ্রহের ধরণের নির্বাচন করা সত্যিকারের 'যদি বিবৃতি হয়' বলে প্রমাণিত হয়!

চ্যালেঞ্জ

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

ইনপুট

heatতারা থেকে গ্রহটির দ্বারা প্রাপ্ত তাপের পরিমাণ উপস্থাপন করে 4 থেকে 11 ব্যাপ্তির একটি পূর্ণসংখ্যা ।

ভেরিয়েবল

এই টেবিলটি ভিত্তিতে সম্ভাব্য গ্রহগুলি দেখায় heat। আপনার পদ্ধতিটি প্রথমে তাপের ন্যূনতম এবং তাপ সর্বাধিকের উপর ভিত্তি করে উপলভ্য পছন্দগুলি সংকীর্ণ করা heatউচিত, দুটি বা এর মধ্যে পড়তে হবে। উদাহরণস্বরূপ, 10 টির উত্তাপের সাথে একমাত্র পছন্দগুলি মজাদার, আয়রন এবং লাভা হবে choices

Planet type    Heat min   Heat max   Random Chance
Gas Giant         4          9            15
Ice               4          6            10
Ice Giant         4          6            10
Gaia class        5          7            10
Dense Atmosphere  7          9            10
Desert            7          10           25
Iron              7          10           14
Lava             10          11           6

এর পরে, একটি গ্রহের সম্ভাব্যতা (বাকি পছন্দগুলিতে) নির্বাচিত হওয়ার সম্ভাবনা হ'ল সমস্ত পছন্দগুলির এলোমেলো সম্ভাবনার যোগফলের দ্বারা বিভাজিত সম্ভাবনা।

উপরের উদাহরণে, আয়রন নির্বাচিত হওয়ার সম্ভাবনা হ'ল 14/(25+14+6)

আউটপুট

গ্রহের ধরণটিকে স্ট্রিং হিসাবে ফিরিয়ে দিন।

যুক্তিযুক্ত তীরচিহ্নগুলি এড়াতে আপনি যথাসাধ্য চেষ্টা করুন। সংক্ষিপ্ততম কোড জয়, সৃজনশীলতার জন্য চারদিকে পয়েন্ট। শুভ গল্ফিং!


"গাইয়া ক্লাস" এর "শ্রেণি" কি অন্য কিছুর মতো বড় করা উচিত?
জোনাথন অ্যালান

@ জোনাথন অ্যালান এটি নিম্নতর মামলা কারণ এটি যথাযথ বিশেষ্য নয়
অ্যাবসিনথে

1
@Absinthe তাহলে কেন ঘন হয় একটি tmosphere বড়হাতের?
এরিক আউটগল্ফার

17
... কেউ কি বলেছে? | পিপিসিজিতে আপনাকে স্বাগতম, এবং প্রথম প্রথম চ্যালেঞ্জ!
ব্যবহারকারী 202729

3
@ এরিকডুমিনিল ওরফে একটি তীর শিরোনাম বিরোধী প্যাটার্ন, ওরফে নেস্টেড-ইফ-বিবৃতি-নরক! wiki.c2.com/?ArrowAntiPattern
Absinthe

উত্তর:


12

জেলি , 78 বাইট

“'ĖøÆḳƙ’ḃ7ṣ6+\+3r/ċ€×“½½½½©ÐÇı‘
“ŀỊẋ8ƒ³ẈRɼƈñqẋẏȧɱḌ<ṄỴḳ⁾ÆʋeẒĊ'@ƬØƓƝ}ḟ¬»ỴW€ẋ"ÇẎX

একটি পূর্ণসংখ্যার লিঙ্ক একটি পূর্ণসংখ্যাকে ( [4,11] এ ) গ্রহণ করে যা অক্ষরের একটি তালিকা প্রদান করে।

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

কিভাবে?

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

“'ĖøÆḳƙ’ḃ7ṣ6+\+3r/ċ€×“½½½½©ÐÇı‘ - Link 1, getDistribution: integer
“'ĖøÆḳƙ’                        - base 250 integer = 39824688429662
        ḃ7                      - to bijective-base 7 = [1,1,2,4,7,1,4,4,6,2,2,2,2,1,5,3,3]
          ṣ6                    - split at sixes = [[1,1,2,4,7,1,4,4][2,2,2,2,1,5,3,3]]
             \                  - cumulative reduce with:
            +                   -   addition = [[1,1,2,4,7,1,4,4][3,3,4,6,8,6,7,7]]
              +3                - add three = [[4,4,5,7,10,4,7,7],[6,6,7,9,11,9,10,10]]
                 /              - reduce with:
                r               -   inclusive range = [[4,5,6],[4,5,6],[5,6,7],[7,8,9],[10,11],[4,5,6,7,8,9],[7,8,9,10],[7,8,9,10]]
                  ċ€            - count (input) in €ach e.g. for 5: [1, 1, 1, 0,0, 1, 0, 0]
                     “½½½½©ÐÇı‘ - list of code-page indices        [10,10,10,10,6,15,14,25]
                    ×           - multiply                         [10,10,10, 0,0,15, 0, 0]

“ ... »ỴW€ẋ"ÇẎX - Main link: integer
“ ... »         - compressed string = "Ice\nIce Giant\nGaia class\nDense Atmosphere\nLava\nGas Giant\nIron\nDesert"
       Ỵ        - split at new lines = ["Ice","Ice Giant","Gaia class","Dense Atmosphere","Lava","Gas Giant","Iron","Desert"]
        W€      - wrap €ach in a list
            Ç   - call last link (1) as a monad e.g. for 5: [10,10,10,0,0,15,0,0]
           "    - zip with:
          ẋ     -   repeat e.g. for 5:  [["Ice","Ice","Ice","Ice","Ice","Ice","Ice","Ice","Ice","Ice"],["Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant"],["Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class"],["Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant"]]
             Ẏ  - tighten               ["Ice","Ice","Ice","Ice","Ice","Ice","Ice","Ice","Ice","Ice","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Ice Giant","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gaia class","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant","Gas Giant"]
              X - a random choice from that list

ক্রেজি! সাবাশ.
Absinthe

@ অ্যাবসিনথে আপনি সহজেই আপভোট করতে পারেন। পার্শ্ব দ্রষ্টব্য: কোড গল্ফে আমরা সাধারণত উত্তরগুলি গ্রহণ করি না।
ব্যবহারকারী 202729

2
@ ব্যবহারকারী202729 আমি এক বা দুই দিনের মধ্যে ভোট যুক্ত করব। আমি জেলি এই কোডটি উন্মোচন করার চেষ্টা করছি এর জন্য গিটহাব পৃষ্ঠাটি সন্ধান করছিলাম। আমি বিশ্বাস করি ক্রেজি! সর্বাধিক উপযুক্ত :)
Absinthe

2
@ আবসিন্থে হ্যাঁ, আমি বিশ্বাস করি যে বর্ণনামূলক বিভাগটি প্রায়শই অ-গৌরবময় ভাষার জমা দেওয়ার জন্য খুব ভাল জিনিস :)
জোনাথন অ্যালান

3
আপনি মানুষ সত্যই পাগল।
সেল্ভেক

7

আর , 225 223 183 বাইট

জিউসেপিকে 188 বাইটে নামিয়ে আনার জন্য চতুর রিফ্যাক্টরিংয়ের জন্য ধন্যবাদ; বাকি পাঁচটি কম অপ্রয়োজনীয় সংখ্যা উপস্থাপনা ব্যবহার করে শেভ করা হয়েছিল।

i=scan()-4
sample(c("Gas Giant","Ice","Ice Giant","Gaia class","Dense Atmosphere","Desert","Iron","Lava")[l<-c(0,0,0,1,3,3,3,6)<=i&c(5,2,2,3,5,6,6,7)>=i],1,,c(3,2,2,2,2,5,2.8,1.2)[l])

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


একটা চমৎকার পদ্ধতি যে, আমি যদি আমার যদি বিবৃতি ধাঁধা সরানোর চিন্তা করতে হতে পারে C # :) এই পক্ষে
সোমরস

আমি যৌক্তিক সূচক সংরক্ষণ বদলে ব্যবহার সন্দেহ with, data.frameআর subsetখাটো করা হবে।
জিউসেপ


@ জিউস্পেপ, গ্রহ উপাত্ত সহ আমার কিছু কৌশল ব্যবহার করে আপনি সম্ভবত আরও কিছু বাইট অর্জন করতে পারবেন তবে আমি মনে করি যে সম্ভাব্যতা ভেক্টরকে বাকী ডেটা থেকে আলাদা করার আপনার ধারণাটি ব্যবহার করে আমিও আমার উন্নতি করব।
কিরিল এল।

4

জাভাস্ক্রিপ্ট 212

Thx জোনাথন অ্যালান সংরক্ষণ 6 বাইট সম্পাদনা করুন

h=>[963,640,640,649,667,1628,924,437].map((z,i)=>(z/8&7)+4>h|z%8+6<h?0:t=r.push(...Array(z>>6).fill(i)),r=[])&&"Gas Giant,Ice,Ice Giant,Gaia class,Dense Atmosphere,Desert,Iron,Lava".split`,`[r[t*Math.random()|0]]

কম গল্ফড

h=>( 
   r = [],
   // heat min,max and chance encoded in base 8 with offsets
   // min range 4 to 10, with offset 4, 0 to 6
   // max range 6 to 11, with offset 6, 0 to 5
   [(4-4)*8 + 9-6 + 15*64,
    (4-4)*8 + 6-6 + 10*64,
    (4-4)*8 + 6-6 + 10*64,
    (5-4)*8 + 7-6 + 10*64,
    (7-4)*8 + 9-6 + 10*64,
    (7-4)*8 + 10-6+ 25*64,
    (7-4)*8 + 10-6+ 14*64,
    (10-4)*8+ 11-6+  6*64]
   .forEach( (z,i) => (
      min = (z / 8 & 7) + 4, 
      max = z % 8 + 6,
      chance = z >> 6,
      min > h || max < h 
      ? 0 // out of range
      // add current position i repeated 'chance' times
      // array size in t
      : t = r.push(...Array(chance).fill(i))
   ),
   pos = r[t * Math.random() | 0],
   ["Gas Giant", "Ice", "Ice Giant", "Gaia class", "Dense Atmosphere", "Desert", "Iron", "Lava"][pos]
)

পরীক্ষা

var F=
h=>[963,640,640,649,667,1628,924,437].map((z,i)=>(z/8&7)+4>h|z%8+6<h?0:t=r.push(...Array(z>>6).fill(i)),r=[])&&"Gas Giant,Ice,Ice Giant,Gaia class,Dense Atmosphere,Desert,Iron,Lava".split`,`[r[t*Math.random()|0]]

function test()
{
   var heat=+H.value
   var i,result,hashtable={},rep=1e5
   for (i=0;i<rep;i++)
     result = F(heat),
     hashtable[result] = -~hashtable[result]
 
   console.log('Input',heat)
   for (i in hashtable)
   {
     console.log(i,(hashtable[i]/rep*100).toFixed(2),'%')
   }
}
<input id=H type=number min=1 max =15 value=10>
<button onclick='test()'>Test</button>


আপনার বেস 16 টির একটি সংখ্যা 1 টি বন্ধ (হওয়া উচিত [3913, 2630, 2630, 2647, 2681, 6522, 3706, 1707])
জোনাথন অ্যালান

আমি মনে করি (কিন্তু 100% নই) আপনি প্রতিস্থাপন 2 সংরক্ষণ করতে পারবেন (z/16&15)সঙ্গে z/16&15। হোক না কেন, আপনি 6 বাইটের তিন ও ছয় ... ব্যবহার অফসেট সঙ্গে একটি বেস 8 কম্প্রেশন ব্যবহার সংরক্ষণ করতে পারবেন [971,648,648,657,675,1636,932,445]সঙ্গে z/8&7+3, z%8+6এবং z>>6:)
জনাথন অ্যালান

@ জোনাথন অ্যালান অফসেট! দুর্দান্ত ধারণা, thx
edc65


1
@ শেগি আপনি মন্তব্যটি আপনার ঠিক উপরে দেখেছেন? (দীর্ঘ গল্প সংক্ষিপ্ত: না)
edc65

4

নারকেল , 214 195 বাইট

t->choice..sum([[n]*g(p)*(g(a)<t<g(b))for*n,a,b,p in'Gas Giant3AF_Ice37A_Ice Giant37A_Gaia class48A_Dense Atmosphere6AA_Desert6BP_Iron6BE_Lava9C6'.split('_')],[])
from random import*
g=int$(?,36)

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

পাইথন বন্দরটি 203 200 বাইট দীর্ঘ হবে:

lambda t:choice(sum([[n]*int(p,36)*(int(a)<t<int(b,36))for*n,a,b,p in'Gas Giant3AF_Ice37A_Ice Giant37A_Gaia class48A_Dense Atmosphere6AA_Desert6BP_Iron6BE_Lava9C6'.split('_')],[]))
from random import*

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


1
মজার বিষয় হল, লেখার সময় আপনার পাইথন বন্দরটি অন্য সমস্ত পাইথন সলিউশনকে মারধর করে!
কিরিল এল।

4

কাঠকয়লা , 115 111 বাইট

≔I⁻N³θF⁸«≔§⪪”↷&∧⬤.YLφκ¦(⁼;σ≕]✂↙ζC” ιη¿›θη¿‹θ§η¹FI✂η²⊞υ黧⪪”↓(″1↨▷]U,&ζ^iI″RSY≡´⍘'#﹪υVw5Vu>D<U5r6⁰Q▷Z◨⌕⁸ΣεCZ”¶‽υ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সম্পাদনা করুন: কেবলমাত্র ASCII- এর জন্য 4 বাইট সংরক্ষণ করা হয়েছে ব্যাখ্যা:

≔I⁻N³θ

ইনপুট থেকে 3 বিয়োগ করুন যাতে এটি একক অঙ্কগুলির সাথে তুলনা করা যায়।

F⁸«≔§⪪”↷&∧⬤.YLφκ¦(⁼;σ≕]✂↙ζC” ιη

0715 0410 0410 1510 3710 3825 3814 696স্পেসগুলিতে স্ট্রিংটি বিভক্ত করুন (স্পেসগুলি কমাগুলির চেয়ে আরও ভালভাবে সংকোচিত হয়েছে বলে মনে হচ্ছে তবে আমি অন্য কোনও অক্ষর চেষ্টা করিনি) এবং প্রতিটি অংশের উপর লুপ করে।

¿›θη¿‹θ§η¹FI✂η²⊞υι»

প্রথম এবং দ্বিতীয় সংখ্যাগুলির সাথে ইনপুট তুলনা করুন এবং এর মধ্যে যদি লুপ সূচকটি পূর্বনির্ধারিত খালি তালিকার প্রদত্ত সংখ্যার বারটিকে ধাক্কা দেয়, সুতরাং এটি পপুলেটিং করে।

§⪪”↓(″1↨▷]U,&ζ^iI″RSY≡´⍘'#﹪υVw5Vu>D<U5r6⁰Q▷Z◨⌕⁸ΣεCZ”¶‽υ

নিউলাইনগুলিতে গ্রহগুলির তালিকা বিভক্ত করুন (আবার কোনও কারণে কমা থেকে ভাল) এবং তালিকা থেকে এলোমেলোভাবে নির্বাচিত সূচকের সাথে সম্পর্কিত উপাদানটি নির্বাচন করুন।


সুন্দর. প্রতিটি গ্রহের জন্য বিভিন্ন সম্ভাবনার মধ্যে এলোমেলো (ইউ) ফ্যাক্টরটি কীভাবে হয়? (আমি কাঠকয়লা সম্পর্কে কিছুই জানি না)
Absinthe

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

@ জোনাথন অ্যালান এটি পেয়েছে, ধন্যবাদ
আবসিনথে

111 বাইট , আমি মনে করি? সাধারণভাবে কেবল অক্ষর শ্রেণিতে আগের অক্ষরগুলি ব্যবহার করার চেষ্টা করুন, সংক্ষেপণ # 11 দেখুন। ডিফল্ট ক্রম আরেকটি বাইট সংরক্ষণ করে, তবে এটি কেবলমাত্র যদি আপনার কেবলমাত্র চিহ্ন থাকে
ASCII- কেবল

@ এএসসিআইআই-কেবল কাদা হিসাবে পরিষ্কার করুন ... সেখানে নতুন লাইনের চেয়ে আরও ভাল কেন অন্য স্ট্রিংয়ের জন্য ফাঁকা জায়গা রয়েছে?
নীল

3

আর , 196 193 190 175 171 বাইট

sample(readLines(,8),1,,c(3,2,2,2,2,5,2.8,1.2)*((x=scan()-3)>c(0,0,0,1,3,3,3,6)&x<c(7,4,4,5,7,8,8,9)))
Gas Giant
Ice
Ice Giant
Gaia class
Dense Atmosphere
Desert
Iron
Lava

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

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

  • readLinesস্ট্রিংগুলির চারপাশে প্রচুর পরিমাণে উদ্ধৃতি অক্ষর এড়াতে গ্রাহের ডেটা সিএসভি হিসাবে এনকোডিংয়ের সাথে নাম সংগ্রহ করা ।

  • তাপ প্যারাম tweaking যাতে আমরা ব্যবহার করতে পারে <এবং >পরিবর্তে লক্ষণ <=এবং >=

  • দ্বি সংখ্যার সংখ্যা থেকে মুক্তি পাওয়ার Heat min, Heat maxজন্য তাপের ডেটা ফর্ম্যাটটিকে পরিবর্তন করা Heat min, Heat Delta
    সমস্ত নম্বর -৩ দ্বারা স্থানান্তরিত করে প্রতিস্থাপন করা হয়েছে

  • সমস্ত গ্রহের সম্ভাব্যতাগুলি 5 দ্বারা ভাগ করা যার ফলস্বরূপ কয়েকটি কম সংখ্যাও রয়েছে।

  • বুলিয়ান্স ভেক্টরের সাথে গ্রহ সম্ভাবনার ভেক্টরকে গুণিত করা (আমাদের ইনপুট তাপের প্রয়োজনীয়তাগুলি পূরণ করে কিনা তা নির্দেশ করে) অনুপযুক্ত গ্রহের সম্ভাবনাগুলি বাতিল করতে।

সম্ভবত, কিছু ধরণের ডেটা কম্প্রেশন প্রয়োগ করে আরও কয়েকটি বাইট অর্জন করা যেতে পারে।
আমার মনে হয়, আর হয় না।


1
t=পরিবর্তে text=পাশাপাশি 3 বাইট সংরক্ষণ করা হবে।
জিউসেপ


যদিও read.csvএকটি একক কলামের জন্য নিখুঁত উত্তরটি readLinesসম্পূর্ণরূপে উদ্ধৃতিগুলি থেকে মুক্তি পাওয়ার পরামর্শ দেয়, যদিও আপনাকে স্পষ্টভাবে সেট করতে হবেn
জিউসেপ

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

ওহ আমি কোথায় সেই প্রথম বন্ধনী থেকে এসেছিলেন বিস্ময়ের উদ্রেক ....
: Giuseppe

3

পাইথন, 282 বাইট , 261 বাইট:

from random import*
i,p,l=input(),[('Gas Giant',3,11,15),("Ice",3,7,10),("Ice Giant",3,7,10),("Gaia Class",4,8,10),("Dense Atmosphere",6,10,10),("Desert",6,11,25),("Iron",6,11,14),("Lava",9,12,6)],[]
for x in p:exec"l+=x[0],;"*(x[1]<i<x[2])*x[3]
print choice(l)

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

সম্পাদনা করুন: জোনাথন ফ্রেচের কাছে creditণ দিয়ে - কয়েক বাইট ছুঁড়ে ফেলার জন্য লুপটি পুনরায় প্রেরণ করুন। তালিকায় আইটেম যুক্ত করার আরও ভাল উপায়


3
পিপিসিজিতে আপনাকে স্বাগতম! আপনি কীভাবে বাইট গণনা করেছেন তা নিশ্চিত নন, তবে আমি কেবল ২৮৩ পাচ্ছি that ইনডেন্টটি যদি 4 বাইটের পরিবর্তে কোনও ট্যাব হয়।
মার্টিন এন্ডার

1
i in range(x[1], x[2])নির্দিষ্টকরণের বিপরীতে তাপের উপরের প্রান্তটি বাদ দেয় না ?
গ্রিফার


1
এটি কোন সাহায্য হতে পারে? p,d="Gas Giant,Ice,Ice Giant,Gaia class,Dense Atmosphere,Desert,Iron,Lava".split(","),[ord(i)-10 for i in"#"] d=[[p[x//3]]+d[x:x+3]for x in range(0,len(d),3)]
গোঁফ মোসেস

1
@ ক্রোমেন ক্ষমা চেয়েছেন বলে মনে হচ্ছে মন্তব্যগুলিতে কিছু চরিত্র রয়েছে।
গোঁফামোস

2

পরিসংখ্যান প্যাকেজ সহ অক্টেভ , 178 176 174 158 বাইট

@(h)randsample(strsplit('Gas Giant,Ice,Ice Giant,Gaia class,Dense Atmosphere,Desert,Iron,Lava',','),1,1,('UPPPP_TL'-70).*(h>'IIIJLLLO'-70&h<'PMMNPQQR'-70)){1}

কোডটি একটি বেনামি ফাংশন সংজ্ঞায়িত করে যা একটি নম্বর দেয় এবং একটি স্ট্রিং আউটপুট দেয়।

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

ব্যাখ্যা

কোড

@(h)

ইনপুট সহ একটি বেনামী ফাংশন সংজ্ঞায়িত করে h

স্ট্রিং

'Gas Giant,Ice,Ice Giant,Gaia class,Dense Atmosphere,Desert,Iron,Lava'

ব্যবহার করে কমাতে বিভক্ত হয়

strsplit(...,',')

ফলাফলটি স্ট্রিংগুলির একটি সেল অ্যারে, যেখানে প্রতিটি স্ট্রিং একটি গ্রহ শ্রেণি।

কোড

'IIIJLLLO'-70

দেখানো স্ট্রিং সংজ্ঞা দেয় এবং 70এর অক্ষরের কোড পয়েন্টগুলি থেকে বিয়োগ করে। এই সর্বনিম্ন তাপ মূল্যবোধের অ্যারের দেয় বিয়োগ 1 , যে [3 3 3 4 6 6 6 9]

একইভাবে,

'PMMNPQQR'-70

সর্বাধিক উত্তাপের মানের যোগফল 1 এর অ্যারে উত্পাদন করে , যা [10 7 7 8 10 11 11 12]

তুলনা

h>...&h<...

কোন গ্রহের ক্লাসগুলি সম্ভব তা নির্দেশ করে trueবা একটি অ্যারে দিন falsear

অন্য দিকে,

'UPPPP_TL'-70

এলোমেলো সুযোগের মানগুলির অ্যারের সংজ্ঞা দেয় [15 10 10 10 10 25 14 6],।

অপারেশন

(...).*(...)

পরের দুটি অ্যারের উপাদান অনুসারে গুণ ( এবং যথাক্রমে trueএবং এরূপ falseআচরণ ) multip এটি এমন একটি অ্যারে দেয় যেখানে প্রতিটি গ্রহ শ্রেণীর হয় হয় তার এলোমেলো সুযোগ, অথবা যদি সেই শ্রেণিটি ইনপুটের উপর ভিত্তি করে সম্ভব না হয়। এই অ্যারেটি এলোমেলো নমুনার ক্ষেত্রে ওজন হিসাবে ব্যবহৃত হবে010

ফাংশন কল

randsample(...,1,1,...)

ওজনের গণনা করা অ্যারে (চতুর্থ ইনপুট আর্গুমেন্ট) ব্যবহার করে স্ট্রিংয়ের সেল অ্যারে (প্রথম ইনপুট আর্গুমেন্ট) থেকে একটির একটি ঘর নির্বাচন করে। বিশেষত, ফাংশনটি randsampleস্বয়ংক্রিয়ভাবে ওজনকে সম্ভাবনার থেকে ওজনকে স্বাভাবিক করে তোলে এবং তারপরে সম্ভাব্যতার সাথে এলোমেলো নির্বাচন করে। ফলস্বরূপ একটি স্ট্রিংযুক্ত একটি সেল অ্যারে। কোড

{1}

স্ট্রিংটি নিষ্কাশন করতে ব্যবহৃত হয় যা ফাংশন আউটপুট গঠন করে।


2
দুর্দান্ত ব্যাখ্যা, ধন্যবাদ। দুর্দান্ত স্কোর।
Absinthe


1

পার্ল 5 ( -p), 230 বাইট

@a=(['Gas Giant',4,9,15],[Ice,4,6,10],['Ice Giant',4,6,10],['Gaia class',5,7,10],['Dense Atmosphere',7,9,10],[Desert,7,10,25],[Iron,7,10,14],[Lava,10,11,6]);//;map{push@b,($$_[0])x($$_[3]*($$_[1]<=$'&&$'<=$$_[2]))}@a;$_=$b[rand@b]

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


আপনি সর্বনিম্ন হিট এক মুছে ফেলুন এবং সর্বোচ্চ হিট এক (যে দিতে হবে যুক্ত করে থাকেন [Ice,4,5,11]পরিবর্তে [Ice,4,6,10], ইত্যাদি) তারপর আপনি ব্যবহার করতে সক্ষম হবেন <পরিবর্তে <=এবং >পরিবর্তে >=, এইভাবে 2 বাইট সংরক্ষণ। (হ্যাঁ, এটি খুব বেশি কিছু নয় ...)
দাদা

1

নিম , 314 298 294 বাইট

import random,sequtils
proc c(h:int)=
 var a= @[""]
 a.del 0
 for n in[("Gas Giant",4,9,15),("Ice",4,6,10),("Ice Giant",4,6,10),("Gaia Class",5,7,10),("Dense Atmosphere",7,9,10),("Desert",7,10,25),("Iron",7,10,14),("Lava",10,11,6)]:(if h>=n[1]and h<=n[2]:a.add repeat(n[0],n[3]))
 echo random a

লুপের জন্য এখন এক লাইনে, কোনও রিটার্ন নেই, অন্তর্নিহিত ধরণের কাছে কম বাইট

4 টি স্পেস সরানো হয়েছে (ধন্যবাদ কেভিন )

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


আমি কখনই প্রোগ্রামিং করি নি Nim, তবে আমি মনে করি আপনি চারটি স্থান গল্ফ করতে পারেন: একটিতে for n in[(; এবং তিন এ if h>=n[1]and h<=n[2]
কেভিন ক্রুইজসেন

1

05AB1E , 78 76 বাইট

”Œï²°™Ä²° Gaia classêη•™Äµ‰Ÿ± Lava”#8äðýā<•ŒEŽuS,•2ôו9èÁnÇ∞Λ•SÌ2ôεŸIå}ÏSΩè

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

ব্যাখ্যা

”Œï²°™Ä²° Gaia classêη•™Äµ‰Ÿ± Lava”
স্ট্রিং ধাক্কা Gas Giant Ice Giant Gaia class Dense Atmosphere Ice Desert Iron Lava

#                                          # split on spaces
 8ä                                        # divide into 8 parts
   ðý                                      # join each by spaces
     ā<                                    # push the range [0 ... 7]
       •ŒEŽuS,•                            # push 151010101025146
               2ô                          # split into pieces of 2
                                           # results in [15, 10, 10, 10, 10, 25, 14, 6]
                 ×                         # repeat each number in the range by these amounts
                                           # results in ['000000000000000', '1111111111', '2222222222', '3333333333', '4444444444', '5555555555555555555555555', '66666666666666', '777777']
                  •9èÁnÇ∞Λ•                # push 2724355724585889
                           S               # split to list of digits
                            Ì              # decrement each twice
                                           # results in [4,9,4,6,5,7,7,9,4,6,7,10,7,10,10,11]
                             2ô            # split into pieces of 2
                                           # results in [[4, 9], [4, 6], [5, 7], [7, 9], [4, 6], [7, 10], [7, 10], [10, 11]]
                               εŸIå}       # apply to each pair
                                Ÿ          # range [a ... b]
                                 Iå        # check if input is contained in the range
                                           # ex, for input 10: [0, 0, 0, 0, 0, 1, 1, 1]
                                    Ï      # keep only the indices which are true
                                           # ex, for input 10: ['5555555555555555555555555', '66666666666666', '777777']
                                     S     # split to list of digits
                                      Ω    # pick one at random
                                       è   # index into the list of strings with this

1

পাইথন 3, 199 194 বাইট

from random import*
lambda n:choices("Ice|Ice Giant|Gas Giant|Gaia class|Dense Atmosphere|Desert|Iron|Lava".split('|'),[(0x33b2a53d4a>>5*i&31)*(0xc07878380e3f0707>>8*i+n-4&1)for i in range(8)])

বিভাজন hপৃথক বিট মুখোশ, এবং র্যান্ডম সুযোগ মান (ব্যাখ্যা দেখুন) একটি নিয়োগ নির্মূল করে কয়েক বাইট সংরক্ষণ মধ্যে hএবং সরল range()তালিকা ধী হবে।

পূর্ববর্তী সমাধান

from random import*
h=0xc033c39e3270a0e51fbc1d40ea
lambda n:choices("Ice|Ice Giant|Gas Giant|Gaia class|Dense Atmosphere|Desert|Iron|Lava".split('|'),[(h>>i&31)*(h>>i+n+1&1)for i in range(0,104,13)])

একটি বেনামি ফাংশন সংজ্ঞায়িত করে যা কোনও int নেয় এবং গ্রহের ধরণটি দেয়।

প্রতিটি গ্রহের ধরণের জন্য, 13-বিট মান গণনা করা হয়েছিল। শীর্ষ 8 বিট গ্রহের ধরণের জন্য বৈধ তাপের মানগুলির একটি বিট মাস্ককে সংজ্ঞায়িত করে। নীচের 5 বিটগুলি গ্রহের ধরণের জন্য এলোমেলো সুযোগ। উদাহরণস্বরূপ, "গায়া ক্লাস" তাপ মানের 4 থেকে 7 এর জন্য একটি বৈধ প্রকার, সুতরাং এটির একটি মুখোশ রয়েছে 0b00001111। এটির এলোমেলো সুযোগ রয়েছে 10, বা 0b01010। তাদের একত্রিত করার ফলে এটি 0b0000111101010"গাইয়া শ্রেণি" প্রকারের জন্য 13-বিট মান । প্রতিটি গ্রহের ধরণের জন্য 13-বিট মানগুলি সম্মিলিত হয় h(সর্বনিম্ন 13 বিট "আইস" গ্রহের ধরণের জন্য)) (নতুন উত্তরটি এই মানগুলি একত্রিত করে না)।

ওজনের একটি তালিকা তৈরি করতে তালিকার বোঝাপড়াটি 13-বিট মানগুলির উপরে পুনরাবৃত্তি করে, যেখানে গ্রহের ধরণ প্রদত্ত তাপ মানের জন্য বৈধ পছন্দ এবং অন্যথায় শূন্য হলে ওজন এলোমেলো সুযোগ। প্রতিটি গ্রহের ধরণের (h>>i&31)জন্য, সেই গ্রহের ধরণের জন্য এলোমেলো সুযোগ বের করে। (h>>i+n+1&1)যদি গ্রহের ধরণটি তাপের মানের জন্য বৈধ পছন্দ হয় nএবং অন্যথায় 0 তে মূল্যায়ন করে তবে 1 এটিকে মূল্যায়ন করে।

random.choices(choices, weights)ওজনের তালিকার ভিত্তিতে লাইব্রেরির ফাংশন পছন্দগুলির তালিকা থেকে একটি আইটেম নির্বাচন করে।


i+n+1হতে পারে i-~nটিআইও
ovs

1

রুবি , 214 193 189 বাইট

->h{'Gas Giant,Desert,Iron,Lava,Ice,Ice Giant,Gaia class,Dense Atmosphere'.split(?,).zip(31006330.digits,75449887.digits,[15,25,14,6]).flat_map{|n,m,x,r|m<h-3&&x>h-3?[n]*(r||10):[]}.sample}

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


দুঃখিত, আমি আউটপুটটি পাই না, এটি কি তালিকার প্রথম আইটেম হবে?
Absinthe

@ আবসিন্থে আমি কয়েকটি শিরোনাম যুক্ত করেছি, আবার চেক করুন। এটি 4 থেকে 11 পর্যন্ত সমস্ত তাপের স্তর এবং প্রতিটিটির জন্য এলোমেলোভাবে উত্পন্ন গ্রহ
অসোন তুহিদ

আহ আমি এটি পেয়েছি ধন্যবাদ, যদিও আদর্শভাবে কেবল একটি স্ট্রিং আউটপুট হওয়া উচিত
Absinthe

@ অ্যাবসিনথে আপনি ঠিক বলেছেন, এটি কেবলমাত্র আমার নিজের পরীক্ষার কোড ছিল, এখন আপনি যে তাপ মূল্য চান তা ইনপুট করতে পারেন এবং এটির 1 টি ফলাফল ফিরে আসে
আসোন তুহিদ

1

হাস্কেল , 377 364 358 318 312 270 265 262 256 251 বাইট

import System.Random
f h|x<-[n|(n,(a,b,c))<-zip(lines"Gas Giant\nIce\nIce Giant\nGaia class\nDense Atmosphere\n
Desert\nIron\nLava")$zip3[4,4,4,5,7,7,7,10][9,6,6,7,9,10,10,11][15,10,10,10,10,25,14,6],h<=
b,h>=a,_<-[1..c]]=(x!!)<$>randomRIO(0,length x-1)

(আমি উত্তম প্রিন্টআউটটির জন্য লাইন ব্রেকগুলি যুক্ত করেছি)। টাস্কটি "মুদ্রণ" নয়, "রিটার্ন" বলে, তাই fএকটি ফাংশন যা এলোমেলোভাবে নির্বাচিত গ্রহের নামটি IOমোনাডে ফিরিয়ে দেয় f :: Int -> IO String,।

mainহয় main = do {f 10 >>= print}( Haskell, টিপস golfing এটা গণনা করা হয় না বলে)। ছাপে

"Iron"     -- or "Desert", or "Lava"

(সম্পাদনা: মুছে ফেলা'র& বেস কেস; mainআউট সরিয়ে; চতুর্থাংশে পরিবর্তিত হয়ে এবং unzipপ্যাটার্ন গার্ডগুলিতে সরে গেছে এবং লাইকোনির পরামর্শ>>= অনুসরণ করে , ধন্যবাদ জেলির সমাধান থেকে পদ্ধতির প্রয়োগ করে নামগুলি পুনরাবৃত্তি করুন; সুস্পষ্ট ধরণের আর প্রয়োজন নেই লাইকোনির অন্য একটি পরামর্শ আরও 3 টি বাইট সংরক্ষণ করে; এটি একটি ফাংশন হিসাবে তৈরি করেছে ; চ্যাট রুম থেকে পরামর্শ কার্যকর করেছে )। IO

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


নিস! মন্তব্যে বন্যা এড়াতে আপনি নিজের উত্তর সম্পর্কে আরও আলোচনার জন্য মনডস এবং মেনের হাস্কেল চ্যাট রুমে যোগ দিতে পারেন।
লাইকনি

0

জাভা 8, 398 384 বাইট

n->{String r="",a[];for(String x:"456789~Gas Giant~15;456~Ice~10;456~Ice Giant~10;567~Gaia class~10;789~Dense Atmosphere~10;78910~Desert~25;78910~Iron~14;1011~Lava~6".split(";"))if(x.split("~")[0].contains(n))r+=x+";";long t=0,u=0;for(String x:(a=r.split(";")))t+=new Long(x.split("~")[2]);t*=Math.random();for(String x:a)if((u+=new Long((a=x.split("~"))[2]))>t)return a[1];return"";}

এটি অবশ্যই আরও কিছু গল্ফ করা যেতে পারে তবে জাভাতে স্ট্রিংসের সাথে সংমিশ্রণের সম্ভাবনা খুব সহজ নয়।

ব্যাখ্যা:

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

n->{                // Method with String as both parameter and return-type
  String r="",      //  Temp-String, starting empty
         a[];       //  Temp String-array
  for(String x:"456789~Gas Giant~15;456~Ice~10;456~Ice Giant~10;567~Gaia class~10;789~Dense Atmosphere~10;78910~Desert~25;78910~Iron~14;1011~Lava~6".split(";"))
                    //  Loop over the String-parts in the format "heats~type~probability"
    if(x.split("~")[0].contains(n))
                    //   If the heats contains the input
      r+=x+";";     //    Append this entire String-part to the temp-String `r`
  long t=0,u=0;     //  Temp numbers, both starting empty
  for(String x:(a=r.split(";")))
                    //  Loop over the temp-String parts:
    t+=new Long(x.split("~")[2]);
                    //   Sum their probabilities
  t*=Math.random(); //  Get a random number in the range [0,sum_of_probabilities)
  for(String x:a)   //  Loop over the temp-String parts again
    if((u+=new Long((a=x.split("~"))[2]))>t)
                    //   The moment the current probability-sum is > the random number
      return a[1];  //    Return the Type of planet
  return"";}        //  Mandatory return we won't encounter (which returns nothing)

0

ন্যূনতম , 280 277 বাইট

:a ' =b (("Gas Giant" 4 9 15) ("Ice" 4 6 10) ("Ice Giant" 4 6 10) ("Gaia Class" 5 7 10) ("Dense Atmosphere" 7 9 10) ("Desert" 7 10 25) ("Iron" 7 10 14) ("Lava" 10 11 6)) (=n (a n 1 get >= a n 2 get <= and) ((n 0 get b append #b) n 3 get times) when) foreach b b size random get

স্ট্যাকের উপর তাপ দিয়ে শুরু হয়, স্ট্যাকের উপর একটি স্ট্রিং ফেলে। পাইথন 2 উত্তর হিসাবে একই সাধারণ প্রক্রিয়া।

ব্যাখ্যা

নোট করুন যে প্রতিযোগিতাযুক্ত

:a ' =b                               ;Set the value on the stack (heat) to a, set empty quot to b
(("Gas Giant" 4 9 15) ("Ice" 4 6 10) ("Ice Giant" 4 6 10) ("Gaia Class" 5 7 10) ("Dense Atmosphere" 7 9 10) ("Desert" 7 10 25) ("Iron" 7 10 14) ("Lava" 10 11 6)) ;Data to be iterated over
(=n                                   ;  set n to current item
 (a n 1 get >= a n 2 get <= and)      ;    check if n is between the min (2nd elment of n) and max (3rd element of n) heat
 (
  (n 0 get b append #b) n 3 get times ;      insert the name(1st element of n) into the quot of names (b) a number of times corresponding to the 4th element of n
 ) when                               ;    when the previous check is true
) foreach                             ;  for every quot in previous data
b b size random get                   ;choose a random element from the list of names

0

পাওয়ারশেল, 56 + 135 (সিএসভি ফাইল) + 1 (ফাইলের নাম) = 192 বাইট

param($z)ipcsv a|?{$z-in$_.m..$_.x}|%{,$_.p*$_.r}|Random

এটি অনলাইন চেষ্টা করুন! (এটি একটি সামান্য পরিবর্তিত সংস্করণ যা নীচে বর্ণিত অস্থায়ী সিএসভি ফাইল তৈরি করে)

স্থানীয় ডিরেক্টরিতে নাম অন্তর্ভুক্ত ব্যবহার করে ipcsv(সংক্ষিপ্ত Import-CSV) ব্যবহার করে একটি সিএসভি ফাইল আমদানি করে a:

P,m,x,r
Gas Giant,4,9,15
Ice,4,6,10
Ice Giant,4,6,10
Gaia class,5,7,10
Dense Atmosphere,7,9,10
Desert,7,10,25
Iron,7,10,14
Lava,10,11,6

এটি স্বয়ংক্রিয়ভাবে নিম্নলিখিতগুলির মতো পুনরাবৃত্তির হ্যাশটেবল তৈরি করে:

@{P=Gas Giant; m=4; x=9; r=15}
@{P=Ice; m=4; x=6; r=10}
...

আমরা তখন ব্যবহার Where-Object( ?) আর এন্ট্রি যেখানে আমাদের ইনপুট পূর্ণসংখ্যা উঠিয়ে ফেলা $zহয় -inপরিসর $_.mথেকে $_.x(অর্থাত, এটি তাপ সীমার মধ্যে থাকবে)। তারপরে আমরা এগুলিকে একটি Foreach-Objectলুপে পাম্প করব ( %) যা এই নামেরগুলির এলোমেলো সুযোগের উপর ভিত্তি করে নামের একটি স্ট্রিং তৈরি করে। উদাহরণস্বরূপ, 15 "Gas Giant"যদি এটি তাপের সাথে মেলে তবে এটি স্ট্রিংগুলির একটি অ্যারে তৈরি করবে । তারপরে আমরা সেগুলিতে রাখি Get-Randomযা উপযুক্ত ওজন সহ উপযুক্ত স্ট্রিংটি টানবে।


-1

পিএইচপি , 1236 বাইট

<?php
$heat = (int)fgets(STDIN);
$planets =
    [
        'Gas Giant' =>        ['heat_min' => 4, 'heat_max' => 9, 'selection_chance' => 15],
        'Ice' =>              ['heat_min' => 4, 'heat_max' => 6, 'selection_chance' => 10],
        'Ice Giant' =>        ['heat_min' => 4, 'heat_max' => 6, 'selection_chance' => 10],
        'Gaia class' =>       ['heat_min' => 5, 'heat_max' => 7, 'selection_chance' => 10],
        'Dense Atmosphere' => ['heat_min' => 7, 'heat_max' => 9, 'selection_chance' => 10],
        'Desert' =>           ['heat_min' => 7, 'heat_max' => 10, 'selection_chance' => 25],
        'Iron' =>             ['heat_min' => 7, 'heat_max' => 10, 'selection_chance' => 14],
        'Lava' =>             ['heat_min' => 10, 'heat_max' => 11, 'selection_chance' => 6],
    ];
foreach ($planets as $planet) {
    $chance_sum += ($heat >= $planet['heat_min'] && $heat <= $planet['heat_max']) * $planet['selection_chance'];
}
while (true) {
    foreach ($planets as $name => $planet) {
        $prob = 100 * ($heat >= $planet['heat_min'] && $heat <= $planet['heat_max']) * $planet['selection_chance'] / $chance_sum;
        if (rand(0, 100) < $prob) {
            echo $name."\n";
            exit;
        }
    }
}
?>

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


5
কোড-গল্ফ প্রশ্নের উত্তরগুলির গল্ফ করার ক্ষেত্রে তাদের প্রচেষ্টা দেখানো দরকার। আপনি কেবল সাদা স্থানটি সরিয়েই এটি আরও অনেক খাটো করে পেতে পারেন । পরবর্তী পদক্ষেপটি হ'ল পরিবর্তনশীল নামগুলি একক অক্ষরের নামগুলিতে সংক্ষিপ্ত করা।
ovs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.