রাশিয়ানদের জন্য বহুবচনকরণ ফাংশন লিখুন


25

ইংরেজিতে বিশেষ্য দুটি একক (বহু) বা বহুবচন (অন্য যে কোনও কিছু) হয় তার উপর নির্ভর করে দুটি ভিন্ন রূপ নিতে পারে। উদাহরণস্বরূপ, আমরা "1 কুকুর" বলব তবে "2 কুকুর", "0 কুকুর", "57 কুকুর" এবং আরও অনেক কিছু।

রাশিয়ান ভাষায়, এখানে তিনটি বিভাগ রয়েছে। "1 কুকুর, 2 কুকুর, 5 কুকুর" এর পরিবর্তে রাশিয়ান ভাষায় এটি "1 собака, 2 собаки, 5।" হবে।

বিভাগগুলি নিম্নলিখিত যুক্তি অনুসারে বিভক্ত:

  • "একবচন": 11 এবং শেষ হওয়া সংখ্যা ব্যতীত 1 এবং শেষ হওয়া যেকোন সংখ্যার জন্য ব্যবহৃত।
    • উদাহরণ: 1 собака, 21 собака, 101 собака
  • "কয়েক": 2, 3 এবং 4 এর জন্য ব্যবহৃত হয় এবং 12, 13, এবং 14 এর শেষ সংখ্যা ব্যতীত 2, 3 বা 4 এ শেষ হওয়া যেকোন সংখ্যার।
    • উদাহরণ: 2 собаки, 3 собаки, 4 собаки, 32 собаки, 43 собаки, 104 собаки
  • "অনেক": এমন কিছু যা "একক" বা "কয়েক" হিসাবে বিবেচিত হয় না।
    • উদাহরণ: 0 собак, 5 собак, 11 собак, 13 собак, 25 собак, 111 собак, 114

চ্যালেঞ্জ

[0, 1000] সীমাতে একটি পূর্ণসংখ্যার ইনপুট দেওয়া হয়েছে, 1যদি এটি "একক" বিভাগের হয় 2তবে এটি "কয়েকটি" বিভাগের 5অন্তর্গত এবং যদি এটি "অনেকগুলি" বিভাগের অন্তর্ভুক্ত হয় তবে ফিরে আসুন।

আপনার প্রোগ্রামটি কোনও ফাংশন হতে পারে বা এটি STDIN ব্যবহার করতে পারে। আপনি STDOUT এ মুদ্রণ করতে পারেন বা ফাংশন থেকে কোনও মান ফিরিয়ে দিতে পারেন

এটি একটি কোড গল্ফ চ্যালেঞ্জ, সুতরাং কয়েকটি সংখ্যক বাইট বিজয়ী সহ সমাধান।



2
কেন 1, 2এবং 5বিশেষত? এছাড়াও, আমি কেন প্রস্থান কোড ব্যবহার করতে পারি না?
ক্যালকুলেটরফলাইন

6
@ ফিনিক্স এটি আমার কাছে সম্পূর্ণরূপে ভুল বলে মনে হচ্ছে - ভাঙা রাশিয়ান - আমি সবসময় প্রশ্নের মধ্যে ফর্মটি ব্যবহার করেছি এবং আমি এটি সঠিক খুঁজে পেয়েছি এবং স্পষ্টতই এটি
dkudriavtsev

2
@ ক্যালকুলেটরফলাইন আপনি যদি 1 থেকে গণনা শুরু করেন, আপনি 1 এ একক হয়ে যাবেন, 2 এ প্রথম কয়েকজন আসে, অনেকগুলি প্রথম 5 এ প্রদর্শিত হয়: নিখুঁত জ্ঞান তৈরি করে :-)
LLlAMnYP

5
রাশিয়ান ভাষায় গণনা অত্যন্ত কঠিন। উল্লেখ্য যে, চূড়ান্ত অঙ্ক নির্ধারণ সম্ভবত মূল্য কেস । 1 = মনোনীত একবচন 2,3,4 = জেনেটিক একবচন, 5-0 জেনেটিক বহুবচন। বাক্যাংশের ক্ষেত্রে এটি পরিবর্তিত হয় এবং 6 টি মামলা যেমন রয়েছে, সেখানে 'এক'র 24 টি রূপ রয়েছে (যা পুংলিঙ্গ),' দুটি'র 24 টি রূপ (যা মেয়েলি) এবং আরও অনেক কিছু। বলা হয় যে আমার স্থানীয় বিশ্ববিদ্যালয়ের রাশিয়ান অধ্যাপক " 2345 কুকুরের সাথে " অনুবাদ করতে পারবেন না , কারণ 'সহ' ইন্সট্রুমেন্টাল কেস (একটি কঠিন) দাবি করে demands
স্মার্কিংম্যান

উত্তর:


15

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

lambda n:'5521'[n%~9/-3>>n/10%~9/-9]

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

গণিতগতভাবে একই দৈর্ঘ্য:

lambda n:5/(n%~9/-3>>n/10%~9/-9or 1)

আসুন প্রথমে সরল কোডটি দেখুন যা কিশোরদের জন্য অ্যাকাউন্ট করে না account

lambda n:'5521'[n%~9/-3]

এখানে আমরা এর ডিজিটের মতো একটি আউটপুটে ম্যাপিং চাই যা কাজ করে

[5, 1, 2, 2, 2, 5, 5, 5, 5, 5][n%10]

তবে, nমডিউল 10 ( %10) না নেওয়ার পরিবর্তে , আমরা n%-10যা করতে পারি , যা [-9..0]বাকিরা দিতে অন্তরগুলিকে মানচিত্র করে :

> [n%~9 for n in range(10)]
[0, -9, -8, -7, -6, -5, -4, -3, -2, -1]

এর কারণ হল প্রথম দুই এন্ট্রি প্রতিশ্রুতি হয় 0এবং -9দূরে, এবং তারা বিভিন্ন আউটপুট পাঠানো করা প্রয়োজন। এছাড়াও, -10সংক্ষিপ্ত করা যেতে পারে ~9

এখান থেকে, মেঝে বিভাজন দ্বারা /-3ডান শুরুর স্থানের সাথে 3 টি অংশ দেয়

> [n%~9/-3 for n in range(10)]
[0, 3, 2, 2, 2, 1, 1, 1, 0, 0]

পছন্দসই আউটপুট পেতে, আমাদের এখন কেবল মানচিত্র তৈরি 0->5, 1->5, 2->2, 1->1করতে হবে যা স্ট্রিং নির্বাচনের সাহায্যে করি '5521'[_]

এখন, আমাদের সর্বদা দেওয়ার জন্য 11 থেকে 15 এ শেষ হওয়া সংখ্যাগুলিও দরকার 5। দশকের অঙ্কটি কিনা তা সনাক্ত করে আমরা প্রথমে এটি করি 1n/10শেষ অঙ্কটি সরিয়ে নিতে, আমরা তারপরে %~9ফলাফলগুলি পেতে পূর্বের মতো আবেদন করি

[0, -9, -8, -7, -6, -5, -4, -3, -2, -1]

সংশ্লিষ্ট চূড়ান্ত অঙ্কের জন্য। আমরা যে অঙ্কটি সনাক্ত করতে চাই তার 1 ডিজিটটি অতিমাত্রায় মান হিসাবে ম্যাপ করা হয় -9। তল বিভাজন দ্বারা -9এটি 1 এবং অন্যান্য সমস্ত কিছু 0 তে পরিণত হয়।

> [k%~9/-9 for k in range(10)]
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

পরিশেষে, আমরা এই সূচক হচ্ছে করতে 1সবসময় আউটপুট 5. এর ফলে বিট-নাড়াচাড়া দ্বারা সম্পন্ন করা হয় দিতে n%~9/-3সূচকটি দ্বারা ঠিক আছে। 0,1,2,3সর্বদা বিট-শিফ্টের ফলাফলটি 0 বা 1 এ ডান হয়, যা পছন্দসই হিসাবে 5 এর আউটপুট দেয়।


7
দয়া করে ব্যাখ্যা করুন.
ক্যালকুলেটরলাইন

12

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

lambda n,s='5122255555':(s+'5'*10+s*8)[n%100]

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


o_O আমি উড়ে গিয়েছি ... আমার 56 বাইট ছিল: \
মিঃ এক্সকোডার

এছাড়াও, (s+'5'*10+s*9)110 টি চর নয়?
ক্যালকুলেটরফলাইন

@ ক্যালকুলেটরফলাইন হুঁ, কফি পাওয়ার সময় @ @ @
রড

5
@ রড বা কোভেফ?
নিক টি

8

পার্ল 5 , 26 বাইট

25 বাইট কোড + -pপতাকা।

$_=/1.$|[5-90]$/?5:2-/1$/

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

আরও একটি বাইট জন্য, আছে $_=/(?<!1)[1-4]$/?2-/1$/:5

ব্যাখ্যা: (২
by বাইট সংস্করণে; ২ 26 টি বেশ সমান্তরাল) উভয় "একবাক্য" এবং "কয়েক" এর সাথে "1 টি 1 এর পরে 1 থেকে 4" (পরীক্ষিত (?<!1)[1-4]$/) নয়। এই ক্ষেত্রে, ফলাফলটি 2, বিয়োগ 1 হবে যদি সংখ্যাটি 1 ( 2-/1$/) দিয়ে শেষ হয় । অন্যথায়, ফলাফল যদি 5।


5
tfw পার্ল একটি ন্যায্য পরিমাণ দ্বারা 05AB1E মারধর করে।
এরিক দ্য আউটগল্ফার

7

জাভাস্ক্রিপ্ট (ES6), 53 49 48 40 39 38 37 36 বাইট

n=>/[05-9]$|1.$/.test(n)?5:1+(n%5>1)

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

f=
n=>/[05-9]$|1.$/.test(n)?5:1+(n%5>1)
oninput=_=>o.innerText=f(+i.value);o.innerText=f(i.value=0)
<input id=i type=number><pre id=o>


1[1-4]হতে পারে 1.এবং /1$/.test(s)হতে পারে +s%10==1। একা কখনও ভুলে যাবেন না +!
ক্যালকুলেটরফলাইন

ধন্যবাদ, @CalculatorFeline - প্রথম এক :) ভালভাবে বিক্ষোভ
রোমশ

আমি মনে করি না যে আপনার একেবারে ইউনারি দরকার +, একটি সংখ্যায় s%10রূপান্তর sকরা উচিত ।
ETH প্রোডাকশনগুলি

হ্যাঁ, এটিও ঠিক বুঝতে পেরেছিল, @Etproductions।
শেগি

1
n%10-> n%5একটি বাইট সংরক্ষণ করে
জোহান কার্লসন

4

জেলি ,  19  18 বাইট

DµṖṚi1’ȧṪị“M;ọ6’D¤

একটি মোনাডিক লিঙ্কটি অ-নেতিবাচক পূর্ণসংখ্যার গ্রহণ এবং প্রত্যাবর্তন করে।

এটি অনলাইন চেষ্টা করুন! অথবা এই পরীক্ষার স্যুটে 0 থেকে 1000 সমেত তিনটি গ্রুপ দেখুন।

কিভাবে?

DµṖṚi1’ȧṪị“M;ọ6’D¤ - Main link: non-negative number, n  e.g. 301      311      313
D                  - cast to decimal list                [3,0,1]  [3,1,1]  [1,3,3]
 µ                 - monadic chain separation, call that d
  Ṗ                - pop d                               [3,0]      [3,1]    [1,3]
   Ṛ               - reverse                             [0,3]      [1,3]    [3,1]
     1             - literal 1
    i              - first index of (0 if not found)      0          1        2      
      ’            - decrement                           -1          0        1
        Ṫ          - tail d                               1          1        3
       ȧ           - logical and                          1          0        3
                 ¤ - nilad followed by link(s) as a nilad:
          “M;ọ6’   -   base 250 literal = 1222555555
                D  -   cast to decimal list [1,2,2,2,5,5,5,5,5,5]
         ị         - index into (1-based and modular)     1          5        2

1
দয়া করে ব্যাখ্যা
ক্যালকুলেটরলাইন

@ ক্যালকুলেটরফ্লাইন এখনও গল্ফিংয়ে কাজ করছে ...
জোনাথন অ্যালান

পছন্দ করুন ব্যাখ্যা যুক্ত।
জোনাথন অ্যালান

কোন অক্ষরে এনকোডিং করে সেই 18 টি অক্ষরকে 18 বাইট দ্বারা উপস্থাপন করা যেতে পারে?
এক্সবুক

@ এক্সবুক জেলি তার নিজস্ব কোড পৃষ্ঠা
গ্যামার কর্পস

3

05 এ বি 1 ই , 38 19 বাইট

রডের অজগর উত্তর থেকে সূচক কৌশলটি ব্যবহার করে

•1rꢰ•©5T×®9×JIт%è

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

ব্যাখ্যা

•1rꢰ•              # push the number 5122255555
       ©             # store a copy in register
        5T×          # push 5 repeated 10 times
           ®         # retrieve the first number from register
            9×       # repeat it 9 times
              J      # join everything to string
               Iт%   # push input mod 100
                  è  # use this to index into the string of digits

8
আপনি পার্লের কাছে হেরে গেছেন, আমার মনে হয় এখানে কিছু ভুল আছে।
পাভেল

@ ফিনিক্স: হ্যাঁ হয় এই চ্যালেঞ্জটি রেজেক্সের পক্ষে বেশ উপযুক্ত বা আমি মারাত্মক ভুল কিছু করছি :) সত্যি কথা বলতে পার্ল প্রায়শই বেশ গোলাপী হয়।
এমিগিনা

4
@ এনিগমা ... এবং পার্ল গল্ফাররা প্রায়শই খুব ভাল থাকেন, তাই না? ;-)
দাদা

@ দাদা: খুব সত্য!
এমিগিনা

দয়া করে ব্যাখ্যা
ক্যালকুলেটরলাইন


2

এমসিএক্সএক্সএক্সএক্সএক্সএক্স, অ্যাসেম্বলি , 123 বাইট

e:slx x0
mov x0 acc
dst 2 0
tlt acc 11
-tgt acc 14
-jmp v
+dgt 0
teq acc 1
+mov 1 x1
+jmp e
tlt acc 5
+mov 2 x1
v:-mov 5 x1

বিঃদ্রঃ:

টিআইও এই ভাষাটিকে সমর্থন করে না, যা জাচট্রনিক্স গেম শেনজেন I / O তে ব্যবহৃত হয় , তাই এটি পরীক্ষা করার কোনও লিঙ্ক নেই।

ব্যাখ্যা:

এটি এমন একটি ফাংশন যা এক্সবাস পোর্ট x0 এর মাধ্যমে ইনপুট নেয় এবং এক্স 1 বন্দরের মাধ্যমে আউটপুট দেয়। এটি এমসি 4000 এ চালানো খুব দীর্ঘ, তবে একটি এমসি 6000 এর স্মৃতিতে দুর্দান্তভাবে ফিট করে। এক্সবাস বন্দরগুলি, অপরিচিতদের জন্য, ডিজিটাল ডেটাগুলির পৃথক প্যাকেট সংক্রমণের অনুমতি দেয়।

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

লাইনে লাইন:

e:slx x0    # Label this line e, then sleep until input is available on XBus port x0
mov x0 acc  # Move the input into register acc 
dst 2 0     # Set the leftmost digit of the input to 0
tlt acc 11  # Test if the value in acc is less than 11
-tgt acc 14 # If it's not, check if it's greater than 14
-jmp v      # If it's not, jump to the line labeled v (the last line)
+dgt 0      # If either of the previous tests returned true,
            #     set acc to the value of acc's rightmost digit
teq acc 1   # Test if acc equals 1
+mov 1 x1   # If it does, return 1
+jmp e      # Then jump to label e, which ends execution
tlt acc 5   # Test if acc is less than 5
+mov 2 x1   # If it is, return 2
v:-mov 5 x1 # If the previous test is false, return 5

স্কোরিং সম্পর্কে একটি নোট: এমসিএক্সএক্সএক্সএক্সএক্সএক্সএলসএঞ্চির প্রতি কার্যকারিতা নেই, তবে এটি যে ফাংশনটি আপনি পেতে পারেন তার কাছাকাছি - এটি এমন একটি প্রোগ্রাম যা একক এক্সিকিউশন নোডে ফিট করে, একটি বন্দর দিয়ে ইনপুট নেয় এবং অন্যটির মাধ্যমে আউটপুট দেয়। ফলস্বরূপ, আমি এটি একটি ফাংশন (যেমন একটি বৈধ এমসিএক্সএক্সএক্সএক্সএক্সএক্সএক্স এমুলেটর ফাইল তৈরি করার জন্য প্রয়োজনীয় বাইটগুলি গণনা ছাড়াই) করেছি scored


2

রেটিনা , 25 21 বাইট

1.$
5
T`d`512225
!`.$

এটি অনলাইন চেষ্টা করুন! -4 বাইট নীলকে ধন্যবাদ


1
!`.$শেষ অঙ্কটি বের করতে 4 বাইট সংরক্ষণ করুন । এটি অনলাইন চেষ্টা করুন!
নিল

আমি জানতাম আরও ভাল উপায় ছিল!
ক্যালকুলেটরফলাইন

1

হাস্কেল , 62 58 বাইট

f n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100

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

ব্যাখ্যা

এটি নিম্নলিখিত স্ট্রিং তৈরি করে:

5122255555555555555551222555555122255555512225555551222555555122255555512225555551222555555122255555 ...

কোনটি এমন একটি টেবিল যেখানে সেলটিতে সংখ্যার nউত্তর রয়েছে nth। সারণিটি প্রথম 100 টি উপাদানের জন্য কেবল সঠিক, তাই mod


এখানে কি চলছে তা আপনি ব্যাখ্যা করতে পারেন? আপনি অবশ্যই এটি ব্যবহার করে সংক্ষিপ্ত করতে পারবেনf n|s<-"5122255555"=(s++('5'<$[0..9])++cycle s)!!mod n 100
flawr

আমি জানি না যে এটা সম্ভব!
বার্তাওলে

1
কোডগলফ.স্ট্যাকেক্সেঞ্জারভিউ / সেকশনস / ১৯২৫৫/… সত্যিই মূল্যবান =) পড়ার বিষয়ে আরও অনেক টিপস এবং কৌশল রয়েছে
flawr

0

স্কালা, 110 বাইট

n=>Stream.iterate("512225555555555555555")(_=>"1222555555").flatMap(_.toCharArray).map(_.toInt).take(n-1).head

0

টার্টলিড, 35 বাইট

!--.(1#0#)+.@3(1@1)(2@2)(3@2)(4@2),

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

এই ফাংশনটির জন্য ইনপুটটি একটি> দিয়ে শুরু হওয়া দরকার, যা আমার অনুমান করা ঠিক আছে কারণ পাইথন 2 নিয়মিত ইনপুট ব্যবহার করে এবং এর জন্য উদ্ধৃতিগুলি দরকার।

ব্যাখ্যা:

!             input the number as a string, complete with the >
 --.          wrap around to the end of the string, and then move one back. if this
              is a single digit, we end up on the >,
              otherwise we end up on the second to last digit. write the digit/>

    (1#0#)    if it is 1, set the string to 0. this way it will always write 3 at the end.



          +.       write the last digit (or 0 if the second last digit was 1)
            @3      set the character variable to 3. this means if what was written was not
                       in (1, 2, 3, 4), then it will write 3 at the end
              (1@1)    if the character written was a 1, set the character to be written
                       at the end to 1
                   (2@2)(3@2)(4@2)
                     if it is any of 2,3,4, set the character to be written at the end to 2
                                  ,    write the character that was set

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