জেএস, 1719/1694
তত্ত্ব
দুর্ভাগ্যক্রমে, আপনি যে নিয়মটি সরবরাহ করেছেন সেটি গাণিতিক দৃষ্টিকোণ থেকে বুদ্ধিমান সিদ্ধান্ত নাও হতে পারে। আসলে, নিয়মের একটি ছোট উপসেট ব্যবহার করে আপনি প্রদত্ত বিরতিতে প্রতিটি সংখ্যার জন্য একটি সমাধান খুঁজে পেতে পারেন
ছাড়া
যার জন্য কোনও সমাধান নেই।
হ্রাস বিধি সেট
নিম্নলিখিত নিয়মের সাবেট বিবেচনা করুন:
- শুধুমাত্র অপারেটার ব্যবহার করুন
plus
, minus
এবং times
।
- আপনি বাস্তবায়ন করতে প্রয়োজন হবে না একাধিক ঘটনার
plus
বা minus
প্রকাশ করুন।
- আপনি বাস্তবায়ন করতে প্রয়োজন হবে না তন্ন তন্ন
division
না operator associativity
(যেমন তাদের সমাধান সেট ইতিমধ্যে প্রথম নিয়ম দ্বারা আচ্ছাদিত করা হয়)।
এটি কাজ করার কারণটি হ'ল, আপনি যেমন @ কুইক্সের সাথে আগে আলোচনা করেছিলেন, আপনি বিরক্তিকর উত্তরগুলি মঞ্জুরি দিয়েছিলেন , যা নিয়মিত অভিব্যক্তিতে শেষ হয়
( times one)+$
। এটি অনুমোদিত, প্রদত্ত বিরতিতে প্রতিটি সংখ্যার একটি সমাধান থাকবে।
আপনি যখন আপনার একটি মন্তব্যে উত্তর দিয়েছেন,
@ কিউইক্স হ্যাঁ; বিরক্তিকর উত্তরগুলি গ্রহণযোগ্য, যদিও এটি 104, 105, 106, 107, 108, 109, 110 বা 111 এর জন্য কাজ করে না -
আপনি একেবারে ঠিক বলেছেন: আপনি নিজের সংখ্যাটি দিয়ে অর্থাৎ নিজের one hundred four times one times one …
বা এই সংখ্যার অন্য কোনওটি দিয়ে শুরু করে আপনার অভিব্যক্তি তৈরির চেষ্টা করার সময় এটি কার্যকর হয় না ।
তবে, আপনার অভিব্যক্তি একটি অভিব্যক্তি দিয়ে শুরু হয় যার মূল্যায়ন প্রদত্ত সংখ্যার সমান, আপনি ভাগ্যের বাইরে of উদাহরণস্বরূপ, দ্রষ্টব্য যে 17 + 87
সত্যই 104
, তাই আমরা লিখতে পারে 104
:
104: seventeen plus eighty seven times one times one times one times one times one times one times one times one times one times one
এই উপসেটটি কাজ করে তা দেখতে এই ফাইলটি সংরক্ষণ করুন num.js
এবং নিশ্চিত করুন যে কমান্ড লাইনের জন্য একটি জাভাস্ক্রিপ্ট ইঞ্জিন স্পাইডারমোনকি আপনার সিস্টেমে ইনস্টলড রয়েছে is
অ্যালগরিদম
- আসুন
K
ধনাত্মক পূর্ণসংখ্যার জন্য সম্পত্তিটি সংখ্যার N
বর্ণ হিসাবে এবং এর মান থাকা হিসাবে এটি নির্ধারণ করি N
।
- আসুন আমরা
F
তার অভিব্যক্তির জন্য সম্পত্তিটিকে আরও সংজ্ঞায়িত করি কারণ এর শব্দ রূপান্তর হিসাবে 8k
কে ∈ with এর মূল্যায়নের চেয়ে কয়েকগুণ কম হয় ℕ F
"ফিলিবেল" এর অর্থ দাঁড়ায় এবং আমরা বর্ণের রূপান্তর শব্দটি দৈর্ঘ্যের 8 (অর্থাত্ " times one"
) প্রকাশের সাথে পূরণ করতে পারি বা না এমনটি বর্ণনা করে যা ফলস্বরূপ প্রকাশটি সম্পত্তি পেতে পারে N
।
এরপরে আমরা নিম্নরূপে এগিয়ে চলি:
- ইনপুট নম্বরটিকে কথায় রূপান্তর করুন।
- ইনপুট নম্বরটিতে সম্পত্তি আছে কিনা তা পরীক্ষা করুন
K
।
- যদি তা হয় তবে শব্দগুলি ফেরত দিন (
4
দুর্ভাগ্যক্রমে এই সম্পত্তিটির সাথে একমাত্র সংখ্যা)।
- যদি এটি না হয়, এগিয়ে যান।
- সমস্ত দ্বি-অপারেন্ড এক্সপ্রেশন (সংযোজন, বিয়োগ এবং এই ক্রমের গুণক) এর জন্য যা ইনপুট সংখ্যার ফলস্বরূপ, তাদের মূল্যায়নের সম্পত্তি আছে কিনা তা পরীক্ষা করে দেখুন
K
।
- যদি তা হয় তবে শব্দগুলি ফিরিয়ে দিন।
- যদি তা না হয় তবে দ্বি-অপারেন্ড এক্সপ্রেশনটির সম্পত্তি আছে কিনা তা পরীক্ষা করুন
N
।
- যদি এটি হয় তবে এক্সপ্রেশনটি পূরণ করুন
" times one"
এবং ফলাফলটি প্রকাশের মূল্যায়নের সম্পত্তি আছে কিনা তা যাচাই করুনK
।
- যদি তা হয় তবে শব্দগুলি ফিরিয়ে দিন
- যদি এটি না হয়, এগিয়ে যান
- যদি এটি না হয়, এগিয়ে যান
- একটি কফি পান করুন
অনুশীলন করা
num.js (স্পাইডারমনকি / কমান্ড লাইনের জন্য)
function X(e,t){return e+": "+t}function P(e){var n,t;for(n=1;.5*e+(e%2===0?1:0)>n;++n){if(t=C.s(n)+" plus "+C.s(e-n),t.replace(/\s/g,"").length===e)return t;if(F(e,t)&&e>t.length)return G(e,t)}return!1}function M(e){var t,n;for(t=L;t>1;--t){if(0>t-e)return!1;if(n=C.s(t)+" minus "+C.s(t-e),n.replace(/\s/g,"").length===e)return n;if(F(e,n)&&e>n.length)return G(e,n)}return!1}function F(e,t){return(e-t.replace(/\s/g,"").length)%8===0}function G(r,t){var e,i=(r-t.replace(/\s/g,"").length)/8,n="";for(e=0;i>e;++e)n+=" times one";return t+n}function T(e){var t,n,r;if(F(e,C.s(e)))return G(e,C.s(e));for(t=1,n=1;t<Math.floor(Math.sqrt(e));++t){for(;e>tn;)++n;if(tn===e&&(r=C.s(t)+" times "+C.s(n),r.replace(/\s/g,"").length===e))return r}return!1}function Y(e){var n,r,t;return e===C.s(e).length?X(e,C.s(e)):(n=P(e))?X(e,n):(r=M(e))?X(e,r):(t=T(e),t?X(e,t):X(e,"impossible"))}var L=1e4,C=new function(){return this.o=["","one","two","three","four","five","six","seven","eight","nine"],this.t=["","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"],this.T=["ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],this.s=function(e){return e?this.m(e):"zero"},this.m=function(e){return e>=1e6?this.m(Math.floor(e/1e6))+" million"+(e%1e6!==0?" "+this.Z(e%1e6):""):this.Z(e)},this.Z=function(e){return e>=1e3?this.h(Math.floor(e/1e3))+" thousand"+(e%1e3!==0?" "+this.h(e%1e3):""):this.h(e)},this.h=function(e){return e>99?this.o[Math.floor(e/100)]+" hundred"+(e%100!==0?" "+this.U(e%100):""):this.U(e)},this.U=function(e){return 10>e?this.o[e]:e>=10&&20>e?this.T[e-10]:this.t[Math.floor(e/10)]+(e%10!==0?" "+this.o[e%10]:"")},this};print(Y(0|arguments[0]))
num.js (ব্রাউজারগুলির জন্য)
উপরের প্রদত্ত কোডটি শেষ কমান্ডের কারণে ব্রাউজারগুলির জন্য কাজ করতে পারে না, যা প্রদত্ত স্ক্রিপ্ট থেকে একটি দুর্দান্ত কমান্ড তৈরি করতে কমান্ড লাইন আর্গুমেন্টগুলিকে ধরে ফেলে।
আপনার ব্রাউজারের মধ্যে থেকে সরাসরি জাভাস্ক্রিপ্ট কোড চালাতে, উপরের কোডটির এই অংশটি নির্বাচন করুন:
function X(e,t){return e+": "+t}function P(e){var n,t;for(n=1;.5*e+(e%2===0?1:0)>n;++n){if(t=C.s(n)+" plus "+C.s(e-n),t.replace(/\s/g,"").length===e)return t;if(F(e,t)&&e>t.length)return G(e,t)}return!1}function M(e){var t,n;for(t=L;t>1;--t){if(0>t-e)return!1;if(n=C.s(t)+" minus "+C.s(t-e),n.replace(/\s/g,"").length===e)return n;if(F(e,n)&&e>n.length)return G(e,n)}return!1}function F(e,t){return(e-t.replace(/\s/g,"").length)%8===0}function G(r,t){var e,i=(r-t.replace(/\s/g,"").length)/8,n="";for(e=0;i>e;++e)n+=" times one";return t+n}function T(e){var t,n,r;if(F(e,C.s(e)))return G(e,C.s(e));for(t=1,n=1;t<Math.floor(Math.sqrt(e));++t){for(;e>tn;)++n;if(tn===e&&(r=C.s(t)+" times "+C.s(n),r.replace(/\s/g,"").length===e))return r}return!1}function Y(e){var n,r,t;return e===C.s(e).length?X(e,C.s(e)):(n=P(e))?X(e,n):(r=M(e))?X(e,r):(t=T(e),t?X(e,t):X(e,"impossible"))}var L=1e4,C=new function(){return this.o=["","one","two","three","four","five","six","seven","eight","nine"],this.t=["","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"],this.T=["ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"],this.s=function(e){return e?this.m(e):"zero"},this.m=function(e){return e>=1e6?this.m(Math.floor(e/1e6))+" million"+(e%1e6!==0?" "+this.Z(e%1e6):""):this.Z(e)},this.Z=function(e){return e>=1e3?this.h(Math.floor(e/1e3))+" thousand"+(e%1e3!==0?" "+this.h(e%1e3):""):this.h(e)},this.h=function(e){return e>99?this.o[Math.floor(e/100)]+" hundred"+(e%100!==0?" "+this.U(e%100):""):this.U(e)},this.U=function(e){return 10>e?this.o[e]:e>=10&&20>e?this.T[e-10]:this.t[Math.floor(e/10)]+(e%10!==0?" "+this.o[e%10]:"")},this}
এখন, এটি আপনার ব্রাউজারের জাভাস্ক্রিপ্ট কনসোলে পেস্ট করুন, যাতে আপনি আপনার ব্রাউজারের মধ্যে থেকে একই ফলাফলগুলি তৈরি করতে পারেন, উদাহরণস্বরূপ:
Y(1234);
উদাহরণ (কমান্ড লাইন)
chiru@chiru ~ $ js num.js 28
28: fourteen plus fourteen times one
chiru@chiru ~ $ js num.js 7
7: impossible
chiru@chiru ~ $ js num.js 42
42: nine thousand sixty minus nine thousand eighteen
এবং যে কৌশলটি দিয়ে আপনি প্রতিটি নম্বরকে কাজ করতে পারেন তা দেখতে, বিরক্তিকর উত্তরটি একবার দেখুন js num.js 1337
:
1337: ten plus one thousand three hundred twenty seven times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one times one
প্রদত্ত কোডগুলি প্রদত্ত ব্যবধানের জন্য বৈধ সমাধান উত্পন্ন করে (এবং সম্ভবত উপরেও, আপনাকে কেবল ভেরিয়েবলের মান বাড়াতে হবে L
)।
পরিসংখ্যান
আমি "কতটা বিরক্তিকর " মত প্রকাশ করতে আগ্রহী (বা: times one
এই অ্যালগরিদমের অভ্যন্তরে অভিব্যক্তি অনুযায়ী কতটা স্ট্রস্ট্রিং ব্যবহৃত হয়েছিল), কারণ এই অংশটি প্রদত্ত বিরতিতে প্রতিটি সংখ্যার জন্য সমাধান সন্ধানের জন্য দায়বদ্ধ ছিল। নিজের জন্য দেখুন:
x : n-th অভিব্যক্তি (ন্যূনতম 0, সর্বোচ্চ 10,000)
y : প্রকাশের মধ্যে "এক বার" সাবস্ট্রিংয়ের উপস্থিতির সংখ্যা (কমপক্ষে 0, সর্বোচ্চ 1245)
উপসংহার:
- এক্সপ্রেশনগুলি রৈখিক উপায়ে আরও এবং বেশি বিরক্তিকর হয়ে ওঠে।
- 99% এরও বেশি সমাধান বিরক্তিকর।
So for 1234 we can do (massive expression) times zero plus one thousand two hundred thirty four.
আপনি শূন্য বাদ দিতে চাইবেন। আপনার উপর