অ্যালগরিদমিক ব্রেকিং - মাতৃ দিবসের জন্য


11

টাস্ক:

আপনার টাস্কটি এমন একটি প্রোগ্রাম তৈরি করা যা যখন বেশ কয়েকটি স্ট্র্যান্ড এবং ব্রেডের পুনরাবৃত্তির সংখ্যা দেওয়া হয় তখন প্রতিটি স্ট্র্যান্ডটি কোথায় যায় তা জানায়। বিধিগুলি নিম্নরূপ:

  • স্ট্র্যান্ডের সংখ্যা সর্বদা বিজোড় এবং 3 থেকে 6000 এর মধ্যে থাকবে (সমেত)
  • আপনি যখন শুরু করবেন তখন স্ট্র্যান্ডগুলি 2 (প্রায়) সমান গুচ্ছ, এবং leftএবং বিভক্ত হবে rightleftআরও একটি তীরভূমি কখন তুমি শুরু করতে হবে।

7 এর ইনপুট জন্য:

/ / / / \ \ \
1 2 3 4 5 6 7
  • প্রতিটি পুনরাবৃত্তি, আরও স্ট্র্যান্ড সহ পাশের বাইরেরতম স্ট্র্যান্ডটি বিপরীত দিকে মুখ করে কেন্দ্রে স্থাপন করা হবে। কেন্দ্র বিপরীত দিকে মুখ করে সুতা মধ্যে হিসাবে সংজ্ঞায়িত করা হয়: ////middle\\\

ইনপুট 7 এর 1 পুনরাবৃত্তি (স্ট্র্যান্ড 1 কেন্দ্রের দিকে সরানো হয়েছিল):

/ / / \ \ \ \
2 3 4 1 5 6 7

উদাহরণ:

ইনপুট:

3 4

কম্পিউটেশন:

1 2 3
 \
2 1 3
   /
2 3 1
 \
3 2 1
   /
3 1 2

আউটপুট:

3 1 2

নিয়মাবলী:

  • স্ট্র্যান্ডের দিকনির্দেশের জন্য আপনাকে কেবল স্ল্যাশগুলি প্রদর্শন করার দরকার নেই only
  • আপনাকে কেবল শেষ পুনরাবৃত্তির পরে সংখ্যাগুলি প্রদর্শন করতে হবে।
  • আপনার আউটপুটটি স্ট্র্যান্ডের স্পেস-ডিলিমিনেটড আইডি হবে
  • ইনপুট ফর্মটিতে থাকবে: strands [space] iterations
  • স্ট্র্যান্ডের সংখ্যা সর্বদা বিজোড় এবং 3 <= x <= 6000 হবে
  • এটি , তাই সংক্ষিপ্ততম কোডটি জয়ী!

3
আপনি কি '6000 অবধি' পাবেন না তাই এটি কি 3 থেকে 5999 হবে না?
kitcar2000

সুতরাং আউটপুট 11 2হবে 2345611178910?
মার্টিন এন্ডার

1
@ আপনার সম্মতিতে আমার পরিবর্তনটি ভেঙে গেছে
থিওডাক্টর 11:54

1
@ ডক্টর আমার উত্তরটি আপনার পরিবর্তনের আগে সেখানে ছিল।
হাওয়ার্ড

1
আমি মনে করি আপনার উদাহরণটি পড়া উচিত 123 -> 213 -> 231 -> 321 -> 312
হাওয়ার্ড

উত্তর:


6

গল্ফস্ক্রিপ্ট, 33 টি অক্ষর

~\),(@{:^1$[=]:y-.,2//y*^~}*;' '*

স্ট্যান্ডিনে ইনপুট সরবরাহ করতে হবে।

উদাহরণ (আপনি অনলাইনে পরীক্ষা করতে পারেন ):

> 7 1
2 3 4 1 5 6 7

> 3 4
3 1 2

> 11 2
2 3 4 5 6 11 1 7 8 9 10

6

পাইথন: 179 240 , 152 টি অক্ষর

প্রথম, 179

জন্য Nstrands এবং iপুনরাবৃত্তিও, এই উত্তর ব্যবহার O(1)স্থান এবং O(N)সময়। আমি কেবল প্রতিটি স্ট্র্যান্ডের শেষের অবস্থানটি গণনা করি, কখনও কখনও মধ্যবর্তী অবস্থানগুলিতে পুনরাবৃত্তি করি না!

বড় সম্পাদনা: শর্তাবলীর বুলিয়ান বীজগণিত পরিবর্তন করে এই উত্তরটি গল্ফ করেছে। এটি কীভাবে কাজ করে তার একটি দীর্ঘ বিবরণও লিখেছিলাম । টিএল; ডিআর: সূত্রীয় নিদর্শন, মডুলো বিভাগ।

from sys import *
N,i=map(int,stdin.readline().split())
h,t=N/2,3*N
f=lambda p:(p>N)*(t/2-(p&-2))+p/2+1
for s in xrange(N):print f((2*s+1+(s>h)*(t-4*s-2)+i*(N+1-N*(s!=h)))%(2*N)),

এখন 152

এটি আরও যুক্তিযুক্তভাবে গল্ফ পাইথন। (সম্পাদনা করুন: 165 থেকে 152 এডিট করার জন্য অ্যালেক্স থর্টনকে ধন্যবাদ)

from sys import*;l=map;r=range;n,m=l(int,stdin.readline().split());b=r(1,n+1)
for k in r(m):v=b.pop((0,n-1)[k%2]);b.insert(n/2,v)
print' '.join(l(str,b)

আপনার আগ্রহী হলে এটি আরও নিচে 151 এ গলফ করেছেন: পেস্টবিন.
অ্যালেক্স থর্নটন

সাধারণ পরিবর্তন, তবে খুব কার্যকর। ধন্যবাদ!
ভুল

আমার মনে হয় আপনি সরিয়ে এমনকি আরও নিচে এটিকে কেটে পারে lএবং vভেরিয়েবল এবং পরিবর্তন insertএকটি ফালি নিয়োগ।
ব্যবহারকারী 2357112 21:32

আমি নিশ্চিত গল্ফ আরও কম হতে পারে। সত্যিই আমি প্রথমটিতে কিছু আশা করি মন্তব্য থাকলে!
ভুল

আমি যাই হোক না কেন একটি ব্যাখ্যা লিখে পোস্টটি আপডেট করেছি :)
ভুল

2

পাইথন 2 (109) / পাইথন 3 (121)

পাইথন 2

s,n=map(int,raw_input().split())
b=range(s)
for i in range(n):b[s/2:s/2]=[b.pop(0-i%2)]
for x in b:print x+1,

পাইথন ঘ

s,n=map(int,input().split())
b=list(range(s))
for i in range(n):b[s//2:s//2]=[b.pop(0-i%2)]
for x in b:print(x+1,end=' ')

পাইথন 3 এর গল্ফিং সুবিধাগুলি প্রদর্শনের জন্য কোডটি অবশ্যই পাইথন 2 দ্বারা ঘুষ দিয়েছিল: তালিকাগুলি হচ্ছে পরিসীমা, বিভাগটি একটি ইনট অবধি, কোনও নতুন লাইন শুরু না করে মুদ্রণ করা। অদ্ভুত 0-i%2কারণ -i%2হিসাবে মূল্যায়ন (-i)%2

পুনরাবৃত্তির চেয়ে সম্ভবত আরও কার্যকর পন্থা রয়েছে, অর্থাত্ প্রতিটি চূড়ান্ত ফলাফলকে সরাসরি গণনা করা। ব্রেডিং অপারেশনটির সময়কাল 2 * হয়, সুতরাং এটি এত জটিল হতে পারে না।


2

রুবি, 105

কেবল সেট সেট ম্যানিপুলেশন। পুশ, পপ, বিপরীত এবং শিফ্ট! আমি ইনপুটগুলিকে পূর্ণসংখ্যায় রূপান্তর না করার চেষ্টা করেছি, তবে এটি প্রায় 20 টি অক্ষর যুক্ত করেছে।

n,i=$*.map(&:to_i)
f=l=(1..n).to_a
t=r=l.pop(n/2).reverse
i.times{f,t=t<<f.shift,f}
$><<(l+r.reverse)*' '

lএবং r( leftএবং right) হ'ল "থ্রেড" সারি। rightবিপরীত হয় তাই আমরা বাইরে থেকে টানা শুরু করি।

tএবং f( toএবং from) যথাক্রমে rightএবং হিসাবে শুরু করুন left, তবে আমরা যেতে যেতে সেগুলি অদলবদল করতে থাকি যাতে আমরা সর্বদা সর্বশেষ "থ্রেড" এখান থেকে স্থানান্তর করতে fromপারি এবং to( f,t=t<<f.shift,f) এ ঠেলাতে পারি । এটি প্রচুর স্থান সাশ্রয় করে।

তারপরে আমরা ঠিক rightশেষে আবার বিপরীত ।

পরিবর্তণের:

২.২ ১০৫ হ্যাঁ, মানচিত্রটি একটি প্রোক নিতে পারে

2.1 108 এবং আসলে, ম্যানিপুলেশনের অংশ হিসাবে জিনিসগুলি ফ্লিপ করুন।

2.0 116 অস্থায়ী অ্যারে ব্যবহার করবেন না। পরিবর্তে দুটি পয়েন্টার ভেরিয়েবল ব্যবহার করুন যা আমরা পরিচালনা করতে পারি এবং পুনরায় নির্দেশক রাখতে পারি। তারপরে কেবল শেষটি প্রদর্শিত হবে

1.0 123 প্রাথমিক ধারণা


0

জাভা, 270 টি অক্ষর

golfed:

import java.util.*;class B{public static void main(String[] a){int n=Integer.valueOf(a[0]),t=Integer.valueOf(a[1]),i=0;List<Integer> r=new ArrayList<Integer>();for(;i<n;i++){r.add(i+1);}for(i=0;i<t;i++){int k=i%2==0?0:n-1;r.add(n/2,r.remove(k));}System.out.println(r);}}

আন-golfed:

import java.util.*;
public class Braid {
    public static void main(String[] args) {
        int num = Integer.valueOf(args[0]);
        int iterations = Integer.valueOf(args[1]);

        //populate array
        List<Integer> arr = new ArrayList<Integer>();
        for (int i=0; i < num; i++) {
            arr.add(i+1);
        }
        for (int i=0; i < iterations; i++) {
            int index = i%2==0?0:num-1; 
            arr.add(num/2, arr.remove(index));
        }
        System.out.println(arr);
    }
}

অনলাইন চালান

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