একটি দশমিক খড়ের ছিটে একটি বাইনারি সূচি সন্ধান করুন


41

চ্যালেঞ্জ

আপনাকে দেওয়া হয়েছে:

  • ইতিবাচক পূর্ণসংখ্যার (খড়ের খালি) একটি খালি নয়, নিরবচ্ছিন্ন তালিকার এইচ
  • ধনাত্মক পূর্ণসংখ্যা n (সূচ)

আপনার টাস্ক সব তালিকা আসতে হয় অনন্য এর একাধিক বিন্যাসন দশমিক concatenations যার বাইনারি উপস্থাপনা বাইনারি উপস্থাপনা রয়েছে এন

উদাহরণ

  1. এইচ = [1, 2, 3]
    এন = 65

    উদাহরণ

    এখানে কেবল একটি মিলে যাওয়া কনটেন্টেশন রয়েছে, সুতরাং প্রত্যাশিত আউটপুট [321]

  2. এইচ = [1, 2, 3]
    এন = 7

    এবার, তিনটি কনটেটেশন রয়েছে যাতে বাইনারি প্যাটার্ন 111 রয়েছে । প্রত্যাশিত আউটপুট হয় [123, 231, 312]

  3. h = [12, 3]
    n = 7

    কেবল দুটি ক্রমবর্ধমান উপলব্ধ এবং উভয় মিলছে। প্রত্যাশিত আউটপুট হয় [123, 312]

  4. এইচ = [1, 2, 2]
    এন = 15

    একমাত্র মিলের কনটেন্টেশনটি 122 ( বাইনারিতে 1111010 , যা 1111 রয়েছে ), সুতরাং প্রত্যাশিত আউটপুট [122]। নোট করুন যে দুটি ক্রিয়াকলাপগুলি আসলে 122 এর দিকে পরিচালিত করে তবে আপনাকে আউটপুট দেওয়ার অনুমতি দেওয়া হচ্ছে না[122, 122]

ব্যাখ্যা এবং বিধি

  • আপনি সুইটি একটি পূর্ণসংখ্যা ( 65) হিসাবে গ্রহণ করতে পারেন , একটি স্ট্রিং দশমিক মান ( "65") বা বাইনারি মান ( "1000001") উপস্থাপন করে এমন একটি স্ট্রিং ।
  • আপনি খড়খড়িটিকে নেটিভ অ্যারে / অবজেক্ট / পূর্ণসংখ্যার সেট ( [11,12,13]), নেটিভ অ্যারে / অবজেক্ট / দশমিক মান ( ["11","12","13"]) উপস্থাপন করে স্ট্রিংগুলির সেট বা দশমিক মান ( "11 12 13"বা "11,12,13") এর সীমানাঙ্কিত স্ট্রিং হিসাবে নিতে পারেন । আপনি অঙ্কগুলির অ্যারে ব্যবহার করে কোনও বৈকল্পের বিকল্পও পছন্দ করতে পারেন (যেমন [[1,1],[1,2],[1,3]])।
  • আউটপুট অবশ্যই খড়ের গর্তের জন্য উপরে বর্ণিত ফর্ম্যাটগুলির একটি অনুসরণ করতে হবে, তবে অগত্যা একইরকম নয়।
  • আপনার হাইয়েস্ট্যাকগুলি হ্যান্ডেল করার কথা নেই যাঁর সর্বোচ্চ দশমিক কনটেন্টেশনটি আপনার ভাষার সর্বোচ্চ প্রতিনিধিত্বমূলক স্বাক্ষরযুক্ত পূর্ণসংখ্যার চেয়ে বেশি।
  • এগুলি ছাড়াও, আপনার কোডটিকে তাত্ত্বিকভাবে কোনও ইনপুট সমর্থন করা উচিত - ধরে নিলে এটিকে যথেষ্ট সময় এবং মেমরি দেওয়া হয়েছে।
  • এই স্পার্টা! , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর!

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

Haystack             | Needle   | Output
---------------------+----------+-----------------------------------
[ 1, 2, 3 ]          | 65       | [ 321 ]
[ 1, 2, 3 ]          | 7        | [ 123, 231, 312 ]
[ 12, 3 ]            | 7        | [ 123, 312 ]
[ 1, 2, 2 ]          | 15       | [ 122 ]
[ 1, 2 ]             | 7        | []
[ 12, 34, 56 ]       | 21       | [ 125634, 341256, 345612, 563412 ]
[ 1, 2, 3, 4, 5 ]    | 511      | [ 53241 ]
[ 1, 3, 5, 7, 9 ]    | 593      | [ 37519, 51793, 75913, 75931 ]
[ 11, 12, 13, 14 ]   | 12141311 | [ 12141311 ]
[ 1, 2, 1, 2, 1, 2 ] | 1015     | [ 221112 ]

1
আমার সমাধান এর আউটপুট মত set([(1, 2, 2)])। এটি বৈধ নাকি আমার থেকে মুক্তি পাওয়া উচিত set?
ডেড পসুম

@ ডেডপসসাম হ্যাঁ, এটি বৈধ।
আর্নল্ড

খড়ের খড়ি ইনপুট কি একক স্ট্রিং ("123") হতে পারে? কিছু ভাষায় একটি স্ট্রিং অক্ষরের অ্যারের সমান, তাই আমি মনে করি এটি বোধগম্য হবে
লুইস মেন্ডো

@ লুইস মেন্ডো এটি করতে পারে না ["12","3"]এবং ["1","23"]এটি দুটি স্বতন্ত্র খড়ের ছিদ্র ।
আর্নল্ড

@ আরনাউল্ড আহ, আমি ভেবেছিলাম এগুলি অঙ্ক। ধন্যবাদ
লুইস মেন্ডো

উত্তর:


17

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

1 বাইট সংরক্ষণের জন্য বাইনারিগুলিতে সুই নেয়।

-2 বাইট ধন্যবাদ এমিগিনার কাছে

œJÙʒbŒIå

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

œJÙʒbŒIå   Arguments: a, n
œJÙ        Get all unique permutations of a
   ʒ       Filter: Keep if following code returns true
    b      Convert to binary
     Π    Get all substrings
      Iå   Check if substrings contain n
           Implicit output of filtered list

1
জাজবিআইয়েরও কাজ করা উচিত।
এমিগিনা

@ এমিগনা ধন্যবাদ, এটি 2 বাইট সংরক্ষণ করে :)
কলসওয়ারাস

11

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

-3 বাইটস @ গ্যাবার ফেকেটকে ধন্যবাদ

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

খড়খড়ি এবং স্ট্রিং থেকে ইনটগুলি উপস্থাপন করে, বাইনারিগুলিতে সূচকে উপস্থাপন করে স্ট্রিংগুলির ইনপুট অ্যারে হিসাবে গ্রহণ করে

from itertools import*
lambda H,N:{i for i in permutations(H)if N in bin(int(''.join(i)))}

4
লেখার {...}পরিবর্তে set(...)3 বাইট সংরক্ষণ করে।
গ্যাবার ফেকেতে

1
@ গ্যাবারফিকেট আমি সবসময় ভুলে যাই, যে {} সেট করা আছে: ডি ধন্যবাদ
মৃত পসসুম

আমি বিশ্বাস করি এটি ব্যর্থ হয় H=['1'], N='0'
ব্যবহারকারী 2357112

ওহ, অপেক্ষা করুন, ইনপুটটি ইতিবাচক হওয়া দরকার।
ব্যবহারকারী 2357112

10

জাভা 10, 320 312 305 297 292 বাইট

import java.util.*;Set s=new HashSet();l->n->{Long q=0;p(l,0);for(var x:s)if(q.toString(q.decode(x+""),2).contains(n))System.out.println(x);}void p(List l,int k){int i=k,x=l.size();for(Collections C=null;i<x;p(l,k+1),C.swap(l,k,i++))C.swap(l,i,k);if(k>x-2)s.add((l+"").replaceAll("\\D",""));}

তালিকা এবং বাইনারি-স্ট্রিং হিসাবে ইনপুট, নতুন লাইনে স্ট্রিং হিসাবে আউটপুট।

ব্যাখ্যা:

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

import java.util.*;           // Required import for Set, HashSet, List, and Collections

Set s=new HashSet();          // Class-level Set

l->n->{                       // Method (1) with List and String parameters and no return-type
  Long q=0;                   //  Number-object is required for two static method-calls below
  p(l,0);                     //  Determine all permutations of given list and put it in the Set
  for(var x:s)                //  Loop over these permutations
    if(q.toString(q.decode(x+""),2)
                              //   If the binary String of the current permutation
        .contains(n))         //   contains the binary String of the input integer
      System.out.println(x);} //    Print this permutation

void p(List l,int k){         // Method (2) with List and integer parameters and no return-type
  int i=k,x=l.size();         //  Two temp integers
  for(Collections C;          //  Collections-object is required for two static method-calls below
      i<x                     //  Loop `i` in the range [`k`, list-size)
      ;                       //    After every iteration:
       p(l,k+1),              //     Do a recursive-call to this method with `k+1`
       Collections.swap(l,k,i++))
                              //     And swap the items at indices `k` and `i` back
    Collections.swap(l,i,k);  //   Swap the items at indices `i` and `k`
  if(k>x-2)                   //  If `k` is now equal to the size of the list - 1
    s.add((l+"").replaceAll("\\D",""));}
                              //   Add this permutation to the Set

ল্যাম্বদা প্রম্পটের উত্তর হিসাবে ব্যক্তিগতভাবে আমি l->n->{...পরে void p(...রাখি এবং ল্যাম্বডা কাজ করার জন্য ফাংশনটি সেটআপ করা দরকার। "ফাংশন এক্সপ্রেশন" এর বিষয়ে sensক্যমত্য হ'ল "আপনার জমা দেওয়ার শেষ 'প্রকাশ' একটি 'ফাংশন এক্সপ্রেশন' হতে পারে যদি কোনও ভেরিয়েবলের মধ্যে সংরক্ষণ করা হয় তবে এটি কোনও ফাংশন উত্তরের প্রয়োজনীয়তা পূরণ করে" আইআইআরসি "। তবে এটি কেবল একটি ফর্ম্যাটিং সমস্যা এবং এটিতে একটি বিষয়গত বিষয়।
CAD97

@ CAD97 আমার কাছে অর্ডারটি ম্যাটার করার কোনও ধারণা ছিল না। গতবার আমি দুটি পদ্ধতি ব্যবহার করে একটি জাভা 8 উত্তর পোস্ট করেছি voidকারণ এটি দ্বিতীয় ল্যাম্বদা এবং একাধিকের চেয়ে কম ছিল .apply। এই উত্তরের জন্য এটি পরীক্ষা করা হয়নি (যেমন void p(List l,int k)& 2x p(l,0)বনাম (l,k)->& 2x p.apply(l,0))। হুম .. দ্বিতীয়টি এক্ষেত্রে 1 বাইট সংক্ষিপ্ত বলে মনে হচ্ছে। তবে আপনি বলছেন যে বিধিগুলি কেবলমাত্র একটি ল্যাম্বডা পদ্ধতি রাখার অনুমতি রয়েছে? এখনও কিছুটা বিভ্রান্ত কারণ কেন এটি শেষ হতে হবে। ব্যক্তিগতভাবে আমি সবসময় এই অনুক্রমে আমার উত্তর পোস্ট: imports; class-fields; main-method/lambda; other methods
কেভিন ক্রুইজসেন

আবার এটি বেশিরভাগের মতামত, আমি চাই যে কোনও উপায় বা অন্যভাবে বলার আগে আরও অভিজ্ঞ কেউ চানম করতে চান। তবে, আমি এটি সত্য বলে জানি: আপনার যদি কোনও পদ্ধতিতে কল করা প্রয়োজন (যেমন পুনরাবৃত্তিকারী বা সহায়ক হিসাবে), এটির একটি নাম থাকা দরকার। অর্ডার করার ক্ষেত্রে, এটি বাইট গণনা পরিবর্তন করে না বলে এটি আসলেই কিছু যায় আসে না। তবে আমি আদেশ দিচ্ছিimports;helper methods;lambda
CAD97

@ CAD97 অবশ্যই অবশ্যই, সুতরাং এটি পরিবর্তে void p(List l,int k)& 2x f(l,0);বনাম f=(l,p)->এবং 2x p.apply(l,0);হবে (যার অর্থ বর্তমান সংস্করণটি 1 বাইট সংক্ষিপ্ত)। অর্ডার হিসাবে, আমি কেবল এই সাথে আটকে যাব কারণ আমি আমার সমস্ত উত্তর দিয়ে এটি করেছি, এবং এটি ব্যক্তিগতভাবে ব্যাখ্যাটির মূল পদ্ধতিটি শুরু করা আমার পক্ষে এবং তারপরে সহায়ক সাহায্যকারী পদ্ধতি (গুলি) বোধগম্য হয় যে কোন আছে।
কেভিন ক্রুইজসেন

এবং দুর্ভাগ্যক্রমে আপনি কেবল f=(lambda)জাভাতে পারবেন না , এটিjava.util.function.BiConsumer<List,Integer>f=(l,p)->{...}
CAD97

9

জাপট , 15 14 13 12 10 বাইট

খড়ের কাঠিটিকে পূর্ণসংখ্যার অ্যারের হিসাবে এবং সুইটিকে বাইনারি স্ট্রিং হিসাবে নিয়ে যায়। পূর্ণসংখ্যার স্ট্রিংগুলির একটি অ্যারে আউটপুট করে।

á m¬f_°¤øV

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


ব্যাখ্যা

á m¬â f_°¤øV
              :Implicit input of array U=haystack and string V=needle
á             :Unique permutations of U
  m           :Map
   ¬          :  Join to a string
    f_        :Filter
      °       :  Postfix increment current element to cast it to an integer
       ¤      :  Convert to base-2 string
        øV    :  Does that contain V?
              :Implicit output of resulting array

খুব সুন্দর, আমি কী করতাম সে সম্পর্কে। ®¬nÃম্যাপিংয়ে একটি বাইট সংরক্ষণ করে। (আমি âদ্বিতীয়টি থেকে মুক্তি পেতে প্রোগ্রামের মাঝামাঝিও চলে এসেছি Ã; কোনও বাইট সংরক্ষণ না করে, তবে এটি কিছুটা দক্ষ এবং কিছুটা ভাল দেখায়)
ETH Productions

আহা, ধন্যবাদ, @ এইচটি প্রোডাকশনস - প্রতিটি সংখ্যাকে অ্যারে হিসাবে আউটপুট দিয়ে আমি কোনও বাইট ছাঁটাই করতে পারি কিনা তা দেখার জন্য আমি এতটা মনোযোগী ছিলাম আমি ম্যাপিংয়ের সেই সহজ পরিবর্তনটি মিস করেছি। âএকটি দ্রুত প্রান্তে tacked যখন Arnauld উল্লেখ যে আমি চূড়ান্ত অ্যারে থেকে সদৃশ মুছে ফেলার জন্য ভুলেই গিয়েছিলাম ফিক্স ছিল কিন্তু, আপনি ঠিক, ফিল্টার চলমান আরও দক্ষ হবে সামনে সদৃশ অপসারণ।
শেগি

4

রুবি , 61 59 বাইট

->a,n{a.permutation.select{|s|"%b"%s.join=~/#{"%b"%n}/}|[]}

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

দিনের দুর্দান্ত বৈশিষ্ট্য: আমি জানতাম না যে আমি কোনও সংখ্যাযুক্ত স্ট্রিংয়ের বাইনারি উপস্থাপনা আউটপুট করতে পারি।

উদাহরণ:

puts "%b"%"123"

-> 1111011

3

জাভাস্ক্রিপ্ট (ES6), 140 বাইট

সূচকে বাইনারি স্ট্রিং হিসাবে নিয়ে যায়।

(h,n,S=new Set,p=(a,m='')=>a.length?a.map((_,i)=>p(A=[...a],m+A.splice(i,1))):S.add(+m),_=p(h))=>[...S].filter(d=>~d.toString(2).indexOf(n))



2

গণিত, 170 156 বাইট

(t={};l=Length;v=IntegerDigits;j=v[#2, 2];s=FromDigits/@Flatten/@v@Permutations@#1;Table[If[l@SequenceCases[v[s[[i]],2],j]>0,t~AppendTo~s[[i]]],{i,l@s}];t)&


ইনপুট

[{12, 34, 56}, 21]

আউটপুট

{125634, 341256, 345612, 563412}


একটি সাদা জায়গা আছে v[#2, 2]
ইয়াতসি

1

সিজেম, 23 22 21 19 বাইট

{e!{si2b1$2b#)},\;}

এটি এমন একটি ব্লক যা n hস্ট্যাকের ইনপুট নেয় এবং স্ট্যাকের অ্যারে হিসাবে আউটপুট ছেড়ে দেয়।

ব্যাখ্যা:

                   e# Stack:                      | 65 [1 2 3]
e!                 e# Unique Permutations:        | 65 [[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1]]
  {                e# Filter where block is true: | 65 [3 2 1]
   s               e#   Convert to string:        | 65 "321"
    i              e#   Convert to int:           | 65 321
     2b            e#   Convert to binary:        | 65 [1 0 1 0 0 0 0 0 1]
       1$          e#   Copy behind:              | 65 [1 0 1 0 0 0 0 0 1] 65
         2b        e#   Convert to binary:        | 65 [1 0 1 0 0 0 0 0 1] [1 0 0 0 0 0 1]
           #       e#   Find array in another:    | 65 2
            )      e#   Increment:                | 65 3
             },    e# End filter                  | 65 [321]
               \;  e# Delete back:                | [321]

1

আর, 114 বাইট

pryr::f(plyr::l_ply(combinat::permn(x),function(y)if(grepl(p,R.utils::intToBin(paste(y,collapse=""))))cat(y,"\n")))

একগুচ্ছ প্যাকেজ ব্যবহার করে। pryr::f()স্বয়ংক্রিয়ভাবে pসন্ধান করার জন্য বাইনারি প্যাটার্নের একটি স্ট্রিং, এবং xইনপুট হিসাবে অন্যান্য ইনপুট সহ একটি ভেক্টর তৈরি করে function combinat::permnএর সমস্ত ক্রিয়াকলাপ তৈরি করে xR.utils::intToBinএকটি সংখ্যাসূচক (বা একটি সংখ্যার চরিত্র উপস্থাপনা) বাইনারি সংখ্যায় রূপান্তরিত করার জন্য একটি দুর্দান্ত এবং শব্দযুক্ত সংস্করণ, ইতিমধ্যে স্বাচ্ছন্দ্যে অক্ষর হিসাবে সংরক্ষণ করা হয়েছে। সুতরাং এটি সমস্ত আদেশের উপর প্রয়োগ করা এবং যদি বাইনারি স্ট্রিংটি কনকেন্টেশনের pবাইনারি সংস্করণে থাকে তবে সেগুলি আউটপুট করে । একটি সুস্পষ্ট নিউলাইন মুদ্রিত হয়েছে, কারণ অন্যথায় আউটপুট হবে 12 56 3456 34 1234 56 1234 12 56

plyrএর l_plyনিয়মিত আউটপুট ছাড়াও নাল তালিকার আউটপুট আউটপ্রেসিংয়ের জন্য ব্যবহৃত হয়। যদি এর মতো আউটপুট অনুমোদিত হয়:

3 2 1 
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

[[6]]
NULL

তারপরে আমরা এর lapplyপরিবর্তে কয়েকটি বাইট সংরক্ষণ করতে পারি :

108 বাইট:

pryr::f(lapply(combinat::permn(x),function(y)if(grepl(p,R.utils::intToBin(paste(y,collapse=""))))cat(y,"\n")))

যদি এর মতো আউটপুট অনুমোদিত হয়:

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
[1] 3 2 1

[[5]]
NULL

[[6]]
NULL

তারপরে আমরা এটি আরও ছোট করতে পারি:

101 বাইট:

pryr::f(lapply(combinat::permn(x),function(y)if(grepl(p,R.utils::intToBin(paste0(y,collapse=""))))y))

অনুমতি নেই.


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