আপনি একটি 8 দিনের লাইনে আছেন!


82

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

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

সম্ভবত ডুওলিঙ্গো ডেভ দলটি এই বাগটি রেখে গেছে কারণ অ্যাপটিতে আরও উত্স কোডের জন্য তাদের জায়গাগুলি খুব কম ছিল, সুতরাং তারা যে আশ্বাসটি এটিকে চেপে ধরতে পারে তার জন্য আপনার এই কোডটি যতটা সম্ভব সংক্ষিপ্ত করা দরকার need

আপনার কোড অবশ্যই 0 থেকে 2,147,483,647 এবং আউটপুট aবা an। একটি ট্রেলিং নিউলাইন optionচ্ছিক। এই চ্যালেঞ্জের উদ্দেশ্যে, 1863 আঠারো শত তিরিশটি নয়, এক হাজার আটশো ত্রিশটি হিসাবে পাঠ করা হয় ।

পরীক্ষার কেস:

0 → a
8 → an
11 → an
18 → an
84 → an
110 → a
843 → an
1111 → a
1863 → a
8192 → an
11000 → an
18000 → an
110000 → a
180000 → a
1141592 → a
1897932 → a
11234567 → an
18675309 → an

31
এটি কি ডিউলিঙ্গো দ্বারা অনুমোদিত? যদি তা না হয় তবে একটি ভাষা শিক্ষার সাইটে ভাষা উন্নতির জন্য তাদের আমাদের অর্থ প্রদান করতে হবে।
আর্ক 676

10
কি 1100 (একটি) এগারো শত বা (ক) এক হাজার একশত ?
ব্যবহারকারী 3819867

11
বিল্বো আপনার কয়েকটি পরীক্ষার কেসের সাথে একমত নন। :)
মার্টিন এন্ডার

9
@ জায়েবিস: "এখানে" একটি "উন" এর মতো উচ্চারণ করা হয়েছে, এতে ব্যঞ্জনবর্ণ শব্দ রয়েছে। অত: পর, " একটি এক হাজার একশত দিন কষ"।
এল'েন্ডিয়া স্টারম্যান

31
তারা সম্ভবত এই ত্রুটিটি ছেড়ে গেছে কারণ তারা ভেবেছিল যে কেউ 8 দিনের স্রোতে পৌঁছাবে না।
পিএনডিএ

উত্তর:


14

পাইথ, 23 বাইট

<>n\8hz}hjsz^T3,hT18"an

"an"প্রথম অক্ষরটি একটি নয় কিনা 8এবং বেস 1000 হিসাবে বিবেচনা করা হয় এমন সংখ্যার প্রথম সংখ্যাটি 11 বা 18 নয় কিনা তা পরীক্ষা করে এটি শেষ করে কতগুলি অক্ষর নির্বাচন করবে তা নির্বাচিত করে The শেষ।


3
খুবই সৃজনশীল. ভয়াবহ।
হেলগ্রেভার

29

পাইথন 2, 60 বাইট

lambda n:'a'+'n'[:`n`[0]=='8'or`n`[:2]in len(`n`)%3/2*'118']

একটি বেনামী ফাংশন। হয় যোগ করে nযদি হয়:

  • প্রথম সংখ্যাটি 8
  • প্রথম দুটি সংখ্যা 11 বা 18, এবং দৈর্ঘ্য 2 মডুলো 3।

আমি জানি এটি একটি অতি পুরানো প্রশ্ন, তবে আমি মনে করি `` n> = '8' `three তিনটি বাইট সংরক্ষণ করে।
লিন

@ লিন যদিও ন্যান্স গুলো নষ্ট করবেন না?
xnor

ওহ অবশ্যই! আমি পরীক্ষার স্যুট দ্বারা বোকা হয়েছিল :)
লিন

12

জিএনইউ শেড, 32

স্কোরের জন্য -Eবিকল্পগুলির জন্য +1 অন্তর্ভুক্ত ।

s/^8.*|^1[18](...)*$/an/
t
ca
:

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

  • কেবলমাত্র 1 থেকে 3 সংখ্যা বাকি না হওয়া পর্যন্ত প্রতিটি সংখ্যার শেষে থেকে 3 টি সংখ্যার গোষ্ঠীগুলি সরান
  • 8 বা ঠিক 11 বা 18 দিয়ে শুরু হওয়া যে কোনও সংখ্যার সাথে মিল করুন এবং এতে পরিবর্তন করুন an
  • অন্যান্য সমস্ত সংখ্যা এতে পরিবর্তন করুন a

@ মার্টিনব্যাটনারকে তার রেটিনা পদ্ধতির জন্য ধন্যবাদ যা 10 বাইট সংরক্ষণ করেছে।


11

শেল + বিএসডি-গেমস, 30

number -l|sed '/^e/{can
q};ca'

এসটিডিআইএন থেকে ইনপুট পড়ুন।

numberদশমিক স্ট্রিংকে কথায় রূপান্তরিত করে। তারপরে ফলাফলটি শুরু হয় কি না তা সিদ্ধান্ত নেওয়া সহজ বিষয় e


2
বিএসডি-গেমস ব্যবহারের জন্য +1, আমি আসলে ভাবিনি যে তারা কখনই দরকারী হবে :)
ASCIIThenANSI

@ এসসিআইথেনানসি হ্যাঁ, বিএসডি-গেমগুলি এখানে এবং সেখানে দরকারী are :)
ডিজিটাল ট্রমা

9

রেটিনা , 27 বাইট

এটি ডিজিটালট্রামার রেটিনা জবাব থেকে খুব আলাদা নয়, তবে তারা জোর দিয়েছিল যে আমি এটি নিজেই পোস্ট করি।

^8.*|^1[18](...)*$
an
\d+
a

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

প্রথম রেজেক্স সমস্ত প্রাসঙ্গিক সংখ্যার সাথে anপ্রতিস্থাপন করে এবং দ্বিতীয়টি বাকী সমস্ত সংখ্যার সাথে প্রতিস্থাপন করে a। এটি একই বাইটগুলির জন্য কাজ করে:

^8.*|^1[18](...)*$
n
^\d*
a

1
+1 এটি প্রায় প্রাথমিক স্তরের পরীক্ষার মতো রেজেক্সের অপব্যবহারের সমান স্তর :)
বিড়াল

1
এবং ভাল জিনিস হ'ল, ডিউলিঙ্গো আসলে রেটিনাতে রচিত তাই এটি একীভূত করার জন্য এটি হাওয়া হওয়া উচিত। বা অপেক্ষা করুন, এটি কোন ভাষা ছিল?
কাউন্টার

1
@ এসিডেটোটারনকাউটার ক্লকওয়াসের সাথে আমাকে বলা হচ্ছে এটি আসলে হেক্সাগনীতে লেখা হয়েছে, তবে তারা একটি রেটিনা-থেকে-হেক্সাগনি ট্রান্সপনার লিখেছিল, সুতরাং এটি কোনও সমস্যা হওয়া উচিত নয়।
মার্টিন এন্ডার

6

সি ++, 101

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

const char*f(int i){int n=0,d=0;for(;i;(!(d++%3)&(i==18|i==11))|i==8?n=1:0,i/=10);return n?"an":"a";}

4

গণিত, 53 বাইট

If[#~IntegerName~"Words"~StringStartsQ~"e","an","a"]&

স্ট্রিং প্রসেসিং ব্যবহার করে একটি সমাধান আসলে লম্বা হওয়ার শেষ হবে।


3

পোস্টস্ক্রিপ্ট, 119 113 টি অক্ষর

10 string cvs dup 0 get 56 eq exch dup length 3 mod 2 eq{0 2 getinterval dup(11)eq exch(18)eq or or}{pop}ifelse

পরীক্ষার কোড সহ:

/An
{
    10 string cvs dup 0 get 56 eq exch dup length 3 mod 2 eq{0 2 getinterval dup(11)eq exch(18)eq or or}{pop}ifelse
} def

/ShouldBeFalse [ 0 110 1111 1863 110000 180000 1141592 1897932 ] def
/ShouldBeTrue [ 8 11 18 84 843 8192 11000 18000 11234567 18675309 ] def

() = (ShouldBeFalse) = ShouldBeFalse {An =} forall
() = (ShouldBeTrue)  = ShouldBeTrue  {An =} forall

3

জাভাস্ক্রিপ্ট (ES6) 70 61 46 38 বাইট

n=>/^8|^1[18](...)*$/.test(n)?'an':'a'

সম্প্রদায় উইকি, কারণ বর্তমান সমাধানটি আমার মূলের চেয়ে অনেক বেশি আলাদা। ধন্যবাদ সবাইকে!

ডেমো: http://www.es6food.net/iio40yep/


1
এটা বোধগম্য. ব্যাখ্যা করার জন্য ধন্যবাদ।
ড্যানিয়েল এফ

1
@ পাভলো খুব সুন্দর, evalকৌশলটি আবিষ্কারের পরে আমি একক অভিব্যক্তিটি ভুলে গিয়েছিলাম ! আমি জানতাম পাশাপাশি আরও ভাল নিয়মিত ভাব প্রকাশ করতে হবে, তবে আমি এর চেয়ে ছোটও কিছু বুঝতে পারি না। ধন্যবাদ!
স্কট

1
@ পাভলো মিষ্টি, আবার আপডেট! প্রচুর শেখা, আপনাকে অনেক ধন্যবাদ :)
স্কট

2
URGH! 2 বাইট শেভ করতে ভুলে গেছেন! এখানে চূড়ান্ত এক: n=>/^8|^(?=1[18])..(\d{3})*$/.test(n)?'an':'a'( es6fiddle.net/iiehl1ex )। এটি 46 বাইট দীর্ঘ।
ইসমাইল মিগুয়েল

2
@ স্কটকেয়ে কোডটি খুব সহজ: এটি পরীক্ষা করে এটি শুরু হয় 8কিনা, এটি শুরু হয় 1[18]কিনা এবং সংখ্যার দৈর্ঘ্য কিনা তা পরীক্ষা করে 2 * (3n)। মূলত, এটি আপনার সম্পূর্ণ কোড, তবে একটি নিয়মিত প্রকাশের মধ্যে।
ইসমাইল মিগুয়েল

2

গুরুতরভাবে, 43 40 বাইট

9⌐9τk,;;$l3@\3*╤@\(íub)$#p'8=)XkΣ'n*'a+

এখানে কৌশলটি হ'ল কেবলমাত্র 1, 2 বা 3 টি সবচেয়ে উল্লেখযোগ্য অঙ্কের দিকে নজর দেওয়া, ইনপুটটির 10^(3n)চেয়ে কম মূল্যের দ্বারা ইনপুটটিকে পূর্ণ মান দ্বারা ভাগ করে ।

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

ব্যাখ্যা:

9⌐9τk,;;$l3@\3*╤@\(íub)$#p'8=)XkΣ'n*'a+
9⌐9τk                                    push [11, 18]
     ,;;                                 push 3 copies of input (n)
        $l                               get length of n as string (effectively floor(log(n,10)))
          3@\3*╤                         get largest 10^(3n) less than the length
                @\                       get most significant digits of n (x)
                  (í                     bring list from back, push the index of x in the list or -1 if not in list
                    ub)                  increment by 1, convert to boolean, shove to bottom
                       $#p               push first digit from n (as string)
                          '8=            push 1 if "8" else 0
                             )X          shove to bottom of stack, discard remaining digits
                               kΣ'n*     push sum of stack, push a string containing that many "n"s
                                    'a+  push "a", concatenate


2

পার্ল 6 ,  31   30 বাইট

{'a'~'n'x?/^8|^1<[18]>[...]*$/} # 31 bytes
{<a an>[?/^8|^1<[18]>[...]*$/]} # 31 bytes
{<a an>[?/^8|^[11|18][...]*$/]} # 31 bytes

{'a'~'n'x?/^8|^1[1|8][...]*$/} # 30 bytes
{<a an>[?/^8|^1[1|8][...]*$/]} # 30 bytes

(পার্ল 6 [ ]নন-ক্যাপচারিংয়ের জন্য রেজিজেসে ( )ব্যবহার করে <[ ]>এবং অক্ষর সেটগুলির জন্য ব্যবহার করে)

ব্যবহার:

# store it in a lexical code variable for ease of use
my &code = {...}

my @a  = <0 110 1111 1863 110000 180000 1141592 1897932>;
my @an = <8 11 18 843 8192 11000 18000 11234567 18675309>;

say @a.map: &code;
say @an.map: &code;
(a a a a a a a a)
(an an an an an an an an an)

2

পোস্টস্ক্রিপ্ট, 109 বাইট

(a)exch 10 string cvs dup[exch length 3 mod 2 eq{(11)(18)}if(8)]{anchorsearch{pop pop(an)exch}if}forall pop =

কোডটি নির্দিষ্ট উপসর্গ দিয়ে শুরু হয় কিনা তা যাচাই করে। উপসর্গটি 8সর্বদা পরীক্ষা করা হয় ( আট , আশি-কিছু , আট-শত শত এবং ), 11এবং এবং 18( এগারো এবং আঠারো ) তখনই পরীক্ষা করা হয় যখন সংখ্যাগুলির সংখ্যা 3 প্লাস 2 এর একাধিক হয়।

আমরা একটি অস্থায়ী ফলাফল দিয়ে শুরু করি aএবং যখন একটি উপসর্গ পাওয়া যায় তখন ফলাফলটি প্রতিস্থাপন করা হয় ananchorsearchস্ট্রিং থেকে একটি উপসর্গ আহরণ এড়ানোর জন্য ব্যবহৃত হয়। এমনকি যদি কোনও মিল পাওয়া যায় তবে আমরা বাকি উপসর্গগুলি যাচাই করেই চলি - এর জন্য 5 বাইট কেন অপচয় করবেন  exit? -, তবে যেহেতু মূল স্ট্রিংটি প্রতিস্থাপন করা হয়েছে aআমরা কোনও ভ্রান্ত ধনাত্মকতা না পেয়ে নিশ্চিত।

অপারেন্ড স্ট্যাকের মুদ্রণের পরিবর্তে a-র- anফলাফলটি ফিরে পেতে, পিছনটি সরান  =(ফলস্বরূপ দৈর্ঘ্য: 107 বাইট)।

পরীক্ষার কোড:

/DO {
    ... the code above ...
} def

(Should be "a"s:)  = {0 110 1111 1863 110000 180000 1141592 1897932}     { DO } forall
(Should be "an"s:) = {8 11 18 84 843 8192 11000 18000 11234567 18675309} { DO } forall
flush

2

পোস্টস্ক্রিপ্ট (বাইনারি টোকেন সহ), 63 বাইট

(a)’>10’¥’1’8[’>’b3’j2’={(11)(18)}if(8)]{’${’u’u(an)’>}if}’I’u=

দ্য মান 146 (দশমিক) সঙ্গে বাইট হয়, ¥একটি 165 এবং $একটি 3. অন্যান্য সকলে মুদ্রণযোগ্য 7-বিট ASCII অক্ষর আছে।

এটি আমার পোস্টস্ক্রিপ্ট [খাঁটি ASCII] সংস্করণ হিসাবে একই, তবে বাইনারি টোকেন ব্যবহার করে যেখানে এটি মোট দৈর্ঘ্য হ্রাস করতে সহায়তা করে। আমি এটি 3 কারণে আলাদাভাবে পোস্ট করি:

  • সাধারণ ক্ষেত্রে, ASCII কোডকে ন্যূনতম করে এমন একটি বাস্তবায়ন বাইনারি সংস্করণকে হ্রাস করার মতো নয়। এএসসিআইআই পোস্টস্ক্রিপ্ট কোডের কিছু দীর্ঘ অংশ অন্যটির চেয়ে আরও ভাল সংকোচন করতে পারে এবং এর সাথে সম্পর্কিত বাইনারি সংস্করণটি সংক্ষিপ্ত হতে পারে।
  • বাইনারি কোড সর্বত্র উপযুক্ত নয়, সুতরাং খাঁটি ASCII উত্তর দীর্ঘতর হলেও পছন্দ করা যেতে পারে।
  • খাঁটি ASCII পোস্টস্ক্রিপ্ট উত্তরের দৈর্ঘ্যের সাথে বাইনারি এনকোডিংগুলি ব্যবহার করে কোনওটির সাথে তুলনা করা ভাল হবে না।

1

পাইথন 3, 110 93 91 76 74 70 65 64 বাইট

এখানে একটি দীর্ঘ একটি, কিন্তু একটি সহজ।

সম্পাদনা করুন: isaacg ধন্যবাদ সহ সংশোধন করা হয়েছে । তুলনার পরে কিছু শ্বেতস্থান সংরক্ষণ করেছেন। টিমভি , মেগো , বেনপপ এবং অ্যালিসাকে অনেকগুলি বাইট ধন্যবাদ রক্ষা করেছে ।

n=input();print("a"+"n"*(len(n)%3>1and n[:2]in"118"or"8"==n[0]))

বা বাইট একই সংখ্যা জন্য।

n=input();print("a"+"n"[:len(n)%3>1and n[:2]in"118"or"8"==n[0]])

Ungolfed:

def a():
    n=input()
    if "8"==n[:1]:
        a = "n"
    elif len(n)%3 == 2 and (n[:2] in ["11", "18"]):
        a = "n"
    else:
        a = ""
    return "a"+a

এটি 843"আটশ চৌসট্টি ত্রিশ" ইনপুটটিতে ভুল , যা হওয়া উচিত an
isaacg

@ আইসএএসিজি আপনি কেবল সঠিকই নন, তবে এটি আমার কোডকেও প্রচুর পরিমাণে সরল করে। ধন্যবাদ! দেখা যাচ্ছে যে আমি আট, আট হাজার, আট মিলিয়নের দিকে তাকিয়ে ছিলাম, যখন আটশি এবং আট শতাধিক মামলাগুলিকে উপেক্ষা করছিলাম।
শার্লক 9

এর (-~len(n)%3)<1বদলে কেন len(n)%3==2?
টিমভি

(n[:2]=="11"or n[:2]=="18")ছোট করা যেতে পারে "118".contains(n[:2])?
টিমউই

নাকি n[:2]in"118"?
টিমউই

1

জাভা 10, 102 বাইট

n->{var N=n+"";return(n>9&&"118".contains(N.substring(0,2))&N.length()%3>1)|N.charAt(0)==56?"an":"a";}

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

ব্যাখ্যা:

n->{                  // Method with integer parameter and String return-type
  var N=n+"";         //  Input integer as String
  return(n>9&&        //  If the input has at least two digits,
    "118".contains(N.substring(0,2))
                      //  and the first two digits are "11" or "18",
    &N.length()%3>1)  //  and the length modulo-3 is 2
   |N.charAt(0)==56?  //  Or if the first digit is an '8':
     "an"             //   Return "an"
   :                  //  Else:
     "a";}            //   Return "a"

1

জাপট , 28 27 বাইট

'a+'npUì v ¥8ª[B18]d¥UìA³ v

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

আনপ্যাকড এবং কীভাবে এটি কাজ করে

'a+'npUì v ==8||[B18]d==UìAp3  v

'a+'np  "a" + "n".repeat(...)
Uì v ==8    First digit in decimal == 8
||          or...
[B18]d      [11,18].some(...)
==UìAp3  v  == First digit in base 10**3

আপনি প্রতিস্থাপন করতে পারেন 1e3সঙ্গে
অলিভার

1

জিএনইউ sed -r+ বিএসডি number, 34 বাইট

s/(e?).*/number &/e
s//a\1/
y/e/n/

প্রথমে আমরা ইংরেজী সংখ্যায় রূপান্তর করি। তারপরে সম্ভাব্য প্রাথমিক e, এবং উপসর্গ ব্যতীত সমস্ত কিছু মুছুন a। তারপরে e(উপস্থিত থাকলে) রূপান্তর করুন n। একমাত্র গল্ফিং ট্রিকটি হ'ল eপ্রথম প্রতিস্থাপনে alচ্ছিকটি মেলাতে , তাই আমরা নীচের লাইনে প্যাটার্নটি পুনরায় ব্যবহার করতে পারি।

ডেমো

for i in 0 8 11 18 84 110 843 1111 1863 8192 \
    11000 18000 110000 180000 1141592 1897932 11234567 18675309
do printf "%'10d → %s\n" $i $(./66841.sed <<<$i)
done
         0 → a
         8 → an
        11 → an
        18 → an
        84 → an
       110 → a
       843 → an
     1,111 → a
     1,863 → a
     8,192 → an
    11,000 → an
    18,000 → an
   110,000 → a
   180,000 → a
 1,141,592 → a
 1,897,932 → a
11,234,567 → an
18,675,309 → an

0

টিস্ক্রিপ্ট , 35 বাইট

[18,11,8,80]I(+xh(x.n%3¶3©?'an':'a'

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

ব্যাখ্যা

               xh(x.n%3¶3           get the relevant digits from the input
                                    xh compiles to x.head which returns the
                                    first n chars of x (implicit input)
                                    ¶ ('\xb6') compiles to ||
              +                     cast the result to an integer since
                                    .includes does a strict comparison
                         ©          ('\xa9') compiles to ))
[18,11,8,80]                        array of the special cases
            I(                      I( is an alias for .includes( which
                                    returns true if the array contains the
                                    argument
                          ?'an':'a' finally, return 'an' if the array
                                    contains the number, 'a' otherwise

0

পাইথন 2.7, 66

s=`input()`
print['a','an'][s[:1]=='8'or s[:2]in len(s)%3/2*'118']

স্পষ্টতই lambdaএকটির মতো ছোট নয় ।


0

05 এ বি 1 ই , 26 বাইট

g3%ô¬D11Qs18Q+I1£8Q+>„ans∍

সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে তবে এটি কাজ করছে।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

g3%                  # Length of the input, modulo-3
                     #  11234567 → 8 → 2
                     #  110000 → 6 → 0
   ô                 # Split the input into chunks of that size
                     #  11234567 and 2 → ['11', '23', '45', '67']
                     #  110000 and 0 → ['110000']
    ¬                # Take the Head (first element)
                     #  ['11', '23', '45', '67'] → '11'
                     #  ['110000'] → '110000'
     D11Q            # Does it equal 11?
                     #  '11' and 11 → 1
                     #  '110000' and 11 → 0
     s18Q            # Or does it equal 18?
                     #  '11' and 18 → 0
                     #  '110000' and 18 → 0
         +           # Add them together (if it was either 11 or 18, this becomes 1)
                     #  1 and 0 → 1
                     #  0 and 0 → 0
I1£                  # Get the first character of the input
                     #  11234567 → '1'
                     #  110000 → '1'
   8Q                # Does it equal 8?
                     #  '1' and 8 → 0
          +          # Add them together
                     #  1 and 0 → 1
                     #  0 and 0 → 0
           >         # Increase it by 1
                     #  1 → 2
                     #  0 → 1
            „ans∍    # Push "an", and shorten it to a size equal to the result above
                     #  "an" and 2 → "an"
                     #  "an" and 1 → "a"


0

স্ট্যাক্স , 25 বাইট

â-x▬♪°∞▄'δL|÷æ╪║>₧4¢ÿ·7åR

এটি চালান এবং এটি ডিবাগ করুন

আনপ্যাকড, নিরবচ্ছিন্ন এবং মন্তব্য করা হয়েছে, এটি দেখতে এটির মতো দেখাচ্ছে।

Vk|Eh       get the first "digit" after converting to base 1000
AJ|Eh       get the first "digit" after converting to base 100
c20>9*^/    if the result is greater than 20, divide it by 10 again
"AMj"!#     is the result one of [8, 11, 18]?
^           increment by 1
.an(        keep that many characters of the string "an"

এটি চালান


0

হোয়াইটস্পেস , 243 বাইট

[S S S T    T   S S S S T   N
_Push_97_a][T   N
S S _Print_as_character][S S S T    N
_Push_1][S N
S _Duplicate_1][S N
S _Duplicate_1][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve_input][N
S S S T N
_Create_Label_LOOP][S N
T   _Swap_top_two][S S S T  N
_Push_1][T  S S S _Add][S N
T   _Swap_top_two][S N
S _Duplicate][S S S T   T   S S T   S S N
_Push_100][T    S S T   _Subtract][N
T   T   T   N
_If_negative_jump_to_Label_TWO_DIGITS][S S S T  S ST    S N
_Push_10][T S T S _Integer_division][N
S N
S T N
_Jump_to_Label_LOOP][N
S S T   N
_Create_Label_TWO_DIGITS][S N
S _Duplicate][S S S T   S S S N
_Push_8][T  S S T   _Subtract][N
T   S S S N
_If_zero_jump_to_Label_PRINT_n][S N
S _Duplicate][S S S T   S T T   N
_Push_11][T S S T   _Subtract][N
T   S S N
_If_0_jump_to_Label_2_MOD_3][S N
S _Duplicate][S S S T   S S T   S N
_Push_18][T S S T   _Subtract][N
T   S S N
_If_0_jump_to_Label_2_MOD_3][S S S T    S ST    S N
_Push_10][T S T S _Integer_division][S N
S _Duplicate][N
T   S N
_If_0_jump_to_Label_EXIT][N
S N
T   N
_Jump_to_Label_TWO_DIGITS][N
S S S N
_Create_Label_2_MOD_3][S N
T   _Swap_top_two][S S S T  T   N
_Push_3][T  S T T   _Modulo][S S S T    S M
_Push_2][T  S S T   _Subtract][N
T   T   N
_If_negative_jump_to_Label_EXIT][N
S S S S N
_Create_Label_PRINT_n][S S S T  T   S T T   T   S N
_Push_110_n][T  N
S S _Print_as_character][N
S S N
_Create_Label_EXIT]

বর্ণ S(স্থান), T(ট্যাব) এবং N(নতুন লাইন) কেবল হাইলাইট হিসাবে যুক্ত করা হয়েছে।
[..._some_action]শুধুমাত্র ব্যাখ্যা হিসাবে যুক্ত।

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

সিউডো কোডে ব্যাখ্যা:

Print "a"
Integer input = STDIN as integer
Integer counter = 1
Start LOOP:
  counter = counter + 1
  If(input < 100)
    Jump to function TWO_DIGITS
  input = input integer-divided by 10
  Go to next iteration of LOOP

function TWO_DIGITS:
  If(input == 8)
    Jump to function PRINT_n
  If(input == 11 or input == 18)
    Jump to function 2_MOD_3
  input = input integer-divided by 10
  If(input == 0)
    Exit program
  Recursive call to TWO_DIGITS

function 2_MOD_3:
  If(counter modulo-3 != 2)
    Exit program
  Jump to function PRINT_n

function PRINT_n:
  Print "n"
  Exit program

0

সি ++, 80 79 বাইট

[](int i){for(;i>999;i/=1e3);return i-11&&i-18&&i/100-8&&i/10-8&&i-8?"a":"an";}

এটির /=10মতো আরও একটি লুপের চেয়ে 8XX এবং 8x এর বিরুদ্ধে স্পষ্টভাবে পরীক্ষা করতে 4 বাইট সংক্ষিপ্ত আকারে পরিণত হয়েছিল :

[](int i){for(;i>999;i/=1e3);for(i==11|i==18?i=8:0;i>9;i/=10);return i-8?"a":"an";}

ডেমো

#include <locale>
#include <cstdio>
int main(int argc, char**argv)
{
    auto const f =
        [](int i){for(;i>999;i/=1e3);return i-11&&i-18&&i/100-8&&i/10-8&&i-8?"a":"an";}
    ;

    std::locale::global(std::locale{""});
    for (int i = 1;  i < argc;  ++i) {
        auto const n = std::stoi(argv[i]);
        printf("%'10d → %s\n", n, f(n));
    }
}
         0 → a
         8 → an
        11 → an
        18 → an
        84 → an
       110 → a
       843 → an
     1,111 → a
     1,863 → a
     8,192 → an
    11,000 → an
    18,000 → an
   110,000 → a
   180,000 → a
 1,141,592 → a
 1,897,932 → a
11,234,567 → an
18,675,309 → an

আমি সি ++ খুব ভাল জানি না, তবে হতে i/=1000পারে i/=1e3, এবং সব কি &&হয়ে যেতে পারে &?
কেভিন ক্রুইজসেন 25'18

এটি সত্যই কার্যকর বলে মনে হচ্ছে: এটি অনলাইনে চেষ্টা করে দেখুন।
কেভিন ক্রুইজসেন

1
@ কেভিন - আমি এক পর্যায়ে সেখানে 1e3 করেছি; আমি এটি ডিবাগ করার সময় পরিবর্তন করেছি এবং এটি আবার পরিবর্তন করতে ভুলে গিয়েছি। &&সব হতে পারে না &, কারণ বিয়োগ পূর্ণসংখ্যার এবং Booleans না উৎপাদ - যেমন 19-118, এবং 19-181; দেখুন যে 8 && 1সত্য, কিন্তু 8 & 1মিথ্যা। আমরা ব্যবহার করতে পারে &কিন্তু আমরা পরিবর্তন করতে হবে চাই -থেকে !=এবং প্রথম বন্ধনী যোগ করুন।
টবি স্পিড

আহ অবশ্যই ... &আমার কাজ খারাপ। বিটিডব্লিউ, আপনি কেন নিজের উত্তরের সাথে টিআইও-লিঙ্ক যুক্ত করবেন না?
কেভিন ক্রুইজসেন 25'18


-1

পার্ল, 71 55 49 বাইট

$_=<>;$_=/^8/||/^1[18]/&&length%3==1?'an':'a';say

আমি জানতাম যে টার্নারি অপারেটর একদিন সাহায্য করবে ...

আমাকে এটি ভেঙে দিন।

  • $_=<> একটি সংখ্যা ইনপুট হিসাবে গ্রহণ করে।
  • বড় $_=...ব্লকটি $_এটির ব্যবহারের পরে মান নির্ধারণ করবে ।
    • ...?...:...হ'ল টেরিনারি অপারেটর। যদি শর্ত (প্রথম যুক্তি) সত্য হয় তবে এটি দ্বিতীয় যুক্তিটি দেয়। অন্যথায়, এটি তৃতীয়টি ফেরত দেয়।
    • /^8/||(/^1[18]/&&length%3==2)সংখ্যাটি 8 দিয়ে শুরু হয় বা 11 বা 18 দিয়ে শুরু হয় কিনা তা পরীক্ষা করে দেখুন (যে 1[18]কোনওটি গ্রহণ করে) এবং 2 এর দৈর্ঘ্য মোড 3 রয়েছে।
    • যদি এটি সত্য $_হয় তবে সেট করা আছে an। অন্যথায়, এটি সেট করা আছে a
  • এটি এর সাথে $_(হয় aবা an) এর বিষয়বস্তু মুদ্রণ করে say

পরিবর্তনগুলি

  • Msh210 ধন্যবাদ 16 বাইট সংরক্ষণ করা।
  • পেরেনগুলি সরিয়ে এবং ডিফল্ট ব্যবহার করে 6 বাইট সংরক্ষণ করা হয়েছে।

$_=<>;$_=(/^8/)||/^1[18]/&&length($_)%3==1?'an':'a';sayকয়েক বাইট সাশ্রয়। (যদিও এর সাথে তুলনা করার সংখ্যাটি আপনার নতুন লাইনের চরিত্রটি কী তার উপর নির্ভর করে তবে এটি বাইট গণনা পরিবর্তন করে না))
এমএস 210

@ এমএস 210 দেখে মনে হচ্ছে এটি কেবল 55 বাইট যার অর্থ এটি 16 বাইট সংরক্ষণ করে। আমি এটি যোগ করব। ধন্যবাদ!
ASCIIThenANSI

আপনাকে স্বাগতম. ওহ, এবং আপনি প্রথম পেরেনগুলি ফেলে দিতে পারেন (আমি ধরে নিই। আমি পরীক্ষা করিনি)। আমি মনে করি আপনিও বদলে যেতে length($_)পারেন length(বা কমপক্ষে প্যারেনগুলি ফেলে দিন) তবে এটি কোনও কারণে আমার পক্ষে কাজ করছে না।
msh210

@ এমএস 210 হ্যাঁ, আপনি পেরেনগুলি ফেলে দিতে এবং ($_)পেতে $_=<>;$_=/^8/||/^1[18]/&&length%3==1?'an':'a';sayযা কেবল 49 বাইট।
ASCIIThenANSI

ব্যবহার করে আপনি কিছু বাইট সংরক্ষণ করতে পারবেন -pপরিবর্তে $_=<>এবং say, y///cপরিবর্তে length, এবং প্রায় কোট ড্রপ aএবং an: perl -pe'$_=/^8/||/^1[18]/&&y///c%3==2?an:a'(34 বাইট +1 জন্য -p)। মনে রাখবেন যে, ইনপুট একটি newline দিয়ে শেষ হতে পারে: echo -n 11 | perl -pe'...'। এটি একটি বাগও স্থির করে: length%3==2পার্স করা হয় যেমনটি হয় length(%3)==2না length($_)%3==2, তাই এটি সর্বদা মিথ্যা প্রত্যাবর্তন করে।
এইসুইটসআইবলাকনট

-1

পাইথ, 29 31

?:_ec_z3"(^18$|^11$|^8)"0"an"\a

স্ট্রিংটি বিপরীত করে, তিনটি বিভাগে বিভক্ত করে আবার বিপরীত করে, তারপরে উপযুক্ত সমাপ্তি বেছে নেয় choo


5
এটি 111an
ইনপুটটিতে

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