এক্সটারস্পেস এক্সপ্লোর করে


14

Xorspace পূর্ণসংখ্যার একটি সেট যে স্বাভাবিক, bitwise XOR অপারেটর দিয়ে শুরু পূর্ণসংখ্যার মিশ্রন পাওয়া যেতে পারে সব পূর্ণসংখ্যার সেট ( ^)। উদাহরণস্বরূপ, এর xorspace (8, 4)হয় (0, 4, 8, 12): 0 4 ^ 4, 12 হয় 4 ^ 8, এবং অন্য কোনও সংখ্যা পৌঁছানো যায় না। নোট করুন যে শুরুর সংখ্যাগুলি সর্বদা এই সংজ্ঞা দ্বারা অন্তর্ভুক্ত থাকে (উদাহরণস্বরূপ, 4 হ'ল 4 ^ 4) 4)।

আপনার লক্ষ্যটি হ'ল সংক্ষিপ্ততম প্রোগ্রামটি লিখুন যা ইনপুট হিসাবে অ-নেতিবাচক পূর্ণসংখ্যার তালিকা গ্রহণ করে এবং তাদের এক্সরেসেসের উপাদানগুলির সংখ্যাকে আউটপুট করে।

পরীক্ষার মামলা

Input: 0
Output: 1

Input: 6
Output: 2

Input: 8 4
Ouput: 4

Input: 0 256
Output: 2

Input: 256 259 3
Output: 4

Input: 60 62 94 101 115
Output: 32

Input: 60 62 94 101 115 40 91
Output: 32

Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
Output: 64

Input: 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384
Output: 32768

উত্তর:


2

পাইথ, 8 বাইট

lu{+xM*Q

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

ব্যাখ্যা:

এক্সরস্পেস তৈরি করতে, আমরা প্রতিটি জোড় সংখ্যার জোড় নেওয়া, প্রতিটি সংখ্যায় যোগ করা এবং প্রতিলিপি তৈরির ফিক্সপয়েন্টটি পাই। তারপরে, আমরা ফলাফলটির দৈর্ঘ্য নিই। এটি চূড়ান্ত পরীক্ষার ক্ষেত্রে 20 সেকেন্ডে (কেবলমাত্র অফলাইনে) চলে।

lu{+xM*Q
lu{+xM*QGGQ    Implicit variable introduction
 u        Q    Find the fixed point of the following, starting with the input,
               where the current value is G.
      *QG      Form the Cartesian product of Q (input) and G (current)
    xM         Take the xor of every pair
   +           Add the current values
  {            Deduplicate
l              Output the length of the result.

প্যাকড পাইথ , 7 বাইট

Hexdump:

0000000: d9d7 dabf 1355 51                        .....UQ

7 বিট ASCII এনকোডিং সহ উপরের মতই।

উপরেরটি একটি ফাইলের সাথে রাখুন xxd -r, এবং এটি নিম্নরূপে চালান:

py packed-pyth.py xorspace.ppyth '[256, 259, 3]'

আমি মনে করি আপনি করতে পারেন l{mxFdy
xnor

@xnor y1 এর মাধ্যমে 63 টি পরীক্ষার ক্ষেত্রে প্রয়োগ হয়েছে খুব ধীর। আমার 2 ^ 63 মেমরি নেই।
isaacg

10

এমএটিএল , 11 বাইট

t"G!Z~Ghu]n

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

শেষ পরীক্ষার কেস মেমোরি সীমাবদ্ধতার কারণে অনলাইন ইন্টারপ্রেটারে চলতে পারে না, তবে আধুনিক কম্পিউটারে 2 সেকেন্ডেরও কম সময়ে অফলাইনে চলে।

ব্যাখ্যা

আকারের ইনপুটগুলির জন্য n, এটি নিম্নলিখিতগুলি করে:

  1. ফলাফলটি ইনপুটতে প্রাথমিক করুন।
  2. পুনরাবৃত্তি nবার:
    1. বর্তমান ফলাফল এবং ইনপুট থেকে সমস্ত জোড়া এন্ট্রিগুলিতে বিটওয়াইজ এক্সওর প্রয়োগ করুন।
    2. ফলাফলের সাথে ইনপুট মানগুলি সংযুক্ত করুন।
    3. Deduplicate।
  3. আউটপুট হ'ল চূড়ান্ত ফলাফলের উপাদানগুলির সংখ্যা।

মন্তব্য করা কোড।

t      % Implicit input: row vector. Duplicate
"      % For each (i.e. do as many times as the input size)
  G!   %   Push input as a column vector
  Z~   %   Bitwise XOR with broadcast, i.e. for all pairs of entries of the
       %   two arguments. The first argument is the accumulated result
       %   from the previous iteration, the second is the input vector
  G    %   Push input again
  h    %   Postpend
  u    %   Unique values. Gives a row vector
]      % End
n      % Number of entries. Implicitly display

উদাহরণ

ইনপুট জন্য মধ্যবর্তী ফলাফল (পদক্ষেপ 2.1 এবং 2.3) হ'ল [256 259 3]:

প্রথম পুনরাবৃত্তি: এর [256 259 3]সাথে [256 259 3]: বিটওয়াইস-এক্সওর এর সমস্ত জোড়া গণনা ম্যাট্রিক্স দেয়

  0   3 259
  3   0 256
259 256   0

সংযুক্তি [256 259 3]এবং প্রতিলিপি

0 3 259 256

দ্বিতীয়ত পুনরাবৃত্তির: বর্তমান ফলাফলের [0 3 259 256]সঙ্গে [256 259 3]। প্রতিলিপি পরে আবার দেয়

0 3 259 256

তৃতীয় পুনরাবৃত্তি: আবার

0 3 259 256

সুতরাং আউটপুট হয় 4(ফলাফলের এন্ট্রি সংখ্যা)।


ব্যাখ্যা দয়া করে? আপনি ও (2 ^ n) ব্যবহার করতে পারবেন না।
এরিক আউটগলফার

এটি কীভাবে কাজ করে তা সম্পর্কে আমার কোনও ধারণা নেই তবে এটি অবশ্যই ও (2 ^ n) নয়। এটি প্রকৃতপক্ষে (1 2 3… 63) পরীক্ষার কেস সমাধান করে খুব তাড়াতাড়ি, যদিও এটি ব্রুট-ফোর্স পদ্ধতির জন্য সবচেয়ে খারাপ পরিস্থিতি।
গ্রিমি

2
এত দ্রুত কীভাবে? আমি জেলির মতো একই কাজ করার চেষ্টা করছি, তবে প্রথম চেষ্টাটি 19 মিনিটের পরে মারা গেল ... (এখন আরও র‌্যাম নিয়ে চেষ্টা করা হচ্ছে।)
ডেনিস

2
আমি বিশ্বাস করি এটি ও (2ⁿ) সবচেয়ে খারাপ পরিস্থিতি; এটি যে পরীক্ষায় এটি অনুশীলন করে, এন কেবল 15, সুতরাং প্রোগ্রামটি এখনও মোটামুটি দ্রুত চলে।

2
@ ais523, bitwise-XOR যাও থেকে প্রাপ্ত ইনপুটে সর্বাধিক সংখ্যক তার চেয়ে অনেক বেশী না পেতে পারেন অন্তর্বর্তী নম্বর, যে কল M। সুতরাং মধ্যবর্তী ফলাফলগুলির ভেক্টরের আকার কখনই অতিক্রম করে না Mএবং জটিলতা ও ( M*M)। ওপি বলেছেন যে সঠিক সংজ্ঞা nব্যাপার না, তাই যদি আমি সংজ্ঞায়িত nহিসাবে Mআমি এই দাবিটির হে হতে পারে ( n*n)।
লুইস মেন্ডো

8

হাস্কেল , 64 বাইট

f পূর্ণসংখ্যার একটি তালিকা নেয় এবং পূর্ণসংখ্যা ফেরত দেয়।

import Data.Bits
f l|m<-maximum l,m>0=2*f(min<*>xor m<$>l)|0<1=1

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

এটি খালি তালিকা হ্যান্ডেল করে না, তার জন্য আপনি $0:পরে স্থানের পরিবর্তে পারেন maximum

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

  • সর্বাধিক হলে mতালিকার শূন্য হলে, 1 প্রদান করে।
  • অন্যথায়, প্রতিটি উপাদান সর্বাধিক সহ xors করুন।
    • ফলাফলটি উপাদানটির চেয়ে ছোট হলে উপাদানটি এটি দ্বারা প্রতিস্থাপিত হয়।
    • এটি তালিকার যে কোনও জায়গায় সর্বাধিক উল্লেখযোগ্য বিট সেট করে ফেলেছে।
    • তারপরে ফলাফল তালিকায় পুনরাবৃত্তি ঘটে, পুনরাবৃত্তির ফলাফল দ্বিগুণ করে।
  • এই প্রক্রিয়াটি মূলত সম্পাদন করে গাউসিয়ান নির্মূলকরণ (যদিও চূড়ান্ত সারিগুলি 0 তে সেট করে ফেলে দেওয়া হয়) মডিট্রো 2, যার সারি সংখ্যাগুলির তালিকার বিট উপস্থাপনা are "Xorspace" এর বিট উপস্থাপনার সেটটি এই ম্যাট্রিক্সের সারি দ্বারা বিভক্ত ভেক্টর স্পেস মডুলো 2 এবং যার উপাদানগুলির সংখ্যা 2 ম্যাট্রিক্সের সারি র‌্যাঙ্কের পাওয়ার হিসাবে 2।
  • এই অ্যালগরিদমটি বহুপদী সময়, সুতরাং অবশ্যই ও (2 ^ n) এর চেয়ে ভাল হওয়া উচিত।

এটি মূলত আমি যে অ্যালগরিদমটি নিয়ে ভাবছিলাম (জটিলতার সীমাটি মারধর করার জন্য), যদিও এটি এটির উপস্থাপনের জন্য একটি বিশেষভাবে মার্জিত উপায়। এটি সঠিকভাবে গল্ফযুক্ত উত্তরে দেখে ভাল লাগল।

4

গণিত, 52 বাইট

2^MatrixRank[PadLeft@IntegerDigits[#,2],Modulus->2]&

আপনি কেন আপনার পারী / জিপি উত্তর মুছলেন? মনে হচ্ছে এটি ঠিকঠাক কাজ করছে। সম্পাদনা: কিছুই নয়, এটি আসলে কিছু পরীক্ষার ক্ষেত্রে ব্যর্থ হয়েছিল।
গ্রিমি

@ গ্রিমি আপনি আমার উত্তর কেন গ্রহণ করলেন? এটি একটি কোড-গল্ফ, সংক্ষিপ্ততম কোডটি জয়ী।
আলেফাল্ফ

দুঃখিত, আমি 7 বাইট প্যাকড পাইথ একটির গৃহীত উত্তরটি পরিবর্তন করেছি।
গ্রিমি

3

05 এ বি 1 ই , 8 বাইট

vDy^ìÙ}g

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

সমস্ত টেস্ট-কেস টিআইওতে 1 মিনিটের নিচে শেষ হয়।


এটি সর্বশেষ মানদণ্ডে ব্যর্থ: code আপনার কোডটি এক দিনেরও কম (সমস্ত ও (2 ** এন) স্টাফ) না করে সমস্ত পরীক্ষার কেসগুলি প্রক্রিয়া করতে সক্ষম হবে। »
গ্রিমি

@ গ্রিমি: 2^nঅংশটি
পড়েনি

@ গ্রিমি: এখন 1 মিনিটেরও কম
অলট

ভাবছিলাম âü^Ùgযতক্ষণ না দেখলাম আপনি একাধিকবার এক্সর করতে পারবেন, দুর্দান্ত সমাধান।
ম্যাজিক অক্টোপাস উরন

@ কারাসোকম্পিউটিং: এটি একটি বাইট সংরক্ষণ করে, তবে জটিলতার বিষয়ে আমি নিশ্চিত নই।
Emigna

3

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

r={0}
for n in input():r|={x^n for x in r}
print len(r)

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

ফাংশনগুলি বিট করে:

f=lambda l,r={0}:l and f(l[1:],r|{x^l[0]for x in r})or len(r)
f=lambda l:len(reduce(lambda r,n:r|{x^n for x in r},l,{0}))

আরজান জোহানসেনের সুন্দর সারি নির্মূলের পদ্ধতিটি একটি বাইট সংক্ষিপ্ত।

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

f=lambda l:1-any(l)or 2*f([min(x,x^max(l))for x in l])

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


2

জেলি , 9 8 বাইট

0œ|⁺^¥/L

অধীনে সমস্ত পরীক্ষার কেস সমাপ্ত করে টিআইও-তে 8 সেকেন্ডের নগণ্য মেমরির প্রয়োজনীয়তা সহ শেষ করে।

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

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

0œ|⁺^¥/L  Main link. Argument: A (array)

0œ|       Perform multiset union with 0, prepending 0 if A doesn't contain it.
      /   Reduce A by the link to the left.
     ¥      Combine the previous two links into a dyadic chain.
            Left argument: V (array). Right argument: n (integer)
    ^           Bitwise XOR each element in V with n.
   ⁺            This quick refers to the previous link, making it a shorthand for
                the link 'œ|'. Thus, it performs multiset union on V and the array
                of bitwise XORs.
       L  Compute the length of the result.

1

পাইথন, 113 বাইট

def f(x):
 u,s=[0],{0}
 while u:
	a=u.pop()
	for b in x:
	 c=a^b
	 if c not in s:u+=[c]
	 s.add(c)
 return len(s)

এটি কাজ করে, তবে আমি 113 বাইট গণনা করছি; আমি কি কিছু রেখে গেলাম?
গ্রিমি

@ টোটালিহুমান সম্ভবত এটি কারণ আপনি একটি বাইটের চেয়ে 8 বাইট হিসাবে ট্যাবুলেশন গণনা করছেন।
গ্রিমি

প্রথম ইন্ডেন্টেশনটি যদি একটি স্থান হয়,
পরেরটিটি

@ গ্রিমি প্রকৃতপক্ষে প্রতিটি ট্যাবটি 8 টি নয় 4 টি ফাঁকা স্থান
এরিক আউটগলফার

একটি পূর্ণ প্রোগ্রাম সংক্ষিপ্ত হবে, কারণ এটি মুষ্টিমেয় ইন্ডেন্টেশন সংরক্ষণ করে। এছাড়াও, লুপের u+=[c][c in s:]জন্য আপনার ifস্টেটমেন্টের সমতুল্য একটি একক লাইনে কনডেন্স করা যায় ।
ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.