একটি মানচিত্রের মধ্যে প্রদত্ত আয়তক্ষেত্রের বাইরে একটি এলোমেলো পয়েন্ট তৈরি করুন


15

ভূমিকা

একটি খেলার মাঠের এই ভিজ্যুয়ালাইজেশন দেওয়া:

(0,0)
+----------------------+(map_width, 0)
|           A          |
|-----+-----------+----|
|  D  |     W     | B  |
|-----+-----------+----|
|           C          |
+----------------------+(map_width, map_height)
(0, map_height)

খেলাটি যে পুরো মানচিত্রে খেলছে তা হ'ল কোণার স্থানাঙ্কগুলি (0,0) এবং (মানচিত্র_উইথ, মানচিত্র_উচ্চি) আয়তক্ষেত্র। শত্রুদের বর্ধনের জন্য উপযুক্ত পয়েন্টগুলি ইউনিয়ন

S=(A,B,C,D)

চ্যালেঞ্জ

লিখন কোডটি আয় একটি র্যান্ডম পয়েন্ট (X, Y) যে এস ভিতরে হতে আপনার কোড কোন অতিরিক্ত পক্ষপাত উপস্থাপন করতে পারেন না নিশ্চিত করা হয়, যার মানে হল প্রতিটি তুল্য সম্ভাব্যতা অবিশেষে বিতরণ ভাবনাটি হলো এই যে দেওয়া যদৃচ্ছতা উৎপাদিত আপনার পছন্দের (যেমন ফাংশন | গ্রন্থাগার | দেব / ইউরানডম) নিরপেক্ষ is

বাইট জিততে সংক্ষিপ্ততম সমাধান!

ইনপুট

আপনি অনুক্রমে 6 ধনাত্মক পূর্ণসংখ্যা ইনপুট বৈপরিত্য মোট দেওয়া হবে: map_width, map_height, W_top_left_x, W_top_left_y, W_width, W_height। আপনি ধরে নিতে পারেন যে সমস্ত অঞ্চলের (গণনা করা) পৃষ্ঠের ক্ষেত্রফল (এ, বি, সি, ডি, ডাব্লু) প্রতিটি> 10, সুতরাং খালি স্থান / অঞ্চল নেই।

উদাহরণ ইনপুট: 1000, 1000, 100, 100, 600, 400

তে ইনপুটটিতে উপরে বর্ণিত values ​​টি মান থাকতে হবে তবে এটি কম সংখ্যক আর্গুমেন্ট এবং কোনও ক্রম হিসাবে পাস হতে পারে। উদাহরণস্বরূপ (map_width, map_height)পাইথন টিপল হিসাবে পাস করার অনুমতি দেওয়া হয়। অবশ্যই যা অনুমোদিত নয় তা ডাব্লু এর নীচের ডান পয়েন্টের মতো প্যারামিটার গণনা করা হয়।

আউটপুট

2 এলোমেলোভাবে উত্পন্ন পূর্ণসংখ্যার (x, y) যেখানে

(0x<map_width)¬(W_top_left_xx<W_top_left_x+view_width)

অথবা

(0y<map_height)¬(W_top_left_yy<W_top_left_y+view_height)

মানে উপরের লজিক্যাল এক্সপ্রেশনগুলির মধ্যে কমপক্ষে একটি সত্য হতে হবে।

উদাহরণ

Input                                    Output(valid random samples)

1000 1000 100 100 600 400                10 10
1000 1000 100 100 600 400                800 550
1000 1000 100 100 600 400                800 10
1000 1000 100 100 600 400                10 550

ইনপুট / আউটপুট সম্পর্কিত বিশদ এবং সীমাবদ্ধতার জন্য দয়া করে ডিফল্ট ইনপুট / আউটপুট নিয়মগুলি দেখুন


আমি মনে করি আপনার স্পষ্টভাবে বলতে হবে যে আউটপুট স্থানাঙ্কগুলি হল পূর্ণসংখ্যা (যা আমি আপনার অন্তর্নিহিত উদ্দেশ্য হিসাবে অনুমান করি)।
agtoever

1
আমরা কি ডিফল্ট ইনপুট / আউটপুট নিয়ম ব্যবহার করতে পারি ?
নিক কেনেডি

1
@ আগত এটি "আউটপুট" বিভাগে তাই বলে; 2 randomly generated integers (x, y)
জিউসেপে

1
আমরা কি আলাদা (ধারাবাহিক) ক্রমে ইনপুট নিতে পারি?
অ্যাটিনিট

"আউটপুট" বিভাগে বর্ণিত @ আগত হ্যাঁ আউটপুট একটি পূর্ণসংখ্যা হতে হবে।
জা

উত্তর:


7

পাইথন 2 , 114 106 102 101 বাইট

lambda w,h,X,Y,W,H:choice([(i%w,i/w)for i in range(w*h)if(W>i%w-X>-1<i/w-Y<H)<1])
from random import*

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


আমি নিশ্চিত নই তবে আমি মনে করি এটি হওয়া উচিত [i%w, i/w] কারণ পরিসীমাটি w*h/w=hকিন্তু x এই উদাহরণে প্রস্থের সাথে আবদ্ধ থাকে উচ্চতা নয়।
জাক

@ জাক হ্যাঁ, আপনি ঠিক বলেছেন। এখনই স্থির, ধন্যবাদ :)
টিফিল্ড

আপনার উত্পন্ন উত্সের তালিকার বিষয়বস্তু আমি কেবলমাত্র যাচাই করেছিলাম এবং মনে হচ্ছে আপনার সমাধানটি ভুল। পয়েন্টগুলি প্লট করা থেকে বোঝা যায় যে সমস্ত মান একটি লাইনের সাথে রয়েছে এবং এস এর পুরো অঞ্চলটি ইচ্ছাকৃতভাবে পূরণ করে না। এছাড়াও আপনি যে তালিকাটি উত্পন্ন করেন তাতে অ-পূর্ণসংখ্যার মান থাকে।
jaaq

@ জাজাক আমি নিশ্চিত না আপনি কী বোঝাতে চাইছেন? স্থানাঙ্কগুলি সর্বদা পূর্ণসংখ্যার হয়, এবং কোনও লাইনে নয় ( যেমন )
টিফিল্ড

1
পাইথন ২-এ জাজাক a/bইতিমধ্যে মেঝে বিভাগ, যদি হয় aএবং bপূর্ণসংখ্যা হয় (যা তারা এখানে রয়েছে)।
টিফিল্ড


4

05 এ বি 1 ই , 23 21 20 18 17 বাইট

L`â<ʒ²³+‹y²@«P≠}Ω

ইনপুট ফর্ম্যাটে রয়েছে [map_width, map_height], [W_top_left_x, W_top_left_y], [W_width, W_height]

-১ বাইটের জন্য গ্রিমিকে ধন্যবাদ জানাই , এবং আমাকে উপলব্ধি করার জন্যও আমি আমার সর্বশেষ সম্পাদনার পরে একটি বাগ প্রবর্তন করেছি।

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

ব্যাখ্যা:

ইনপুটগুলি নীচে map_width, map_height, [W_top_left_x, W_top_left_y], [W_width, W_height]হিসাবে উল্লেখ করা হয় [Wm, Hm], [x, y], [w, h]:

L          # Convert the values of the first (implicit) input to an inner list in
           # the range [1, n]: [[1,2,3,...,Wm],[1,2,3,....,Hm]]
 `         # Push both inner lists separated to the stack
  â        # Get the cartesian product of both lists, creating each possible pair
   <       # Decrease each pair by 1 to make it 0-based
           # (We now have: [[0,0],[0,1],[0,2],...,[Wm,Hm-2],[Wm,Hm-1],[Wm,Hm]])
    ʒ      # Filter this list of coordinates [Xr, Yr] by:
     ²³+   #  Add the next two inputs together: [x+w, y+h]
          #  Check for both that they're lower than the coordinate: [Xr<x+w, Yr<y+h]
     y     #  Push the coordinate again: [Xr, Yr]
      ²    #  Push the second input again: [x, y]
       @   #  Check for both that the coordinate is larger than or equal to this given 
           #  input: [Xr>=x, Yr>=y] (the w,h in the input are ignored)
     «     #  Merge it with the checks we did earlier: [Xr<x+w, Yr<y+h, Xr>=x, Yr>=y]
      P   #  And check if any of the four is falsey (by taking the product and !=1,
           #  or alternatively `ß_`: minimum == 0)
         # After the filter: pick a random coordinate
           # (which is output implicitly as result)

1
ভেরিফাইড অংশ যুক্ত করার জন্য ধন্যবাদ :) দুর্দান্ত সমাধান!
জাক

1
@ জাক ধন্যবাদ! আমি আমার প্রারম্ভিক সংস্করণটির পরে যাচাইকারীটি নিজেই ব্যবহার করেছি, যা যখন আমি একটি বাগ লক্ষ্য করেছি তখনই এটি সংশোধন করতে হয়েছিল, কারণ এটি [map_height, 0]ছাড়া সম্ভাব্য এলোমেলো আউটপুট হিসাবে স্থানাঙ্কী অন্তর্ভুক্ত ছিল ¨। :)
কেভিন ক্রুইজসেন

*ݨ¹‰L`â<হিসাবে প্রথম দুটি ইনপুট গ্রহণ করে হতে পারে [map_height, map_width]। এছাড়াও IIহতে পারে Š, যদি না আমি কিছু মিস করেছি।
গ্রিমি

@ গ্রিমির জন্য ধন্যবাদ L`â<। হিসাবে II+জন্য Š+, তবে তোমরা প্রকৃতই নিজেকে সঠিক যে এটি একই হবে .. দুর্ভাগ্যবশত আমি একটি ত্রুটি তৈরি এবং এটি হওয়া উচিত ছিল ²³+পরিবর্তে II+, যেহেতু এটি উভয়ের জন্য তৃতীয় ইনপুট ব্যবহার করেন I(ঠিক মত দুই বার গ্রহণ করা হবে Šফিল্টারটির প্রথম পুনরাবৃত্তির পরে) এর সাথে তৃতীয় ইনপুট .. তাই আমাকে বুঝতে পেরেছিলাম যে আমি একটি ত্রুটি করেছি for :)
কেভিন ক্রুইজসেন


3

পাওয়ারশেল , 85 73 বাইট

-12 বাইট মজির ধন্যবাদ

param($a,$b,$x,$y,$w,$h)$a,$b|%{0..--$x+($x+$w+2)..$_|random
$x,$w=$y,$h}

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

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


1
আপনি কয়েকটি বাইট সংরক্ষণ করতে পারেন অনলাইনে চেষ্টা করুন!
mazzy

1
@ মমজি আমি আসলে ব্যাপ্তি অপ্টিমাইজেশন জুড়ে হোঁচট খেয়েছি তবে 0 বাইট সংরক্ষণ করে এটি পিছনের দিকে প্রয়োগ করেছি।
ভেস্কাহ


1

জেলি , 11 বাইট

p/’$€+2¦ḟ/X

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

একজন dyadic লিঙ্ক আছে যা দুটি আর্গুমেন্ট লাগে, [map_width, map_height], [W_width, W_height]এবং W_left, W_topএবং একটি এলোমেলোভাবে নির্বাচিত বিন্দু প্রয়োজনীয়তা পূরণের ফেরৎ।

ব্যাখ্যা

   $€       | For each of member of the left argument, do the following as a monad:
p/          | - Reduce using Cartesian product (will generate [1,1],[1,2],... up to the width and height of each of the rectangles)
  ’         | - Decrease by 1 (because we want zero-indexing)
     +2¦    | Add the right argument to the second element of the resulting list
        ḟ/  | Reduce by filtering members of the second list from the first
          X | Select a random element

1

পাইথন 2 , 100 বাইট

ইনপুট আকারে হওয়া উচিত ((map_width, W_top_left_x, W_width),(map_height, W_top_left_y, W_height))

আউটপুট ফর্ম দেওয়া হয়: [[x],[y]]

lambda C:[c(s(r(i[0]))-s(r(i[1],i[1]+i[2])),1)for i in C]
from random import*;c=sample;r=range;s=set

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

উদাহরণ ইনপুট থেকে এলোমেলো আউটপুটগুলি প্রাপ্ত:

[[72], [940]]
[[45], [591]]
[[59], [795]]
[[860], [856]]
[[830], [770]]
[[829], [790]]
[[995], [922]]
[[23], [943]]
[[761], [874]]
[[816], [923]]

1

জাভা (ওপেনজেডিকে 8) , 100 বাইট

W->H->r->{int x=0,y=0;for(;r.contains(x+=W*Math.random(),y+=H*Math.random());x=y=0);return x+","+y;}

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

java.awt.Rectangleকিছু প্যারামিটারের ধারক হিসাবে ব্যবহার করে। স্বাভাবিকভাবেই, যারা ব্যবহার intক্ষেত্র, এবং floatবা double


1
ওহ, Rectangle#containsবিল্টিনের সাথে আক্ষরিকভাবে চ্যালেঞ্জটি গ্রহণের দুর্দান্ত উপায় ! : ডি
কেভিন ক্রুইজসেন


0

কাঠকয়লা , 55 43 বাইট

NθNηFE²N⊞υ⟦ιN⟧I‽ΦE×θη⟦﹪ιθ÷ιθ⟧⊙υ∨‹§ιμ§λ⁰¬‹§ιμΣλ

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

NθNη

মানচিত্রের আকার ইনপুট করুন। (এগুলি যদি শেষ হয় তবে আমি 1-বাইট সংরক্ষণের জন্য উচ্চতার ইনলাইন ইনপুট করতে পারতাম could)

FE²N⊞υ⟦ιN⟧

অভ্যন্তরীণ আয়তক্ষেত্রটি ইনপুট করুন। (যদি আমি ক্রমে ইনপুট left, width, top, heightকরতে পারি তবে আমি ব্যবহার করতে পারিF²⊞υE²N 3-বাইট সঞ্চয় জন্য )

E×θη⟦﹪ιθ÷ιθ⟧

ক্ষেত্রের সকল সমন্বয়কারীদের একটি তালিকা তৈরি করুন।

Φ...⊙υ∨‹§ιμ§λ⁰¬‹§ιμΣλ

দু'জন সমবায় আয়তক্ষেত্রের অভ্যন্তরে থাকে এমন এন্ট্রিগুলিকে ফিল্টার আউট করুন।

I‽...

যেগুলি বাকী রয়েছে তাদের একটি এলোমেলো উপাদান মুদ্রণ করুন।



0

স্কালা , 172 বাইট

লক্ষ্যহীনতা? Gotcha।

(a:Int,b:Int,c:Int,d:Int,e:Int,f:Int)=>{var r=new scala.util.Random
var z=(0,0)
do{z=(r.nextInt(a),r.nextInt(b))}while((c to e+c contains z._1)|(d to e+d contains z._2))
z}

একটি মজাদার বাস্তবায়ন আমি ভাবতে পারি।
এটি কীভাবে কাজ করে : মানচিত্রে এলোমেলো জোড় তৈরি করুন। এটি যদি অভ্যন্তরীণ আয়তক্ষেত্রের মধ্যে থাকে তবে আবার চেষ্টা করুন।
এটি অনলাইন চেষ্টা করুন!


0

জে , 54 47 45 39 বাইট

(0?@{[)^:((-1&{)~(<*/@,0<:[)2{[)^:_{~&1

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

3 x 2 গ্রিডের মতো ইনপুট নিন:

grid_height  grid_width
inner_top    inner_left
inner_height inner_width
  • পুরো গ্রিডে একটি এলোমেলো পয়েন্ট চয়ন করুন: 0?@{[
  • অভ্যন্তরীণ আয়তক্ষেত্রের উপরের-বাম দিক দিয়ে এটি বাম এবং নীচে স্থানান্তর করুন: (-1&{)~
  • যদি নির্বাচিত স্পটটি (<*/@,0<:[)একইভাবে স্থানান্তরিত অভ্যন্তর আয়তক্ষেত্রের মধ্যে থাকে তবে পদক্ষেপ 1 এ ফিরে যান 2{[। অন্যথায় আসল, আনশিফ্ট এলোমেলো পয়েন্টটি ফিরিয়ে দিন।
  • আমরা জানি এমন একটি বিন্দু সহ পুরো প্রক্রিয়াটি বীজ করুন, যা ইনপুট তালিকার 2 এবং 3 উপাদান দ্বারা সংজ্ঞায়িত করা হয়েছে অভ্যন্তরীণ আয়তক্ষেত্রের উপরের বাম দিকটি: {~&1

অন্য পদ্ধতির, 45 বাইট

{.#:i.@{.(?@#{])@-.&,([:<@;&i./{:){1&{|.i.@{.

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

এটি এক ধারণাটি সহজ, এবং লুপিং নিয়ে বিরক্ত করে না। পরিবর্তে, আমরা 0 থেকে (ডাব্লুএক্সএইচ) সমস্ত সংখ্যার একটি ম্যাট্রিক্স তৈরি করি, এটি অভ্যন্তরীণ প্রারম্ভিক বিন্দু দ্বারা স্থানান্তরিত করি, (0, 0) থেকে (অভ্যন্তরীণ ডাব্লু, ইনার ইনার এইচ) সাবগ্রিডের কেবল পয়েন্টগুলি ধরুন, সামগ্রিকভাবে তাদের থেকে সরিয়ে দিন উভয় সমতল করার পরে গ্রিড করুন, বাকী থেকে এলোমেলোভাবে একটি বাছাই করুন এবং ডিভোড ব্যবহার করে পূর্ণসংখ্যাকে একটি বিন্দুতে ফিরে রূপান্তর করুন<.@% , |~

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