চারটি যাদু নম্বর


26

আমি চেক করা হয়নি স্যান্ডবক্স এই প্রতিদ্বন্দ্বিতা পোস্ট করার আগে - এটা দেখে মনে হচ্ছে এই চ্যালেঞ্জ মত প্রস্তাবিত Cᴏɴᴏʀ O'Bʀɪᴇɴ

একটি পূর্ণসংখ্যার ইনপুট দেওয়া হয়েছে, এমন একটি প্রোগ্রাম লিখুন যা "চারটি একটি যাদু নম্বর" ধাঁধাটি মুদ্রণ করে

  • চারটি যাদু নম্বর
  • পাঁচটি চারটি এবং চারটি যাদু নম্বর
  • ছয়টি তিনটি এবং তিনটি পাঁচটি এবং পাঁচটি চারটি এবং চারটি যাদু নম্বর
  • এগারটি ছয় এবং ছয়টি তিনটি এবং তিনটি পাঁচটি এবং পাঁচটি চারটি এবং চারটি ম্যাজিক সংখ্যা
  • পাঁচ শত একাদশ এবং এগারোটি ছয় এবং ছয়টি তিনটি এবং তিনটি পাঁচটি এবং পাঁচটি চারটি এবং চারটি ম্যাজিক নম্বর

আপনি যদি ইতিমধ্যে ধাঁধাটি জানেন, বা ধাঁধাটি কী তা খুঁজে বের করার জন্য উদ্বেগ সমাধান করতে খুব অলস হন , তবে এখানে একটি ব্যাখ্যা রয়েছে

পরের সংখ্যাটি হ'ল আগের সংখ্যাতে বর্ণের সংখ্যা। সুতরাং, উদাহরণস্বরূপ, পাঁচটি রয়েছে চার অক্ষর, তাই পরবর্তী সংখ্যা চার

ছয় রয়েছে তিনটি তাই পরবর্তী সংখ্যা, অক্ষর 3 , এবং তিন রয়েছে পাঁচটি অক্ষর, তাই পরবর্তী সংখ্যা 5 , এবং পাঁচটি হয়েছে চার , চিঠিপত্র, যাতে পরবর্তী সংখ্যা 4

কারণ চারে হেঁয়ালি শেষ হয় চার চার অক্ষর আছে, কারণ , এবং চারটি চারটি এবং চারটি চারটি এবং চারটি চারটি ... (চারটি ম্যাজিক সংখ্যা)

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

0 =>
  Zero is four and four is the magic number
1 =>
  One is three and three is five and five is four and four is the magic number
2 =>
  Two is three and three is five and five is four and four is the magic number
3 => 
  Three is five and five is four and four is the magic number
4 =>
  Four is the magic number
5 => 
  Five is four and four is the magic number
6 =>
  Six is three and three is five and five is four and four is the magic number
7 =>
  Seven is five and five is four and four is the magic number
8 =>
  Eight is five and five is four and four is the magic number
9 =>
  Nine is four and four is the magic number
10 =>
  Ten is three and three is five and five is four and four is the magic number
17 =>
  Seventeen is nine and nine is four and four is the magic number
100 =>
  One Hundred is ten and ten is three and three is five and five is four and four is the magic number
142 =>
  One Hundred Forty Two is eighteen and eighteen is eight and eight is five and five is four and four is the magic number
1,000 =>
  One Thousand is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
1,642 =>
  One Thousand Six Hundred Forty Two is twenty nine and twenty nine is ten and ten is three and three is five and five is four and four is the magic number
70,000 =>
  Seventy Thousand is fifteen and fifteen is seven and seven is five and five is four and four is the magic number
131,072 =>
  One Hundred Thirty One Thousand Seventy Two is thirty seven and thirty seven is eleven and eleven is six and six is three and three is five and five is four and four is the magic number
999,999 =>
  Nine Hundred Ninety Nine Thousand Nine Hundred Ninety Nine is fifty and fifty is five and five is four and four is the magic number

বিধি

  • ইনপুট হয় হয় STDINবা একটি ফাংশন যুক্তি হিসাবে নেওয়া যেতে পারে
  • ইনপুটটি 0 এবং 999,999 এর মধ্যে একটি ধনাত্মক সংখ্যা হবে
  • ইনপুট হবে শুধুমাত্র সংখ্যা থাকতে (এটা Regex অনুসরণ করবে ^[0-9]+$)
  • ইনপুটটি হয় হয় পূর্ণসংখ্যা বা একটি স্ট্রিং হিসাবে নেওয়া যেতে পারে
  • কোনও শব্দের স্ট্রিংয়ে রূপান্তরিত হলে, স্পেস এবং হাইফেনগুলি গণনায় অন্তর্ভুক্ত করা উচিত নয় (১১০ [একশত] দশটি অক্ষর, ১১ নয় not
  • স্ট্রিংয়ে রূপান্তরিত হওয়ার সময়, 100 টি ওয়ানড্রেন্ডড হওয়া উচিত, এ হন্ড্রেড বা হান্ড্রেড নয়, 1000 এক হাজার বা হাজার নয়, এক হাজার হতে হবে।
  • যখন একটি স্ট্রিংয়ে 142 রূপান্তরিত হবে তখন ওয়ান হান্ড্রেড ফোরটি টু হতে হবে, ওয়ান হান্ড্রেড এবং ফোর্টটি টু নয়
  • আউটপুট কেস-সংবেদনশীল , এবং " N is K এবং K is M এবং M is ... এবং চারটি ম্যাজিক সংখ্যা" (যদি ইনপুট 4 না হয় তবে এই ক্ষেত্রে আউটপুটটি কেবল "চার" হওয়া উচিত) ফর্ম্যাটটি অনুসরণ করা উচিত যাদু সংখ্যা ")
  • আউটপুট অক্ষরের পরিবর্তে সংখ্যাগুলি ব্যবহার করতে পারে (যতক্ষণ না আপনার প্রোগ্রাম সবসময় সামঞ্জস্য থাকে ততক্ষণ "পাঁচটি চারটি এবং চারটি যাদুর সংখ্যা" এর পরিবর্তে "5 হ'ল 4 এবং 4 হ'ল ম্যাজিক সংখ্যা)"
  • আউটপুট হয় কোনও ফাংশনের রিটার্ন মান, বা এতে মুদ্রিত হতে পারে STDOUT
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য
  • এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে। শুভকামনা!

বোনাস

ইনপুট -999,999 এবং 999,999 এর মধ্যে থাকলে প্রোগ্রামটি কাজ করে যদি -30 বাইট

নেতিবাচক সংখ্যা, যখন শব্দগুলিতে রূপান্তরিত হয়, কেবল তাদের সামনে "নেতিবাচক" থাকে। উদাহরণস্বরূপ -4"নেতিবাচক চার", নেতিবাচক চারটি বারো এবং বারোটি ছয় এবং ছয়টি তিনটি এবং তিনটি পাঁচটি এবং পাঁচটি চারটি এবং চারটি যাদু সংখ্যা

-150 বাইটস যদি প্রোগ্রামটি সংখ্যার স্ট্রিং প্রতিনিধিত্ব তৈরি করার জন্য কোনও অন্তর্নির্মিত ফাংশন ব্যবহার না করে

লিডারবোর্ড

এটি একটি স্ট্যাক স্নিপেট যা ভাষার দ্বারা লিডারবোর্ড এবং বিজয়ীদের একটি সংক্ষিপ্তসার উভয়ই উত্পন্ন করে।

আপনার উত্তরটি প্রদর্শিত হবে তা নিশ্চিত করতে, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন

## Language Name, N bytes

যেখানে এন আপনার জমা দেওয়ার আকার, বাইটগুলিতে

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

## Language Name, <s>K</s> X + 2 = N bytes


সর্বাধিক সম্ভব ইনপুট আছে?
আর্কটরাস

7
ভবিষ্যতে, দয়া করে স্যান্ডবক্সটি পরীক্ষা করে দেখুন অন্য কারও কাছে আপনার ধারণা ছিল কিনা ।
এল'েন্ডিয়া স্টারম্যান

@ এল'েন্দিয়া স্টারম্যান অলাইট, আমি সেই পোস্টের সাথে সংযোগ স্থাপনের চ্যালেঞ্জের শীর্ষে কিছু পাঠ্য যুক্ত করেছি
জোজডমো

আপনার ফাংশন বোনাস অন্তর্নির্মিত -150 থেকে -200 বাইট বেশি হওয়া উচিত।
তানমাথ

1
আমি কেবল এটি এখানে ফেলে দিতে যাচ্ছি - এমনকি রূপান্তরকারীদের নামকরণের জন্য অত্যন্ত উত্সাহিত নম্বরটিও সর্বাধিক ভাষার জন্য প্রায় 150 বাইটের চেয়ে কম ব্যয় করতে পারে, কারণ এটি -150 বোনাসের চেয়ে ফাঁদ বেশি।
রিদ্দেসি

উত্তর:


9

বাশ + সাধারণ ইউটিলিটিস (বিএসডি-গেমস সহ), 123 - 30 = 93 বাইট

for((n=$1;n-4;n=m)){
m=`number -l -- $n|sed 's/nus/&&/;s/\W//g'`
s+="$n is $[m=${#m}] and "
}
echo $s 4 is the magic number

ভাগ্যক্রমে বিএসডি-গেমস numberইউটিলিটি থেকে আউটপুটটি আমাদের যা প্রয়োজন ঠিক তেমন হয়। আউটপুট নম্বরগুলি সমস্ত 8 ম বুলেট পয়েন্ট অনুসারে সংখ্যায় লেখা হয় এবং কথায় নয়:

$ ./4magic.sh 131072
131072 is 37 and 37 is 11 and 11 is 6 and 6 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
$ ./4magic.sh -4
-4 is 12 and 12 is 6 and 6 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
$ 

6

সি, 263 261 বাইট - 180 = 81

char*i="jmmonnmoonmpprrqqsrrjjddeeecdd",x;f(n,c){return!n?n:n<0?f(-n,8):n<100?c+i[n<20?n:n%10]-i[20+n/10]:f(n/1000,8)+f(n/100%10,7)+f(n/100%10,0)+c;}main(int c,char**v){for(c=atoi(*++v);c-4;c=x)printf("%d is %d and ",c,x=c?f(c,0)):4;puts("4 is the magic number");}

কোল ক্যামেরনের উত্তর থেকে অনুপ্রাণিত । আমি ভেবেছিলাম ম্যাক্রো সংজ্ঞা ব্যতীত আমি আরও ভাল করতে সক্ষম হব। যদিও আমি শেষ পর্যন্ত পরিচালিত হয়েছি, এটি অর্জনে কিছুটা সঙ্কুচিত লেগেছে!

এটির জন্য একটানা অক্ষর সহ একটি হোস্ট চরিত্র সেট প্রয়োজন (সুতরাং ASCII ঠিক আছে, তবে EBCDIC কাজ করবে না)। এটি দেখার জন্য টেবিলগুলির জুটির জন্য। আমি jশূন্য চরিত্র হিসাবে বেছে নিয়েছি এবং দুটি অনুসন্ধানের প্রয়োজনের সুবিধা নিয়েছি, তাই আমি উভয় থেকে আমার শূন্যকে বিয়োগ না করে অপর থেকে একটিকে বিয়োগ করতে পারি।

মন্তব্য করা সংস্করণ:

char*i=
    "jmmonnmoon"                /* 0 to 9 */
    "mpprrqqsrr"                /* 10 to 19 */
    "jjddeeecdd";               /* tens */
char x;                /* current letter count */

f(n,c){
return
    !n?n                        /* zero - return 0 (ignore c) */
    :n<0?f(-n,8)                /* negative n (only reached if c==0) */
    :n<100?c+i[n<20?n:n%10]-i[20+n/10] /* lookup tables */
    :
      f(n/1000,8)               /* thousand */
    + f(n/100%10,7)             /* hundred */
    + f(n%100,0)                /* rest */
    + c;                        /* carry-in */
}
main(int c, char**v)
{
    for(c=atoi(*++v);c-4;c=x)
        printf("%d is %d and ",c,x=c?f(c,0):4);
    puts("4 is the magic number");
}

প্রতিস্থাপন করে লক্ষ লক্ষকে সমর্থন করার জন্য একটি সুস্পষ্ট এক্সটেনশন f(n/1000,8)রয়েছে f(n/1000000,7)+f(n/1000%1000,8)

টেস্ট আউটপুট

0 is 4 and 4 is the magic number
1 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
2 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
3 is 5 and 5 is 4 and 4 is the magic number
4 is the magic number
5 is 4 and 4 is the magic number
6 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
7 is 5 and 5 is 4 and 4 is the magic number
8 is 5 and 5 is 4 and 4 is the magic number
9 is 4 and 4 is the magic number
10 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
17 is 9 and 9 is 4 and 4 is the magic number
100 is 10 and 10 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
142 is 18 and 18 is 8 and 8 is 5 and 5 is 4 and 4 is the magic number
1000 is 11 and 11 is 6 and 6 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
1642 is 29 and 29 is 10 and 10 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
70000 is 15 and 15 is 7 and 7 is 5 and 5 is 4 and 4 is the magic number
131072 is 37 and 37 is 11 and 11 is 6 and 6 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number
999999 is 50 and 50 is 5 and 5 is 4 and 4 is the magic number

4

গণিত, 156 - 30 = 126 বাইট

a=ToString;({a@#," is ",a@#2," and "}&@@@Partition[NestWhileList[#~IntegerName~"Words"~StringCount~LetterCharacter&,#,#!=4&],2,1])<>"4 is the magic number"&

আমি কেবল বিস্মিত যে এই স্ট্রিং ব্যবহার করে এবং নয় ridiculously দীর্ঘ।


4

সুইফট 2 , 408 419 - 30 = 389 বাইট

আমি 176 বাইট থেকে মুক্তি পেতে সক্ষম হব যদি এটি সুইফট নিয়মিত অভিব্যক্তি (হাইফেন এবং স্পেসগুলি সরিয়ে) * অ্যাপল * এ গ্লারস দিয়ে এত ভারবস না করে থাকে *

func c(var s:Int)->String{var r="";while(s != 4){r+="\(s)";let f=NSNumberFormatter();f.numberStyle=NSNumberFormatterStyle.SpellOutStyle;let v=f.stringFromNumber(s)!;s=v.stringByReplacingOccurrencesOfString("[- ]",withString:"",options:NSStringCompareOptions.RegularExpressionSearch,range:Range<String.Index>(start:v.startIndex,end:v.endIndex)).utf8.count+(s<0 ?3:0);r+=" is \(s) and "};return r+"4 is the magic number"}

এটি swifttub.com এ পরীক্ষা করা যেতে পারে , এখানে

আমি লুপের জন্য কিছুটা দৌড়েছি এবং এটি দেখা যাচ্ছে যে 1000030 এবং 999999 এর মধ্যে সংখ্যাটির দীর্ঘতম স্ট্রিং ফলাফল রয়েছে, যার 6 টি পুনরাবৃত্তি রয়েছে এবং এটি

100003 হয় 23 এবং 23 হয় 11 এবং 11 হয় 6 এবং 6 হয় 3 এবং 3 হয় 5 এবং 5 হয় 4 এবং 4 যাদু সংখ্যা

Ungolfed

func a(var s: Int) -> String{
    var r = ""
    while(s != 4){
        r+="\(s)"

        let f = NSNumberFormatter()
        f.numberStyle = NSNumberFormatterStyle.SpellOutStyle
        let v = f.stringFromNumber(s)!
        s = v.stringByReplacingOccurrencesOfString(
            "[- ]",
            withString: "",
            options: NSStringCompareOptions.RegularExpressionSearch,
            range: Range<String.Index>(start: v.startIndex, end: v.endIndex)
        ).utf8.count + (s < 0 ? 3 : 0)

        r+=" is \(s) and "
    }
    return r+"4 is the magic number"
}

7
NSStringCompareOptions.RegularExpressionSearchএবং আমি ভেবেছিলাম জেএস এর String.fromCharCodeভার্জোজ ছিল। : পি
ETH প্রোডাকশনগুলি

4
পাইথন এবং রুবি: string.replace। সুইফট:String.stringByReplacingOccurrencesOfString
বিড়াল

4

হাস্কেল, 285 - 180 = 105 বাইট

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

c n|n<0=8+c(-n)|n>999=r 1000+8|n>99=7+r 100|n>19=r 10+2-g[30..59]+g[20..29]|n>15=r 10-1|2>1=[0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7]!!n where{g=fromEnum.elem n;r k=c(mod n k)+c(div n k)}
m 4="4 is the magic number"
m 0="0 is 4 and "++m 4
m n=show n++" is "++show(c n)++" and "++m(c n)

ব্যবহার

m 7
"7 is 5 and 5 is 4 and 4 is the magic number"
m 999999
"999999 is 50 and 50 is 5 and 5 is 4 and 4 is the magic number"

ব্যাখ্যা।

mযথেষ্ট তুচ্ছ, তবে তা cহয় না। cচরিত্রের সংখ্যাটি সংখ্যার ইংরেজি নাম গণনা করার কাজ।

c n |n<0=8+c(-n) -- Add word "negative" in front of it, the length is 8
    |n>999=r 1000+8 -- the english name for number with form xxx,yyy is xxx thousand yyy
    |n>99=7+r 100 -- the english name for number with form xyy is x hundred yy
    |n>19=r 10+2-g[30..59]+g[20..29] -- the english name for number with form xy with x more
                                     -- than 1 is x-ty. However *twoty>twenty,
                                     -- *threety>thirty, *fourty>forty, *fivety>fifty.
    |n>10=r 10-1-g(15:18:[11..13]) -- the english name for number with form 1x is x-teen.
                                     -- However, *oneteen>eleven, *twoteen>twelve,
                                     -- *threeteen>thirteen, *fiveteen>fifteen,
                                     -- *eightteen>eighteen
    |2>1=[0,3,3,5,4,4,3,5,5,4,3]!!n -- for number 0-10, the length is memorized. 0 is 0
                                    -- because it is omitted. Input zero is handled
                                    -- separately. If we defined 0 to be 4, then
                                    -- 20 => twenty zero.
  where g   =fromEnum.elem n      -- Check if n is element of argument array, if true, 1 else 0
        r k=c(mod n k)+c(div n k) -- Obvious.

1
ওহ হ্যাঁ? ওয়েল, সুইফ্টের ... আহ ... উচ্চতর স্কোর ... (আমি
কমব্যাকগুলিতে

4

সি, 268 - 180 = 88 বাইট

#define t(x,o)n<x?o:f(n/x)+(n%x?f(n%x):0)
char*i="4335443554366887798866555766";f(n){return t(1000,t(100,n<20?n<0?8+f(-n):i[n]-48:i[n/10+18]-48+(n%10?f(n%10):0))+7)+8;}main(n){for(scanf("%d",&n);n^4;n=f(n))printf("%d is %d and ",n,f(n));puts("4 is the magic number");}

এখানে চেষ্টা করুন

Ungolfed

/* Encode number length in string (shorter representation than array) */
char*i="4335443554366887798866555766";

f(n)
{
    return n < 1000
        ? n < 100
            ? n < 20
                ? n < 0
                    ? 8 + f(-n) /* "Negative x" */
                    : i[n] - 48 /* "x" */
                : i[n/10+18] + (n%10 ? f(n%10) : 0) /* 20-99 */
            : f(n/100) + (n%100 ? f(n%100) : 0) + 7 /* x hundred y */
        : f(n/1000) + (n%1000 ? f(n%1000) : 0) + 8; /* x thousand y */
}

main(n)
{
    /* Keep printing until you get to the magic number */
    for(scanf("%d",&n);n^4;n=f(n))
        printf("%d is %d and ",n,f(n));
    puts("4 is the magic number");
}

3

জাভা, 800 - 150 = 650 বাইট

class G{static String e="",i="teen",j="ty",k="eigh",y="thir",d="zero",l="one",n="two",m="three",h="four",s="five",c="six",t="seven",b=k+"t",g="nine",D="ten",L="eleven",N="twelve",M=y+i,H=h+i,S="fif"+i,C=c+i,T=t+i,B=k+i,G=g+i,o="twen"+j,p=y+j,q="for"+j,r="fif"+j,u=c+j,v=t+j,w=k+j,x=g+j,A=" ",O=" hundred ",z,E;public static void main(String a[]){z=e;int l=new Integer(a[0]);do{E=a(l,1,e);l=E.replace(A,e).length();z=z+E+" is "+a(l,1,e)+" and ";}while(l!=4);System.out.print(z+h+" is the magic number");}static String a(int P,int _,String Q){String[]f={e,l,n,m,h,s,c,t,b,g,D,L,N,M,H,S,C,T,B,G,e,D,o,p,q,r,u,v,w,x};int R=20,X=10,Y=100,Z=1000;return P==0?(_>0?d:e):(P<R?f[P]+Q:(P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:(P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+a((P/Y)%X,0,O)+a(P%Y,0,e)+Q)));}}

ডি-golfed

class G {

   static String e="",i="teen",j="ty",k="eigh",y="thir",d="zero",l="one",n="two",m="three",h="four",s="five",c="six",t="seven",b=k+"t",g="nine",D="ten",L="eleven",N="twelve",M=y+i,H=h+i,S="fif"+i,C=c+i,T=t+i,B=k+i,G=g+i,o="twen"+j,p=y+j,q="for"+j,r="fif"+j,u=c+j,v=t+j,w=k+j,x=g+j,A=" ",O=" hundred ",z,E;

   public static void main(String a[]){
     z = e;
     int l = new Integer(a[0]);
     do {
             E = a(l,1,e);
             l = E.replace(A,e).length();  
             z = z+E+" is "+a(l,1,e)+" and ";
     } while(l!=4);
     System.out.println(z+h+" is the magic number");
   }

   static String a(int P,int _,String Q) {
     String[] f = {e,l,n,m,h,s,c,t,b,g,D,L,N,M,H,S,C,T,B,G,e,D,o,p,q,r,u,v,w,x};
     int R=20,X=10,Y=100,Z=1000;
     return P==0?(_>0?d:e):(P<R?f[P]+Q:(P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:(P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+ a((P/Y)%X,0,O)+a(P%Y,0,e)+Q)));
   }
}

আমি জানি এটি এক বছরেরও বেশি সময় হয়ে গেছে, তবে আপনি সেই তিনটি অ্যাসাইনমেন্টের সাথে কিছু পরিবর্তনের পাশাপাশি পরিবর্তন ==0করতে পারেন <1। সুতরাং: return P<1?_>0?d:e:P<R?f[P]+Q:P<Y?(f[R+(P/X)]+" "+a(P%X,0,e)).trim()+Q:P<Z?a(P/Y,0,O)+a(P%Y,0,e)+Q:a(P/Z,0," thousand ")+a((P/Y)%X,0,O)+a(P%Y,0,e)+Q;( - 10 বাইট )
কেভিন ক্রুইজসেন

3

কিউসি, 265 - 30 - 150 = 85 বাইট

(✵1:oaT%=ta100%=ha100/⌋T%=X[0 3 3 5 4 4 3 5 5 4 3 6 6 8 8 7 7 9 8 8]=Y[6 6 5 5 5 7 6 6]=a0≟4a20<Xt☌YtT/⌋2-☌Xo☌+▲▲hXh☌7+0▲+)(❆1:na0<8*=ba‖1000/⌋=ca1000%=nbb✵8+0▲a✵++){I4≠:EEI" is "++=II❆=EEI" and "++=E!}E"4 is the magic number"+

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

Ungolfed:

(✵1:
oaT%=                                        # ones
ta100%=                                      # tens
ha100/⌋T%=                                   # hundreds
X[0 3 3 5 4 4 3 5 5 4 3 6 6 8 8 7 7 9 8 8]=  # length of "zero", "one", "two", ..., "nineteen"
Y[6 6 5 5 5 7 6 6]=                          # length of "twenty", ..., "ninety"
a0≟
  4
  a20< 
    Xt☌ 
    YtT/⌋2-☌ Xo☌ +
  ▲ 
▲
hXh☌7+0▲+)

(❆1:
na0<8*=                 # if negative, add 8
ba‖1000/⌋=              # split aaaaaa into bbbccc
ca1000%=
n bb✵8+0▲ a✵ ++)

{I4≠:EEI" is "++=II❆=EEI" and "++=E!}E"4 is the magic number"+

আপনি যদি সংখ্যার দৈর্ঘ্য পাওয়ার জন্য অন্তর্নির্মিত ফাংশনটি ব্যবহার না করে থাকেন, তবে আপনি আসলে আপনার স্কোর থেকে আরও 150 টি বিয়োগ করতে পারবেন
জোজডমো

2

জাভাস্ক্রিপ্ট, 382 - 150 - 30 = 202 বাইট

var o=[0,3,3,5,4,4,3,5,5,4],f=s=>(s[1]==1?[3,6,6,8,8,7,7,9,8,8][s[0]]:o[s[0]]+(s.length>1?[0,3,6,6,5,5,5,7,6,6][s[1]]:0))+(s.length==3?(7+o[s[2]]-(o[s[2]]==0?7:0)):0),l=n=>{var s=(""+n).split("").reverse();return f(s.slice(0,3))+(s.length>3?(f(s.slice(3,6))+8):0)};(n=>{var s="";while(n!=4){s+=n+" is ";n=n>=0?l(n):(l(-n)+8);s+=n+" and ";}console.log(s+"4 is the magic number");})()

ইনপুটটি তাত্ক্ষণিকভাবে আমন্ত্রিত ফাংশন এক্সপ্রেশনটির প্যারামিটার হিসাবে দেওয়া হয়।

পরীক্ষার ইনপুট:

999999 ->
    999999 is 50 and 50 is 5 and 5 is 4 and 4 is the magic number
17 ->
    17  is 9 and 9 is 4 and 4 is the magic number
-404 ->
    -404 is 23 and 23 is 11 and 11 is 6 and 6 is 3 and 3 is 5 and 5 is 4 and 4 is the magic number

ডি-golfed:

// array of the lengths of digits in ones place:
// one is 3, two is 3, three is 5, etc... zero is a special case
// and is assigned zero length because zero is never written out in a number name
var o=[0,3,3,5,4,4,3,5,5,4],

// function that computes the length of a substring of the input
// because the input is 6 digits, it can be broken into two 3 digit subsections
// each of which can have it's length calculated separately
f=s=>
  (
  s[1]==1? // check for if the tens digit is a one
    // when the tens is a one, pull the string length from an array that represents
    // ten, eleven, twelve, thirteen, etc...
    [3,6,6,8,8,7,7,9,8,8][s[0]]
  :
    // when the tens digit is not a one, add the ones digit normally and...
    o[s[0]]
    +
    // add the tens digit length from the array that represents
    // zero, ten, twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety
    (s.length>1?[0,3,6,6,5,5,5,7,6,6][s[1]]:0)
  )
  +
  (
  s.length==3? // check if the length is 3 and weren't not accidentally trying to do something wierd with a minus sign
    // if so, then we have to add a hundred (7 characters) to the length and the
    // length of the ones digit that is in the hundreds place like
    // 'one' hundred or 'two' hundred
    (7+o[s[2]]-
      (
        // also, if the hundreds place was a zero, subtract out those 7 characters
        // that were added because 'hundred' isn't added if there's a zero in its
        // place
        o[s[2]]==0?
          7
        :
          0
      )
    )
  :
    // if the length wasn't 3, then don't add anything for the hundred
    0
  ),

// function that computes the length of the whole six digit number
l=n=>{
  // coerce the number into a string and then reverse the string so that the
  // ones digit is the zeroth element instead of last element
  var s=(""+n).split("").reverse();
  return
    // calculate the character length of the first 3 characters
    // like in the number 999888, this does the '888'
    f(s.slice(0,3))
    +
    // then if there actually are any characters after the first 3
    (s.length>3?
        // parse the character length of the second 3 characters
        (f(s.slice(3,6))+8)
      :
        0
    )
};
// lastly is the Immediately-Invoked Function Expression
(n=>{
  var s="";
  // as long as we haven't reached four, just keep going through the loop
  while(n!=4){
    s+=n+" is ";
    n=n>=0?l(n):(l(-n)+8) // this handles negatives by only passing positive values to l and then just adding 8 onto the length for negatives
    s+=n+" and ";
  }
  // finally just say that '4 is the magic number'
  console.log(s+"4 is the magic number");
})(999999)

1

পাইথন 641-150 = 501 বাইট

অন্তত এটি জাভার চেয়ে বেশি দিন নয়! এটা তোলে উপর ভিত্তি করে তৈরি এই স্ট্রিং ব্যবহার ছাড়া।

সম্পাদনা : আমি প্রায় 0 টি ভুলে গিয়েছিলাম এবং আমাকে "5 হ'ল 4" বলতে হবে, "4 ম্যাজিক নম্বরটি" এড়িয়ে যাবেন না - যা স্কোরকে কিছুটা যোগ করেছিল।

w={0:"zero",1:"one",2:"two",3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine",10:"ten",11:"eleven",12:"twelve",13:"thirteen",14:"fourteen",15:"fifteen",16:"sixteen",17:"seventeen",18:"eighteen",19:"nineteen",20:"twenty",30:"thirty",40:"forty",50:"fifty",60:"sixty",70:"seventy",80:"eighty",90:"ninety"}
s=""
def i(n):
 global s
 e=""
 o=n%10
 t=n%100
 h=n/100%10
 th=n/1000
 if th:
  e+=i(th)
  e+='thousand'
 if h:
  e+=w[h]
  e+='hundred'
 if t:
  if t<20 or o==0:
   e+=w[t]
  else:
   e+=w[t-o]
   e+=w[o]
 if len(e)==4:s+="4 is the magic number";print s
 else: s+="%d is %d and "%(n,len(e));i(len(e))
In=input()
i(In)

এখানে চেষ্টা করুন!


আপনাকে নামটি প্রদর্শন করতে হবে না, তাই না?
আকংকা

এটি ভুল। i(5)প্রিন্ট 4 is the magic number, পরিবর্তে 5 is 4 and 4 is the magic number
mbomb007

1

মো, 182 176/ 192 188 বাইট - 30 = 146/158

188 বাইট সংস্করণ:

u=$string_utils;s="";i=args[0];while(i-4)j=u:english_number(i);s=s+j+(s?" and "+j|"")+" is ";i=length(u:strip_chars(j,"- "}));endwhile;return s+(s?"four and "|"")+"four is the magic number"

176 বাইট বাস্তবায়ন-নির্ভর সংস্করণ:

s="";i=args[0];while(i-4)j=#20:english_number(i);s=s+j+(s?" and "+j|"")+" is ";i=length(#20:strip_chars(j," -"));endwhile;return s+(s?"four and "|"")+"four is the magic number"

উভয়ই ফাংশন।


1

পিএইচপি, 168 - 30 = 138 বাইট

function m($i){$e=strlen(preg_replace('/[^a-z-]/','',(new NumberFormatter("en",5))->format($i)));echo($i==$e?"":"$i is $e and "),($e==4?"4 is the magic number":m($e));}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.