অকার্যকর ডিকোড


25

একটি অকার্যকর তালিকা এমন একটি তালিকা যা কোনও স্তরের কোনও তালিকাভুক্ত অবজেক্ট থাকে না। অথবা আপনি যদি পুনরাবৃত্ত সংজ্ঞা পছন্দ করেন

  • খালি তালিকাটি বাতিল

  • কেবলমাত্র অন্য শূন্য তালিকাগুলি সহ একটি তালিকা বাতিল oid

সমস্ত শূন্য তালিকার একটি সীমাবদ্ধ গভীরতা রয়েছে।

অকার্যকর তালিকার কয়েকটি উদাহরণ রয়েছে (পাইথন সিনট্যাক্স ব্যবহার করে):

[]
[[]]
[[],[]]
[[[]]]
[[[]],[]]
[[],[[]]]

এখানে যে কিছু উদাহরণ দেওয়া হল না অকার্যকর তালিকাগুলি:

["a"]
[[...]]
[1]
2
[[],([],[])]

কার্য

দুটি পৃথক ফাংশন লিখুন (বা আপনি যদি পছন্দ করেন তবে প্রোগ্রামগুলি)। একটিকে একটি যুক্তি হিসাবে একটি ধনাত্মক পূর্ণসংখ্যার গ্রহণ করা উচিত (আপনি যদি চান তবে আপনি শূন্যও অন্তর্ভুক্ত করতে পারেন) এবং একটি শূন্য তালিকার ফিরিয়ে দেওয়া উচিত অন্যের উচিত শূন্য তালিকা নেওয়া এবং এটি একটি পূর্ণসংখ্যা ফেরত দেয়। এই দুটি ফাংশন সর্বদা একে অপরের বিপরীত হওয়া উচিত। যে আপনি যদি আউটপুট পাস হয় fবা gতোমাদের আসল ইনপুটের পাওয়া উচিত fএর ফলে g। এর অর্থ ম্যাপিংটি অবশ্যই 1: 1 হতে হবে, অর্থাত্ প্রতিটি পূর্ণসংখ্যার জন্য, কেবলমাত্র একটি শূন্য তালিকার উপস্থিত থাকতে পারে যার জন্য gসেই পূর্ণসংখ্যা দেয় এবং প্রতিটি শূন্য তালিকার জন্য ঠিক একটি পূর্ণসংখ্যা থাকা উচিত যার জন্য fসেই শূন্য তালিকা দেয় gives

আপনি মূলত একটি বাইজেকশন তৈরি করছেন

আপনি আপনার ভাষা নেটিভ তালিকার পরিবর্তে একটি অকার্যকর তালিকার স্ট্রিং প্রতিনিধিত্ব (কমা এবং ফাঁকা স্থান ছাড়াও) ব্যবহার করতে পারেন।

স্কোরিং

আপনার স্কোর একসাথে আপনার দুটি ফাংশনের দৈর্ঘ্য হবে। এটি তাই আপনার এই যোগফলটি হ্রাস করার লক্ষ্য করা উচিত।



1
এই প্রশ্নটি দুটি ফাংশনের জন্য জিজ্ঞাসা করে যেখানে নকলটি কেবল প্রথম অর্ধের জন্য জিজ্ঞাসা করে।
ইয়ান মিলার

3
ইঁদুর। আমি এখনও আমার লেখা সেরা উত্তরটি প্রায় পোস্ট করেছি এবং এটি অন্যান্য চ্যালেঞ্জের জন্য যোগ্য নয়।
কালেব ক্লেভেটার

2
@ ইয়ানমিলার আমি বলতে চাই যে অন্য চ্যালেঞ্জের এনকোডিংয়ের জন্য বিভিন্ন নির্দেশিকা রয়েছে তবে এটি একটি করে।
কালেব ক্লেভেটার

1
সম্ভবত এই প্রশ্নটি কেবল ডিকোডার হিসাবে বিবেচিত হবে? এনকোডার সম্পর্কে ইতিমধ্যে একটি প্রশ্ন আছে।

উত্তর:


7

পাইথ, 27 + 29 = 56 বাইট

f:

L?bol`NS{sm[d+d]Y]d)ytb]Y@y

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

g:

L?bol`NS{sm[d+d]Y]d)ytb]Yxyl`

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

সিস্টেমটি খুব সহজ: আমি একটি নির্দিষ্ট সংখ্যক এর চেয়ে বেশি ছাড়া সমস্ত সম্ভাব্য তালিকা তৈরি করি [। তারপরে, আমি তাদের এমনভাবে বাছাই করি যাতে আমি এখনও তৈরি না করা তালিকাগুলি শেষের কাছাকাছি। yউভয় প্রোগ্রামে অভিন্ন, এটি সমস্ত ফাংশন দ্বারা সম্পন্ন হয় । এটি হিসাবে লেখা হয়

L?bol`NS{sm[d+d]Y]d)ytb]Y

তারপরে, আমি এই তালিকার জন্য সূচী করছি এবং এর জন্য fঅনুসন্ধান করব g

আমি যে তালিকা তৈরি করে তার সংখ্যা যথেষ্ট পরিমাণে বেছে নেওয়া হয়েছে যা আমি সমস্ত সম্ভাব্য তালিকা তৈরি করেছি যা অসীম বাছাই তালিকায় কাঙ্ক্ষিত অবস্থানে বা তার আগে প্রদর্শিত হবে।

প্রোগ্রামগুলি 0 হিসাবে বিকল্প হিসাবে অনুমতি দেয় / ফেরত দেয়।


5

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

এটি অনলাইন চেষ্টা করুন! বাইজেকশন পরীক্ষা করতে।

f=lambda l:len(l)and f(l[0])*2+1<<f(l[1:])

অ-নেতিবাচক পূর্ণসংখ্যার শূন্য তালিকাগুলি নিয়ে যায়। 42 বাইট।

g=lambda n:n*[g]and[g(n/(n&-n)/2)]+g(len(bin(n&-n))-3)

অকার্যকর পূর্ণসংখ্যার তালিকা বাতিল করে। 54 বাইট। আরও একটি পুনরাবৃত্ত প্রচেষ্টা একই দৈর্ঘ্য দিয়েছে।

g=lambda n,i=0:n*[g]and[g(n/2,i+1),[g(n/2)]+g(i)][n%2]

1

জাভা 7, 725 বাইট

f(int)( 325 বাইট ):

String f(int i){String s="";for(int j=0,e=0;e<i;e+=v(s))s=Integer.toBinaryString(j++);return"["+s.replace("1","[").replace("0","]")+"]";}int v(String s){for(;!s.isEmpty();s=s.replaceFirst("1","").replaceFirst("0",""))if(s.replace("1","").length()!=s.replace("0","").length()|s.charAt(0)<49|s.endsWith("1"))return 0;return 1;}

g(String)( 75 + 325 বাইট ):

int g(String s){int r=0;for(String i="10";!i.equals(s);i=f(++r));return r;}

যেহেতু পদ্ধতিটি সম্ভাব্য শূন্য-তালিকার উপরের লুপিংয়ের মাধ্যমে ফলাফলটি গণনা gকরার fজন্য পদ্ধতিটি ব্যবহার করে যতক্ষণ না এটি একটি ইনপুটযুক্ত সমানটির সন্ধান করে, এর বাইটগুলি fদ্বিগুণ গণনা করা হয় (যেহেতু উভয় পদ্ধতিই এই চ্যালেঞ্জের জন্য অন্যটি ছাড়া চালাতে সক্ষম হবে)।

ব্যাখ্যা:

সাধারণভাবে, পদ্ধতিটি fসহজেই পূর্ণসংখ্যার সমস্ত বাইনারি স্ট্রিং-উপস্থাপনাগুলির উপরে লুপ করে এবং প্রতিবার কোনও বৈধ সন্ধান পেলে একটি কাউন্টার বাড়ায়। এই চ্যালেঞ্জের জন্য বৈধ বাইনারি-স্ট্রিংগুলি নিম্নলিখিত বিধিগুলি মেনে চলে: এগুলি একটি দিয়ে শুরু হয় 1এবং একটি দিয়ে শেষ হয় 0; তাদের 1 এবং 0 এর সমান সংখ্যক রয়েছে; এবং প্রত্যেক সময় আপনি প্রথম অপসারণ 1এবং 0এবং যাচাই কি আবার ছেড়ে দেওয়া হয়, এই দুটি নিয়ম এখনও প্রযোজ্য। পরে পাল্টা ইনপুট সমান, এটি একটি স্ট্রিং অকার্যকর-তালিকাতে যে বাইনারি-স্ট্রিং পরিবর্তিত সব প্রতিস্থাপন 1সঙ্গে [এবং সমস্ত 0সঙ্গে ]

পদ্ধতির হিসাবে g: আমরা "[]"(শূন্য-তালিকার প্রতিনিধিত্বকারী 0) দিয়ে শুরু করি এবং এরপরে fইনপুট-স্ট্রিংয়ের মিল না হওয়া অবধি কোনও পূর্ণসংখ্যা বাড়ানোর সময় পদ্ধতিটি ব্যবহার করা চালিয়ে যাচ্ছি।

String f(int i){         // Method `f` with integer parameter and String return-type
  String s="";           //  Start with an empty String
  for(int j=0,e=0;e<i;   //  Loop as long as `e` does not equal the input
      e+=v(s))           //    And append increase integer `e` if String `s` is valid
    s=Integer.toBinaryString(j++);
                         //   Change `s` to the next byte-String of integer `j`
                         //  End of loop (implicit / single-line body)
  return"["+             //  Return the result String encapsulated in "[" and "]"
    s.replace("1","[").replace("0","]")+"]";
                         //  after we've replaced all 1s with "[" and all 0s with "]"
}                        // End of method `f`

int v(String s){         // Separate method with String parameter and integer return-type
  for(;!s.isEmpty();     //  Loop as long as String `s` isn't empty
      s=s.replaceFirst("1","").replaceFirst("0",""))
                         //    After each iteration: Remove the first "1" and "0"
    if(s.replace("1","").length()!=s.replace("0","").length()
                         //   If there isn't an equal amount of 1s and 0s
       |s.charAt(0)<49   //   or the String doesn't start with a 1
       |s.endsWith("1")) //   or the String doesn't end with a 0
      return 0;          //    Return 0 (String is not valid)
                         //  End of loop (implicit / single-line body)
  return 1;              //  Return 1 (String is valid)
}                        // End of separate method

int g(String s){         // Method `g` with String parameter and integer return-type
  int r=0;               // Result integer
  for(String i="[]";!i.equals(s);
                         //  Loop as long as `i` does not equal the input String
      i=f(++r));         //   After each iteration: Set `i` to the next String in line
  return r;              //  Return the result integer
}                        // End of method `g`

ইনপুট এবং আউটপুট কেসগুলির উদাহরণ:

এখানে চেষ্টা করুন। (দ্রষ্টব্য: গত কয়েকটি পরীক্ষার ক্ষেত্রে এটি বেশ ধীর।

0   <-> []
1   <-> [[]]
2   <-> [[][]]
3   <-> [[[]]]
4   <-> [[][][]]
5   <-> [[][[]]]
6   <-> [[[]][]]
7   <-> [[[][]]]
8   <-> [[[[]]]]
9   <-> [[][][][]]
10  <-> [[][][[]]]
11  <-> [[][[]][]]
12  <-> [[][[][]]]
13  <-> [[][[[]]]]
14  <-> [[[]][][]]
50  <-> [[[][[[]]]]]
383 <-> [[[][]][[[][]]]]

1
আমি মনে করি না যে [][]এটি একটি তালিকা। জাভা যেভাবে যা কিছু করে তা সম্ভবত আমি ভুল বুঝছি। [...]এগুলি চারপাশে যুক্ত করা এবং 0 টি মানচিত্রের []কৌশলটি করা উচিত।
গম উইজার্ড

@ ওয়েট উইজার্ড আহ, শুভ কল। এটি ঠিক করার চেষ্টা করবে। যাইহোক এখনও আমার যথেষ্ট বাইট ছিল না। ; পি
কেভিন ক্রুইজসেন 11'17

@ ওয়েট উইজার্ড ঠিক আছে, এটি এখনই ঠিক করা উচিত। শক্ত কিন্তু মজাদার চ্যালেঞ্জ বিটিডব্লিউ। আপনি কী বোঝাতে চেয়েছিলেন তা বোঝার আগে এবং এই উত্তরটি লিখতে আরও বেশি সময় লাগল, তবে এটি মজাদার। :)
কেভিন ক্রুইজসেন



0

পাইথন 3 - সাইন / অ্যাবস, 73 বাইট

f=lambda n:[[[]]*(n<0),[[]]*abs(n)]
g=lambda l:[-1,1][not l[0]]*len(l[1])

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

সরাসরি এগিয়ে বাস্তবায়ন, নেতিবাচক সংখ্যা সমর্থন করে।

পূর্ণসংখ্যা iএনকোড করা হয় [sign(i), abs(i)], যেখানে sign(i)=[] if i > 0 else [[]]এবং abs(i)=[[]] * i, অর্থাত্ দৈর্ঘ্য অ্যাবস (i) সহ খালি তালিকার একটি তালিকা।

পাইথন 3 - বাইনারি, 126 বাইট

এটি একটি আরও বিস্তৃত সংস্করণ (এবং আরও দীর্ঘতর ...), যেখানে বাইনারি তালিকার উপস্থাপনায় পরম মান এনকোড করা হয়।

f=lambda n:[[[]]*(n<0),[[[]]*int(i)for i in f"{n:+b}"[1:]]]
g=lambda l:[-1,1][not l[0]]*int(''.join(map(str,map(len,l[1]))),2)

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


1
আরও জটিল শূন্য তালিকার জন্য কাজ করে না: এটি অনলাইনে চেষ্টা করুন!
জিতসে

আহ, আমি একরকম মিস করেছি, প্রতিটি শূন্য তালিকার জন্য ম্যাপিং হওয়া উচিত ... আপনি ঠিক বলেছেন।
মুভিটিকা

0

Stax , 33 মোট বাইট

এই প্রোগ্রামগুলি একে অপরের বিপরীত। তারা সমস্ত অকার্যকর তালিকাগুলি এবং সমস্ত অ-নেতিবাচক পূর্ণ পূর্ণসংখ্যার থেকে এবং এগুলিতে রূপান্তর করে, যাতে এটি 0 অন্তর্ভুক্ত করে This এটি মনে হয় এটি সম্ভবত কোনও বীজগণিতের একটি বিখ্যাত ফাংশন যা আমি জানি না। আমার মাথাটি এটির চারপাশে জড়ানোর জন্য, আমি প্রথমে অজগরটিতে ফাংশন হিসাবে প্রোগ্রামগুলি বাস্তবায়ন করি।

def convert_to_void(n):
    lst = []
    while n > 0:
        n -= 1
        choices = len(lst) + 1
        choice = n % choices
        cutpoint = len(lst) - choice
        n //= choices
        newgroup = lst[cutpoint:]
        del lst[cutpoint:]
        lst.append(newgroup)
    return lst

def convert_from_void(lst):
    n = 0
    while lst != []:
        newgroup = lst.pop()
        n *= len(lst) + len(newgroup) + 1
        n += len(newgroup) + 1
        lst.extend(newgroup)
    return n

স্ট্যাক্স প্রোগ্রামগুলির একই আচরণ রয়েছে।

অ-নেতিবাচক পূর্ণসংখ্যা → শূন্য তালিকা, 15 বাইট

ƒâ₧~└3BI─¿-rÅ;ì

এটি চালান এবং এটি ডিবাগ করুন

অকার্যকর তালিকা → অ-নেতিবাচক পূর্ণসংখ্যা, 18 বাইট

Çäê[!σ`c↑Ö§░NR╥ç=Æ

এটি চালান এবং এটি ডিবাগ করুন

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