মডুলার এসএনইউএসপিতে একটি সংখ্যার সংক্ষিপ্ত উপস্থাপনা সন্ধান করুন


10

পটভূমি

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

কাজটি

এই প্রতিদ্বন্দ্বিতা উদ্দেশ্য, একটি মডুলার SNUSP সংখ্যা একটি স্ট্রিং অক্ষরের আউট গঠিত @, +এবং =ছাড়া শেষ অক্ষর একটি হল, #, এবং যে উপান্ত্য অক্ষরের হওয়া আবশ্যক +অথবা =(এটা হতে পারে না @)। উদাহরণস্বরূপ, বৈধ সংখ্যা থাকতে @+#, ==#এবং @@+@=#; অবৈধ সংখ্যার উদাহরণ হল +=, @@#এবং +?+#

একটি মডুলার এসএনইউএসপি সংখ্যার মান নীচে পুনরাবৃত্তভাবে গণনা করা হয়:

  • # 0 এর মান রয়েছে (এটি বেস কেস)।
  • যদি =xকোনও স্ট্রিংয়ের জন্য সংখ্যার ফর্ম থাকে তবে xএর মান এর মানের সমান x
  • যদি +xকোনও স্ট্রিংয়ের জন্য সংখ্যার ফর্ম থাকে xতবে এর মান x, প্লাস 1 এর সমান ।
  • সংখ্যা ফর্ম থাকে @cx, কোনো একক অক্ষরের জন্য cএবং কোন স্ট্রিং x, এর মান মান সমান x, প্লাস মান cx

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

ব্যাখ্যা

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

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

এখানে প্রথম কয়েকটি সংখ্যার সংক্ষিপ্ত প্রতিনিধিত্ব রয়েছে:

  • 0 :#
  • 1 :+#
  • 2 :++#
  • 3 : +++#বা@++#
  • 4 : ++++#বা +@++#বা@=++#
  • 5 : @+++#বা@@++#
  • 6 : +@+++#বা +@@++#বা @=+++#বা @=@++#বা@@=++#
  • 7 : @++++#বা@+@++#
  • 8 : @@+++#বা@@@++#
  • 9 : +@@+++#বা +@@@++#বা @+++++#বা @++@++#বা @+@=++#বা @@=+++#বা@@=@++#
  • 10 : @=@+++#বা @=@@++#বা @@@=++#( এটি সম্ভাব্য সমস্ত উত্তরের অন্তর্ভুক্ত হিসাবে চেক করা মোটামুটি গুরুত্বপূর্ণ পরীক্ষার কেস= )
  • 11 : @+@+++#বা @+@@++#বা @@++++#বা@@+@++#
  • 12 : +@+@+++#বা +@+@@++#বা +@@++++#বা +@@+@++#বা @=+@+++#বা @=+@@++#বা @=@=+++#বা @=@=@++#বা @=@@=++#বা @@=++++#বা @@=+@++#বা@@=@=++#
  • 13 : @@@+++#বা@@@@++#
  • 14 : +@@@+++#বা +@@@@++#বা @=@++++#বা @=@+@++#বা @@+++++#বা @@++@++#বা@@+@=++#
  • 15 : @+@++++#বা @+@+@++#বা @@=@+++#বা @@=@@++#বা @@@=+++#বা@@@=@++#

একটি বৃহত্তর পরীক্ষা ক্ষেত্রে হিসাবে, ইনপুট থেকে আউটপুট 40 হওয়া উচিত @@@=@@+++#, @@@=@@@++#, @@@@=@+++#, অথবা @@@@=@@++#

বিজয় শর্ত

হিসেবে চ্যালেঞ্জ, বিজয়ী সবচেয়ে কম এন্ট্রি, বাইট পরিমাপ করা হয়।


1
=সর্বোত্তমভাবে কেবল হিসাবে দেখা হবে @=, তাই না?
orlp

3
যাইহোক, এই ধরণের চ্যালেঞ্জগুলি সাধারণত মেটাগল্ফ হিসাবে পোস্ট করা হয় , কারণ সেখানে আকর্ষণীয় কোনও উত্তরই পাবে না (কেবল সম্ভাব্য স্ট্রিংগুলিতে স্ট্রিং এবং লুপটি মূল্যায়ন করুন)।
orlp

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

ব্রেইন ফ্ল্যাঙ্কের জন্যও আমাদের বেশ কয়েকটি গল্ফ চ্যালেঞ্জ ছিল
এএসসিআইআই-

উত্তর:


3

ওরাকল এসকিউএল 11.2, 341 262 বাইট

WITH e AS(SELECT DECODE(LEVEL,1,'=',2,'@','+')e FROM DUAL CONNECT BY LEVEL<4),n(s,v,p,c,i)AS(SELECT'#',0,0,e,1 FROM e UNION ALL SELECT c||s,DECODE(c,'+',1,'@',p,0)+v,v,e,i+1 FROM n,e WHERE i<11)CYCLE s SET y TO 1 DEFAULT 0 SELECT s FROM n WHERE:1=v AND rownum=1;

পুরাতন রুপ

WITH e AS(SELECT DECODE(LEVEL,1,'=',2,'@','+')e FROM DUAL CONNECT BY LEVEL<4),n(s,v,p,c) AS(SELECT'#',0,0,e FROM e UNION ALL SELECT s||c,CASE c WHEN'+'THEN 1 WHEN'='THEN 0 WHEN'@'THEN p ELSE 0 END+v,v,e FROM n,e WHERE LENGTH(s)<10)CYCLE s SET y TO 1 DEFAULT 0 SELECT MIN(REVERSE(s))KEEP(DENSE_RANK FIRST ORDER BY LENGTH(s))FROM n WHERE v=:1;

: 1 মডিউলার এসএনইউএসপিতে প্রতিনিধিত্বকারী নম্বর

আন-গল্ফড:

WITH e AS (SELECT DECODE(LEVEL,1,'=',2,'@','+')e FROM DUAL CONNECT BY LEVEL<4),  
n(s,v,p,c,i) AS                   
(
  SELECT '#',0,0,e,1 FROM e
  UNION ALL
  SELECT s||c
       , DECODE(c,'+',1,'@',p,0)+v 
       , v
       , e
       , i+1
  FROM n,e
  WHERE i<11
) CYCLE s SET y TO 1 DEFAULT 0
SELECT s FROM n WHERE:1=v AND rownum=1;

প্রথমে 3 টি লাইন দিয়ে একটি ভিউ তৈরি করুন, সংখ্যার প্রতিনিধিত্ব করতে ব্যবহৃত প্রতিটি চিহ্নের জন্য একটি, বিয়োগ # যা কেবল স্ট্রিংয়ের শেষে ব্যবহৃত হয়:

SELECT DECODE(LEVEL,1,'=',2,'@','+')e FROM DUAL CONNECT BY LEVEL<4;    

তারপরে পুনরাবৃত্ত ভিউ এন 3 টি প্রতীক দিয়ে প্রতিটি স্ট্রিং তৈরি করে, তাদের # তে সম্মতি জানায় এবং সেগুলি মূল্যায়ন করে।

পরামিতিগুলি হ'ল:

s: সংখ্যার মূল্যায়নযোগ্য মডুলার এসএনইউএসপি উপস্থাপন
v: পূর্ববর্তী পুনরাবৃত্তির দ্বারা গণনা করা s এর দশমিক মান
i
: 2 পুনরাবৃত্তি গ দ্বারা গণনা করা : পরবর্তী চিহ্নটি s এর সাথে সংযুক্ত করতে
i: কেবলমাত্র দৈর্ঘ্য, কেবলমাত্র গল্ফ করার উদ্দেশ্যে দুটি LENGTH () থেকে মুক্তি পাওয়া দরকার needed

DECODE(c,'+',1,'@',p,0)+v 

শেষ চিহ্নটি যদি + হয় তবে 1 যুক্ত করুন
যদি এটি @ হয় তবে i-2 পুনরাবৃত্তির মান যুক্ত করুন
অন্যথায় প্রতীকটি হয় # বা = is পুনরাবৃত্ত দৃশ্যের আরম্ভ অংশে ভি 0 টি দিয়ে আরম্ভ করা হয়, সুতরাং নতুন ভি যে কোনও ক্ষেত্রে পূর্ববর্তী v এর সমান।

WHERE i<11

3 টি প্রতীক সহ প্রতিটি স্ট্রিং গণনা করা হয়, এই অংশটি নিশ্চিত করে যে বড় ক্রাচ না হওয়া পর্যন্ত অনুরোধটি চলবে না।

CYCLE s SET y TO 1 DEFAULT 0

যেহেতু স্ট্রিংগুলি নির্মাণের কোনও নিয়ম নেই, তাই সদৃশগুলি উত্থিত হতে বাধ্য। পুনরাবৃত্তির দৃষ্টিতে থাকাকালীন ওরাকল সেই নকলকে চক্র হিসাবে ব্যাখ্যা করে এবং যদি কেসটি সুস্পষ্টভাবে যত্ন না নেওয়া হয় তবে একটি ত্রুটি নিক্ষেপ করে।

SELECT s FROM n WHERE:1=v AND rownum=1;

প্যারামিটার: 1 হিসাবে প্রবেশ করা দশমিক সংখ্যার মূল্যায়ন করে এমন প্রথম মডুলার এসএনইউএসপি উপস্থাপনা ফেরত দেয়

আমার পরীক্ষায় সেই প্রথম লাইনটি সর্বদা সংক্ষিপ্ত উপস্থাপনগুলির মধ্যে একটি।

ক্ষেত্রে আপনার ডাটাবেস একই পদ্ধতিতে কাজ করবে না, তারপরে সেই শেষ ধারাটি প্রতিস্থাপন করা উচিত

SELECT MIN(s)KEEP(DENSE_RANK FIRST ORDER BY i)FROM n WHERE:1=v

2

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

n=>eval("for(a=[['#',0,0]];[[s,t,p],...a]=a,t-n;)a.push(['='+s,t,t],['+'+s,t+1,t],['@'+s,t+p,t]);s")

সাধারণ ব্রুট-ফোর্স-প্রস্থের প্রথম অনুসন্ধানের অ্যালগরিদম।


40 এর জন্য এটি "@@@@@@ = ​​++ #" ফেরৎ দেয় যা 42 এ মূল্যায়ন করে
অদিতসু ছেড়ে যায় কারণ এসই এভিল

এমনকি 12 এর জন্য এটি "জেন্ড +++ #" দেয় যা 13 এর মূল্যায়ণ করে
অদিতসু প্রস্থান কারণ এসই ইভিএল

হুম, আমি মনে করি পরিবর্তিত t<nহতে t-nপারে সম্ভবত কাজ করে ...
নিল

2

পাইথ, 41 বাইট

L?b+ytb@[yttb001)Chb0+hfqQyTs^L"+@="UhQ\#

পরীক্ষা স্যুট

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

দুটি অংশ আছে। একটি পুনরাবৃত্ত ফাংশন যা পিছন ছাড়াই একটি SNUSP এক্সপ্রেশনের মান #এবং একটি ব্রুট ফোর্স রুটিন গণনা করে ।

Evalutaion:

L?b+ytb@[yttb001)Chb0
L                        Define the function y(b) as follows
 ?b                      If b is nonempty
   +ytb                  The sum of y(tail(b)) and   # tail(b) = b[1:]
   @[       )            The element in the list at location
   Chb                   Character values of the first character.
                         Modular indexing means that 
                         + -> 3
                         @ -> 0
                         = -> 1
                         Index 2 is filler.
    [yttb001)            @ adds y(tail(tail(b)). Tail suppresses the error when
                         called on an empty list, so this treats @# as zero, but
                         this can't lead to problems because removing the @ will
                         always make the expression shorter.
                         + adds 1, = adds 0.
 0                       If b is the empty string, return 0

পাশবিক বল:

+hfqQyTs^L"+@="UhQ\#
               UhQ      0 ... Q     # Q is the input
        ^L"+@="         Map that list to all strings formed from the characters
                        "+@=", with that many characters.
       s                Concatenate
  fqQyT                 Filter for strings which evaluate to the input
 h                      Take the first success, which is the shortest due to
                        the order the strings were generated.
+                 \#    Add a '#' and output

1

সিজেম, 58

ri:M;'#0_]]{_{M&}#_)!}{;{~[2,+1$f+"@=+"\]z\f+\af.+~}%}w=0=

নিল এর উত্তর থেকে কিছুটা অনুপ্রেরণা সহ ব্রুট ফোর্স। এটি অনলাইনে চেষ্টা করুন

দক্ষ সংস্করণ, 107

ri0"#"a{_{:B\:A={'=A0j+}{A(B={'+B0j+}{AB>{BAB-j_N={'@\+}|}N?}?}?}{;_(0j'+\+a\,1>_W%.{j}Na-'@\f++{,}$0=}?}2j

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

এটি গতিশীল প্রোগ্রামিং ব্যবহার করে।


1

হাস্কেল , 89 86 বাইট

সম্পাদনা করুন:

  • -3 বাইট: জিপিং ইনডেক্সের চেয়ে কম ছিল।

আরেকটি বর্বর শক্তি সমাধান যা নীলের উত্তর থেকে প্রচুর অনুপ্রেরণা নিয়ে শেষ হয়েছিল। (যদিও এটি গল্ফিংয়ের সূচনা হওয়ার আগে ইসাকের পাইথের মতো আরও কাজ করেছিল l))

f n=[s|(a,_,s)<-l,a==n]!!0
l=(0,0,"#"):[(a+c,a,d:s)|(a,b,s)<-l,(c,d)<-zip[0,1,b]"=+@"]

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

  • f প্রধান ফাংশন, যা একটি পূর্ণসংখ্যা নেয় এবং একটি স্ট্রিং প্রদান করে।
  • lটিউপসগুলির একটি অসীম তালিকা, প্রথমে (a,b,s)সবচেয়ে সংক্ষিপ্ত উপস্থাপনা s, তাদের মান aএবং bপ্রথম চর ছিটানো সহ উপস্থাপনের মান সহ। (যেমন অন্যরাও লক্ষ করেছেন / খেয়াল করেছেন, পরেরটির সাথে 0 হিসাবে আচরণ করা নিরীহ #।)
  • lপ্রথমটি ব্যতীত অন্যগুলির উপাদানগুলি তালিকা বোধের সাথে পুনরাবৃত্তভাবে তৈরি করা হয়। তালিকায় একটি নতুন প্রতিনিধিত্ব তৈরি dকরতে যে চরিত্রটি প্রিপেন্ড করা হবে তা হল sএবং 'সি' এর সাথে সম্পর্কিত বৃদ্ধি a
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.