আনগ্রামের উপাদানসমূহ


19

একটি সাম্প্রতিক পর্বে প্রশ্ন আমাকে , 142857 প্রথম 5 গুণিতক মূল সংখ্যা anagrams হিসাবে বর্ণনা করা হয়েছে। অবশ্যই, এই সংখ্যার উত্তীর্ণ জ্ঞানের বেশি যে কেউ জানবেন যে এই সংখ্যাগুলি আসলে চক্রাকার, কেবলমাত্র অ্যানগ্রাগম নয়। কিন্তু এটি আমার চিন্তাভাবনা পেয়েছে।

দয়া করে এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ছয় বা তার চেয়ে কম সংখ্যার সংখ্যার আউটপুট দেয় যার যথাযথ ফ্যাক্টর থাকে যা নিজেই একটি ইনস্টাগ্রাম। তালিকাটি নিম্নলিখিত সংখ্যার সাথে শুরু করা উচিত:

3105    (divisible by 1035)
7128    (divisible by 1782)
7425    (divisible by 2475)
8316    (divisible by 1386)
8712    (divisible by 2178)
9513    (divisible by 1359)
9801    (divisible by 1089)

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

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড যা কোনও মানক লুফোলগুলি জয় করে না।


যদি পর্যাপ্ত সময় দেওয়া হয় তবে আমাদের প্রোগ্রামগুলি কি 6 টিরও বেশি সংখ্যার আউটপুট নম্বর দিতে পারে?
নীল

1
আপনি দয়া করে তালিকা পোস্ট করতে পারেন?
xnor

@ মুদ্দিফিশ হ্যাঁ, এটি গ্রহণযোগ্য হবে, যতক্ষণ না এটি কোনও সংখ্যা বা আউটপুট ভুল নম্বরগুলি বাদ না দেয়।
নীল

@ এক্সনর আমি এখনও পুরো তালিকাটি গণনার পক্ষে আসলেই বিরক্ত করি নি, যদিও আমি এটি নিয়ে কোনও বিরোধের প্রত্যাশা করি না।
নিল

1
আমি আমার (আশা করি সঠিক) আউটপুটটির একটি পেস্টবিন তৈরি করেছি।
গ্রেগ মার্টিন

উত্তর:


6

গণিত (REPL পরিবেশ), 75 74 বাইট

বাইট দ্বারা এটি আরও শক্তিশালী করার জন্য নেজেনিসিসকে ধন্যবাদ!

Select[Range[10!],Most@#~MemberQ~Last@#&[Sort/@IntegerDigits@Divisors@#]&]

Sort/@IntegerDigits@Divisors@#তার যুক্তির প্রতিটি বিভাজকের জন্য অঙ্কের বাছাই করা তালিকা তৈরি করে; ইনপুট নম্বরটি নিজেই একটি বিভাজক, সুতরাং এর অঙ্কের সাজানো তালিকাটি সর্বশেষতম। Most@#~MemberQ~Lastশেষের সাজানো তালিকার শেষের উপাদানটিরও আগে তালিকায় প্রদর্শিত হয়েছিল কিনা তা সনাক্ত করে। আর Select[Range[10!],...]কেবলমাত্র সেই 3.628.800 যে এই পরীক্ষা পাস (যে মনোনীত আবদ্ধ, কারণ এটা 10 একাধিক বাইট খাটো পর্যন্ত পূর্ণসংখ্যার বজায় 6 )। এটি আমার কম্পিউটারে প্রায় 5 মিনিটের মধ্যে চলে 494 নম্বরের একটি তালিকা উত্পন্ন করে, যার মধ্যে বৃহত্তমটি 3,427,191; 10 6 অবধি 362 সংখ্যা রয়েছে, যার লার্জ 989,901।


ভাল, এটি যে কৌতূহলী নয়: 857142 এবং 571428 উভয় দুটি সুস্পষ্ট সঠিক ডিভাইডার অ্যানাগ্রাম সহ দুটি সংখ্যা numbers
নীল

বাস্তবে, 857142 এর তিনটি যথাযথ বিভাজক অ্যানাগ্রাম রয়েছে, তাই না?
নিল

আপনি ঠিক মনে হচ্ছে!
গ্রেগ মার্টিন

আপনি ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন IntegerDigits@Divisors@#
নেজিনিসিস

3

জেলি , 12 বাইট

ÆḌṢ€ċṢ
ȷ6ÇÐf

এটি অনলাইন চেষ্টা করুন! (টিআইওর সময়সীমার কারণে পাঁচ বা কম সংখ্যার ব্যবহার করা হয়)

Verfication

$ time jelly eun 'ÆḌṢ€ċṢ¶ȷ6ÇÐf'
[3105, 7128, 7425, 8316, 8712, 9513, 9801, 30105, 31050, 37125, 42741, 44172, 67128, 70416, 71208, 71253, 71280, 71328, 71928, 72108, 72441, 74142, 74250, 74628, 74925, 78912, 79128, 80712, 81816, 82755, 83160, 83181, 83916, 84510, 85725, 86712, 87120, 87132, 87192, 87912, 89154, 90321, 90801, 91152, 91203, 93513, 94041, 94143, 95130, 95193, 95613, 95832, 98010, 98091, 98901, 251748, 257148, 285174, 285714, 300105, 301050, 307125, 310284, 310500, 321705, 341172, 342711, 370521, 371142, 371250, 371628, 371925, 372411, 384102, 403515, 405135, 410256, 411372, 411723, 415368, 415380, 415638, 419076, 419580, 420741, 421056, 423711, 425016, 427113, 427410, 427491, 428571, 430515, 431379, 431568, 435105, 436158, 441072, 441720, 449172, 451035, 451305, 458112, 461538, 463158, 471852, 475281, 501624, 502416, 504216, 512208, 512820, 517428, 517482, 517725, 525771, 527175, 561024, 562104, 568971, 571428, 571482, 581124, 589761, 615384, 619584, 620379, 620568, 623079, 625128, 641088, 667128, 670416, 671208, 671280, 671328, 671928, 672108, 678912, 679128, 681072, 691872, 692037, 692307, 704016, 704136, 704160, 704196, 705213, 705321, 706416, 711342, 711423, 712008, 712080, 712503, 712530, 712800, 713208, 713280, 713328, 713748, 714285, 716283, 717948, 719208, 719253, 719280, 719328, 719928, 720108, 720441, 721068, 721080, 721308, 721602, 723411, 724113, 724410, 724491, 728244, 730812, 731892, 732108, 741042, 741285, 741420, 742284, 742500, 744822, 746280, 746928, 749142, 749250, 749628, 749925, 753081, 754188, 755271, 760212, 761082, 761238, 761904, 771525, 772551, 779148, 783111, 786912, 789120, 789132, 789192, 789312, 790416, 791208, 791280, 791328, 791928, 792108, 798912, 799128, 800712, 806712, 807120, 807132, 807192, 807912, 814752, 816816, 818160, 818916, 820512, 822744, 823716, 824472, 825174, 825714, 827550, 827658, 827955, 829467, 830412, 831117, 831600, 831762, 831810, 831831, 839160, 839181, 839916, 840510, 841023, 841104, 843102, 845100, 845910, 847422, 851148, 851220, 851742, 852471, 857142, 857250, 857628, 857925, 862512, 862758, 862947, 865728, 866712, 867120, 867132, 867192, 867912, 871200, 871320, 871332, 871425, 871920, 871932, 871992, 874125, 879120, 879132, 879192, 879912, 888216, 891054, 891540, 891594, 891723, 892755, 894510, 895725, 899154, 900801, 901152, 903021, 903210, 903231, 904041, 908010, 908091, 908901, 909321, 910203, 911043, 911358, 911520, 911736, 911952, 912030, 912093, 912303, 916083, 920241, 920376, 923076, 923580, 925113, 925614, 930321, 931176, 931203, 933513, 934143, 935130, 935193, 935613, 935832, 940410, 940491, 941430, 941493, 941652, 943137, 943173, 951300, 951588, 951930, 951993, 952380, 956130, 956193, 956613, 958032, 958320, 958332, 958392, 958632, 958716, 959832, 960741, 962037, 962307, 970137, 971028, 980100, 980910, 980991, 989010, 989091, 989901]

real    2m10.819s
user    2m10.683s
sys     0m0.192s

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

ȷ6ÇÐf   Main link. No arguments.

ȷ6      Yield 1e6 = 1,000,000.
  ÇÐf   Filter; keep numbers in [1, ..., 1e6] for which the helper link returns
        a truthy value.


ÆḌṢ€ċṢ  Helper link. Argument: n

ÆḌ      Compute all proper divisors of n.
  Ṣ€    Sort each proper divisor's digits.
     Ṣ  Sort n's digits.
   ċ    Count the occurrences of the result to the right in the result to the left.

1
এই মন্তব্যের কারণে আপনি ÆḌṢ€ċṢµȷ#10 এর জন্য আরও ধীর করতে পারেন an 27 মিনিট একটি আই 7 কোর এ চালানোর জন্য (ইউনিক্সে নয়, খুব সুন্দর নয় time); বৃহত্তম ফলাফল ছিল 6671928
জোনাথন অ্যালান

আমি ভাবতে শুরু করি আপনি প্রতি প্রশ্ন ভিত্তিতে জেলিকে সংশোধন করছেন 😏
অ্যালবার্ট রেনশো

3

ব্র্যাচল্যাগ , 12 বাইট

ℕf{k∋p.!}?ẉ⊥

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

যদিও কিছু মুদ্রণের আগে এটি শেষ হয়ে যেতে পারে (এবং এটি না হলে এটি কেবল 3105 মুদ্রণ করতে পারে) get

ব্যাখ্যা

এটি অনির্দিষ্টকালের জন্য এই সংখ্যাগুলি মুদ্রণ করে, যেমন লেখক বলেছেন যে এটি গ্রহণযোগ্য যে প্রোগ্রামটি 6 সংখ্যার চেয়ে বড় সংখ্যা মুদ্রণ করবে।

এটি উপায় খুব ধীর; আপনি এই প্রোগ্রামটি ব্যবহার করতে পারেন (এবং 8300যে Nকোনওরকম পরিবর্তন করুন ) এর চেয়ে আরও বেশি সংখ্যক থেকে মুদ্রণ শুরু করতে N

ℕ               Natural number: The Input is a natural number
 f              Factors: compute the factors of the Input
  {     }?      Call a predicate with the main Input as its output and the factors as Input
   k            Knife: remove the last factor(which is the Input itself)
    ∋           In: take one of those factors
     p.         Permute: the Output is a permutation of that factor
       !        Cut: ignore other possible permutations
         ?ẉ     Writeln: write the Input to STDOUT, followed by a line break
           ⊥    False: backtrack to try another value for the Input

@ আইস ৫২৩ হিসাবে উল্লেখ করা হয়েছে যে এর কয়েকটি কারণ যদি এর অনুমোদন হয় তবে আমাদের একাধিকবার মুদ্রণ এড়াতে একটি কাটা দরকার।


আমার কাছে এটির অনুরূপ উত্তর একটি খসড়া হিসাবে সংরক্ষণ করা হয়েছে। দুর্ভাগ্যক্রমে, আমি মনে করি এটি কাজ করে না কারণ এটি 857142 এর মতো সংখ্যাগুলি একাধিক বার মুদ্রণ করবে এবং লেখক বলেছিলেন যে এটি অনুমোদিত নয় that's আমি মনে করি প্রোগ্রামটি কোথাও একটি কাটা প্রয়োজন, সম্ভবত তিনটি অক্ষর যুক্ত।

বাস্তবে 4 টি অক্ষর যুক্ত করা হচ্ছে ... ধন্যবাদ, সে সম্পর্কে ভুলে গেছি।
অবহিত করুন

3

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

একটি বেনামে ফাংশন যা মিলে যাওয়া পূর্ণসংখ্যার অ্যারে দেয়।

_=>[...Array(1e6).keys(F=i=>[...i+''].sort()+0)].filter(n=>n*(R=i=>F(n/i--)==F(n)||R(i)%i)(9))

ফর্ম্যাট এবং মন্তব্য

_ =>                                // main function, takes no input
  [...Array(1e6).keys(              // define an array of 1,000,000 entries
    F = i => [...i + ''].sort() + 0 // define F: function used to normalize a string by
  )]                                // sorting its characters
  .filter(n =>                      // for each entry in the array:
    n * (                           // force falsy result for n = 0
      R = i =>                      // define R: recursive function used to test if
        F(n / i--) == F(n) ||       // n/i is an anagram of n, with i in [1 … 9]
        R(i) % i                    // F(n/1) == F(n) is always true, which allows to stop
    )                               // the recursion; but we need '%i' to ignore this result
    (9)                             // start recursion with i = 9
  )                                 //

বিভাজকের পরিসংখ্যান

6-সংখ্যার পূর্ণসংখ্যার জন্য, থেকে প্রতিটি অনুপাত 2করার 9একটি মানানসই পূর্ণসংখ্যা মধ্যে nএবং তার কোনো শব্দ বা শব্দগুচ্ছের অক্ষরগুলিকে এদিক-ওদিক করে গঠিত শব্দ বা শব্দগুচ্ছ একবার অন্তত সম্মুখীন হয়। তবে তাদের মধ্যে কয়েকটি মাত্র কয়েকবার উপস্থিত হয়েছে:

 divisor | occurrences | first occurrence
---------+-------------+---------------------
    2    |    12       | 251748 / 2 = 125874
    3    |    118      | 3105   / 3 = 1035
    4    |    120      | 7128   / 4 = 1782
    5    |    4        | 714285 / 5 = 142857
    6    |    34       | 8316   / 6 = 1386
    7    |    49       | 9513   / 7 = 1359
    8    |    2        | 911736 / 8 = 113967
    9    |    23       | 9801   / 9 = 1089

পরীক্ষা

নীচের পরীক্ষাটি সীমার মধ্যে সীমাবদ্ধ [1 ... 39999]যাতে এটি শেষ করতে খুব বেশি সময় নেয় না।


অনেক দ্রুততর সংস্করণ, কিন্তু কিছুটা আর: _=>[...Array(1e6).keys()].filter(n=>n&&![...Array(9)].every(_=>n%++i||(F=i=>[...i+''].sort()+'')(n/i)!=F(n),i=1))
নীল

@ নীল আপনার পরামর্শটি আমাকে আপডেট হওয়া সংস্করণটি অনুপ্রাণিত করেছে যা আরও দ্রুত এবং 1 বাইট সংক্ষিপ্ত। দুঃখিতভাবে, থেকে সব ভাজক 2করার 9প্রয়োজন হয় ( 8শুধু দুইবার ব্যবহার করা হচ্ছে 911736এবং 931176)।
আর্নৌল্ড


2

পার্ল 6 , 59 বাইট

{grep {grep .comb.Bag===*.comb.Bag,grep $_%%*,2..^$_}

মারাত্মকভাবে ধীরে ধীরে ব্রুট ফোর্স সমাধান।

এটি একটি অলস ক্রমটি ফেরত দেয়, তাই আমি প্রথম কয়েকটি ফলাফল চেক করতে পারি, তবে এটি যথাযথ সময়ে সমস্ত ফলাফলে পৌঁছায় না। (আমি কি এটিকে প্রতিদ্বন্দ্বী হিসাবে চিহ্নিত করব?)


2

খাঁটি বাশ , 128 126 122 121 120 বাইট

for((;n<6**8;)){
c=0
for((j=++n;j;j/=10)){((c+=8**(j%10)));}
for k in ${a[c]};{((n%k))||{ echo $n;break;};}
a[c]+=\ $n
}

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

(এই প্রোগ্রামটি যুক্তিসঙ্গতভাবে দ্রুত - আমার ম্যাকবুকের সমস্ত 6-সংখ্যার সংখ্যাটি চালাতে কেবল 14 মিনিট সময় লেগেছে Unfortunately দুর্ভাগ্যক্রমে TIO সময় বেরিয়ে গেছে কারণ এটি 1 মিনিটের চলমান সময়সীমা আরোপ করে, যা কেবলমাত্র যথেষ্ট সময় ব্যয় করতে পারে) 5-সংখ্যার নম্বর বা তাই।)

বাশ + ইউনিক্স ইউটিলিটিস, 117 বাইট

for n in {1..999999}
{
c=$(bc<<<0`sed 's/\(.\)/+8^\1/g'<<<$n`)
for k in ${a[c]};{((n%k))||echo $n;}
a[c]+=\ $n
}|uniq

এটি খাঁটি বাশ সংস্করণের চেয়ে কম, তবে বেশ কিছুটা ধীর, সম্ভবত সমস্ত অংশই ভাল লাগার কারণে ভাল অংশে রয়েছে।


1

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

[¼¾œJv¾Ñ¨Dyåi¾,

ব্যাখ্যা:

[               # Start of infinite loop
 ¼              # Increase counter_variable by 1
  ¾œJv          # Loop through all the permutations of counter_variable
      ¾Ñ¨Dyå    # Check if a divisor of counter_variable is a permutation of counter_variable
            i¾, # If so, print counter_variable

এটি অনলাইন চেষ্টা করুন! (এটি কার্যকর হবে না, এটি শেষ হয়ে যাবে)




0

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

অসীম লুপের কারণে টিআইও-তে টাইমস আউট।
2 টি বাইট সংরক্ষণ করা হয়েছে কারণ আমরা ওপেনের মন্তব্য অনুসারে 6-সংখ্যার বেশি সংখ্যা আউটপুট করতে পারি।

[NѨ€{N{å–

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

ব্যাখ্যা

[            # infinite loop with iteration index N
 NÑ          # get a list of all divisors of N
   ¨         # remove N from that list
    €{       # sort each entry in the list of divisors
      N{     # sort N
        å–   # output N if N is in the list

0

ব্যাচ, 263 বাইট

@echo off
set e=exit/b
for /l %%n in (1,1,999999)do call:n %%n
%e%
:n
call:c %1 1 0
for /l %%f in (2,1,9)do call:c %1 %%f %c%&&echo %1&&%e%
%e%
:c
set/ar=%1%%%2,d=%1/%2,c=-%3
if %r% gtr 0 %e%1
:l
set/ac+=1^<^<d%%10*3,d/=10
if %d% gtr 0 goto l
%e%%c%

স্লো। হিসাবে, আমার পিসি শেষ করতে এক দিন সময় নেয় ব্যাখ্যা: cসাব্রোটাইন তার প্রথম দুটি যুক্তি ভাগ করে। যদি বাকীটি শূন্য হয়, তবে এটি প্রতিটি অঙ্কের জন্য 8 টির নবম শক্তির যোগফল গণনা করে ফলাফলের হ্যাশ গণনা করে। ব্যাশের উত্তর থেকে চুরি হওয়া এই হ্যাশ ফাংশনটি কেবল অ্যানগ্রাজগুলিতে সংঘর্ষ হয়। (এটি সাত ডিজিটের সংখ্যার জন্য কাজ করবে তবে আমার কাছে পুরো পাক্ষিকটি নেই) তৃতীয় যুক্তিটি বিয়োগ করা হয়, এবং সাব্রোটিন যদি সত্য হয় তবে এটি যদি শূন্য হয়। nসাবরুটিন কল cসাবরুটিন হ্যাশ আট আরো কয়েকবার হ্যাশ তুলনা করতে নিরূপণ করা একবার, তারপর; যদি এটি কোনও সংঘর্ষ খুঁজে পায়, এটি প্রিন্ট করে nএবং সাব্রোটিনটি প্রারম্ভিকভাবে প্রস্থান করে।

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