9শ্বরের 9 বিলিয়ন নাম


74

9শ্বরের বিলিয়ন বিলিয়ন আর্থার সি ক্লার্কের একটি ছোট গল্প। এটি তিব্বতী সন্ন্যাসীদের একদল সম্পর্কে যাদের আদেশ Godশ্বরের সম্ভাব্য নামগুলি তাদের বর্ণমালায় লিখিতভাবে উত্সর্গীকৃত। মূলত, তারা কিছু নিয়ম দ্বারা সীমাবদ্ধ তাদের বর্ণমালার প্রতিটি সম্ভাব্য ক্রম লেখার জন্য নিবেদিত। গল্পে মঠটি তাদের জন্য সমস্ত কাজ করার জন্য একটি প্রোগ্রাম লেখার জন্য কিছু প্রকৌশলী নিয়োগ করে। আপনার লক্ষ্যটি সেই প্রোগ্রামটি লেখা।

নিয়মাবলী:

  • সন্ন্যাসীর বর্ণমালা 13 টি অক্ষর ব্যবহার করে (আমার অনুমান অনুসারে) আপনি ABCDEFGHIJKLMবা 13 টি অক্ষরের কিছু সেট ব্যবহার করতে পারেন ।

  • সম্ভাব্য নামের সর্বনিম্ন দৈর্ঘ্য 1 টি অক্ষর। সর্বাধিক দৈর্ঘ্য 9 টি অক্ষর।

  • কোনও চরিত্র পরপর 3 বারের বেশি পুনরাবৃত্তি করতে পারে না। AAABAএকটি বৈধ নাম, কিন্তু AAAABনা।

  • তোমার প্রোগ্রাম থেকে ক্রমানুসারে প্রতি সম্ভব নাম প্রিন্ট আউট করা উচিত (একটি ফাইলে) Aথেকে MMMLMMMLM, বর্ণমালায় কোন অক্ষর দ্বারা পৃথকীকৃত (নতুন লাইন, আধা কোলন যাই হোক না কেন)।

  • এটি কোড-গল্ফ এবং আপনি যে কোনও ভাষা ব্যবহার করতে পারেন। জুন 1 লা 2014 এর মধ্যে সংক্ষিপ্ত সমাধানটি জিতেছে।

সম্পাদনা করুন: নামগুলি শুরু Aএবং শেষ হওয়া উচিত MMMLMMMLM, ক্রমান্বয়ে সমস্ত বিলিয়ন বিলিয়ানের মাধ্যমে অগ্রগতি। তবে নির্দিষ্ট ক্রমটি আপনার উপর নির্ভর করে। আপনি প্রথমে সমস্ত 1-অক্ষরের নাম মুদ্রণ করতে পারেন, তারপরে সমস্ত 2-বর্ণের নাম ইত্যাদি Or বা আপনি শুরু করে সমস্ত নাম মুদ্রণ করতে পারেন A, তারপরে সমস্ত নাম Bবা অন্য কোনও প্যাটার্ন দিয়ে শুরু করতে পারেন । তবে একজন ব্যক্তিকে ফাইলটির মাধ্যমে পড়তে হবে এবং তারা সময় পেয়েছে তা ধরে নিচ্ছে যে তারা সমস্ত সেখানে রয়েছে এবং আপনার যেটুকু যৌক্তিক ক্রম চয়ন করা হয়েছে তা নিশ্চিত করেই তা নিশ্চিত করা উচিত।


29
আপনি কি মহাবিশ্ব শেষ করার চেষ্টা করছেন, স্যার?
বলুক পাপুকুয়গলু

8
গল্পটির লিঙ্ক , আগ্রহী প্রত্যেকের জন্য।
ThatOneGuy

1
এটা এখানে! math.stackexchange.com/a/34292
edc65

1
এটি যাচাই করে যে বর্তমান সমস্যার নাম সংখ্যা 11,459,252,883 (এডসি 65 এর সি প্রোগ্রামে পাওয়া গেছে )। বাস্তবায়নকারী MathSE এ রস Millikan এর সমাধান দৈর্ঘ্য সঙ্গে নাম সংখ্যার জন্য নিম্নলিখিত বহুপদী সূত্র উত্পন্ন <= 9, পরিবর্তনশীল বর্ণমালা আকার ট জন্য: f(k) = k^9 + k^8 + k^7 - 5*k^6 + k^5 + k^4 + 4*k^3 - 2*k^2 + k। সাগে বাস্তবায়ন: goo.gl/0srwhq
মাঝামাঝি

3
@ edc65 তাই 105.8GBসব বলেছে এবং হয়ে গেছে! আমি আনন্দিত যে তারকারা বাইরে যায়নি ... বা সম্ভবত এটির জন্য আপনাকে তালিকাটি প্রিন্ট করতে হবে ...?
recursion.ninja

উত্তর:


34

রুবি, 46

?A.upto(?M*9){|s|s[/(.)\1{3}|[N-Z]/]||puts(s)}

আমার মূল, অনুরূপ সমাধানটি দীর্ঘ এবং ভুল ছিল (এটি বেস 13 সংখ্যাগুলি আউটপুট দেয়, যা শীর্ষস্থানীয় শূন্যগুলির কারণে এটি বেশিরভাগ নয়) তবে আমি এটি এখানে রেখে দেব কারণ এটি যাইহোক ভোট পেয়েছে।

1.upto(13**9){|i|(s=i.to_s 13)[/(.)\1{3}/]||puts(s)}

14
আমি আপনার কোডটি প্রায় এক ঘন্টা চালিয়েছি এবং এটি দেখার আগে এবং এটিটি ছাড়ার আগে 2 বিলিয়ন নাম এবং 21 গিগাবাইটের পাঠ্য ফাইল পেয়েছি। ফাইলটি কত বড় হবে তা আমি অবমূল্যায়ন করেছি।
সিএসটার্জেস

2
@ সিজার্জস ওয়েল, রুবি সেখানে এই ধরণের জিনিসগুলির জন্য দ্রুততম ভাষা নয় ...
বেনজিউইবি

8
@ বেনজিওয়েব তবে সন্ন্যাসীদের হাতে লিখিত হওয়ার চেয়েও দ্রুত!
টারউফিল

1
এটিকে গ্রহণযোগ্য কারণ এর বেশি ভোট রয়েছে।
সিএসটির্জেস

4
এটিকে পৃথক উত্তর হিসাবে পোস্ট করা হচ্ছে না, কারণ এতে প্রচুর পরিমাণে মেমরির প্রয়োজন (~ 30 টিবি, যদি আমার গণনাটি সঠিক হয়) তবে তাত্ত্বিকভাবে আপনি এটিকে 43-টি অক্ষরে সংক্ষিপ্ত করতে পারেনk=*?A..?M*9;puts k-k.grep(/(.)\1{3}|[N-Z]/)
ভেন্টোরো

24

সি 140 177 235

ভাল পুরানো পদ্ধতিগত শৈলী, কোন অভিনবতা।
এটি 8 মিনিটের মধ্যে 11,459,252,883 নাম গণনা করে (কোনও লিখন নেই)।
রানটাইম এবং নামের ফাইলের আকারের সাথে পরবর্তী সম্পাদনা করুন। আকাশ দেখুন ...
রানটাইম 57 মিনিট, ফাইলের আকার 126,051,781,713 (9 টি অক্ষর প্রতি সারিতে ক্রলফ)। দয়া করে আমাকে ভিক্ষুদের ইমেল ঠিকানাটি বলুন, যাতে আমি ম্যানুয়াল পরীক্ষার জন্য তাদের জিপ করা ফাইলটি প্রেরণ করতে পারি ...

সম্পাদনা করুন আরও কিছুক্ষন, বারবার চিঠির জন্য চেক পুনরায় কাজ।
এখনও স্বল্পতম নয়, তবে কমপক্ষে এটির একটি আউটপুট তৈরি করে এবং প্রয়োজনীয় আউটপুট উত্পন্ন করে।
রানটাইম ৫১ মিনিট, ফাইলের আকার 113,637,155,697 (এবার কোনও শীর্ষস্থানীয় ফাঁকা নেই)

একটি পার্শ্ব নোট: স্পষ্টতই আউটপুট ফাইলটি খুব সংকোচনের, তবুও আমাকে 7 জিপ মেরে ফেলতে হয়েছিল, 36 ঘন্টা কাজ করার পরে এটি 70% ছিল। রহস্যময়।

char n[]="@@@@@@@@@@";p=9,q,r;main(){while(p)if(++n[p]>77)n[p--]=65;else for(r=q=p=9;r&7;)(r+=r+(n[q]!=n[q-1])),n[--q]<65&&puts(n+q+1,r=0);}

Ungolfed

char n[]="@@@@@@@@@@";
p=9,q,r;
main()
{
    while (p)
    {
        if (++n[p] > 77)
        {
            n[p--] = 65; // when max reached, set to min and move pointer to left
        }
        else 
        {
            for (r=q=p=9; r & 7 ;) // r must start as any odd number
            {
                r += r+(n[q]!=n[q-1])); // a bitmap: 1 means a difference, 000 means 4 letters equal
                n[--q] < 65 && puts(n+q+1,r=0);
            }
        }
    }
}

কোন #includeএস?
সাইমন কুয়াং

@ সিমনকুয়াং, কিছু সংকলক স্বয়ংক্রিয়ভাবে মৌলিকগুলি (স্টিডিও) রাখবে।
পল ড্রাগার

1
@ সিমন এটি সি স্ট্যান্ডার্ড। ডিফল্টরূপে, গ্লোবাল অবজেক্টগুলি ইনট হয় এবং গ্লোবাল ফাংশনগুলি ইনট্রেস করে return 'পুটস' সংজ্ঞায়িত না হলেও ভিজ্যুয়াল স্টুডিও C4013 সতর্কবার্তা আউটপুট করে valid
edc65

4
একটি টুইট মধ্যে ফিট!
সিনকাউ হাঙ্গাস

19

গল্ফস্ক্রিপ্ট, 58 47 টি অক্ষর

"A"13
9?,{13base{65+}%n+}%{`{\4*/,}+78,1/%1-!},

পিটার টেলরকে ধন্যবাদ, আমি রুপি দ্রবণটি না মারতে থেকে সেপপুকু থেকে রক্ষা পেয়েছি! কোডটি নিজেকে 10 পর্যন্ত চালান এবং এখানে প্রমাণ রয়েছে এটি চার-ইন-সারি সংখ্যাগুলি এড়িয়ে চলে


1
সহজ সঞ্চয়: n+পরিবর্তে ব্যবহার করুন ''+n। আমি মনে করি নিয়ন্ত্রণের অক্ষর সহ বর্ণমালা ব্যবহার করা নিয়মের মধ্যে রয়েছে, সুতরাং আপনি নাম দিয়ে অন্য একটি চরিত্রের 65+সাথে প্রতিস্থাপন 13+এবং সংরক্ষণ করতে পারেন 13:^। এবং আমি মনে করি এটি 13,{ stuff [...]হতে পারে 13,1/{ stuff 4*
পিটার টেইলর

1
আমার প্রাথমিক ধারণাটি ছিল যে সঞ্চয়টি কোনও ফিল্টারের মাধ্যমে হবে এবং কিছুটা কাজ দিয়ে এটি করা যেতে পারে। থেকে 13,সঙ্গে প্রতিস্থাপিত হতে পারে {65+}%n+}%{ backtick {\4*/,}+78,1/%1-!},8 মোট সঞ্চয় জন্য, আপনার জীবনের সংরক্ষণ।
পিটার টেলর

চরিত্রটি যতক্ষণ এমন কিছু যা আপনি শারীরিকভাবে দেখতে পাচ্ছেন, ততক্ষণ এটি কাজ করবে। সত্যিই আপনি এমনকি একটি চরিত্র হিসাবে নিউলাইন অন্তর্ভুক্ত করতে পারে। চরিত্রগুলির একটি ক্রম আছে যতক্ষণ।
সিএসটার্জেস

@ পিটারটেলর: আপনি একজন ভদ্রলোক এবং পণ্ডিত!
ক্লদিউ

পরে AAAMএটি হওয়া উচিত AAABA, এবং BAAAB, ঠিক?
জাস্টহেল্ফ

18

বাশ + লিনাক্স কমান্ড লাইন ব্যবহার, 43 বাইট

jot -w%x $[16**9]|egrep -v "[0ef]|(.)\1{3}"

এটি নীচে আমার উত্তরের অনুরূপ কৌশল ব্যবহার করে তবে কেবল ১ base ভিত্তিতে গণনা করা হয় এবং এতে সমস্ত "নাম" রয়েছে 0, eবা fএকই সাথে 3 টিরও বেশি সংখ্যক একই সংখ্যা রয়েছে।

সন্ন্যাসীর বর্ণমালায় নিম্নলিখিত রূপান্তর করুন:

jot -w%x $[16**9]|egrep -v "[0ef]|(.)\1{3}" | tr 1-9a-d A-M

বাশ + কোর্টিলস (ডিসি এবং egrep), 46 বাইট

সম্পাদনা করুন - সংশোধিত সংস্করণ

dc<<<Edo9^[p1-d0\<m]dsmx|egrep -v "0|(.)\1{3}"

এটি চালাতে কিছুটা সময় নেবে তবে আমি এটি সঠিক বলে মনে করি।

dc14 ^ 9 থেকে 1 এবং নীচে 14 বেস আউটপুট গণনা করে। egrep টানা 3 টিরও বেশি একই সংখ্যা সহ ফিল্টার আউট করে। আমরা "0" সংখ্যা সহ যে কোনও নামও ফিল্টার আউট করি, তাই আমরা নামগুলিতে অক্ষরের সঠিক সেট পাই।

প্রশ্নটি উল্লেখ করে যে কোনও বর্ণমালা ব্যবহার করা যেতে পারে, তাই আমি [1-9] [AD] ব্যবহার করছি। তবে পরীক্ষার জন্য, এটি ট্রাম ব্যবহার করে [এএম] এ রূপান্তর করা যেতে পারে:

dc<<<Edo9^[p1-d0\<m]dsmx|egrep -v "0|(.)\1{3}" | tr 1-9A-D A-M

এটি ক্রম উত্পাদন করে:

MMMLMMMLM MMMLMMMLL MMMLMMMLK ... AC AB AA M L K ... C B A

নোট করুন এই dcকমান্ডটি কাজ করতে লেজ পুনরাবৃত্তি প্রয়োজন। এটি ডিসি সংস্করণ 1.3.95 (উবুন্টু 12.04) তে কাজ করে তবে 1.3 নয় (ওএসএক্স ম্যাভেরিক্স)।


10

এপিএল (59)

↑Z/⍨{~∨/,↑⍷∘⍵¨4/¨⎕A[⍳13]}¨Z←⊃,/{↓⍉⎕A[1+(⍵/13)⊤¯1⌽⍳13*⍵]}¨⍳9

নিজস্ব বর্ণমালায় লেখা :) এটি কিছুটা দীর্ঘ। এটি চালাতে দীর্ঘ সময়ও লাগে 9, আপনি চান কিনা পরীক্ষা করতে এটি একটি কম সংখ্যার সাথে চেষ্টা করে দেখুন।

ব্যাখ্যা:

  • {... }¨⍳9: 1 থেকে 9 পর্যন্ত প্রতিটি সংখ্যার জন্য :
    • ⍳13*⍵: 1 থেকে সমস্ত নম্বর পান 13^⍵
    • ¯1⌽: তালিকা বামে 1 (তাই আমরা আছে ঘোরাতে 13^⍵, 1, 2, ..., 13^⍵-1যা মধ্যে সক্রিয়, 0, 1, 2 ...মডিউল 13^⍵)।
    • (⍵/13)⊤: ব্যবহার বেস 13 প্রতিটি সংখ্যা এনকোড ডিজিটের
    • ⎕A[1+... ]: একটি যুক্ত করুন (অ্যারেগুলি 1-সূচকযুক্ত) এবং ⎕A(বর্ণমালা) সন্ধান করুন
    • ↓⍉: কলামগুলি সহ ম্যাট্রিক্সকে ভেক্টরের ভেক্টরে পরিণত করুন।
  • Z←⊃,/: ভেক্টরের প্রতিটি অভ্যন্তরীণ ভেক্টরকে এক সাথে যোগ দিন, আমাদের সম্ভাব্য নামের একটি তালিকা প্রদান করুন (তবে এটি এখনও বিধিগুলি পূরণ করে না)।
  • {... : প্রতিটি নামের জন্য, যদি এটি 4-পুনরাবৃত্ত-অক্ষরের বিধি মেটায় তবে পরীক্ষা করুন:
    • 4/¨⎕A[⍳13]: প্রতিটি চরিত্রের জন্য, 4 অক্ষরের একটি স্ট্রিং উত্পন্ন করুন
    • ⍷∘⍵¨: প্রতিটি স্ট্রিংয়ের জন্য, এটি উপস্থিত থাকলে পরীক্ষা করুন
    • ∨/,↑: যৌক্তিক বা এই সমস্ত পরীক্ষার গ্রহণ করুন,
    • ~: এবং এটিকে বিপরীত করুন, এর 1অর্থ 0হল এটি নিয়মগুলি মেটায় এবং এর অর্থ এটি হয় না।
  • Z/⍨: Zরুবেলের সাথে মিলিত সমস্ত উপাদান থেকে নির্বাচন করুন
  • : প্রতিটি পৃথক লাইনে প্রদর্শন করুন

9
আমি হতাশ. এর খ্যাতি দেওয়া, আপনি ভাবেন যে এপিএল এর জন্য এক-চরিত্রের সমাধান হবে, যা কোনও কীবোর্ড টাইপ করতে পারে না।
চিহ্নিত করুন

7
@ মার্ক, আমি নিশ্চিত যে এপিএল এর রয়েছে, তবে চরিত্রটি কী তা কেউ জানে না :)
পল ড্রাগার

1
এটি একটি পাথরের উপরে লেখা উচিত, এবং ভবিষ্যতের মানুষেরা যখন এটি খুঁজে পান, তারা কেবল এটি আদিম লিখিত ভাষা মনে করতে পারে।
সিনকাউ হাঙ্গাস

9

পার্ল, 70 68 66 50 টি অক্ষর

$"=",";map/(.)\1{3}/||say,glob$i.="{@a}"for@a=A..M

ব্যবহার:

$ perl -E 'code' > output_file

দুর্দান্ত জিনিসটি হ'ল প্রিন্টগুলি বাফার করা হয়, সুতরাং আপনি প্রথমে সমস্ত 1-অক্ষরযুক্ত সমাধান মুদ্রণ করুন, তারপরে 2-অক্ষর শব্দ এবং আরও কিছু পাবেন।


এই সমাধানটির সর্বোত্তম জিনিসটি 1 এর বাম দিকে
বুব

8

পার্ল - 35 বাইট

#!perl -l
/(.)\1{3}|[N-Z]/||print for A..1x9

শেবাংকে একটি বাইট হিসাবে গণনা করা হচ্ছে।

এটি হিস্ট্রোকের উত্তরের আলগা অনুবাদ ।

A..1x9অদ্ভুততা কিছুটা; এই জন্য সাধারণভাবে সংক্ষেপে হয় 'A'..'111111111'। সংগ্রহকারী কখনই টার্মিনাল মানটিতে পৌঁছাতে পারে না (এটিতে কেবলমাত্র উচ্চ-অক্ষরের অক্ষর রয়েছে) তবে এটি 9 টি অক্ষরের বেশি দীর্ঘ হয়ে গেলে এটি এখনও শেষ হবে । উদাহরণস্বরূপ, 1x4পরিবর্তে ব্যবহার করে এটি পরীক্ষা করা যেতে পারে ।


সম্মান! এখন কেন আমি তা ভেবে দেখিনি? ;)
জায়েদ

নোট করুন যে রুবি এটির পুনরাবৃত্তি করতে পুরো ব্যাপ্তি তৈরি করতে হবে না। আমার মন্তব্যে কোডটির এত বিশাল পরিমাণ মেমরির প্রয়োজনের একমাত্র কারণ এটি পরিসীমাটিকে একটি অ্যারেতে পরিণত করে (যাতে এটি ব্যবহার করতে পারে Array#-)।
ভেন্টোরো

@ ভেন্তোর আঃ হ্যাঁ, এটি grepকরবে। আমি রুবিতে পুরোপুরি সাবলীল নই।
প্রিমো

6

পিগ (গল্ফিংয়ের জন্য তৈরি ভাষার জন্য ওয়াহা খুব দীর্ঘ)

ফিসফিস : 101 ...

Pe(*ItCh(((J(x)for x in ItPr("ABCDEFGHIJKLM",repeat=j)if not An((i*3 in x)for i in x))for j in R(14))))

যদিও এটি আসলে আমি পাইথনে এটি কীভাবে করব তার কাছাকাছি:

from itertools import *
for i in range(14):
    for j in ("".join(k) for k in product("ABCDEFGHIJKLM",repeat=i) if not any((i*3 in k) for i in k)):
        print j

মাইনাস লম্বা লাইনের জটিলতা অবশ্যই;)


3

পাইথ , 34 টি অক্ষর

Kf<T"n"GJKFbJI>lb9Bb~Jm+bdfXVb*Y3K

ব্যাখ্যা:

Kf<T"n"G        K = list of letters in the alphabet before n.
JK              J = copy of K
FbJ             For b in J:
I>lb9B          If length of b > 9: break
b               print(b)
~J              J+=
~Jm+bd          J+=map(lambda d:b+d,
       XVb*Y3   index of Y*3 in reversed(b)
      fXVb*Y3K  filter for non-zero for Y in K on function index of Y*3 in reversed(b)
~Jm+bdfXVb*Y3K  J+=map(lambda d:b+d, filter(lambda Y:index of Y*3 in reversed(b), K))

2

পাইথন 2 - 212 বাইট

from itertools import chain,product as p
a='ABCDEFGHIJKLM'
q={c*4 for c in a}
c=0
for n in chain(*(p(*([a]*l)) for l in range(1,10))):
 n=''.join(n)
 if not any(u in n for u in q):print n
 c+=1
 if c==10**9:break

0

জাপট , 21 বাইট

Ep9 osE kè/0|(.)\1{3}

এটি অনলাইন চেষ্টা করুন! (লিঙ্কটি কেবল গণনা করে 14**4))

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

Ep9 osE kè/0|(.)\1{3}/

Ep9  14**9
osE  Range from 0 to n (exclusive), mapped through base-14 conversion
kè   Remove elements that match at least once...
/0|(.)\1{3}/  the regex that matches a zero or four times same char.

জেএস স্তর (এবং অ্যারে সংরক্ষণের জন্য পর্যাপ্ত মেমরি) হিসাবে একটি স্ট্যান্ডার্ড ECMAScript 2017 বাস্তবায়ন অনুমান করে, যেখানে কোনও Arrayবস্তুর সর্বোচ্চ 2**53-1দৈর্ঘ্য থাকতে পারে।

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