কোড গল্ফ: ফোর ম্যাজিক


88

ধাঁধা

আমি হাই স্কুলে পড়ার সময় শুনেছিলাম একটি ছোট ধাঁধাটি এরকম কিছু হয়েছিল ...

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

লক্ষ্যটি ছিল ট্রান্সফর্মেশন ফাংশনটি খুঁজে বের করার চেষ্টা করা এবং তারপরে নির্ভরযোগ্যভাবে এই ধাঁধাটি নিজেকে প্র্যাক্টর করতে সক্ষম হোন।

সমাধান

যে কোনও পদক্ষেপে রূপান্তর কার্য ছিল function

  • প্রশ্নে নম্বর নিন,
  • হাইফেন বা স্পেসগুলি উপেক্ষা করে এর ইংরেজী শব্দের উপস্থাপনায় অক্ষরের সংখ্যা গণনা করুন বা "এবং" (যেমন, "দশ" এর মধ্যে 3 টি অক্ষর রয়েছে, "চৌত্রিশ" -এ 10 অক্ষর রয়েছে, "একশ তেতাল্লিশ" এটিতে 20 টি বর্ণ রয়েছে)।
  • চিঠি সংখ্যা।

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

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল এমন একটি কোডের টুকরো তৈরি করা যা ব্যবহারকারীর কাছ থেকে একটি নম্বর পড়বে এবং তারপরে "ফোর ইজ ম্যাজিক" না পৌঁছানো পর্যন্ত রূপান্তর ফাংশনটি বারবার প্রয়োগ করা হবে তা দেখিয়ে লাইনগুলি মুদ্রণ করবে।

বিশেষত:

  1. সমাধানগুলি অবশ্যই নিজের মধ্যে এবং সম্পূর্ণ প্রোগ্রাম হতে হবে। তারা কেবল ফাংশন হতে পারে না যা ইনপুটটির একটি সংখ্যা - ফ্যাক্টর গ্রহণ করে।
  2. ইনপুট অবশ্যই স্ট্যান্ডার্ড ইনপুট থেকে পড়তে হবে। ("প্রতিধ্বনি" থেকে পাইপ দেওয়া বা ইনপুট পুনর্নির্দেশ ব্যবহার করা ঠিক আছে যেহেতু এটি স্টিডিন থেকেও আসে)
  3. ইনপুটটি সংখ্যা আকারে হওয়া উচিত।
  4. ট্রান্সফর্মেশন ফাংশনের প্রতিটি প্রয়োগের জন্য, একটি লাইন প্রিন্ট করা উচিত: a is b.যেখানে a এবং b রূপান্তরটিতে সংখ্যার সংখ্যাযুক্ত ফর্ম।
  5. পূর্ণ স্টপস (পিরিয়ড) প্রয়োজন!
  6. শেষ লাইনে স্বাভাবিকভাবেই বলা উচিত 4 is magic.,।
  7. কোডটি 0 থেকে 99 এর মধ্যে সমস্ত সংখ্যার জন্য সঠিক আউটপুট তৈরি করা উচিত ।

উদাহরণ:

> 4
4 is magic.

> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.

> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.

> 0
0 is 4.
4 is magic.

> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.

বিজয়ী হ'ল উত্স কোডের অক্ষরের সংখ্যা অনুসারে সংক্ষিপ্ততম জমা দেওয়া যা সঠিক

বোনাস

আপনি কোডটির এমন একটি সংস্করণ লেখার চেষ্টা করতে পারেন যা রূপান্তর ফাংশনের প্রতিটি প্রয়োগের সাথে সংখ্যার জন্য ENGLISH NAMES প্রিন্ট করে। মূল ইনপুটটি এখনও সংখ্যাসূচক, তবে আউটপুট লাইনে সংখ্যার শব্দ ফর্ম থাকা উচিত।

(আপনার কোড সহ আকার আঁকার জন্য ডাবল বোনাস)

(সম্পাদনা) কিছু স্পষ্টতা:

  1. আমি শব্দটি উভয় পক্ষেই সমস্ত প্রযোজ্য ক্ষেত্রে যেমন প্রদর্শিত হোক তা চাই Nine is four. Four is magic.
  2. যদিও আমি মূলধন সম্পর্কে চিন্তা করি না। এবং আপনি কীভাবে টোকেন শব্দটি পৃথক করা উচিত তা বিবেচনা করে না: ninety-nineঠিক আছে, ninety nineঠিক আছে, ninetynineঠিক নেই।

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

প্রতিটি সংস্করণের জন্য একটি সমাধান জমা নির্দ্বিধায়।


4
আমাদের কতটা উচ্চতর সংখ্যা পরিচালনা করা উচিত? <100? <1000? <1000000? <2 ** 31?
পি ড্যাডি

4
যেহেতু এটি কেবল 0 থেকে 99 পর্যন্ত যেতে হবে, আমি সন্দেহ করি যে একটি দ্রুত, সংক্ষিপ্ত সমাধান হ'ল 0-99 মানচিত্রের মানগুলিকে হার্ডকোড করা হবে এবং তারপরে আপনি 4 এ পৌঁছানো অবধি লুপ হবে তার পরে, মাইক্রোতেভেটিং শুরু হয়।
বেসকা

@ পি বাবা ... অংশ 6 কেবলমাত্র 0-99 বলেছে।
বেসকা


14
4 টি কেবল যাদু কারণ এটি একটি ফেয়ার ডাইস রোল দ্বারা চয়ন করা হয়েছিল।
ভার্চুসিমিডিয়া

উত্তর:


57

গল্ফস্ক্রিপ্ট - 101 96 93 92 91 90 94 86 বাইট

90 → 9410 এর
94 → 86গুণকের জন্য স্থির আউটপুট : পুনর্গঠিত কোড। মুদ্রণযোগ্য অক্ষরগুলি সরাতে বেস 100 ব্যবহার করা।
86 → 85: স্ট্রিং কাস্ট কাস্ট।

{n+~."+#,#6$DWOXB79Bd")base`1/10/~{~2${~1$+}%(;+~}%++=" is "\".
"1$4$4-}do;;;"magic."

এতো নিচে কেন? এটি লিস্পের চেয়ে ছোট এবং বিল্ট-ইন ফর্ম্যাটিং ফাংশনটি ব্যবহার করে না
ক্লাদিউ

36
আমি কোডটি দিয়ে কীভাবে শেষ হয় "magic."তা পছন্দ করি , এটি এটির পরিমাণে সমান।
এস্টিনা

@ অ্যাস্টিনা: আমি মনে করি যে এই চ্যালেঞ্জটি করা সহজ। :-)
প্ল্যাটিনাম আজুর

9
@ আস্তিনা: হাহাহা, এটা মজার বিষয়। "মাম্বো জাম্বো ইয়াদা ইয়াদা..মাজিক"
ভলিউরন

4
@P ড্যাডি দ্য dদ্বারা নিষ্কাশিত হয় )যেমন 100এবং বেস রূপান্তর জন্য সোর্স হিসেবে ব্যবহৃত হয়।
নবিব

85

পার্ল, প্রায় 147 চর

আলগাভাবে প্ল্যাটিনাম আউজুর সমাধানের উপর ভিত্তি করে:

               chop
              ($_.=
              <>);@
             u="433
            5443554
           366  887
          798   866
         555    766
        "=~     /\d
       /gx      ;#4
      sub       r{4
     -$_        ?$_
    <20         ?$u
   [$_          ]:(
  $'?           $u[
 $']            :0)
+$u[18+$&]:magic}print"
$_ is ",$_=r(),'.'while
                /\d
                /x;
                444

4
@ প্ল্যাটিনাম আউজুর যেভাবে এর ইনপুট পায় তা popকোনও যুক্তি ছাড়াই ব্যবহারের মাধ্যমে হয় । সাব্রোটিনের বাইরে popসরিয়ে দেয় এবং এর শেষ মানটি দেয় @ARGVযা পার্ল প্রোগ্রামে যুক্তির তালিকা। এটি কেবল সহজেই এর সাথে প্রতিস্থাপন করা যেতে পারে shiftতবে এটি আরও 2 টি অক্ষর যুক্ত করে। দেখুন: p3rl.org/pop
ব্র্যাড গিলবার্ট

দেখে মনে হচ্ছে আপনার একটি নতুনলাইন চরিত্রের প্রয়োজন '.', যা 2 \nবা 1 এর জন্য যদি আপনি সাদা '. 'জায়গার গণনা করেন (স্থানটি নতুন লাইনের আক্ষরিক হয়ে
উঠছে

কিছুটা দীর্ঘ, তবে আমার বইতে সৃজনশীলতা অনেক বেশি এগিয়ে যায়।
বেসকা

@ প্ল্যাটিনাম আজুর এট আল: তিনি স্ট্যান্ডিনের কাছ থেকে তার ইনপুটটি পাচ্ছেন। পার্লে এটি করার উপায়। (সম্ভবত তিনি আপনার মন্তব্যের পরেও এটি পরিবর্তন করেছেন?)
ফ্রাঙ্ক

@ পি বাবা: হাহাকার তবে আপনার মন্তব্যে +1 করুন
প্ল্যাটিনাম আজুর

30

কমন লিসপ 157 চারস

নতুন আরও মানানসই সংস্করণ, এখন ফর্ম স্ট্যান্ডার্ড ইনপুট পড়ছে এবং স্পেস এবং হাইফেন উপেক্ষা করছে:

(labels((g (x)(if(= x 4)(princ"4 is magic.")(let((n(length(remove-if(lambda(x)(find x" -"))(format nil"~r"x)))))(format t"~a is ~a.~%"x n)(g n)))))(g(read)))

মানব-পঠনযোগ্য আকারে:

 (labels ((g (x)
           (if (= x 4)
            (princ "4 is magic.")
            (let ((n (length (remove-if (lambda(x) (find x " -"))
                                        (format nil "~r" x)))))
               (format t"~a is ~a.~%" x n)
               (g n)))))
    (g (read)))

এবং কিছু পরীক্ষা চলে:

>24
24 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.

>23152436
23152436 is 64.
64 is 9.
9 is 4.
4 is magic.

এবং বোনাস সংস্করণ, 165 অক্ষরে:

 (labels((g(x)(if(= x 4)(princ"four is magic.")(let*((f(format nil"~r"x))(n(length(remove-if(lambda(x)(find x" -"))f))))(format t"~a is ~r.~%"f n)(g n)))))(g(read)))

দিচ্ছি

>24
twenty-four is ten.
ten is three.
three is five.
five is four.
four is magic.

>234235
two hundred thirty-four thousand two hundred thirty-five is forty-eight.
forty-eight is ten.
ten is three.
three is five.
five is four.
four is magic.

4
আমি ভেবেছিলাম "চব্বিশ" মাত্র 10 টি অক্ষর আছে?
কেনেটিএম

4
"এর" পরে সংখ্যাগুলিও পাঠ্য হওয়া উচিত।
মাইক ডিসিমোন

4
কেন এত উপরে?
অন্যগুলি

4
@ ক্লাডিউ কারণ সাধারণ লিস্প দুর্দান্ত aw
মর্নেডেল

4
আপনি যদি গর্তে বল না পান তবে আপনি কত স্ট্রোক নেন তা বিবেচ্য নয়। লোকেরা ভুলে গেছে বলে মনে হয় যে তারা যখন ভুল সমাধানগুলি সমর্থন করে।
মার্ক পিটারস

21

পাইথন 2.x, 144 150 154 166 চর

এটি সংখ্যাটিকে দশকে এবং আলাদা করে আলাদা করে যোগ করে। সিউডো-তিন অপারেটর এর অবাঞ্ছিত সম্পত্তি a and b or cযে cযদি ফিরিয়ে দেওয়া হয় b0 এখানে নির্যাতিত হচ্ছে।

n=input()
x=0x4d2d0f47815890bd2
while n-4:p=n<20and x/10**n%10or 44378/4**(n/10-2)%4+x/10**(n%10)%10+4;print n,"is %d."%p;n=p
print"4 is magic."

পূর্ববর্তী নিষ্পাপ সংস্করণ (150 অক্ষর)। পূর্ণসংখ্যা হিসাবে কেবল সমস্ত দৈর্ঘ্য এনকোড করুন।

n=input()
while n-4:p=3+int('1yrof7i9b1lsi207bozyzg2m7sclycst0zsczde5oks6zt8pedmnup5omwfx56b29',36)/10**n%10;print n,"is %d."%p;n=p
print"4 is magic."

দুঃখিত, আমি বিশেষত পুরোপুরি স্টপগুলি কেবল এই জাতীয় জিনিসের কারণেই চেয়েছিলাম। :-) যদিও ভালো প্রবেশ! (সম্পাদনা: আমি পাইথনকে চিনি না, তবে আপনি n,"is",p,"."কি পারতেন ? আমি মনে করি আপনি এখনও কিছু চরিত্রকে সংরক্ষণ করতে পারেন যদি আমি সঠিক গণনা করছি)
প্ল্যাটিনাম

4
@ প্লাট: এর ফলে একটি অতিরিক্ত স্থান তৈরি হবে .
কেনেটিএম

@ কেনিটিএম: ওহ, দুহ, আমার এটাও লক্ষ্য করা উচিত ছিল এমনকি স্নিপেট থেকেও। উফফফফ! ঠিক আছে, যাইহোক, আমি যেমন বলেছি কিছু স্পেসিফিকেশন বিশেষত কিছুটা জটিল করার জন্য তৈরি করা হয়েছিল। :-)
প্ল্যাটিনাম আজুর

আমরা কি 36 এর চেয়ে বেশি বেস ব্যবহার করে এটি সংক্ষিপ্ত করতে পারি?
মাইকড

@ মাইকডি: না পাইথন ডক্স থেকে: " বেস প্যারামিটার রূপান্তরটির জন্য বেস দেয় (যা ডিফল্টরূপে 10 হয়) এবং [2, 36] বা শূন্যের মধ্যে কোনও পূর্ণসংখ্যার হতে পারে" " এখন আপনি পারে ছাড়া অন্য একটি ফাংশন ব্যবহার করতে সক্ষম হতে int()আউট কিছু বলতে structবা base64মডিউল ...
মাইক DeSimone

20

সি - সংখ্যা শব্দ সহ

445 431 427 421 399 386 371 359 * 356 354 348 347 টি অক্ষর

এটাই. আমি মনে করি না যে আমি এটিকে আরও ছোট করতে পারি।

সমস্ত নতুনলাইনগুলি পঠনযোগ্যতার জন্য এবং এটি সরানো যেতে পারে:

নীচে, এটি কিছুটা অবিস্মরণীয়, তবে এখনও পড়া খুব শক্ত। আরও পাঠযোগ্য সংস্করণের জন্য নীচে দেখুন।

সম্প্রসারিত এবং মন্তব্য করা হয়েছে:

শুরুর কাছাকাছি থাকা এনকোডযুক্ত স্ট্রিং সম্পর্কে

সংখ্যাগুলির নামগুলি একটি খুব সাধারণ স্কিম ব্যবহার করে সংক্ষিপ্ত করা হয়। প্রায়শই ব্যবহৃত সাবস্ট্রিংগুলি নামের অ্যারেতে এক-অক্ষর সূচকগুলি প্রতিস্থাপন করা হয়। প্রথম সেটটিতে তাদের সম্পূর্ণরূপে ব্যবহৃত হয় না এমন সাবস্ট্রিংয়ের জন্য অতিরিক্ত নামের এন্ট্রিগুলির একটি "লুকিং টেবিল" শেষ পর্যন্ত যুক্ত করা হয়। চেহারাগুলি পুনরাবৃত্ত হয়: এন্ট্রিগুলি অন্যান্য এন্ট্রিগুলিকে উল্লেখ করতে পারে।

উদাহরণস্বরূপ, 11 এর জন্য সংকুচিত নামটি elMprint()ফাংশন অক্ষর আউটপুট eএবং l(নিম্ন-কেস 'এল', না সংখ্যা '1') ধারণকৃত, কিন্তু তারপর এটা খুঁজে বের করে Mতাই এটি নিজেই 29th এন্ট্রি (হওয়া ASCII 'এম' - হওয়া ASCII '0') এর সূচক সঙ্গে কল দেখার টেবিলের মধ্যে। এই স্ট্রিংটি হ'ল evLতাই এটি আউটপুট হয় eএবং vতারপরে লুক টেবিলের 28 তম এন্ট্রিটির সূচী দিয়ে নিজেকে আবার কল করে, যা হয় enএবং আউটপুট ভারব্যাটিম। কারণ এই দরকারী enএছাড়াও ব্যবহার করা হয় eLজন্য een(পরে ব্যবহার eightমধ্যে eighteen), যা ব্যবহার করা হয় tOজন্য teen(প্রতি অপরের জন্য ব্যবহৃত -teenনাম)।

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

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

অপব্যবহার সম্পর্কে main()

argvঅগ্রাহ্য করা হয় (এবং তাই সংক্ষেপিত সংস্করণে ঘোষিত হয় না), আরগিসির মান অগ্রাহ্য করা হয় তবে বর্তমান নম্বরটি ধারণ করতে স্টোরেজটি পুনরায় ব্যবহার করা হয়। এটি কেবল আমাকে অতিরিক্ত ভেরিয়েবল ঘোষণার হাত থেকে বাঁচায়।

অভাব সম্পর্কে #include

কিছু অভিযোগ করবে যে বাদ দেওয়া #include <stdio.h>প্রতারণা করছে। এটা মোটেও হয় না। প্রদত্ত একটি সম্পূর্ণ আইনী সি প্রোগ্রাম যা আমার পরিচিত যে কোনও সি সংকলক (সতর্কতা থাকা সত্ত্বেও) সঠিকভাবে সংকলন করবে। Stdio ফাংশনগুলির জন্য প্রোটাইপগুলির অভাব, সংকলকটি ধরে নিবে যে তারা সিডেস্কেল ফাংশনগুলি ফিরে আসবে int, এবং বিশ্বাস করবে যে আপনি কী আর্গুমেন্ট পাস করবেন তা আপনি জানেন। রিটার্ন মানগুলি যে কোনও উপায়ে এই প্রোগ্রামটিতে উপেক্ষা করা হবে এবং সেগুলি সমস্ত সিডিসিএল ("সি" কলিং কনভেনশন) ফাংশন, এবং আমরা আসলে কী আর্গুমেন্টগুলি পাস করতে হবে তা আমরা জানি।

আউটপুট

আউটপুট প্রত্যাশিত হিসাবে:

0
শূন্য চারটি।
চারটি যাদু।
ঘ
একটি তিন।
তিনটি পাঁচ।
পাঁচটি চারটি।
চারটি যাদু।
ঘ
চারটি যাদু।
20
বিশটি ছয়টি।
ছয়টি তিন।
তিনটি পাঁচ।
পাঁচটি চারটি।
চারটি যাদু।
21
একুশটি নয় জন।
নয়টি চার।
চারটি যাদু।

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

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


উত্তরটি এই শব্দটির খুব সহজেই আমার প্রিয় ... ব্রাভো, ভালই হয়েছে done আপনার জন্য +1, এবং আমি যদি দুটি চেকমার্ক দিতে পারি তবে আমি করব।
প্ল্যাটিনাম আজুর

4
এটি পড়তে মজাদার, আমি মনে করি প্রতিদিনের জীবনে এই সংখ্যাগুলি ব্যবহার করব। ছয়, সেম, আট, নয়, টেলিফোন, এলেম, বারো, এন্পি, ফোরপি, ফিফপি, ছয়টি, সপ্তপি, আটো, ন্নিপি, টোয়েলকিউ ... =)
ছদ্মবেশ

10

জে, 107 112 টি অক্ষর

'4 is magic.',~}:('.',~":@{.,' is ',":@{:)"1]2&{.\.
(]{&(#.100 4$,#:3 u:ucp'䌵䐵吶梇禈榛ꪛ멩鮪鮺墊馊꥘誙誩墊馊ꥺ겻곋榛ꪛ멩鮪鮺'))^:a:

(কেবল পঠনযোগ্যতার জন্য নিউলাইন)

ব্যবহার এবং আউটপুট:

    '4 is magic.',~}:('.',~":@{.,' is ',":@{:)"1]2&{.\.(]{&(#.100 4$,#:3 u:ucp'䌵䐵吶梇禈榛ꪛ멩鮪鮺墊馊꥘誙誩墊馊ꥺ겻곋榛ꪛ멩鮪鮺'))^:a:12
12 is 6.    
6 is 3.     
3 is 5.     
5 is 4.     
4 is magic. 

"4 ম্যাজিক" বিট কোথায়? মাঝখানে "কি" সম্পর্কে কি?
জোশ কে

4
অনুগ্রহ করে একটি
চীনবিহীন

4
@ বিলি: 멩, 겻, 곋, Korean কোরিয়ান।
কেনেটিএম

4
আমার স্ত্রী (একটি স্থানীয় চীনা স্পিকার) বলেছেন এটি চীনা এবং কোরিয়ানদের মিশ্রণ।
লরেন পেচটেল

4
@ বিলেসারিয়াস: ১) তিনি কোরিয়ান ভাষা জানেন না। 2) চীনারা জিব্রিশ is
লরেন পেচটেল

10

টি এসকিউএল, 413 451 499 অক্ষর

CREATE FUNCTION d(@N int) RETURNS int AS BEGIN
Declare @l char(50), @s char(50)
Select @l='0066555766',@s='03354435543668877987'
if @N<20 return 0+substring(@s,@N+1,1) return 0+substring(@l,(@N/10)+1,1) + 0+(substring(@s,@N%10+1,1))END
GO
CREATE proc M(@x int) as BEGIN
WITH r(p,n)AS(SELECT p=@x,n=dbo.d(@x) UNION ALL SELECT p=n,n=dbo.d(n) FROM r where n<>4)Select p,'is',n,'.' from r print '4 is magic.'END

(এমনটি নয় যে আমি গুরুত্ব সহকারে পরামর্শ দিচ্ছি আপনি এটি করতেন ... সত্যই আমি কেবল একটি সিটিই লিখতে চেয়েছিলাম)

ব্যবহার করা:

M 95

ফিরে আসে

p                n
----------- ---- -----------
95          is   10.
10          is   3.
3           is   5.
5           is   4.
4 is magic.

আপনি কি কেবল কোনও টেবিলে ফেরার পরিবর্তে পৃথক ফলাফলগুলি মুদ্রণ করতে পারবেন না? এটি আউটপুটটিকে আরও সুন্দর দেখায়।
জো

4
আমি মনে করি না এটি সঠিকভাবে শূন্যটি পরিচালনা করে। কিভাবে ভালো কিছু সম্পর্কে:CREATE FUNCTION d(@ int) RETURNS int AS BEGIN Declare @l char(9),@s char(50) Select @l='066555766',@s='03354435543668877987' if @=0 return 4 if @<20 return 0+substring(@s,@+1,1)return 0+substring(@l,@/10,1)+substring(@s,@%10+1,1)END
গেব

9

জাভা (বয়লারপ্লেট সহ), 308 290 286 282 280 টি অক্ষর

class A{public static void main(String[]a){int i=4,j=0;for(;;)System.out.printf("%d is %s.%n",i=i==4?new java.util.Scanner(System.in).nextInt():j,i!=4?j="43354435543668877988699;::9;;:699;::9;;:588:998::9588:998::9588:998::97::<;;:<<;699;::9;;:699;::9;;:".charAt(i)-48:"magic");}}

আমি নিশ্চিত গ্রোভি এর অনেক কিছুই থেকে মুক্তি পাবে।

ব্যাখ্যা এবং ফর্ম্যাটিং (সমস্ত মন্তব্য, নিউলাইন এবং শীর্ষস্থানীয় / পিছনে সাদা অংশে গণনা অপসারণ):

যুক্তিসঙ্গত সোজা এগিয়ে, কিন্তু

//boilerplate
class A{
   public static void main(String[]a){
      //i is current/left number, j right/next number.  i=4 signals to start
      //by reading input
      int i=4,j=0;
      for(;;)
         //print in the form "<left> is <right>."
         System.out.printf(
            "%d is %s.%n",
            i=i==4?
               //<left>: if i is 4 <left> will be a new starting number
               new java.util.Scanner(System.in).nextInt():
               //otherwise it's the next val
               j,
            i!=4?
               //use string to map number to its length (:;< come after 9 in ASCII)
               //48 is value of '0'.  store in j for next iteration
               j="43354435543668877988699;::9;;:699;::9;;:588:998::9588:998::9588:998::97::<;;:<<;699;::9;;:699;::9;;:".charAt(i)-48:
               //i==4 is special case for right; print "magic"
               "magic");
   }
}

সম্পাদনা: আর হেক্স ব্যবহার করবেন না, এটি কম কীস্ট্রোক


4
249 আমদানি, ক্লাস ডিএফ বা প্রধান ডিএফ ছাড়াই।
মার্ক পিটার্স

4
এটাই পৈশাচিক। আমি বেস পছন্দ 16. (+ 1)
প্ল্যাটিনাম নভোনীল

String[]aপরিবর্তে ব্যবহার করে আপনি একটি স্থান বাঁচাতে পারেন String[] a
বালুসসি

ধন্যবাদ @ বালাস, হেক্স পার্সিং ব্যবহার না করে চরিত্রের উপর সরল পাটিগণিত করে একগুচ্ছকেও মুছে ফেলেছিলেন।
মার্ক পিটারস

@ মার্ক পিটারস: এমনকি নাস্টিয়ার। আমি তুলনায় ভ্যানিলা মনে হয়।
প্ল্যাটিনাম আজুর

9

উইন্ডোজ পাওয়ারশেল: 152 153 184 বাইট

পূর্ববর্তী সমাধানের উপর ভিত্তি করে, অন্যান্য সমাধানগুলি থেকে আরও প্রভাব নিয়ে

$o="03354435543668877988"
for($input|sv b;($a=$b)-4){if(!($b=$o[$a])){$b=$o[$a%10]-48+"66555766"[($a-$a%10)/10-2]}$b-=48-4*!$a
"$a is $b."}'4 is magic.'

10 এর গুণক ("নব্বইয়ের পরিবর্তে" নব্বইয়েরো ") সমর্থন করার জন্য স্থির।
গাবে

আরে @ গ্যাবে :), ধন্যবাদ; ইদানীং গল্ফ করার জন্য খুব বেশি সময় হয়নি। তবুও, চারপাশের উদ্ধৃতিগুলি $inputযেহেতু আপনি সরাসরি কোনও গণককে ফেলে দিতে পারবেন না int; stringপ্রথম :-) এর মধ্য দিয়ে যাওয়ার সময় এটি কাজ করে
জো

8

সি, 158 টি অক্ষর

main(n,c){char*d="03354435543668877988";for(scanf("%d",&n);n-4;n=c)printf("%d is %d.\n",n,c=n?n<19?d[n]-48:d[n%10]-"_,**+++)**"[n/10]:4);puts("4 is magic.");}

(মূলত ভ্ল্যাডের পাইথন কোডের উপর ভিত্তি করে, টম সিরগেদাসের সি ++ সমাধান থেকে আরও কয়েকটি অক্ষর বের করার জন্য একটি কৌশল নেওয়া হয়েছিল)

প্রসারিত সংস্করণ:

main(n, c) {
    char *d = "03354435543668877988";
    for (scanf("%d",&n); n-4; n = c)
        printf("%d is %d.\n", n, c = n ? n<19 ? d[n]-48 : d[n%10] - "_,**+++)**"[n/10]  : 4);
    puts("4 is magic.");
}

আমার পক্ষে কাজ করছে বলে মনে হচ্ছে না:। / ম্যাজিক 10 10 -27 হয়। বিভাগ বিভাজন
কেসি

@ ক্যাসি - স্ক্যানফ () কলটি কিছুটা স্কেচি ছিল। এটি একটি চরের মধ্যে একটি int পড়া ছিল। আমি এটি ওএসএক্স এবং উইন্ডোতে এটি নিয়ে কাজ করে চলেছিলাম তবে প্রস্থান করার সময় ক্রাশ হয়েছিল। সুতরাং, আমি আবার এন & সি ইনট তৈরি করেছি। আমি বুঝতে পেরেছিলাম কে ওআরআর স্বরলিপি ব্যবহার করে আমি কী কীওয়ার্ডটিকে পরামিতি তৈরি করে ফেলতে পারি। ফলাফলটি নিরাপদ এবং একটি চরিত্র ছোট।
ফেরুক্সিও

আপনি " 466555766" [n / 10] + d [n% 10] -96 এর সাথে [n% 10] - " , +++) " [n / 10]
টম সিরগেদাস

6

পাইথন, 129 133 137 148 চর

ওয়ার্ম আপ হিসাবে, এটি আমার প্রথম সংস্করণ (পূর্ববর্তী সেরা পাইথনের চেয়ে কয়েকটি চর উন্নত)।

পুনশ্চ. কয়েকটি রেডাক্টেশন পরে এখন এটি প্রায় বিশটি সংক্ষিপ্ত:

n=input()
while n-4:p=(922148248>>n/10*3&7)+(632179416>>n%10*3&7)+(737280>>n&1)+4*(n<1);print n,'is %d.'%p;n=p
print'4 is magic.'

6

সি #: 210 টি অক্ষর।

স্কোয়াড:

using C=System.Console;class B{static void Main(){int
x=0,y=int.Parse(C.ReadLine());while(x!=4)C.Write((x=y)+" is {0}.\n",x==4?"magic":""+(y=x==0?4:"03354435543668877988"[x<20?x:x%10]+"0066555766"[x/10]-96));}}

প্রসারিত:

using C=System.Console;
class B
{
    static void Main()
    {
        int x=0,y=int.Parse(C.ReadLine());
        while(x!=4)
            C.Write((x=y)+" is {0}.\n",
                x==4?
                     "magic":
                     ""+(y= x==0?
                                4:
                                "03354435543668877988"[x<20?x:x%10]+
                                "0066555766"[x/10]-96)
                   );
    }
}

এই পদ্ধতির ব্যবহার কৌশলগুলি:

  • সংখ্যায় প্রদর্শিত সংখ্যাগুলির উপর ভিত্তি করে নাম নামের দৈর্ঘ্যের জন্য একটি সারণী তৈরি করুন।
  • একটি স্ট্রিং-এ অক্ষর অ্যারে লুক্কুট এবং একটি সংখ্যার অ্যারের পরিবর্তে চর গাণিতিক ব্যবহার করুন।
  • সংক্ষিপ্ত ব্যবহার করুন বর্গ নাম এলিয়াসিং Console.করতেC.
  • ?:পরিবর্তে কন্ডিশনাল (টেরিনারি) অপারেটর ( ) ব্যবহার করুন if/else
  • ব্যবহার করুন \nসঙ্গে Writeপরিবর্তে পালাবার কোডWriteLine
  • সি এর # টির মধ্যে অ্যাসাইনমেন্টগুলি অনুমোদনের জন্য মূল্যায়নের একটি সংজ্ঞায়িত আদেশ রয়েছে তা ব্যবহার করুন Writeফাংশন কলের ব্যবহার করুন
  • অতিরিক্ত বিবৃতি এবং এভাবে অতিরিক্ত ব্রেসেসগুলি মুছে ফেলতে অ্যাসাইনমেন্ট এক্সপ্রেশনগুলি ব্যবহার করুন

int[] zএটি ছোট হওয়ার কারণ এটির দরকার নেইnew[]
জোয়

অ্যারে দেখার পরিবর্তে অক্ষর পাটিগণিত ব্যবহার করতে সংশোধিত।
এল বুশকিন

@ এমডিএম20: আপনি ঠিক বলেছেন। আমার দেখার টেবিলে ভুল ছিল। এখনই স্থির।
এল বুশকিন

ঠিক আছে, দ্বাদশ বার
মনোহর

একজন quicky 5 অক্ষরের সংরক্ষণ করতে: ভোটদান চেয়ে খাটো "magic"করার object, হবে পরোক্ষভাবে কল ToString()উপর yযুক্ত করে ""। কিন্তু, কারণ +বেশী প্রাধান্য রয়েছে ?:, আপনি এটা করা আছে সত্য পরিবর্তে অংশ মিথ্যা অংশ: x!=4?y+"":"magic"
পি ড্যাডি

6

পার্ল: 148 টি অক্ষর

(পার্ল: 233 181 212 206 200 199 198 198 185 179 149 148 টি অক্ষর)

  • ব্যতিক্রমী হ্যাশ ইউনিট অ্যারেতে সরানো হয়েছে। এর ফলে আমার প্রচুর অক্ষর কাটতে সক্ষম হয়েছিল :-)
  • মব্রুল একটি বাজে বাগটি নির্দেশ করেছে। দ্রুত সমাধানে 31 টি অক্ষর যুক্ত হয়েছে
  • শূন্য বিশেষ ক্ষেত্রে রিফ্যাক্টর, হালকা গল্ফিংও হয়েছে।
  • অ্যারেতে সঞ্চয় করার পরিবর্তে একক ব্যবহারের জন্য সরাসরি তালিকার অ্যাক্সেস? হ্যাঁ জাহান্নাম!
  • রক্তাক্ত চরিত্রের জন্য কেবলমাত্র অনেক প্রতিক্রিয়াশীল। এটি সত্যই গল্ফারের জীবন। :-(
  • ওফস, সহজ সাদা জায়গা ঠিক করা। 198 এখন।
  • কিছু অপ্রয়োজনীয় কোড রিফ্যাক্টর
  • সর্বশেষ রিটার্ন কীওয়ার্ডটি rঅপ্রয়োজনীয়, শেভড কিছু আরও।
  • মন্তব্য প্রতি বিশাল রিফ্যাক্টরিং; দুর্ভাগ্যক্রমে আমি কেবল এটি 149 এ পেতে পারি কারণ আমাকে আমার পূর্ববর্তী কোড এবং মন্তব্যকারীদের সংস্করণ উভয়তে উপস্থিত একটি বাগ ঠিক করতে হয়েছিল।
  • খালি শব্দ "যাদু" চেষ্টা করছেন।

আসুন পার্লের একটি শালীন প্রচেষ্টা নিয়ে এই বলটি ঘূর্ণায়মান হয়ে উঠুন।

@u=split'','4335443554366887798866555766';$_=<>;chop;print"$_ is ".($_=$_==4?0:$_<20?$u[$_]:($u[$_/10+18]+($_%10&&$u[$_%10]))or magic).".
"while$_

কৌশল:

অনেক বেশী!


এসি! আমি কখনই পরীক্ষা করেছিলাম যে আমি কখনই জানতে পারি না।
প্লাটিনাম আজুর

আপনার কি কিছু ডেড কোড আছে? আমি যখন দেখছি না যে শূন্যের জন্য বিশেষ কেসটি কীভাবে প্রয়োজনীয় তখন 0 u [0] ৪. আমার কাছে আপনার কোড @ 166 অক্ষরের একটি আপাতদৃষ্টিতে-কার্যকরী সংস্করণ রয়েছে এবং আমি মনে করি যে এর থেকে কিছুটা ছোট হওয়ার জন্য জায়গা আছে।
hobbs

@ হোবস: ভাল কথা, আমি আবারও দেখব। গল্পটি হ'ল আমি বেশ কয়েকটি সংশোধনীর মধ্য দিয়ে অর্ধেক পেরিয়েছি এবং হঠাৎ জিনিসগুলি ভেঙে পড়েছে (যেখানে আমি 4 -> 0 এ পছন্দ করেছি সেই স্থানে)। আমি মনে করি আপনি ঠিক এই মুহুর্তে রয়েছেন, যদিও :-)
প্ল্যাটিনাম অ্যাজুরে

আমি নিজেকে একটি দুর্দান্ত পার্ল প্রোগ্রামার হিসাবে বিবেচনা করি না, তবে আপনি কয়েকটি অক্ষর হ্রাস করতে পারেন: @u=split$x,'43350435543668877988';আপনার কমাগুলি undefপ্রতিটি চরিত্রের বিভাজনে বিভক্ত হয়ে অপ্রয়োজনীয় 19 টি অক্ষর ব্যবহার করে, আমি $x`undef` এর স্থান গ্রহণের জন্য একটি অপরিজ্ঞাত পরিবর্তনশীল হিসাবে ব্যবহার করি - মোট সঞ্চয়: 11 টি অক্ষর। এছাড়াও, অপসারণ mমধ্যে chompএবং আপনি অন্য চরিত্র আপনার স্কোর বন্ধ চাঁচা পেতে।
ভোলআরন

আরও ভাল করা, তবে আপনি sub rপুরোপুরি হারাতে পেরে আরও কিছু সঞ্চয় করতে পারেন - আপনি কেবল একবার এটি ব্যবহার করেন এবং আপনি এগুলি সমস্ত প্যারেন্স ছাড়াই একক নেস্টেড টেরিনারি দ্বারা প্রতিস্থাপন করতে পারেন । আমার সংস্করণ এখন 144 টি চর: gist.github.com/473289
hobbs

5

জাভাস্ক্রিপ্ট 1.8 (স্পাইডারমোনকি) - 153 অক্ষর

l='4335443554366887798866555766'.split('')
for(b=readline();(a=+b)-4;print(a,'is '+b+'.'))b=a<20?l[a]:+l[18+a/10|0]+(a%10&&+l[a%10])
print('4 is magic.')

ব্যবহার: echo 42 | js golf.js

আউটপুট:

42 is 8.
8 is 5.
5 is 4.
4 is magic.

বোনাস সহ - 364 অক্ষর

l='zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen twenty thirty fourty fifty sixty seventy eighty ninety'.split(' ')
z=function(a)a<20?l[a]:l[18+a/10|0]+(a%10?' '+l[a%10]:'')
for(b=+readline();(a=b)-4;print(z(a),'is '+z(b)+'.'))b=z(a).replace(' ','').length
print('four is magic.')

আউটপুট:

নব্বইটি দশ।
দশটি তিনটি।
তিনটি পাঁচ।
পাঁচটি চারটি।
চারটি যাদু।

4

হাস্কেল, 224 270 টি অক্ষর

o="43354435543668877988"
x!i=read[x!!i]
n x|x<20=o!x|0<1="0066555766"!div x 10+o!mod x 10
f x=zipWith(\a b->a++" is "++b++".")l(tail l)where l=map show(takeWhile(/=4)$iterate n x)++["4","magic"]
main=readLn>>=mapM putStrLn.f

এবং আরও কিছু পাঠযোগ্য -

ones = [4,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8]
tens = [0,0,6,6,5,5,5,7,6,6]

n x = if x < 20 then ones !! x else (tens !! div x 10) + (ones !! mod x 10)

f x = zipWith (\a b -> a ++ " is " ++ b ++ ".") l (tail l)
    where l = map show (takeWhile (/=4) (iterate n x)) ++ ["4", "magic"]
    
main = readLn >>= mapM putStrLn . f

4

সি ++ স্টিডিও সংস্করণ, সংক্ষিপ্ত: 196 টি অক্ষর

#include <cstdio>
#define P;printf(
char*o="43354435543668877988";main(int p){scanf("%d",&p)P"%d",p);while(p!=4){p=p<20?o[p]-48:"0366555966"[p/10]-96+o[p%10]P" is %d.\n%d",p,p);}P" is magic.\n");}

সি ++ আইস্ট্রিমেজ সংস্করণ, মিনিফাইন্ড করা হয়েছে: 195 টি অক্ষর

#include <iostream>
#define O;std::cout<<
char*o="43354435543668877988";main(int p){std::cin>>p;O p;while(p!=4){p=p<20?o[p]-48:"0366555966"[p/10]-96+o[p%10]O" is "<<p<<".\n"<<p;}O" is magic.\n";}

আসল, আন-মিনিফিড: 344 টি অক্ষর

#include <cstdio>

int ones[] = { 4, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8 };
int tens[] = { 0, 3, 6, 6, 5, 5, 5, 9, 6, 6 };

int n(int n) {
    return n<20 ? ones[n] : tens[n/10] + ones[n%10];
}

int main(int p) {
    scanf("%d", &p);
    while(p!=4) {
        int q = n(p);
        printf("%i is %i\n", p, q);
        p = q;
    }
    printf("%i is magic\n", p);
}

স্থির। এটি এটিকেও আরও খাটো করে তুলেছে।
মাইক ডিসিমোন

সুন্দরভাবে সম্পন্ন. (আমি ২০-চরিত্রের স্ট্যান্ড কনড্রামে অনেক হেসেছি!)
প্ল্যাটিনাম অ্যাজুরে

হ্যাঁ, এটি ছিল সত্যিকারের হেডবাজার, যতক্ষণ না এটি আমার উপরে আগত তখন এটি #defineআরও খাটো হবে যেহেতু এটি বেশ কয়েকটি টোকেন প্রতিস্থাপন করতে পারে।
মাইক ডিসিমোন

printf("is magic".\n)=> putsprintf("%d",p)=> puts(atoi(p))। শুধুমাত্র খাটো নয়, দ্রুতও।
বেন ভয়েগট

4
@ মাইক ডিসিমোন: আমি মনে করি while(p!=4)এটি সংক্ষিপ্ত করা যেতে পারে while(p-4)। একটি পুরো চরিত্র, আমি জানি, কিন্তু এখনও। :-)
প্ল্যাটিনাম আজুর

3

ডেলফি: 329 টি অক্ষর

একক লাইন সংস্করণ:

program P;{$APPTYPE CONSOLE}uses SysUtils;const S=65;A='EDDFEEDFFEDGGIIHHJII';B='DGGFFFJGG';function Z(X:Byte):Byte;begin if X<20 then Z:=Ord(A[X+1])-S else Z:=(Ord(B[X DIV 10])-S)+Z(X MOD 10)end;var X,Y:Byte;begin Write('> ');ReadLn(X);repeat Y:=Z(X);WriteLn(Format('%d is %d.',[X,Y]));X:=Y;until X=4;WriteLn('4 is magic.');end.

গঠন করা:

program P;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  S = 65;
  A = 'EDDFEEDFFEDGGIIHHJII';
  B = 'DGGFFFJGG';

function Z(X:Byte):Byte;
begin
  if X<20
  then Z := Ord(A[X+1])-S
  else Z := (Ord(B[X DIV 10])-S) + Z(X MOD 10);
end;

var
  X,Y: Byte;

begin
  Write('> ');
  ReadLn(X);

  repeat
    Y:=Z(X);
    WriteLn(Format('%d is %d.' , [X,Y]));
    X:=Y;
  until X=4;

  WriteLn('4 is magic.');
end.

সম্ভবত আরও কিছু পিচ্ছিল করার জন্য জায়গা ... :- পি


3

সি # 314 286 283 274 289 273 252 অক্ষর।

স্কোয়াড:

252 

সাধারণ:

using C = System.Console;
class P
{
    static void Main()
    {
        var x = "4335443554366877798866555766";
        int m, o, v = int.Parse(C.ReadLine());
        do {
            C.Write("{0} is {1}.\n", o = v, v == 4 ? (object)"magic" : v = v < 20 ? x[v] - 48 : x[17 + v / 10] - 96 + ((m = v % 10) > 0 ? x[m] : 48));
        } while (o != 4);
        C.ReadLine();
    }
}

ডাইক্যাম সম্পাদনা করুন: বেশ কিছু যত্নশীল serোকানো এবং পরিবর্তন করেছেন:

  • L.ToString () কে এর একটি কাস্টে পরিবর্তন objectকরেছে string "magic"
  • একটি অস্থায়ী পরিবর্তনশীল তৈরি করেছে o, তাই আমি লুপের breakবাইরে সরাতে পারি for, এর ফলে a do-while
  • oঅ্যাসাইনমেন্টটি ইনলাইনড, পাশাপাশি অ্যাসাইনমেন্ট, প্রয়োজনীয়তা সরিয়ে ফাংশন আর্গুমেন্টগুলির vগণনা সম্পূর্ণরূপে সন্নিবেশ করা অবিরত । এছাড়াও অ্যাসাইনমেন্ট অন্তর্ভুক্ত ।llm
  • এর মধ্যে একটি স্থান সরিয়ে নেওয়া হয়েছে int[] x, int[]xবৈধ।
  • অ্যারেটিকে স্ট্রিং রূপান্তর করার চেষ্টা করল, তবে using System.Linqএটির উন্নতি করতে খুব বেশি ছিল।

2 ডায়কাম সম্পাদনা করুন আন্ত অ্যারেটিকে একটি চর অ্যারে / স্ট্রিংয়ে পরিবর্তন করেছে, এটি সংশোধন করার জন্য উপযুক্ত পাটিগণিত যুক্ত করেছেন।


হ্যাঁ, এটি জাভা সংস্করণের চেয়ে কম পেয়েছে।
ডাইকাম

3

লুয়া, 176 অক্ষর

o={[0]=4,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8}t={3,6,6,5,5,5,7,6,6}n=0+io.read()while n~=4 do a=o[n]or o[n%10]+t[(n-n%10)/10]print(n.." is "..a..".")n=a end print"4 is magic."

বা

  o={[0]=4,3,3,5,4,4
  ,3,5,5,4,3,6,6,8,8
  ,7,7,9,8,8}t={3,6,
   6,5,5,5,7,6,6}n=
   0+io.read()while
   n ~= 4 do a= o[n
   ]or o[n%10]+t[(n
   -n%10)/10]print(
n.." is "..a.."." )n=a
end print"4 is magic."

3

সি - সংখ্যা শব্দ ছাড়া

180 175 * 172 167 টি অক্ষর

সমস্ত নতুনলাইনগুলি পঠনযোগ্যতার জন্য এবং এটি সরানো যেতে পারে:

কিছুটা অচিহ্নিত:

* পূর্ববর্তী সংস্করণটি অনুমানের দুটি অংশের চিহ্নটি হারিয়েছে: এটি শূন্যটি পরিচালনা করে না, এবং এটি স্টিডিনের পরিবর্তে কমান্ড লাইনে ইনপুট নিয়েছিল। শূন্য যোগ করা অক্ষরগুলি পরিচালনা করা, তবে কমান্ড লাইন আরোগুলির পরিবর্তে স্টিডিন ব্যবহার করা আরও বেশি সাশ্রয় করেছে, যার ফলে নেট সঞ্চয় হয় ings


2

পার্ল, 123 122 টি অক্ষর

কেবল উপলব্ধি হয়ে গেছে যে STDOUT এ আউটপুট দেওয়ার কোনও প্রয়োজন নেই, সুতরাং পরিবর্তে STDERR এ আউটপুট দিন এবং অন্য একটি চরিত্রটি ছিটকে দিন।

@u='0335443554366887798866555766'=~/./g;$_+=<>;warn"$_ is ",$_=$_-4?$_<20?$u[$_]||4:$u[chop]+$u[$_+18]:magic,".\n"until/g/

এবং, এমন একটি সংস্করণ যা সংখ্যার বানান দেয়:

279 278 276 280 টি অক্ষর

@p=(Thir,Four,Fif,Six,Seven,Eigh,Nine);@n=("",One,Two,Three,Four,Five,@p[3..6],Ten,Eleven,Twelve,map$_.teen,@p);s/u//for@m=map$_.ty,Twen,@p;$n[8].=t;sub n{$n=shift;$n?$n<20?$n[$n]:"$m[$n/10-2] $n[$n%10]":Zero}$p+=<>;warnt$m=n($p)," is ",$_=$p-4?n$p=()=$m=~/\w/g:magic,".\n"until/c/

যদিও সেই বৈশিষ্টটি পূরণ করে, এটি 100% ভাল ফর্ম্যাট নয় ted এটি শূন্যের শেষে সংখ্যার পরে একটি অতিরিক্ত স্থান দেয়। অনুমানটি বলে:

"টোকেন শব্দটি কীভাবে পৃথক করা উচিত তা আমি কীভাবে লক্ষ্য করি না"

যদিও এটি ধরণের ওয়েলসিল্লি। একটি আরও সঠিক সংস্করণ

282 281 279 283 টি অক্ষর

@p=(Thir,Four,Fif,Six,Seven,Eigh,Nine);@n=("\x8",One,Two,Three,Four,Five,@p[3..6],Ten,Eleven,Twelve,map$_.teen,@p);s/u//for@m=map$_.ty,Twen,@p;$n[8].=t;sub n{$n=shift;$n?$n<20?$n[$n]:"$m[$n/10-2]-$n[$n%10]":Zero}$p+=<>;warn$m=n($p)," is ",$_=$p-4?n$p=()=$m=~/\w/g:magic,".\n"until/c/

1

পাইথন:

#!/usr/bin/env python

# Number of letters in each part, we don't count spaces
Decades = ( 0, 3, 6, 6, 6, 5, 5, 7, 6, 6, 0 )
Smalls  = ( 0, 3, 3, 5, 4, 4, 3, 5, 5, 4 )
Teens  =  ( 6, 6, 8, 8, 7, 7, 9, 8, 8 )

def Count(n):
    if n > 10 and n < 20: return Teens[n-11]
    return   Smalls[n % 10 ] + Decades [ n / 10 ]

N = input()

while N-4:
    Cnt = Count(N)
    print "%d is %d" % ( N, Cnt)
    N = Cnt

print "4 is magic"

4
আমি এটা পছন্দ করি. আপনি সম্ভবত এটি কিছুটা শক্ত করতে পারেন।
জোশ কে

@ ভ্লাদ: যুক্তিগুলির পরিবর্তে ইনপুটটি স্টাডিন থেকে পড়তে হবে। এর অর্থ আপনি কেবল N = input()(বা raw_input()) ব্যবহার করতে পারেন এবং sysজিনিসগুলি সরিয়ে ফেলতে পারেন।
কেনেটিএম

এছাড়াও আপনি ছোটদের কিশোরদের অন্তর্ভুক্ত করতে পারেন, তবে যদি এই বিবৃতিটি কেবল "যদি এন <20: ছোট ছোট [n]" থাকে তবে তা হবে। ছোটরা এখনও> = ২০ টি ক্ষেত্রে কাজ করবে, 10-র মধ্যে মডিউলাসের কারণে
জোন স্মোক

4
এই প্রথম she-bangকোনও কোড-গল্ফ উত্তরে (সম্পূর্ণ
ক্রিস্টোফিড

দেখতে শুরু করার মতো মনে হচ্ছে ... অবশ্যই এটি আরও শক্ত করুন, এমনকি পাইথনেরও এই সমস্ত সাদা স্থানের প্রয়োজন নেই। :-) এছাড়াও, ফের্রুসিওও যেমন উল্লেখ করেছেন, 0 কাজ করে না, বিশেষত এটি অসীম লুপে চলে গেছে বলে মনে হচ্ছে।
প্লাটিনাম আজুর

1

সি ++, 171 টি অক্ষর (বাদ দেওয়া # অন্তর্ভুক্ত)

void main(){char x,y,*a="03354435543668877988";scanf("%d",&x);for(;x-4;x=y)y=x?x<19?a[x]-48:"_466555766"[x/10]+a[x%10]-96:4,printf("%d is %d.\n",x,y);puts("4 is magic.");}

আমি মনে করি আপনি যদি এটি সি হিসাবে বিবেচনা করেন তবে আপনি প্রয়োজনীয়তা এড়াতে পারবেন #includeকারণ কার্যগুলি কেবলমাত্র intপরামিতিগুলি গ্রহণ করা হবে বলে ধরে নেওয়া হবে । এমনকি আপনি mainরিটার্ন দিয়ে স্ট্রোকও বাঁচাতে পারেন int
গাব

1

রুবি, 164 টি অক্ষর

n=gets.to_i;s="03354435543668877987";if n==0;puts"0 is 4.";else;puts"#{n} is #{n=(n<20)?s[n]-48:"0066555766"[n/10]-48+s[n%10]-48}." until n==4;end;puts"4 is magic."

ডিকোড করা:

n = gets.to_i
s = "03354435543668877987"
if n == 0
  puts "0 is 4."
else
  puts "#{n} is #{n = (n < 20) ? s[n] - 48 : "0066555766"[n / 10] - 48 + s[n % 10] - 48}." until n == 4
end

puts "4 is magic."

সহজ রুবি সমাধান, এটি সহজ রেখে। :-) (+1)
প্ল্যাটিনাম আজুর

এটিকে সহজ রাখা অত্যধিক দীর্ঘ ধরে রাখার কোনও অজুহাত নয়, যদিও ;-)
জোয়

আমি মনে করি আপনি 'if n == 0' এর সাথে 'if' n '
ভিনসেন্ট

4
রুবিতে? আমি সর্বদা ভেবেছিলাম যে মিথ্যা এবং শূন্য ব্যতীত সমস্ত মান সত্যের কাছে মূল্যায়ন করা হয়েছে :-(
প্ল্যাটিনাম অ্যাজুরে

1

লুয়া 185 190 199

পিরিয়ড যুক্ত হয়েছে, যোগ করা হয়েছে io.read, মুদ্রণ () এর শেষ প্রিন্টে

 n=io.read();while(n~=4)do m=('43354435543668877988699;::9;;:699;::9;;:588:998::9588:998::9588:998::97::<;;:<<;699;::9;;:699;::9;;:'):sub(n+1):byte()-48;print(n,' is ',m,'.')n=m;end print'4 is magic.'

লাইন বিরতি সঙ্গে

 n=io.read()
 while (n~=4) do
    m=('43354435543668877988699;::9;;:699;::9;;:588:998::9588:998::9588:998::97::<;;:<<;699;::9;;:699;::9;;:'):sub(n+1):byte()-48;
    print(n,' is ',m,'.')
    n=m;
 end 
 print'4 is magic.'

n=io.read()স্ট্যান্ডার্ড ইনপুট থেকে নম্বর পড়ার নিয়ম মেনে চলার জন্য একটি (+11 অক্ষর) প্রয়োজন । পরিবর্তন print('4 is magic.')করা print'4 is magic.'2 টি অক্ষর সংরক্ষণ করবে। ;পরে অপসারণ করা )1 টি সাশ্রয় করবে। printকমা ব্যবহার প্রতারনা মত মনে হয়, কিন্তু বৈশিষ্ট তা স্পষ্ট নয়। print(n,'is',m,'.')2 টি অক্ষর বাঁচাতে এটিকেও পরিবর্তন করতে পারে ।
16:41

লুয়ায় কমাগুলি কি নতুন লাইনের হিসাবে রেন্ডার করা হয়? ইভটি ব্যবহার করার পরে এটি বেশ কিছুক্ষণ হয়ে গেছে।
নিক ভ্যান ব্রান্ট

কমাগুলি ট্যাব হিসাবে রেন্ডার করা হয়।
গোল্ড

0

পিএইচপি কোড

function get_num_name($num){  
    switch($num){  
        case 1:return 'one';  
    case 2:return 'two';  
    case 3:return 'three';  
    case 4:return 'four';  
    case 5:return 'five';  
    case 6:return 'six';  
    case 7:return 'seven';  
    case 8:return 'eight';  
    case 9:return 'nine';  
    }  
}  

function num_to_words($number, $real_name, $decimal_digit, $decimal_name){  
    $res = '';  
    $real = 0;  
    $decimal = 0;  

    if($number == 0)  
        return 'Zero'.(($real_name == '')?'':' '.$real_name);  
    if($number >= 0){  
        $real = floor($number);  
        $decimal = number_format($number - $real, $decimal_digit, '.', ',');  
    }else{  
        $real = ceil($number) * (-1);  
        $number = abs($number);  
        $decimal = number_format($number - $real, $decimal_digit, '.', ',');  
    }  
    $decimal = substr($decimal, strpos($decimal, '.') +1);  

    $unit_name[1] = 'thousand';  
    $unit_name[2] = 'million';  
    $unit_name[3] = 'billion';  
    $unit_name[4] = 'trillion';  

    $packet = array();    

    $number = strrev($real);  
    $packet = str_split($number,3);  

    for($i=0;$i<count($packet);$i++){  
        $tmp = strrev($packet[$i]);  
        $unit = $unit_name[$i];  
        if((int)$tmp == 0)  
            continue;  
        $tmp_res = '';  
        if(strlen($tmp) >= 2){  
            $tmp_proc = substr($tmp,-2);  
            switch($tmp_proc){  
                case '10':  
                    $tmp_res = 'ten';  
                    break;  
                case '11':  
                    $tmp_res = 'eleven';  
                    break;  
                case '12':  
                    $tmp_res = 'twelve';  
                    break;  
                case '13':  
                    $tmp_res = 'thirteen';  
                    break;  
                case '15':  
                    $tmp_res = 'fifteen';  
                    break;  
                case '20':  
                    $tmp_res = 'twenty';  
                    break;  
                case '30':  
                    $tmp_res = 'thirty';  
                    break;  
                case '40':  
                    $tmp_res = 'forty';  
                    break;  
                case '50':  
                    $tmp_res = 'fifty';  
                    break;  
                case '70':  
                    $tmp_res = 'seventy';  
                    break;  
                case '80':  
                    $tmp_res = 'eighty';  
                    break;  
                default:  
                    $tmp_begin = substr($tmp_proc,0,1);  
                    $tmp_end = substr($tmp_proc,1,1);  

                    if($tmp_begin == '1')  
                        $tmp_res = get_num_name($tmp_end).'teen';  
                    elseif($tmp_begin == '0')  
                        $tmp_res = get_num_name($tmp_end);  
                    elseif($tmp_end == '0')  
                        $tmp_res = get_num_name($tmp_begin).'ty';  
                    else{  
                        if($tmp_begin == '2')  
                            $tmp_res = 'twenty';  
                        elseif($tmp_begin == '3')  
                            $tmp_res = 'thirty';  
                        elseif($tmp_begin == '4')  
                            $tmp_res = 'forty';  
                        elseif($tmp_begin == '5')  
                            $tmp_res = 'fifty';  
                        elseif($tmp_begin == '6')  
                            $tmp_res = 'sixty';  
                        elseif($tmp_begin == '7')  
                            $tmp_res = 'seventy';  
                        elseif($tmp_begin == '8')  
                            $tmp_res = 'eighty';  
                        elseif($tmp_begin == '9')  
                            $tmp_res = 'ninety';  

                        $tmp_res = $tmp_res.' '.get_num_name($tmp_end);  
                    }  
                    break;  
            }  

            if(strlen($tmp) == 3){  
                $tmp_begin = substr($tmp,0,1);  

                $space = '';  
                if(substr($tmp_res,0,1) != ' ' && $tmp_res != '')  
                    $space = ' ';  

                if($tmp_begin != 0){  
                    if($tmp_begin != '0'){  
                        if($tmp_res != '')  
                            $tmp_res = 'and'.$space.$tmp_res;  
                    }  
                    $tmp_res = get_num_name($tmp_begin).' hundred'.$space.$tmp_res;  
                }  
            }  
        }else  
            $tmp_res = get_num_name($tmp);  
        $space = '';  
        if(substr($res,0,1) != ' ' && $res != '')  
            $space = ' ';  
        $res = $tmp_res.' '.$unit.$space.$res;  
    }  

    $space = '';  
    if(substr($res,-1) != ' ' && $res != '')  
        $space = ' ';  

    if($res)  
        $res .= $space.$real_name.(($real > 1 && $real_name != '')?'s':'');  

    if($decimal > 0)  
        $res .= ' '.num_to_words($decimal, '', 0, '').' '.$decimal_name.(($decimal > 1 && $decimal_name != '')?'s':'');  
    return ucfirst($res);  
}  

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

 $str2num = 12;
    while($str2num!=4){
        $str = num_to_words($str2num, '', 0, '');  
        $str2num = strlen($str)-1;
        echo $str . '=' . $str2num .'<br/>';
        if ($str2num == 4)
            echo 'four is magic';
    }

////// ফলাফল /////////

Twelve =6
Six =3
Three =5
Five =4
four is magic

4
@ ওয়াল্লাকোলু: একটি ক্রোমী ভাষার জন্য একটি জটিল সমাধান: ডি
টমাস এডিং

4
বা এর চেয়ে আরও ছোট 178 টি অক্ষর:$l='4335443554366887798866555766';for($b=(int)fgets(fopen('php://stdin','r'));($a=$b)-4;){$b=$a<20?$l[$a]:$l[18+$a/10]+($a%10?$l[$a%10]:0);echo"$a is $b.\n";}echo"4 is magic.\n";
gnarf

সুন্দর কৌতুক. :-D এত ভাল প্রোগ্রাম করা।
টম পাউরেক

0

পার্ল - 130 অক্ষর


5.12.1 (১৩০ টি চর) 121 123 132 136 140

#        1         2         3         4         5         6         7         8         9        100        11        12        13       14    
#23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123

@u='4335443554366887798866555766'=~/./g;$_=pop;say"$_ is ",$_=$_-4?$_<20?$u[$_]:$u[$_/10+18]+(($_%=10)&&$u[$_]):magic,"."until/\D/


5.10.1 (134 অক্ষর) 125 127 136 140 144

#        1         2         3         4         5         6         7         8         9        100        11        12        13       14    
#23456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 1234

@u='4335443554366887798866555766'=~/./g;$_=pop;print"$_ is ",$_=$_-4?$_<20?$u[$_]:$u[$_/10+18]+(($_%=10)&&$u[$_]):magic,".\n"until/\D/


ইতিহাস পরিবর্তন কর:

20100714:2223- সংঘর্ষের দৃষ্টি নিবদ্ধ করে পরিবর্তিত পরিবর্তন , কিন্তু ($_%10&&$u[$_%10])(($_%=10)&&$u[$_]), যা একই # টি চরিত্রের বিষয় , তবে কেউ যদি এটির উন্নতি করার উপায় দেখতে পায় তবে আমি এটি করেছি

20100714:0041- split//,'...''...'=~/./g
20100714:0025- ($_%10&&$u[$_%10])$u[$_%10]
20100713:2340- while$_until/\D/+ অপ্রয়োজনীয় প্রথম বন্ধনী সরানো হয়েছে
20100713:xxxx- $=<>;chop;$_=pop;- সমবেত হওয়ার সৌজন্যে


দ্রষ্টব্য: আমি মন্তব্যে অন্যের জবাব উন্নত করতে করতে ক্লান্ত হয়ে পড়েছিলাম, সুতরাং এখন আমি লোভী হয়েছি এবং কেবল আমার পরিবর্তনগুলি এখানে যুক্ত করতে পারি :) এটি প্লাটিনাম অ্যাজুরের উত্তর থেকে এক বিভক্তি - অংশটি হবস , মব্রোল এবং ক্রেডিটকে credit প্ল্যাটিনাম নভোনীল


আপনি যখন $_%10&&...নির্মাণটি থেকে মুক্তি পেয়েছেন , আপনি ইনপুট 20,30,40, ...
ভিড়

+1 সুন্দরভাবে সম্পন্ন হয়েছে। আপনি স্টিডিন থেকে আর্গুমেন্টে বেরিয়ে গেছেন যদিও :-(
প্ল্যাটিনাম অ্যাজুরে

ডান, এর মাধ্যমে প্রতিস্থাপন করা হয়েছে ARGV, যা STDIN:) বা .. দ্বারা জনবহুল echo bar | xargs perl foo.pl, প্রযুক্তিগতভাবে
পার্লের

0

সংখ্যা শব্দ সহ নির্লজ্জ পার্ল (329 টি অক্ষর)

পি ডিডির সি কোড থেকে মোটামুটি রূপান্তরিত, সি-র p()পরিবর্তে পার্ল প্রিমিটিভগুলি ব্যবহার করে এবং বেশিরভাগই পুনর্লিখনের মূলপথটি ব্যবহার করার জন্য কিছু টুইট করার জন্য কিছু টুইট করে। তার ব্যাখ্যার জন্য দেখুন। নিউলাইনগুলি সমস্ত alচ্ছিক।

@t=(qw(zero one two three four five six sM eight nine
tL elM twelve NP 4P fifP 6P 7P 8O 9P twLQ NQ forQ fifQ
6Q 7Q 8y 9Q en evL thir eL tO ty 4SmagicT)," is ",".\n");
sub p{local$_=$t[pop];1while s/[0-Z]/$t[-48+ord$&]/e;
print;length}$_=<>;chop;while($_-4){
$_=($_>19?(p($_/10+18),$_&&print("-"),$_%=10)[0]:0)+p$_;
p 35;p$_;p 36}p 34

পার্শ্ব নোট: এটি খুব খারাপ যে পার্ল printঠিক / মিথ্যা প্রত্যাবর্তন করে; যদি এটি একটি গণনা ফেরত দেয় তবে এটি আমার 7 টি স্ট্রোক সংরক্ষণ করবে।


0

রুবি, ১৪১ টি চর:

n=gets.to_i;m="4335443554366887798866555766";loop{s=n;n=n>20?m[18+n/10]+m[n%10]-96: m[n]-48;puts"#{s} is #{n==s ? 'magic': n}.";n==s &&break}

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