এন-ডাইমেনশনাল ভেক্টর গণনা করা হচ্ছে


17

ধনাত্মক পূর্ণসংখ্যার k > 1এবং একটি অ-নেতিবাচক পূর্ণসংখ্যা দেওয়া i, অ-নেতিবাচক পূর্ণসংখ্যার একটি- kটিউটল (বা- kমাত্রিক ভেক্টর) উত্পন্ন করুন । প্রত্যেক জন্য k, ℕ করার ℕ থেকে মানচিত্রটির , bijective হওয়া আবশ্যক । অর্থাত, প্রতিটি ইনপুট iএকটি আলাদা টিউপল উত্পাদন করা উচিত, এবং প্রতিটি সম্ভাব্য টিপল কিছু ইনপুট দ্বারা উত্পাদিত করা আবশ্যক i

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

আপনি আউটপুট জন্য যে কোনও সুবিধাজনক, দ্ব্যর্থহীন, ফ্ল্যাট তালিকা ফর্ম্যাট ব্যবহার করতে পারেন।

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

যে কোনও ক্ষেত্রে 1 < k < 32, আপনার কোডটির কয়েক সেকেন্ডের মধ্যে একটি ফলাফল তৈরি করা উচিত (অবশ্যই, যদি আপনার উত্তরটি আগের নিয়মের কারণে এত বড় সমর্থন করে না , সেই অনুযায়ী সীমাটি সামঞ্জস্য করা হয়)। এটি কোন ইস্যু হওয়া উচিত: এটা এই চ্যালেঞ্জটি সমাধান যেমন এটি 2 জন অবধি কাজ করে সম্ভব 128 কয়েক সেকেন্ডের মধ্যে, কিন্তু সীমা এড়ানোর উত্তর যা আসলে বারবার থেকে নেই করার ফলাফল খুঁজে নিতে।i < 231i0i

দয়া করে আপনার উত্তরে আপনার নির্বাচিত ম্যাপিংয়ের একটি বিবরণ এবং কেন এটি দ্বিপ্রস্থ (তার আনুষ্ঠানিক প্রমাণ হওয়ার দরকার নেই) এর যুক্তিসঙ্গত অন্তর্ভুক্ত করুন।

এটি কোড গল্ফ, সংক্ষিপ্ত উত্তর (বাইটে) জিতেছে।

সম্পর্কিত চ্যালেঞ্জ

উত্তর:


5

পাইথ, 15 12 বাইট

ms+0_%Q>_zdQ

পরীক্ষা স্যুট

আমার রূপান্তরটি এক্সনরের একটির মতো, তবে বেস 10 এ এটি কে আলাদা আলাদা সংখ্যায় ইনপুটটি আনজিপ করে কাজ করে:

n = 21003034
k = 3

21003034
 1  3  4    134
2  0  3     203
  0  0        0

সংখ্যাগুলি সর্বনিম্ন অঙ্কের হ্রাস পজিশনে অর্ডার করা হয়, যাতে কোনও সংখ্যার গোষ্ঠীর সমস্ত ক্রম সম্ভব হয়।

কোডটি যেভাবে কাজ করে তা হ'ল আমরা ইনপুটটি বিপরীত করব, তারপরে শেষ 0, 1, ... k-1সংখ্যাগুলি কেটে ফেলব, তারপরে প্রতি kতম অঙ্কটি নেবে , আবার বিপরীত হবে, প্রারম্ভিকভাবে একটি আটকে থাকবে 0এবং ইনটে রূপান্তর করবে।


4

সিজেম, 20 বাইট

q~({4b2fmd2/z2fb~p}*

ম্যাপিংটি দ্বিখণ্ডিত, যেহেতু এটি 1 বার - এই উত্তর কে থেকে ম্যাপিং প্রয়োগ করে ।

প্রোগ্রাম হিসাবে ইনপুট পড়তে i kসিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ধারণা

আমরা বাইজিক ম্যাপিং এফ নির্মাণ করতে পারি চ: এন → এন 2 এফ (আই) নির্ধারণ করে:

  • আমি এর বাইনারি অঙ্কের অ্যারে রূপান্তর করি

  • বিজোড় সংখ্যাগুলির সংখ্যা থাকলে এই অ্যারেটিতে একটি 0 প্রস্তুত করুন

  • প্রক্রিয়াটিতে নতুনগুলিতে তৈরি হয়ে ফলাফলের অ্যারেটি নির্ধারণ করুন।

  • এই অ্যারেগুলিকে বেস 2 থেকে পূর্ণসংখ্যায় রূপান্তর করুন। নির্ধারণ 1 (ঝ) এবং 2 (ঝ) ফলাফল হিসাবে।

বাইজিক ম্যাপিং জি পেতে: এন → এন 3 , আমরা জি (এন): = (এফ 1 (আই), এফ 1 (এফ 2 (আই)), এফ 2 (এফ 2 (আই))) সংজ্ঞা দিতে পারি

বাইজিক ম্যাপিং এইচ পেতে: এন → এন 4 , আমরা এইচ (আই) সংজ্ঞা দিতে পারি : = (জি 1 (আই), জি 2 (আই), এফ 1 (জি 3 (আই)), এফ 2 (জি 3 ( জি 3 ) i)))

উপরোক্ত প্রক্রিয়াটি অব্যাহত রেখে আমরা অবশেষে বাইজেক্ট মানচিত্র N → N k এ পৌঁছে যাই ।

কোড

q~      e# Read and evaluate all input. This pushes i and k.
({      e# Do k-1 times:
  4b    e#   Convert the integer on the stack (initially i) to base 4.
  2fmd  e#   Replace each base-4 digit d by d/2 and d%2.
  2/    e#   Split into the chunks [d/2 d%2].
  z     e#   Transpose. This collects all quotients in one array and all
        e#   residues in another one.
  2fb   e#   Convert each array from base 2 to integer.
  ~     e#   Dump both integers on the stack.
  p     e#   Print the topmost one.
}*      e#

xnor এর ধারণাটি 20 বাইট দেয় (অথবা আপনি আমার চেয়ে এটি আরও ভালভাবে গল্ফ করেন তবে): q~2bW%1$Te]/zWf%2fbp(বিপরীতে ইনপুট অর্ডার)
মার্টিন ইন্ডার

3

সিজেম, 18 বাইট

q~({)2bW%_1#p))b}*

এটি আরও বোকা সূত্র ব্যবহার করে।

এখানে চেষ্টা করুন

ব্যাখ্যা

q~          e# Read input.
({          e# Repeat k-1 times:
    )       e# Increment the current integer (initially i), to make it positive.
    2b      e# Convert to binary.
    W%      e# Reverse the binary.
            e# The result can be any non-empty binary string without trailing 0s.
    _1#     e# Find the position of the first 1, or the number of initial 0s.
    p       e# Print.
    )       e# Extract the final bit, which is always 1.
            e# An array that can be any binary string is left in the stack.
    )       e# Increment the 1 to make it 2.
    b       e# Convert the binary string to a number using base 2.
            e# Only the number of initial 0s doesn't affect the result,
            e# which is exactly what is printed before.
}*          e# The final integer is printed automatically when the program ends.

সংক্ষেপে, এটি একটি ইতিবাচক পূর্ণসংখ্যার মানচিত্র করে:

  1. পিছনের শূন্যের সংখ্যা।
  2. ট্রেলিং জিরো সহ মূল পূর্ণসংখ্যা মুছে ফেলা, বিপরীত করা এবং পিছনের (মূলত প্রাথমিক) 1 সরানো হয়েছে।

3

পাইথন 2, 62

lambda z,k:[int('0'+bin(z)[~i:1:-k][::-1],2)for i in range(k)]

এই কোডটি কুরুচিপূর্ণ এবং গল্ফযোগ্য, তবে ধারণাটি খুব সহজ।

বিভিন্ন অফসেট সহ kপ্রতি kতম সংখ্যা পড়ার মাধ্যমে বাইনারি সম্প্রসারণকে একটিতে প্যাক করুন । উদাহরণস্বরূপ, এর সাথে k=3ইনপুট 357মানচিত্রগুলি (3,0,7):

101100101 <- 357
  1  0  1 -> 5
 0  0  0  -> 0
1  1  1   -> 7

একসাথে সংখ্যাগুলি জিপ করা এটিকে বিপরীত করে, তাই এটি একটি বাইজেকশন। এটি করার ক্ষেত্রে, বাইনারি সম্প্রসারণকে অসীম সংখ্যক নেতৃস্থানীয় জিরো হিসাবে ভাবেন।


3

জে, 38 28 27 বাইট

(({.,g^:_1@}.)g=:_ q:>:)~<:

এটি একটি স্বচ্ছ, ডায়াডিক ক্রিয়া যা i এবং কে বাম এবং ডান আর্গুমেন্ট হিসাবে গ্রহণ করে । এটি J.js এর সাথে অনলাইনে ব্যবহার করে দেখুন

ধারণা

আমরা একটি মানচিত্র নির্ধারণ এন → এন: চ দ্বারা চ (ঝ): = (α 1 , ... α K-1 , পৃ 1 α ... মু 2 α ট + 1 টি - 1 ...) , যেখানে ⟨p এন হয় প্রাথমিক সংখ্যা এবং i + 1 = পি 1 α 1 পি 2 α 2 … এর ক্রম ।

মৌলিক পাটিগণিত উপপাদ্য, মানচিত্র অনুযায়ী ছ: এন → এন ω দ্বারা সংজ্ঞায়িত ছ (ঝ): = (α 1 , α 2 , ...) (প্রধানমন্ত্রী গুণকনির্ণয় এর বহিঃপ্রকাশ আমি +1 bijective যায়)।

যেহেতু f (i) = (g 1 (i),… g k-1 (i), g -1 (g k (i), g k + 1 (i),…)) , মানচিত্র f এর দ্বিখণ্ডিত আমরা হব.

কোড

                            Left argument: i -- Right argument: k
                         <: Decerement k.
(                      )~   Reverse the order of the arguments and apply the
                            dyadic verb inside the parentheses to k-1 and i.
              g=:            Define a monadic helper verb g:
                     >:       Increment its right argument.
                 _ q:         Calculate the exponents of the prime factorization.
                             (implicit) Apply g to i.
(            )               Apply the dyadic verb inside the parentheses to k-1
                             and (g i).
           }.                 Drop the first k-1 elements of (g i)...
          @                   and...
     g^:_1                    apply the inverse of g to the result.
  {.                          Take the first k-1 elements of (g i).
    ,                         Append the rightmost result to the leftmost one.

আপনার ফাংশন দ্বিখণ্ডক কেন?
xnor

@ এক্সনর আমার ব্যাখ্যা থেকে অন্তত একটিটি হয়নি, যেহেতু আমি ভুল করে কয়েক সূচক বদলেছি। আমি একটি প্রমাণ স্কেচ যোগ করেছি।
ডেনিস

1

পাইথন 2, 72

q=lambda z:z and z%2+2*q(z/4)
g=lambda z,k:1/k*[z]or[q(z)]+g(q(z/2),k-1)

qশেষ থেকে শুরু করে প্রতিটি দ্বিতীয় বিট নিয়ে ফাংশন বাইনারি সংখ্যাগুলিতে কাজ করে। ফলস্বরূপ q(z), q(z>>1)দুটি সংখ্যা দেয় যার বাইনারি অঙ্কগুলি ছেদ করতে দেয় z। উদাহরণস্বরূপ, 594 12 এবং 17 এ বিভক্ত হয়।

1001010010   <- 594
 0 1 1 0 0   ->  12
1 0 0 0 1    ->  17

এটি একটি বাইজিকেশন কারণ মূল সংখ্যাটি পুনরুদ্ধার করতে আমরা একসাথে সংখ্যাগুলি জিপ করতে পারি।

ফাংশনটি gএই অজানা k-1সময়গুলি প্রয়োগ করে , একটি একক উপাদান থেকে এক জোড়াতে ট্রিপল ... এক- kস্তরের পর্যন্ত প্রসারিত হয় । প্রতিবার, শেষ উপাদানটি দুটি উপাদানে প্রসারিত হয়। বাইজেকশনের মাধ্যমে জোড়ায় ইনপুট ম্যাপিংয়ের মাধ্যমে আউটপুটটির প্রথম প্রবেশের জন্য জোড়ের প্রথম উপাদানটি গ্রহণ করে k-1এবং বাকী প্রবেশগুলি তৈরি করার জন্য দ্বিতীয় উপাদানটির সাথে পুনরাবৃত্তভাবে ফাংশন প্রয়োগ করে এটি পুনরাবৃত্তভাবে সম্পন্ন হয়।


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