ডিকোড ফ্যাক্টর গাছ


11

আপনি যদি এনকোড ফ্যাক্টর গাছগুলি মিস করেছেন তবে এখানে একটি ফ্যাক্টর গাছের সংজ্ঞা রয়েছে:

  • খালি স্ট্রিং 1।
  • সংঘটন গুণকে প্রতিনিধিত্ব করে।
  • বেশ কয়েকটি এন প্রথম বন্ধনী (অথবা কোন জোড়া অক্ষর) মধ্যে লেখা প্রতিনিধিত্ব করে এন 2 হচ্ছে প্রথম মৌলিক সংখ্যা সঙ্গে, ম মৌলিক সংখ্যা।
    • নোট করুন যে এটি পুনরাবৃত্তভাবে সম্পন্ন করা হয়: এন থ্রি প্রাইম হ'ল বন্ধনীগুলিতে n এর ফ্যাক্টর ট্রি ।
  • একটি সংখ্যার গুণককে ছোট থেকে বড় পর্যন্ত অর্ডার করতে হবে।

উদাহরণস্বরূপ, 2 থেকে 10 এর জন্য এখানে ফ্যাক্টর গাছগুলি রয়েছে:

()
(())
()()
((()))
()(())
(()())
()()()
(())(())
()((()))

এই চ্যালেঞ্জটি একই ধরণের বিন্যাস ব্যবহার করে; তবে, এই চ্যালেঞ্জটি হ'ল এই কাঠামোগুলি ডিকোড করা

পরীক্ষার কেস

নির্লজ্জভাবে চুরি শেষ চ্যালেঞ্জ থেকে প্রত্যাবর্তিত

উপরের 9 টি ছাড়াও ...

()()((()))((())) => 100
(()(()(()))) => 101
(()())(((())))(()(())) => 1001
(((((((()))))))) => 5381
(()())((((()))))(()()(())(())) => 32767
()()()()()()()()()()()()()()() => 32768

বিধি

  • ইনপুটে যুক্ত জোড় অক্ষরগুলি হ'ল আপনার পছন্দ বন্ধনী, বন্ধনী, বন্ধনী বা কোণ বন্ধনী। যদি জিজ্ঞাসা করা হয় তবে আমি অন্য ফর্ম্যাটগুলিকে অনুমতি দিতে পারি (যেমন এক্সএমএল ট্যাগগুলি)।
  • আপনি 2 থেকে 2 15 বা 32768 পর্যন্ত যে কোনও সংখ্যার জন্য কারখানা গাছগুলি পরিচালনা করতে সক্ষম হবেন ।
  • যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর ins

উত্তর:


9

ওল্ফ্রাম ভাষা (গণিত) , 52 45 বাইট a

ToExpression@*StringReplace[{"["->"Prime[1"}]

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

ইনপুট বন্ধনী ব্যবহার করে।

ফলাফলকে গণনা করে একটি গাণিতিক প্রকাশে ইনপুট রূপান্তর করে। আমরা কেবল প্রতিস্থাপনের [মাধ্যমে এটি করি Prime[1। এই কাজ করে কারণ সংযুক্তকরণের হয় ম্যাথামেটিকাল মধ্যে গুণ।


8

প্রোলোগ (এসডাব্লুআই) , 134 128 127 124 বাইট

এই উত্তরটি আমার এবং 0 'এর মধ্যে একটি সহযোগিতার অংশ। আমরা দুজনেই এটি নিয়ে একসাথে কাজ করেছি, আমি এটি পোস্ট করার একমাত্র কারণ হ'ল আমি রক, পেপার, কাঁচি জিতেছি।

\Q-->{Q=1};"(",\N,")",\B,{findnsols(N,I,(between(2,inf,I),\+ (between(3,I,U),0=:=I mod(U-1))),L)->append(_,[Y],L),Q is Y*B}.

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

ব্যাখ্যা

এই উত্তরটি প্রলজ মজার ক্ষেত্রে গল্ফিংকে কী করে তোলে তার একটি নিখুঁত অনুকরণীয়।


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

head(1)-->[].
head(Q)-->"(",head(N),")",head(B),{prime(N,Y),Q is Y*B}.
isprime(I):- \+ (between(3,I,U),0 =:= I mod(U-1)).
prime(N,Y):-
  findnsols(N,I,(
    between(2,inf,I),
    isprime(I)
  ),L),
  append(_,[Y],L),!.

প্রথম নির্মাণের নিয়মটি হ'ল:

head(1)-->[].

এটি প্রোলগকে বলে যে খালি স্ট্রিংটি 1 এর সাথে মিলে যায়।

আমাদের নির্মাণের দ্বিতীয় নিয়ম একটি সামান্য বিট আরও জটিল।

head(Q)-->"(",head(N),")",head(B),{prime(N,Y),Q is Y*B}.

এটি আমাদের জানায় যে কোনও অ শূন্য স্ট্রিংয়ে একই বিধিগুলির সাথে একটি ধারাটির চারপাশে এই একই বিধিগুলির সাথে একটি ধারাটির ডানদিকে বন্ধনী রয়েছে।

এটি আমাদের এও বলে যে এই ধারা ( Q) এর মানটি বিধি অনুসরণ করে:

{prime(N,Y),Q is Y*B}

এটিকে ভঙ্গ করা, Q2 সংখ্যা Yএবং এর গুণফল BBবাম দিকে কেবল ক্লজের মান এবং Yএটি প্রথম Nস্তরের যেখানে Nপ্রথম বন্ধনের অভ্যন্তরে ক্লজের মান।

এই নিয়মটি ফ্যাক্টর গাছের গঠনের উভয় নিয়মকে অন্তর্ভুক্ত করে

  • সংঘটন বহুগুণ
  • বেষ্টনী নবম প্রধান লাগে

ভবিষ্যদ্বাণীপূর্ণ সংজ্ঞা জন্য। অবারিত সংস্করণে খেলতে দুটি পূর্বাভাস রয়েছে (আমার আসল কোডে আমি ভবিষ্যদ্বাণীগুলি দূরে সরিয়ে রেখেছি)। এখানে দুটি প্রাসঙ্গিক পূর্বাভাস হ'ল , যা isprime/1কোন মৌলিক সংখ্যার সাথে মেলে এবং prime/2কোনটি প্রদত্ত Nএবং Yযদি মিলিত Yহয় তবে যদি Nপ্রধানতম হয়। প্রথম আমাদের আছে

isprime(I):- \+ (between(3,I,U),0 =:= I mod(U-1)).

এটি আদিমতার একটি সুন্দর মান সংজ্ঞা কাজ করে, আমরা জোর দিয়ে বলছি যে 2 Iসহ 2 এর মধ্যে কোনও সংখ্যা নেই তবে Iবিভাজন নয় I

পরবর্তী শিকারীটিও বেশ সহজ

prime(N,Y):-
  findnsols(N,I,(
    between(2,inf,I),
    isprime(I)
  ),L),
  append(_,[Y],L),!.

আমরা findnsolsপ্রথম Nসংখ্যাগুলি খুঁজে পেতে ব্যবহার করি যা প্রধান, আমরা তারপরে সর্বশেষটি ফিরে আসি। এখানে কৌশলটি হ'ল যদিও ক্ষুদ্রতম প্রাইমগুলি findnsolsখুঁজে পাওয়ার গ্যারান্টি নেই তবে এসডাব্লুআই যেভাবে পরিচালনা করে তা এর ফলে সবসময়ই ছোট ছোট প্রাইমগুলি খুঁজে পাওয়া যায় find এর অর্থ এই যে আরও প্রাইম সন্ধান করা থেকে বিরত রাখতে আমাদের কাটাতে হবে। Nbetween


গল্ফস

আমরা আমাদের কোডে দু'বার যুক্তি ফরোয়ার্ড করতে পারি। যেহেতু isprimeশুধুমাত্র একবার ব্যবহৃত হয় তখন এর সংজ্ঞাটি ভিতরে স্থানান্তরিত হতে পারে prime। পরের এক সরানো হয় primeDCG ভেতরে সরাসরি অবশ্য যেহেতু আমরা একটি কাটা ব্যবহার primeরোধ করার জন্য findnsolsঅনেকগুলি মৌলিক আমরা একটি বিষয় একটি বিট আছে উত্পাদক থেকে। কাটটি, আমরা চাই কেবলমাত্র বিটের পরিবর্তে পুরো ডিসিজি কেটে দেয়। কিছুটা ডকুমেন্টেশন খননের পরে আমরা দেখতে পেলাম যে once/1কেবল এই অংশটি কাটতে ব্যবহার করা যেতে পারে তবে পুরো ডিসিজি না। তবে আরও ডকুমেন্টেশন খননের মাধ্যমে জানা গেছে যে ->অপারেটরটিও একই ধরণের কাজ সম্পাদন করতে ব্যবহৃত হতে পারে। ->অপারেটর মোটামুটিভাবে সমতূল্য ,!,তাই আমরা অন্য দিকে আমাদের কাটা সরানো append/3এবং এটি প্রতিস্থাপিত ->

এসডাব্লুআই-প্রোলগে পূর্বাভাস (এবং নিয়মগুলি) অপারেটরদের নাম হিসাবে দেওয়া যেতে পারে যা আমাদের সাধারণত প্রয়োজনীয় বন্ধনীগুলি ফেলে দিতে দেয়। এর মাধ্যমে আমরা নিয়মটি কল করে 6 বাইট সংরক্ষণ করতে পারি \



1

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

নটজাগানের পাইথন উত্তরটি দ্বারা অনুপ্রাণিত । ইনপুট এক্সপ্রেশনটিকে একটি বিশাল এবং কুরুচিপূর্ণ এক্সিকিউটেবল স্ট্রিংয়ে রূপান্তরিত করে।

s=>eval(s.split`)(`.join`)*(`.split`(`.join`(g=(n,k)=>(C=d=>n%--d?C(d):k-=d<2)(++n)?g(n,k):n)(1,`)

মার্জ Cএবং gএকটি একক এক ফাংশন কিছু বাইট সংরক্ষণ করতে পারেন, কিন্তু এটা আরও বেশি পুনরাবৃত্তির প্রয়োজন।

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

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