বিস্ফোরিত বিড়াল!


17

চ্যালেঞ্জ

আপনি এমন একটি প্রোগ্রাম / ফাংশন তৈরি করবেন যা দৈর্ঘ্যের স্ট্রিং ইনপুট নেয় nএবং:

  1. kthস্থানটি যেখানে স্থানের কেন্দ্রে রাখে k = (n+1)/2। এটি আপনার স্থল শূন্যের অবস্থান হবে।
  2. স্থল শূন্যের চারপাশে এলোমেলোভাবে সাজানো বাকী নন-হোয়াইটস্পেসের অক্ষর রাখে। চর থেকে পাইথাগোরিয়ান দূরত্ব অবশ্যই অতিক্রম করবে না n
  3. ফলাফল ফলাফল।

আপনার যদি স্পষ্টকরণের প্রয়োজন হয় তবে নীচের উদাহরণটি দেখুন।


বিধি

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

এটি ; বাইটস মধ্যে সংক্ষিপ্ততম কোড জয়!


উদাহরণ

ইনপুট: qwert

স্থল শূন্য থেকে বিস্ফোরণের সীমানা (বাকি অক্ষরের জন্য x এর চিহ্ন বৈধ স্থান):

     x
  xxxxxxx
 xxxxxxxxx
 xxxxxxxxx
 xxxxxxxxx
xxxxxexxxxx
 xxxxxxxxx
 xxxxxxxxx
 xxxxxxxxx
  xxxxxxx
     x

উদাহরণ আউটপুট:

       t
     r

q    e


      w

এলোমেলোভাবে অবস্থান নির্বাচন করা, একটি চর অন্যের একই অবস্থানে যেতে পারে এবং এটি ওভাররাইট করতে পারে। এটি কি সর্বস্বরে? (আমার পরামর্শ: না)
edc65

আপনি ঠিক বলেছেন: না
মামা ফান রোল

1
আমাকে উড়িয়ে দেওয়ার সাথে পৃথিবীর কী সম্পর্ক? (আমি সত্যই শিরোনামের প্রাসঙ্গিকতা বুঝতে পারি না ...)
বিড়াল

1
@ কেট এটি একটি বিড়াল প্রোগ্রামের একটি পরিবর্তন যা আপনি ইনপুটটি বিস্ফোরণ করেন।
মামা ফান রোল

উত্তর:


0

এপিএল (ডায়ালগ ক্লাসিক) , 68 66 65 63 62 বাইট

{⍵@(n⊣¨¨@(⊢≡¨⌽)i[n?≢i←⍸(××n≥*∘.5)+.ר⍨n-⍳s])⊢''⍴⍨s21+2×n←≢⍵}

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

{ } যুক্তি সহ বেনামে ফাংশন

n←≢⍵ পরিবর্তনশীল n দৈর্ঘ্য হয়

s←2⍴1+2×n পরিবর্তনশীল s ফলাফলের আকার: 2n + 1 বাই 2 এন + 1

''⍴⍨s এই আকারের সাথে একটি স্পেস স্কোয়ার তৈরি করুন

A@I⊢BAসূচকগুলিকে Iম্যাট্রিক্সে (জোড়ায়) উপাদানগুলি রাখেB

+.ר⍨n-⍳s ম্যাট্রিক্সের কেন্দ্র থেকে স্কোয়ার দূরত্ব

(××n≥*∘.5) বুলিয়ান ম্যাট্রিক্স নির্দেশ করে যেখানে এই দূরত্বগুলি শূন্য নয় এবং ≤n

বুলিয়ান ম্যাট্রিক্সে 1 টির জন্য জোড় সমন্বয় করুন

i[n?≢i← ... ] এগুলির মধ্যে এলোমেলোভাবে চয়ন করুন (কোনও সদৃশ নেই)

n⊣¨¨@(⊢≡¨⌽) কেন্দ্রীয় এক পরিবর্তন n n

⍵@( ... )⊢ ... স্থানগুলির ম্যাট্রিক্সে প্রদত্ত সূচকগুলিতে যুক্তি থেকে বর্ণগুলি রাখুন


3

জাভাস্ক্রিপ্ট (ES6), 211 216 220

1 বাইট সম্পাদনা করুন thx @ ইউসুফ্রেন্ডস

s=>[...s].map((c,i)=>{for(R=_=>Math.random()*h-l|0;x=R(y=R()),!(i-(l/2|0)?x|y&&x*x+y*y<=l*l&g[y+=l][x+=l]<'!':x=y=l););z=[...g[y]],z[x]=c,g[y]=z.join``},l=s.length,g=Array(h=l-~l).fill(' '.repeat(h)))&&g.join`
`

পরীক্ষা

f=s=>[...s].map((c,i)=>{for(R=_=>Math.random()*h-l|0;x=R(y=R()),!(i-(l/2|0)?x|y&&x*x+y*y<=l*l&g[y+=l][x+=l]<'!':x=y=l););z=[...g[y]],z[x]=c,g[y]=z.join``},l=s.length,g=Array(h=l-~l).fill(' '.repeat(h)))&&g.join`
`

// Less golfed
U=s=>(
  l=s.length,
  h=l-~l, // l+l+1
  g=Array(h).fill(' '.repeat(h)),
  [...s].map((c,i)=>{
    for(R=_=>Math.random()*h-l|0;
        x=R(y=R()), // set x,y to a random value in range -l ... l
        !(i - (l/2|0) // check if at mid point of input string
          ? x|y && // if not, check x and y must not be both 0
            x*x + y*y <= l*l &  // then check position inside the circle of ray L
            g[y+=l][x+=l] < '!' // then add offset L and check if position is not already used 
          : x=y=l // if at midpoint in input string, x and y have fixed value L
         );
       ); // loop until valid position found
    z = [...g[y]];  // modify string at current position: convert to array ...
    z[x] = c;       // ... set element ...
    g[y] = z.join`` // ... back to string
  }),
  g.join`\n`
)  

setInterval(_=>O.textContent=(f(I.value)),1000)
Word <input id=I value='qwert'><pre id=O></pre>


আপনার আগে অতিরিক্ত অতিরিক্ত স্থান রয়েছেg.map(r=>r.join``)...
বন্ধুরা

@ ইউসুফ্রেন্ডস thx আমি জানি না আমি কীভাবে এটি মিস করেছি
edc65

new Date()%h-lপরিবর্তে ব্যবহার করুন Math.random()*h-l|0। এটি বাইট সংরক্ষণ করে।
ericw31415

1
@ এরিকউ ৩৪১৪১ মাত্র 0 ব্যবহার করুন এটি বাইটগুলিও সংরক্ষণ করে। তবে দু'জনই কাজ করবে না
edc65

2

রুবি, 211 207 203 196 টি অক্ষর

4 অক্ষরের জন্য edc65 ধন্যবাদ

->(x){x=x.chars
o,b,c=x.size
l=o*2+1
a=Array.new(l){Array.new l,' '}
a[o][o]=x.delete_at o/2
a[b][c]=x.pop if a[b=rand(l)][c=rand(l)]==' '&&(b-o)**2+(c-o)**2<=o*o while x[0]
a.map(&:join).join $/}

ব্যাখ্যা:

->(x){...} একটি যুক্তিযুক্ত ফাংশন সংজ্ঞায়িত করুন an x

x=x.charsxস্ট্রিং থেকে এক-বর্ণের স্ট্রিংগুলির একটি অ্যারেতে রূপান্তর করুন

o,b,c=x.sizeoপরে ব্যবহারের জন্য ইনপুটটির দৈর্ঘ্য সংরক্ষণ করুন । bএবং cকেবল সক্রিয়া করা প্রয়োজন কিছু আগের নিয়োগ যুক্ত করে, তাই সংরক্ষণ 2 অক্ষর।

l=o*2+1 এটি ক্ষেত্রটির দৈর্ঘ্য / প্রস্থ যেখানে সমস্ত অক্ষর সম্ভবত যেতে পারে, বিস্ফোরণ বৃত্তের ব্যাসও।

Array.new(l){Array.new l,' '}স্থানের অক্ষরের একটি lx lআকারের 2D অ্যারে করুন।

a[o][o]=x.delete_at o/2অ্যারের কেন্দ্রটিকে x(ইনপুট) এর মানগুলির কেন্দ্রে সেট করে , যখন সেই মানটি মুছে ফেলা হয়x

... while x[0]ব্লকটি চালান (এই ক্ষেত্রে কোডটি আগে whileএটি ইনলাইন হওয়ায়) xখালি না হওয়া পর্যন্ত চালিয়ে যান। রুবিতে, এমন একটি সূচক অ্যাক্সেস করা nilযা রিটার্নের অস্তিত্ব রাখে না , যা মিথ্যা মান।

a[b=rand(l)][c=rand(l)]==' 'নির্ধারণ করুন bএবং cএলোমেলো মান যেখানে 0 <= n < l। তারপর পরীক্ষা যদি এ স্পট b, cখালি (ওরফে স্থান অক্ষর সেট করা হয়)

(b-o)**2+(c-o)**2<=o*oপাইথাগোরিয়ান দূরত্বের চেক। oইনপুট দৈর্ঘ্য হয়। **রুবি এর exponentiation অপারেটর, এবং val<=o*oতুলনায় খাটো val**0.5<=o

a[b][c]=x.popথেকে শেষ মানটি মুছুন x। অবস্থান সেট করুন a, bঅ্যারের মধ্যে যে মানa

a[b][c]=x.pop if a[b=rand(l)][c=rand(l)]==' '&&(b-o)**2+(c-o)**2<=o*o while x[0]যদি সেই অবস্থানটি নিখরচায় থাকে এবং বিস্ফোরণের ব্যাসার্ধের মধ্যে থাকে তবে সর্বশেষ মানটিতে একটি এলোমেলো অবস্থান নির্ধারণ করুন; যতক্ষণ না আমরা অক্ষরে অক্ষরে চলে যেতে চলেছি এটি চালিয়ে যান।

$/অপারেটিং সিস্টেমের নতুন লাইনে সেট করা আছে। এটি এর চেয়েও খাটো"\n"

a.map(&:join).join $/সমস্ত অ্যারে তাদের নিজস্ব aএকক স্ট্রিং সংস্করণে মানচিত্র করুন (যেমন ['a','b','c']-> 'abc')। সেই নতুন অ্যারে নিন এবং এতে নতুন লাইনের সাথে যুক্ত হন। অন্তর্নিহিত রিটার্ন


o * o এর পরে খাটো হয় ** 0.5
edc65

0

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

import random as r
i=input()
l=len(i)
a=range(-l,l+1)
g=[(y,x)for y in a for x in a]
p=[(y,x)for y,x in g if abs(x+y*1j)<=l and x|y]
m=i[l//2]
d=[*i.replace(m,"",1).center(len(p))]
r.shuffle(d)
o=""
for c in g:
	o+=m if c==(0,0)else d.pop()if c in p else" "
	if c[1]==l:o+="\n"
print(o)

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

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

ব্যাখ্যা

i=input()ইনপুটটি অবশ্যই l=len(i)স্ট্রিংয়ের দৈর্ঘ্যটি সংরক্ষণ করছে কারণ এটি বেশ কয়েকবার ব্যবহৃত হয়েছে।

a=range(-l,l+1) - এক মাত্রার পাশাপাশি উভয় উপায়ে উত্স থেকে দূরে উপলব্ধ দূরত্বের বিভাজন তৈরির একটি দ্রুত সরঞ্জাম।

g=[(y,x)for y in a for x in a] সম্পূর্ণ চূড়ান্ত গ্রিড তৈরি করে টুপল স্থানাঙ্কের একটি তালিকা তৈরি করে।

p=[(y,x)for y,x in g if abs(x+y*1j)<=l and x|y] কেবলমাত্র স্থাবর সমন্বিত তালিকার একটি উপসেট তৈরি করে যা কেন্দ্রবিহীন অক্ষরগুলি সম্ভবত অবতরণ করতে পারে।

m=i[l//2] কেন্দ্রের চরিত্রটি প্রতিষ্ঠিত করে।

d=[*i.replace(m,"",1).center(len(p))]- কেন্দ্রের চরিত্রটি বের হয়ে গেছে, আমাদের অন্যান্য ধ্বংসাবশেষের সাথে ফেলে। দ্যcenter()ফাংশন কারণ এটি আমাদের প্যাড লাইন আউট (ডিফল্ট একটি স্থান দ্বারা সহ) পর্যন্ত এটি অক্ষরের একটি নির্দিষ্ট সংখ্যক দীর্ঘ পারবেন খুব সুন্দর এখানে নেই। এখানে, চিঠিগুলি যে জায়গাগুলিতে অবতরণ করতে পারে তার সংখ্যা এটিই আমাদের বিতরণটি মিরর করে।

r.shuffle(d) স্বাভাবিকভাবে বদলানো বলেছে বিতরণকে আসলে ... বিতরণ করা হবে।

লুপটি, for c in g: o+=m if c==(0,0)else d.pop()if c in p else" "সম্ভাব্য টাইলগুলির পুরো বর্গক্ষেত্রের উপর নজর রাখে, সম্ভবত এটির উপরে ল্যান্ডিং না থাকা এবং না হওয়া এবং প্রয়োজনীয় হিসাবে নির্বিশেষে, আমাদের আউটপুট স্ট্রিংয়ে একটি চরিত্র যুক্ত করে o। অক্ষরগুলি আমাদের ধ্বংসাবশেষের নমুনা থেকে বেরিয়ে যায় যাতে সেগুলি কেবল একবার উপস্থিত হয়।

if c[1]==l:o+="\n"- পাশাপাশি লাইন বিরতি যুক্ত করে। রিটার্নস।

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