ডেক স্ট্যাক!


15

অ্যালিস এবং বব একটি কার্ড গেম খেলতে পছন্দ করেন, একটানা ননেনিজেটিভ পূর্ণসংখ্যার সাথে কার্ডের ডেকে নিয়ে।

যদিও অ্যালিসের ডেক বদলানোর খুব একটা বিশেষ উপায় রয়েছে। প্রথমে, তিনি ডেক থেকে শীর্ষ কার্ডটি নিয়ে ডেকে নীচে রাখে। তারপরে সে পরের কার্ডটি সরিয়ে দেয় এবং এটি দিয়ে একটি স্তূপ শুরু করে। তারপরে, তিনি আবার শীর্ষ কার্ডটি নীচে চক্র করে এবং নতুন শীর্ষ কার্ডটি স্তূপের উপরে রাখে। তিনি ডেকটি খালি না করা পর্যন্ত এই প্রক্রিয়াটি পুনরাবৃত্তি করে, যেখানে পাইলটি নতুন ডেক।

  deck     |  pile
-----------+-----------
 3 1 4 0 2 | 
 1 4 0 2 3 | 
 4 0 2 3   |         1
 0 2 3 4   |         1
 2 3 4     |       0 1
 3 4 2     |       0 1
 4 2       |     3 0 1
 2 4       |     3 0 1
 4         |   2 3 0 1
           | 4 2 3 0 1
 4 2 3 0 1 | 

চিত্র 1: অ্যালিস 5-কার্ড ডেক "3, 1, 4, 0, 2" এ তার সাফল্য সম্পাদন করে। কার্ডগুলির পিছনে সমস্ত বাম মুখোমুখি।

একদিন, বব ঘোষণা করলেন যে তিনি এক সপ্তাহের ছুটি নিচ্ছেন। অ্যালিস, যার সাথে এই গেমটি খেলতে না পেয়ে তার বন্ধু ইভটিকে তালিকাভুক্ত করে। এখন, ইভটি একজন নির্লজ্জ প্রতারক, সুতরাং যখন সে অ্যালিসের অদ্ভুত রদবদল দেখে, বুঝতে পারে যে সে তার সুবিধার আগেই ডেকটি স্ট্যাক করতে পারে!

প্রথম দিনের পরে যখন ইভটি বাড়িতে ফিরে আসে, তখন সে গেমটি সম্পর্কে কিছু বিশ্লেষণ করে এবং কার্ডগুলি 0, 1, 2, 3, 4, 5, ক্রম অনুসারে যখন তার সেরা প্রতিক্রিয়াগুলি দেখায় সে ... ডেকে কতগুলি কার্ড ছিল তা ধরুন, যদিও, তিনি তার বাহুতে কিছু কোড লেখার জন্য একটি হর্রেব্রাইনড স্কিমটি টানেন যা চালানোর সময় ডেকের আকার নেয় এবং ইভটি কার্ডগুলি রাখার জন্য আদেশটি প্রদর্শন করে, যাতে যখন অ্যালিস ডেক পরিবর্তন করে, চূড়ান্ত ডেক 0, 1, 2, 3, ক্রম হয় ...

কোড হ'ল কোডটি কী ভাষাতে রয়েছে সে বিষয়ে সে আসলেই কিছু যায় আসে না (সে তাদের সকলকেই জানে), বা কোড কোনও ক্রিয়াকলাপ কিনা কোনও পূর্ণসংখ্যার যুক্তি গ্রহণ করে এবং একটি অ্যারে ফিরিয়ে দেয়, বা কোনও কমান্ড লাইন আর্গুমেন্ট বা এসটিডিআইএন-এর মাধ্যমে ইনপুট গ্রহণকারী একটি সম্পূর্ণ প্রোগ্রাম এবং ফলাফল STDOUT লিখছি। অ্যালিসের এটি দেখার এবং তাকে ধরার সম্ভাবনা হ্রাস করার জন্য, যত তাড়াতাড়ি সংক্ষেপে কোডটি তার দরকার ছিল।

অনৈতিক হিসাবে এটি হতে পারে, আপনি ছেলেরা ইভকে সাহায্য করতে পারেন?

ইনপুট এবং আউটপুট উদাহরণ:

in  out
 1  0
 2  0 1
 5  2 4 0 3 1
10  2 9 4 8 0 7 3 6 1 5
52  6 51 25 50 12 49 24 48 1 47 23 46 11 45 22 44 5 43 21 42 10 41 20 40 2 39 19
    38 9 37 18 36 4 35 17 34 8 33 16 32 0 31 15 30 7 29 14 28 3 27 13 26

3
সুন্দর শব্দবন্ধ, আমি ক্র্যাকিং পেতে হবে।

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

একই ডেক জন্য যায়।
মার্টিন এন্ডার

এছাড়াও: আপনি 5 দৈর্ঘ্যের একটি নমুনা রেখে আমাদের চালিত করার চেষ্টা করছেন? লুণ্ঠনের ইচ্ছা না করে:shuffle(shuffle(range(5))) == range(5) ...
ɐɔıʇǝɥʇuʎs

@ সিনথেটিকা ​​আমি অনুমান করি এটি এতটা ঘটে যে এলিসের 5-কার্ডের ডেকের পালাবদল একটি বিবর্তন। পোস্ট করার সময় আমি সত্যিই এটি সম্পর্কে ভাবিনি কারণ এটি সাধারণভাবে ধারণ করে না।
অ্যালগরিদমশর্ক

উত্তর:


5

গল্ফস্ক্রিপ্ট, 15 14 13 বাইট

])~,{\+)\+}/`

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

উদাহরণ

$ golfscript alice.gs <<< 10
[2 9 4 8 0 7 3 6 1 5]

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

])    # Collect the stack into an array and pop. This leaves [] below the input string.
~     # Interpret the input string.
,     # For input “N”, push the array [ 0 … N-1 ] (the pile).
{     # For each card on the pile:
  \+  # Put the card on top of the deck.
  )   # Remove a card from the bottom of the deck.
  \+  # Put the card on top of the deck.
}/    #
`     # Convert the deck into a string.

1
আপনি {}/কোনও চর সংরক্ষণ করতে মানচিত্র অপারেটরের পরিবর্তে ব্যবহার করতে পারেন ।
হাওয়ার্ড

ধন্যবাদ! আমি একটি অ্যারে চেয়েছিলাম, তাই আমি মানচিত্র ব্যবহার করেছি। অভ্যাসের বাহিনী ...
ডেনিস

1
](প্রথম দুটি অক্ষর কার্যকরভাবে ইনপুটটির নীচে একটি খালি অ্যারে রাখে, আপনাকে পরে সংরক্ষণ করে []\
পিটার টেলর

ধন্যবাদ! এটি অনলাইনে অনুবাদকের সাথে কেন কাজ করছে না তা বুঝতে খুব দীর্ঘ সময় নিয়েছে। স্ট্যাক সাফ করতে ভুলে গেছেন ...
ডেনিস

5

জুলিয়া, 83

u(n)=(a=[n-1:-1:0];l=Int[];[push!(l,shift!(push!(l,pop!(a)))) for i=1:length(a)];l)

ফিরে আসা ভেক্টরের শেষ উপাদানটি ডেকের শীর্ষে।


4

গণিত, 92 77 46 বাইট

পরিবর্তনশীল ইনপুট আশা করে n:

l={};(l=RotateRight[{#-1}~Join~l])&/@Range@n;l

এটি কেবল আক্ষরিকভাবে কোনও কার্ডের উপর দিয়ে সরানো এবং তারপরে নীচের কার্ডটি উপরে রেখে পেছনের দিকে বদলে যায়।

সম্পাদনা: আউটপুট স্ট্যাকের ট্র্যাক রাখার দরকার নেই, কেবল পূর্ণসংখ্যার মাধ্যমে পুনরাবৃত্তি করতে হবে।


2

পাইথন 2.7 - 57

d=[0]
for j in range(1,input()):d=[d.pop()]+[j]+d
print d

দুর্দান্ত এবং সহজ, কেবল এলোমেলো করে দিন। গল্ফস্ক্রিপ্ট এটি কী করে তার বেশ কাছাকাছি।


1

জে (১৩ টি চর) এবং কে (9)

দেখা যাচ্ছে, এলোমেলো পূর্বাবস্থায় ফিরিয়ে আনার এটি একটি সহজ প্রক্রিয়া এবং এপিএল-পছন্দগুলির ভাঁজ বিজ্ঞাপনটি রয়েছে / এটিকে যতটা সম্ভব সংক্ষিপ্ত করে তুলতে তাদের সহায়তা করার জন্য ।

জে 13 গৃহস্থালির কাজ নেয় (_1|.,)/@i.@-, যখন কে মাত্র 9 দরকার: |(1!,)/!:। এপিএল একইভাবে সংশ্লেষ হবে।

এখানে জে সংস্করণটির ধাপে ধাপে ট্রেস দেওয়া হয়েছে।

(_1|.,)/@i.@- 4                  NB. recall that J is right-associative
(_1|.,)/@i. - 4                  NB. u@v y  is  u v y
(_1|.,)/@i. _4                   NB. monad - is Negate
(_1|.,)/ i. _4                   NB. @
(_1|.,)/ 3 2 1 0                 NB. monad i. is Integers, negative arg reverses result
3 (_1|.,) 2 (_1|.,) 1 (_1|.,) 0  NB. u/ A,B,C  is  A u B u C
3 (_1|.,) 2 (_1|.,) _1 |. 1 , 0  NB. x (M f g) y  is  M f x g y
3 (_1|.,) 2 (_1|.,) _1 |. 1 0    NB. dyad , is Append
3 (_1|.,) 2 (_1|.,) 0 1          NB. dyad |. is Rotate
3 (_1|.,) _1 |. 2 , 0 1          NB. repeat ad nauseam
3 (_1|.,) _1 |. 2 0 1
3 (_1|.,) 1 2 0
_1 |. 3 , 1 2 0
_1 |. 3 1 2 0
0 3 1 2

আপনি লক্ষ করতে পারেন যে জেতে আমরা প্রথমে পূর্ণসংখ্যার অ্যারেটি বিপরীত করি তবে কেতে আমরা এটি পরে করি: এটি কারণ জেটির foldlতুলনায় কে ভাঁজটি আরও বেশি একটির মতো foldr

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