অ্যালোনড সংখ্যা আউটপুট করুন


21

6 পর্যন্ত প্রাকৃতিক ক্রম বিবেচনা করুন (1 উপেক্ষা করুন) :

2,3,4,5,6

আমরা বাম থেকে স্ক্যান করা শুরু করি (এই ক্ষেত্রে 2 থেকে), 2 দ্বারা বিভাজ্য সংখ্যার জন্য অনুসন্ধান করুন (এখানে 4) এবং তারপরে উভয় সংখ্যা তালিকা থেকে সরিয়ে ফেলুন (এখানে 2 এবং 4), যাতে তালিকাটি হ্রাস করে:

3,5,6

আমরা একই প্রক্রিয়াটি অব্যাহত রাখি, এখানে 3 টি বাম দিকে, সুতরাং আমরা 3 দ্বারা বিভাজ্য সংখ্যাটি অনুসন্ধান করি 6 এটি অবশ্যই সেই সংখ্যা এবং সুতরাং 3 এবং 6 অপসারণ করা হয়,

5 

এখন, এই জাতীয় আর কোনও অনুসন্ধান করা যাবে না, সুতরাং এটি n = 6 এর জন্য ALONED সংখ্যার তালিকা হয়ে যায়।

OBJECTIVE

  1. 1 এর চেয়ে বড় একটি সংখ্যা দেওয়া, সমস্ত সম্পর্কিত এলোনেন্ট মুদ্রণ করুন।

ইনপুট

2
6
15
20
22

আউটপুট

2
5
8,9,11,12,13,15
11,12,13,15,17,19,20
12,13,15,17,19,20,21

অন্য কোনও পরীক্ষার বাইরে কাজ করুন

এন = 22 এর জন্য

=>2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
=>3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 (remove 2 & 4)
=>5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 (remove 3 & 6)
=>7,8,9,11,12,13,14,15,16,17,18,19,20,21,22 (remove 5 & 10)
=>8,9,11,12,13,15,16,17,18,19,20,21,22 (remove 7 & 14)
=>9,11,12,13,15,17,18,19,20,21,22 (remove 8 & 16)
=>11,12,13,15,17,19,20,21,22 (remove 9 & 18)
=>12,13,15,17,19,20,21 (remove 11 & 22) (OUTPUT)

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


7
ঠিক তেমনই আপনি জানেন, আমাদের একটি স্যান্ডবক্স রয়েছে যেখানে আপনি মূল সাইটে পোস্ট করার আগে প্রতিক্রিয়ার জন্য অসম্পূর্ণ চ্যালেঞ্জ পোস্ট করতে পারেন।
ডিজেএমসিএমহেম

4
আমাদের কি আরোহী ক্রমে সংখ্যার একটি তালিকা ফেরত দিতে হবে বা একটি আনর্ডারড তালিকা বা একটি সেটও গ্রহণযোগ্য হবে?
ডেনিস

আরোহী ক্রম হতে হবে।
অফিসিয়ালাইম

উত্তর:



6

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

-6 বাইটস xnor ধন্যবাদ

L=range(2,input()+1)
while L[0]*2<=L[-1]:L.remove(L[0]*2);L=L[1:]
print L

স্টিডিনে ইনপুট নম্বর নেয়। আইডিয়ন!

ব্যাখ্যা

আমরা ইনপুট নম্বর থেকে প্রাথমিক তালিকাটি তৈরি করি এবং এটি সঞ্চয় করি L। এরপরে, শেষ সংখ্যাটি প্রথম সংখ্যার চেয়ে 2 বারের চেয়ে বড় বা সমান হয় এবং তালিকা থেকে প্রথম সংখ্যাটির 2 বার সরিয়ে ফেলবে। এটি সর্বদা পরের সংখ্যাটি দ্বারা বিভাজ্য হবে L[0]L=L[1:]প্রথম সংখ্যাটিও বন্ধ করে দেয়। যখন শর্তটি আর সত্য হয় না, তখন আর কোনও অপসারণ করা যায় না এবং তালিকাটি মুদ্রিত হয়।


পাইথন 2 এ rangeইতিমধ্যে একটি তালিকা দেয়।
xnor

@ এক্সনোর ধন্যবাদ! ভুলে গেছি।
DLosc

5

পাইথন, 61 বাইট

lambda n:[i+1for i in range(n/2,n)if-~i&~i&4**n/3>>(-~i&i<1)]

এই কম গল্ফ কোডটি বোঝা কিছুটা সহজ:

lambda n:[i for i in range(n/2+1,n+1)if((i&-i)**.5%1>0)^(i&~-i>0)]

এটি অ্যালোনড সংখ্যার সরাসরি বৈশিষ্ট্য ব্যবহার করে:

বেশ কয়েকটি iহয় aloned যখন যেমন পচে, যদি i = a * 2^bসঙ্গে bবিজোড়, হয়

  • a>1এবং bহয় এমনকি, বা
  • a==1এবং bবিজোড়

এর জন্য nঅ্যালোনড সংখ্যাগুলি iব্যবধানে সমস্ত অ্যালোনড সংখ্যা n/2 + 1 <= i <= n

কেন এই ধরে? প্রক্রিয়াটি করার সময় n, বলুন আমরা aনীচের অর্ধেক ( 1থেকে n/2) এর মধ্যে একটি বিজোড় সংখ্যাটি সরিয়েছি । তারপরে, 2*aতালিকার যেখানেই থাকুক না কেন তা সরিয়ে ফেলা হয়। সুতরাং, 4*aঅবশেষ (যদি এটি বিদ্যমান থাকে)। কিন্তু যদি নীচে অর্ধেক আছে-বড় অক্ষরজনিত সমস্যার প্রক্রিয়া এটি পাবেন এবং উভয় অপসারণ 4*aএবং 8*a। সুতরাং, আমরা দেখি এটা ফর্মের এর একটি ঊর্ধ্ব-অর্ধেক নম্বর সরানো পরার যে 2*a, 8*a... বিজোড় সঙ্গে c, কিন্তু থাকার বিষয়টি মতেই যদি এটা ফর্ম আছে a, 4*a, 8*a, ...

ব্যতিক্রমটি হল a=1, যা তালিকায় শুরু হয় না এবং তাই সরানো হয় না। ফলস্বরূপ, অপসারণ চেইনটি শুরু হয় a=2এবং 2 টির ক্ষমতার বিধি উল্টে যায়।

lambda n:[i for i in range(n/2+1,n+1)if((i&-i)**.5%1>0)^(i&~-i>0)]

উপরের কোডে, সর্বাধিক পাওয়ার-টু-ফ্যাক্টরটি বের করার জন্য বিট-ট্রিকের মাধ্যমে ফর্মটি বিজোড়ের সাথে অভাবযুক্ত (i&-i)**.5%1>0কিনা তা পরীক্ষা করে দেখুন, ফলাফলটি নিখুঁত বর্গক্ষেত্র নয় কিনা তা পরীক্ষা করে। তারপরে, 2 এর নিখুঁত শক্তি না কিনা তা যাচাই করার জন্য আরেকটি বিট কৌশল These এই শর্তগুলি তখন xor'ed।ii = a * 2^bb2^b = i&-ii&~-i>0i

এখানে আরও কিছু উন্নতি হয়েছে

lambda n:[i+1for i in range(n/2,n)if-~i&~i&4**n/3>>(-~i&i<1)]

প্রথমত, আমরা নিচে থেকে কমান পরিসীমা 1 সূচক নামান range(n/2,n)থেকে range(n/2+1,n+1), সমস্ত প্রতিস্থাপন পুষিয়ে iসঙ্গে i+1(অথবা ~-i)।

2 এর পাওয়ার সংখ্যার একটি শক্তি কিনা 4(2 ^ সমান bসহ b) 2**c/3কিছু বড় লোকের জন্য এবং ইন-ইন দ্বারা চেক করা যায় c। এটি এমনকী যে সম-পজিশনে বিটগুলির সাথে 2**c/3বাইনারি প্রতিনিধিত্ব 10101...101রয়েছে। c=2*nপ্রত্যয় ব্যবহার করা । i2 পাওয়ার হিসাবে ফলাফলকে এড়িয়ে যাওয়ার জন্য, আমরা এই সংখ্যাটি অর্ধেক করে দেই, 1পরিবর্তে বিজোড় অবস্থানগুলিতে রাখি ।


4

গ্রোভী, 65 58 বাইট

ডিএসলোকের অ্যালগরিদম ধারণা , যিনি লক্ষ্য করেছেন যে আপনাকে কেবল ডাবলগুলি অপসারণ করতে হবে।

{n->a=(2..n);(2..(n/2)).each{if(it in a){a-=[it,it*2]}};a}

এখানে একটি ভাঙ্গন রয়েছে:

{
    n->
    a=(2..n);             // Store [2,...,n].
    (2..(n/2)).each {     // From 2 to half of n.
        if(it in a){      // If it's there...
            a-=[it,it*2]  // Remove it and its double, store in a.
        }
    };
    a                     // Return a.
}

4

পার্ল, 53 49 45 44 বাইট

এর জন্য +1 অন্তর্ভুক্ত -n

এসটিডিনে ইনপুট নম্বর দিন:

perl -M5.010 aloned.pl <<< 22

aloned.pl:

#!/usr/bin/perl -n
@F[$F[$_*2]/2,$_*2,1]=0,$_&&say for@F=0..$_

সরাসরি সম্ভাব্য সংখ্যাগুলি পরীক্ষা করা আরও দীর্ঘ:

map{/$/;$_/=4until$_%4;$_%2^$_<3&&say$`}$_/2+1..$_

এটি উপরের অর্ধেক রেঞ্জের সমস্ত সংখ্যা পরীক্ষা করে। সংখ্যাগুলি 2 এর পাওয়ার হিসাবে বিজোড় বাদে প্রধান কারণ হিসাবে 2 এর সমান সংখ্যক রাখুন (কারণ 1টি মূল সিরিজটি ছেড়ে যায়)। এই পদ্ধতিটি অন্য ভাষার জন্য ভালভাবে কাজ করা উচিত।


3

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

@ এমিগিনার 05 এবি 1 ই উত্তর থেকে "2 দ্বারা গুণিত" ধারণা নেওয়া হয়েছে

q:Qt"t1)tEhym?6MX-

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

ব্যাখ্যা

q:Q        % Input n implicitly. Push [2 3 ... n]
t"         % Duplicate. For each: repeat n-1 times
  t1)      %   Duplicate. Get first element from current array, say k
  tEh      %   Append twice that value: gives array [k 2*k]
  y        %   Push another copy of current array
  m?       %   If both k and 2*k are members of the array 
    6M     %     Push [k 2*k] again
     X-    %     Set difference: remove from current array
           %   End if implicitly
           % End for each implicitly
           % Display implicitly

আপনার কেবল কে কে সদস্য কিনা তা খতিয়ে দেখতে হবে, এটি আপনাকে বাইট সংরক্ষণ করে কিনা তা জেনে থাকবেন না।
যাদু অক্টোপাস উরন

@ কারাসোকম্পুটিং ধন্যবাদ! আমি প্রথম দিকে কেবল 2 * কে পরীক্ষা করে দেখি (যদি এটি আপনি বোঝাতে চান তবে)। তারপরে আমি সেখানে যোগ করলাম কারণ পরবর্তীতে আমি দুটি উপাদানের অ্যারেটিকে সাধারণ অ্যারে থেকে অপসারণ করতে পুনরায় ব্যবহার করেছি
লুইস মেন্ডো

3

হাস্কেল, 71 69 62 56 বাইট

g(a:b)|s<-filter(/=2*a)b=[a|s==b]++g s
g x=x
q n=g[2..n]

ব্যবহারের উদাহরণ: q 22 -> [12,13,15,17,19,20,21]

যদি প্রথম সংখ্যার একাধিক হয় a, তবে এটি 2*a। তালিকায় না aথাকলে রাখুন 2*aএবং একটি পুনরাবৃত্ত কল সাথে সংযুক্ত করুন aএবং 2*aতালিকা থেকে সরানো হয়েছে।


হেই, আমি আপনাকে বলতে যাচ্ছিলাম যে জিসিডি ওভারকিল ছিল, তবে আপনি নিজেই পেয়েছেন।
ম্যাজিক অক্টোপাস উরন


2

রুবি, 124

অন্যান্য উত্তরের সাথে স্কোরের তুলনা করা, এটি স্পষ্টতই ভুল পদ্ধতির:

->n{a={};b=[*2..n].each{|k|a[k]=7}
b.map{|i|g=b.select{|x|a[i]&&a[x]&&x%i<1}
a[g[0]]=a[g[1]]=!g[1]}
a.select{|k,v|v&k}.keys}

এখানে কিছুটা চালাক বিট a[g[0]]=a[g[1]]=!g[1]যা হ্যাশের মানগুলি যথাযথ / সত্য হিসাবে মিথ্যা সেট করে।


2

পিএইচপি, 98 বাইট

foreach($r=range(2,$argv[1])as$v)$a=&$r[$v-2]&&$b=&$r[$v*2-2]?$b=$a="":(!$a?:print$x?",$a":$x=$a);

@ টিটাস দ্বারা 8 টি বাইট সংরক্ষণ করুন আপনাকে ধন্যবাদ

যদি একটি পিছনে কমা অনুমোদিত হয় তবে এটি (!$a?:print"$a,");পরিবর্তে 9 বাইট ছোট করা যেতে পারে (!$a?:print$x?",$a":$x=$a);


বন্ধনীগুলিতে অ্যাসাইনমেন্টগুলি প্রয়োজন $aএবং $bতা দরকার? দুষ্ট!
টাইটাস

-1 পেছনের কমা দিয়ে বাইট: (!$a?:print"$a,")-> print$a?"$a,":""। উভয় সংস্করণের জন্য -2 বাইটস যদি আপনি বিভাজক হিসাবে আন্ডারস্কোর ব্যবহার করেন।
টাইটাস

-2 বাইট: foreach(... as$v), $v-2পরিবর্তে $kএবং $v*2-2পরিবর্তে $k*2+2
টাইটাস

@ টিটাস আপনার মতামতের $a=&$r[$k]&&$b=&$r[$k*2+2]মত মন্তব্য করার পরে আমি এটি চেষ্টা করেছি $a=$r[$k]and$b=$r[$k*2+2]। রেফারেন্স এবং &&অপারেটরের সংমিশ্রণের ব্যাখ্যা দেয় এমন কোনও পৃষ্ঠা আমি পাইনি বলে আমি দুঃখিত । তবে আমার অ্যাসাইনমেন্ট নয় রেফারেন্স দরকার। আমি নিশ্চিত নই যে কোনও ট্রিলিং কমা বা অন্য বিভাজককে অনুমতি দেওয়া হয়েছে কিনা।
জার্গ হালসারম্যান

@Titus পাওয়া এখন php.net/manual/en/language.operators.precedence.php & , bitwise এবং তথ্যসূত্র একটি উচ্চ প্রাধান্য তারপর আমার স্নাতকের &&অপারেটর
Jörg Hülsermann

1

জাভাস্ক্রিপ্ট, 149 বাইট

function a(n){o=Array.from(Array((n+1)).keys());o.shift();o.shift();for(i=1;i<o.length;i++){if(o[i]%o[0]==0){o.splice(i,1);o.shift();i=0;}}return o;}

এখানে একটি কাজের উদাহরণ। সমস্ত এইচটিএমএল এবং মোড়ক () ফাংশন ঠিক তাই এটি আসলে ইন্টারেক্টিভ।

এই অরোগল্ফড কোড স্নিপেটে কিছু মন্তব্য রয়েছে এবং আপনাকে কোনও প্রদত্ত ইনপুটটির জন্য পদক্ষেপগুলি ইন্টারেক্টিভভাবে দেখতে দেয়।


1

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

f=(n,R=[...Array(n-1)].map((_,i)=>i+2),[i,...r]=R)=>~r.indexOf(i*=2)?f(n,r.filter(x=>x-i)):R

আমি ভেবেছিলাম আমি গতকাল এটি পোস্ট করেছি, তবে অবশ্যই ...

এখানে অন্য সংস্করণ:

f=(n,R=[...Array(n-1)].map((_,i)=>i+2),[i,...r]=R,q=r.filter(x=>x-i*2))=>q+""!=r+""?f(n,q):R

1

জাভা 7, 210 বাইট

import java.util.*;List c(int n){List<Integer>l=new ArrayList();int i=1;for(;i++<n;l.add(i));for(i=1;i++<n;)for(int x:l)if(i!=x&x%i<1&l.indexOf(i)>=0){l.remove((Integer)i);l.remove((Integer)x);break;}return l;}

একটি ভিন্ন পদ্ধতির সাহায্যে সম্ভবত কিছু কৌশল ব্যবহার করে অ্যারে ব্যবহার করে অবশ্যই আরও কিছু গল্ফ করা যেতে পারে। কাস্ট, ব্রেক, টাইপড-লিস্ট এবং যদি-পরীক্ষার কারণে এটি প্রত্যাশার চেয়ে কিছুটা দীর্ঘ হয় তবে এটি কার্যকর হয়।

অবরুদ্ধ এবং পরীক্ষার কোড:

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

import java.util.*;
class M{
  static List c(int n){
    List<Integer> l = new ArrayList();
    int i = 1;
    for(; i++ < n; l.add(i));
    for(i = 1; i++ < n;){
      for(int x : l){
        if(i != x & x%i < 1 & l.indexOf(i) >= 0){
          l.remove((Integer)i);
          l.remove((Integer)x);
          break;
        }
      }
    }
    return l;
  }

  public static void main(String[] a){
    System.out.println(Arrays.toString(c(2).toArray()));
    System.out.println(Arrays.toString(c(6).toArray()));
    System.out.println(Arrays.toString(c(15).toArray()));
    System.out.println(Arrays.toString(c(20).toArray()));
    System.out.println(Arrays.toString(c(22).toArray()));
  }
}

আউটপুট:

[2]
[5]
[8, 9, 11, 12, 13, 15]
[11, 12, 13, 15, 17, 19, 20]
[12, 13, 15, 17, 19, 20, 21]

1

রেকেট 191 বাইট

(let loop((fl(range 2(add1 n)))(fg #f))(define i(first fl))(for((j(rest fl))
#:when(= 0(modulo j i))#:final(= 0(modulo j i)))
(set! fl(remove*(list i j)fl))(set! fg #t))(if fg(loop fl #f)fl))

অবহেলিত (';' এর পরে মন্তব্য):

(define (f n)
  (let loop ((fl (range 2 (add1 n)))  ; create a full list of numbers
             (fg #f))                 ; flag to show if main list is modified
    (define i (first fl))
    (for ((j (rest fl)) #:when (= 0 (modulo j i))  ; test divisibility
                        #:final (= 0 (modulo j i)))
      (set! fl (remove* (list i j) fl))  ; remove these from main list
      (set! fg #t))
    (if fg (loop fl #f)              ; if main list modified, check again,
        fl)))                         ; else print modified list.

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

(f 2)
(f 6)
(f 15)
(f 20)
(f 22)

আউটপুট:

'(2)
'(5)
'(8 9 11 12 13 15)
'(11 12 13 15 17 19 20)
'(12 13 15 17 19 20 21)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.