ফরাসিগুলিতে সংখ্যাগুলি অনুবাদ করুন


46

ফরাসিরা এক অদ্ভুত উপায়ে সংখ্যার বানান করে

  • 1-16 "সাধারণ"
  • 17-19 বানান হয় 10 + 7। 10 + 8, 10 + 9
  • 20-69 হ'ল "সাধারণ" (ঠিক আছে, ঠিক আছে! তবে তারা এই চ্যালেঞ্জের মধ্যে রয়েছে)
  • 70-79 হয় 60 + + 10, 60 + + 11 ... 60 + 10 + 7, 60 + 10 + 8, 60 + 10 + 9
  • 80-99 হয় 4 * 20, 4 * 20 + 1 টি, 4 * 20 +2 ... 4 * 20 + + 16, 4 * 20 + 10 + 7, 4 * 20 + 10 + 8, 4 * 20 + 10 + 9

চ্যালেঞ্জ:

[1,100] পরিসীমাতে একটি ইতিবাচক পূর্ণসংখ্যা নিন এবং এটিকে "ফরাসি উপায়" আউটপুট দিন। আপনি আবশ্যক আউটপুট এটা ঠিক যেমন সঙ্গে, নিচে দেখানো হচ্ছে *এবং +, তাই 97হয় 4*20+10+7না, [4 20 10 7]বা অন্য কিছু।

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

1  - 1
.. - ..
16 - 16
17 - 10+7
18 - 10+8
19 - 10+9
20 - 20
21 - 21
.. - ..
69 - 69
70 - 60+10
71 - 60+11
72 - 60+12
77 - 60+10+7
78 - 60+10+8
79 - 60+10+9
80 - 4*20
81 - 4*20+1
82 - 4*20+2
.. - ..
90 - 4*20+10
91 - 4*20+11
96 - 4*20+16
97 - 4*20+10+7
98 - 4*20+10+8
99 - 4*20+10+9
100 - 100

14
প্রতিটি ভাষা আমি জানি "তের" একটি রূপান্তরটি থেকে এক মত হয়েছে 16থেকে 10+7উপরে। (ইংরাজীতে এটি আরও কিছু আকারের ছদ্মবেশের মধ্যে 12এবং এর মধ্যে ঘটে 10+3)) আমি সবসময় কিছুটা অতিরিক্ত বিবেচিত হয়েছি যে বিভিন্ন ভাষায় বিভিন্ন সংখ্যায় এই রূপান্তর ঘটে।
গ্রেগ মার্টিন

25
22"ডিক্স-হুইট" থাকাকালীন কেন "ভিংট -ডিউক্স" হওয়া উচিত 10+8?
তিতাস

11
ভাগ্যক্রমে, এটি একটি প্রোগ্রামিং ধাঁধা সাইট এবং একটি ভাষাগত ট্রিভিয়া সাইট নয়। অন্যথায় লোকেরা যখন বিরক্তিকর ভুল করতে পারে তখন বিরক্ত হতে পারে। রাম রাম!
স্টিভি গ্রিফিন

4
@ স্টেভি গ্রিফিন লোকেরা এখনও বিরক্ত হয়েছিল।
ফাঁস নুন

2
ফরাসি হিসাবে আমি এটি বেশ ভাল দেখতে পাই: ডি।
ওয়ালফ্র্যাট

উত্তর:


13

এক্সেল, 153 149 বাইট

=IF(OR(A1<17,A1>99,AND(A1>19,A1<70)),A1,IF(A1<20,"10+"&A1-10,IF(A1<80,"60","4*20")&IF(A1=80,,IF(MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,"+"&MOD(A1,20)))))

আমি নিশ্চিত এটি আরও ভাল হতে পারে, আমি # 80 এর জন্য অ্যাকাউন্ট করার একটি কার্যকর উপায় খুঁজতে লড়াই করেছিলাম।

সম্পাদনা করুন: 4 বাইট সংরক্ষণের জন্য 'সাধারণ' কেসগুলি আরও ভাল করা হয়েছে। # 80 এখনও স্তন্যপান।

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

অর্থাত। এ 1 কক্ষে ইনপুট দেওয়ার জন্য

এ 2: 11 বাইট

=MOD(A1,20)

এ 3 (ফলাফল): 125 বাইট

=IF(OR(A1<17,A1>99,AND(A1>19,A1<70)),A1,IF(A1<20,"10+"&A1-10,IF(A1<80,"60","4*20")&IF(A1=80,,IF(A2>16,"+10+"&A2-10,"+"&A2))))

মোট 136 এর জন্য?


আমি মনে করি এটি একাধিক কক্ষে কোড লেখার অনুমতি দেওয়া উচিত। আইএমএইচও এটি অন্যান্য প্রোগ্রামিং ভাষায় অন্তর্বর্তী ভেরিয়েবল বা ফাংশন থাকার মতো।
pajonk

আমি অনুভব করি যে অন্য ভাষাগুলিতে ফাংশন ব্যবহার করার মত শাস্তি যেমন রয়েছে (ঠিক তেমনি ফাংশনটি ঘোষণার জন্য বয়লারপ্লেট টাইপ করা হয়) তেমন একাধিক কোষ ব্যবহারের কিছু দণ্ড হওয়া উচিত। সম্ভবত সবচেয়ে ক্ষুদ্রতম এনকোডিং (যেমন সিএসভি) সমর্থিত, তাই প্রয়োজনীয় সংখ্যক কমা এবং (প্রয়োজনে) কোট?
মুজার

আমি কোনও ফর্ম্যাট সম্পর্কে অবগত নই যে এক্সেল ফাইলগুলি একটি স্বীকৃত আউটপুট দিয়ে সংরক্ষণ করা যায়। সিএসভি ফাইলগুলি ডিফল্ট সমর্থন ফাংশনগুলির দ্বারা এগুলি করে না এবং কমা ব্যবহার করে এমন কোনও ক্রিয়াকলাপ ভাঙবে। যদি কক্ষগুলির মধ্যে একটি নতুন লাইনের সাথে একটি কলামে খাঁটি পাঠ্য হিসাবে সংরক্ষণ করা হয় তবে এটি সরাসরি এক্সেল এবং ফাংশনে অনুলিপি করা যেতে পারে। এই ক্ষেত্রে, প্রতিটি অতিরিক্ত কক্ষের জন্য 1 বাইট যুক্ত করা হবে।
কিউউ

রূপান্তর দ্বারা একটি বাইট সংরক্ষণ IF(A1=80,,IF(MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,"+"&MOD(A1,20)))করতেIFS(A1=80,,MOD(A1,20)>16,"+10+"&MOD(A1,20)-10,1,"+"&MOD(A1,20))
Greedo

লাইব্রোফাইস ক্যালকে, আপনি শেষটি এড়িয়ে যেতে পারেন, আপনি কি এক্সেলে )একই কাজ করতে পারেন? সুতরাং আপনি 5 "বাইটস" সংরক্ষণ করতে পারেন (সত্যিই ইউসিএস 2-চারস রয়েছে, তাই আপনি যদি বাইট == অক্টেট বলেন তবে আপনাকে অবশ্যই এটি দ্বিগুণ গণনা করতে হবে)। আর তুমি পরিবর্তন আবশ্যক ,মধ্যে;
12431234123412341234123

8

রেটিনা , 52 48 বাইট

নীলকে ধন্যবাদ 4 টি বাইট

^7\B
60+1
^9\B
81
^8\B
4*20+
1(?=7|8|9)
10+
\+0

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

ব্যাখ্যা

^7\B
60+1
^9\B
81
^8\B
4*20+

প্রথমে আমরা 70, 80 এবং 90 এর অনুবাদটি পরিচালনা করি these এই প্রথম 3 টি পর্যায়ে, শুরুতে একটি 7 এর সাথে অন্য একটি চরিত্র প্রতিস্থাপন করা হয় 60+1। একইভাবে, 9দ্বারা প্রতিস্থাপিত হয় 81, এবং 8দ্বারা 4*20+1। প্রতিস্থাপনটি 9মূলত এটিকে "আশি-দশ" ​​এবং এ জাতীয়তে পরিবর্তন করা হয়, যাতে 8পরের প্রতিস্থাপনটি এরপরে পরিচালিত হয়, যা 4*20+1দুবার লেখার উপর দিয়ে বাইট সংরক্ষণ করে।

1(?=7|8|9)
10+

এই ক্ষেত্রে পরিচালনা 17, 18এবং 19দ্বারা প্রতিস্থাপিত 1সঙ্গে প্রতিটি 10+

\+0

শেষ অবধি, কখনই +0শেষ হওয়া উচিত নয় , তাই যদি এটি থাকে তবে এটি মুছুন।


অবশ্যই এর পরিবর্তে যদি
পিছনের

এর জন্য কাজ করে না 7-9, তবে আমি মনে করি না যে আপনার সেই চেহারাটির পিছনে প্রয়োজন: এটি অনলাইনে চেষ্টা করুন!
নীল

@ নীল আমি বুঝতে পেরেছিলাম যে আমি যখন যাচ্ছিলাম: পি তবে নতুন সংস্করণের জন্য ধন্যবাদ!
বিড়াল বিড়াল

@ ডাওনগোট আমি লুপ হেডকে একটি ক্যাপচারিং গ্রুপের সাথে প্রতিস্থাপন করতে পারি তবে এটি কোনও বাইট সংরক্ষণ করতে পারে না $1যতক্ষণ দীর্ঘ ?=
বিজনেস বিড়াল


7

জাভাস্ক্রিপ্ট (ES6), 73 71 বাইট

f=n=>n>16&n<20?'10+'+n%10:n<70|n>99?n:n%20?f(n-n%20)+'+'+f(n%20):'4*20'

বোনাস সংস্করণ যা সংখ্যাগুলি প্রিন্ট করে কারণ তারা অতিরিক্ত 2 বাইটের জন্য বানানযুক্ত:

f=n=>n<17|n>99?n:n<20?'10+'+n%10:n%20?f(n-n%20)+'+'+f(n%20):n-80?n:'4*20'

1
প্রচুর ইনপুট ব্যর্থ হয়; আসলে এটি কেবল 1..20, 30, 40, 50, 60, 80 এবং 100 এর জন্য কাজ করে
টাইটাস

@ টিটাস আমি মনে করি আপনি বেশিরভাগ ফলাফলকে ভুল বুঝছেন। 23উদাহরণস্বরূপ, আউটপুট দেওয়ার কথা 23, না হয় 20+3
ETH প্রোডাকশনগুলি

দুটি বাইট সংরক্ষণ করুন(m=n%20)
টাইটাস

টাইটাস ধন্যবাদ, তবে আমি ইতিমধ্যে এটি চেষ্টা করেছি এবং এটি 70-99 এ কাজ করে না কারণ কলটিতে mপুনরায় সেট হয়ে 0যায় f(n-n%20)। (এটি একটি গ্লোবাল ভেরিয়েবল)
ইটিএইচ প্রডাকশনগুলি

আপনি পরিবর্তন করে একটি বাইট সংরক্ষণ করতে পারবেন n<70|n>99করার n%100<70। এছাড়াও, আপনি একটি পরীক্ষা-সংকলক যুক্ত করতে পারেন?
কেভিন ক্রুইজসেন

5

আর, 110 বাইট

i=scan()
r=i%%10;paste0(ifelse(i>16&i<20,"10+",ifelse(i>69&i<80,"60+10+",ifelse(i>16&i<20,"4*20+",i-r/10))),r)

(i-r)/10পরিবর্তে চেষ্টা করুন floor(i/10)। এবং i>15হওয়া উচিত i>16
তিতাস

5

পিএইচপি, 99 বাইট (আমি খুশি সংস্করণ হতে চাই)

ETH প্রোডাকশনগুলির একটি সোজা বন্দর ´ জেএস , 4 বাইট গল্ফড। ওপি কর্তৃক অনুরোধ করা নম্বরগুলি মুদ্রণ করে।

function f($n){return$n<17|$n>19?$n>60&$n<100?($m=$n%20)?f($n-$m)."+".f($m):'4*20':$n:"10+".$n%10;}

ভাঙ্গন

function f($n){return
    $n<17|$n>19
        ?$n>69&$n<100
            ?($m=$n%20)
                ?f($n-$m)."+".f($m) # 70..79, 81..99
                :'4*20'             # 80
            :$n                     # 1..16, 20..69
        :"10+".$n%10                # 17..19
    ;
}

আমি সঠিক সংস্করণ হতে চাই, 114 98 বাইট

ইটিএইচ প্রোডাকশন দ্বারা অনুপ্রাণিত নতুন পদ্ধতি , সংখ্যাগুলি প্রকৃতপক্ষে বানান অনুসারে মুদ্রণ করে।

function f($n){return$n>16&$n<100?$n-80?($m=$n%($n>60?20:10))?f($n-$m)."+".f($m):$n-$m:'4*20':$n;}

অনলাইনে এটিকে পরখ করে

ভাঙ্গন

function f($n){return
    $n>16&$n<100
        ?$n-80
            ?($m=$n%($n>60?20:10))
                ?f($n-$m)."+".f($m) # $n%$m>0
                :$n-$m              # 10,20,30,40,50,60
            :'4*20'                 # 80
        :$n                         # 1..16, 100
;}

4

পাইথন 2, 130 108 বাইট

22 বাইট সংরক্ষণ করেছেন @ ম্যাথজুঙ্কিকে ধন্যবাদ

f=lambda x:79<x<100and('4*20'+('+'+f(x-80))*(x>80))or 69<x<100and'60+'+f(x-60)or 16<x<20and'10+'+`x-10`or`x`

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



1
f=আপনার এটি গণনা করা দরকার কারণ আপনি এটি ল্যাম্বদার অভ্যন্তরে ব্যবহার করেছেন।
লিকি নুন

@ লেকিউন স্থির করেছেন
উরিল

3

ব্যাচ, 220 217 বাইট

@set/pn=
@set s=
@if %n% gtr 99 goto g
@if %n% gtr 79 set s=+4*20&set/an-=80
@if %n% gtr 69 set s=+60&set/an-=60
@if %n% gtr 16 if %n% lss 20 set s=%s%+10&set/an-=10
:g
@if %n% gtr 0 set s=%s%+%n%
@echo %s:~1%

STDIN এ ইনপুট নেয়। উত্সাহিত করা এবং মুছে ফেলা +বিশেষ কেসিং 80 বর্ধিত 1 বাইট সংরক্ষণ করে। সম্পাদনা করুন: @ কনোরো ব্রায়েনকে 3 বাইট সংরক্ষণ করা হয়।


আপনি সরিয়ে 3 বাইট সংরক্ষণ করতে পারবেন @echo offসঙ্গে hte লুপ বিবৃতি ছাড়া এবং সব বিবৃতি prefixing@
কোনোর ব্রায়েন

@ কনরোও ব্রায়েন হু, আমি অবাক হয়েছি কেন আমি এবার তা করতে ভুলে গেছি ...
নীল

2

জেলি , 55 বাইট

⁹
’,ṃ60Ṁ€
⁹%80“4*20”,
Dj⁾0+µ¹e?“×ØŒ‘
%ȷ2:“FP‘S‘ŀḟ0Ç€j”+

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

নিঃসন্দেহে একটি ছোট উপায় আছে!

কিভাবে?

+ - Link 1, helper for 1-69&100: number s=0, number n
⁹ - link's right argument, n

’,ṃ60Ṁ€ - Link 2, helper for 70-79: number s=1, number n
’       - decrement s -> 0
 ,      - pair -> [0,n]
  ṃ60   - base decompress (vectorises) using [1,2,...60]  effectively -> [60,[1,n%60]]
     Ṁ€ - maximum for €ach effectively -> [60,n%60]

⁹%80“4*20”, - Link 3, helper for 80-99: number s=2, number n
⁹           - link's right argument, n
 %80        - mod 80
    “4*20”  - literal ['4','*','2','0']
          , - pair -> [['4','*','2','0'],n]

Dj⁾0+µ¹e?“×ØŒ‘ - Link 4, reformat 17-19: element v (may be char list or number)
        ?      - if
       e       - v exists in
         “×ØŒ‘ - literal [17,18,19]
               - then:
D              -   convert to decimal list  e.g. [1,7]
  ⁾0+          -   literal ['0','+']
 j             -   join                          [1,'0','+',7]
     µ         - else:
      ¹        -   identity, v

%ȷ2:“FP‘S‘ŀḟ0Ç€j”+ - Main link: number n in [1,100]
 ȷ2                - literal 100
%                  - mod (convert 100 to 0)
    “FP‘           - literal [70,80]
   :               - integer division (vectorises)
        S          - sum (0 for 1-69&100; 1 for 70-79; 2 for 80-99)
         ‘         - increment (...1, 2 or 3)
          ŀ        - call link at index (1, 2 or 3) as a dyad(sum, n)
           ḟ0      - filter out zeros (remove 0 from 4*20+0)
             ǀ    - call the last link (4) as a monad for each
                ”+ - literal '+'
               j   - join

2

পাইথ, 61 56 বাইট

L?}b}17 19++T\+eb|bk?}/QTr6T.s+?<Q80"60+""4*20+"y%Q20\+y

এটি অনলাইন পরীক্ষা!

5 বাইট উন্নতির জন্য লিকি নুনকে ধন্যবাদ!

ব্যাখ্যা:

                     | Implicit: Q=eval(input())
L                    | Define y(b):
 ?}b}17 19           |  If b is in the inclusive range from 17 to 19:
          ++T\+eb    |   Return "10+" + (last digit of b)
                 |b  |  Else: if b!=0: return b
                   k |   Else: return an empty string (Leaves a trailing '+' for case 80)
_____________________|________________
?}/QTr6T                              | If 70<=Q<100:
          +                           |  Concatenate the next two expressions:
           ?<Q80                      |   If Q<80:
                "60+"                 |    Evaluate to "60+"
                     "4*20+"          |    Else: Evaluate to "4*20+"
                            y%Q20     |   y(Q%20)
        .s                       \+   |  Strip off trailing '+', if present (for case 80)
                                   y  | Else: return y(Q)
                                   (Q)| Trailing Q is implicitly added

*-Q100>Q69}/QTr6T
লিকি নুন

@]b}17 19}b}17 19
লিকি নুন

+"10+"ebj\+,Teb
লিকি নুন

@ লাকিউন গল্ফিংয়ে সহায়তার জন্য ধন্যবাদ! আপনার প্রস্তাবিত পরিবর্তনগুলি করেছি।
কে ঝাং 21

1

পাইথন 3, 127 বাইট

m,r=map,range;l=[*r(1,17),*m("10+{}".format,(7,8,9))];f=[0,*l,*r(20,61),*m("60+{}".format,l),"4*20",*m("4*20+{}".format,l),100]

প্রতিটি অ্যারে উপাদান এর প্রতিনিধিত্ব করে:

for i in range(1,101):
    print(i, f[i])

কোডটি আসলে কোনও ফাংশন তৈরি করে না, কেবল একটি অ্যারে - এটি অনুমোদিত কিনা তা আমি জানি না। অন্যথায়, আমি যোগ করে এই 139 বাইট করতে হবে f=[...].__getitem__


পিপিসিজিতে আপনাকে স্বাগতম! আমি বিশ্বাস করি যে পূর্ণসংখ্যার থেকে বস্তুতে ম্যাপিং হিসাবে অ্যারে জমা দেওয়ার বিষয়ে মেটা নিয়ে আলোচনা হয়েছিল তবে আমি এই মুহূর্তে এটি খুঁজে পাচ্ছি না বলে মনে হয়। আমি আপনাকে জানাতে পারি (এবং সেই আলোচনার ফলাফল কী হয়েছিল)। যে কোনও উপায়ে, আপনার প্রয়োজন হবে না f=, কারণ নামবিহীন ফাংশনগুলি (অর্থাত্ জমা দেওয়া ফাংশনটির মূল্যায়নকারী অভিব্যক্তি) ভাল হয় যদি না নামটির পুনরাবৃত্তির মতো কিছু প্রয়োজন হয়।
মার্টিন ইন্ডার

এখানে সুস্পষ্ট sensক্যমত্য নেই, তবে প্রান্তিক শীর্ষ ভোটের উত্তরগুলি আপনার সমাধানের অনুমতি দেওয়ার পরামর্শ দেয় sugges
মার্টিন ইন্ডার

0

জাভা 7, 97 96 109 বাইট

String c(int i){return i>16&i<20?"10+"+(i-10):i%100<70?i+"":i<80?"60+"+c(i-60):"4*20"+(i<81?"":"+"+c(i-80));}

বাগ-ফিক্সিংয়ের ক্ষেত্রে +13 বাইট 80.. :(

ব্যাখ্যা:

String c(int i){      // Method with integer parameter and String return-type
  return i>16&i<20?   //  If 17..19:
    "10+"+(i-10)      //   Return "10+" + `i`-10
   :i%100<70?         //  Else if 1..16; 20..69; 100:
    i+""              //   Return `i`
   :i<80?             //  Else if 70..79:
    "60+"+c(i-60)     //   Return "60+" + recursive-call with `i`-60
   :                  //  Else (80..99):
    "4*20"+           //   Return "4*20" +
     (i<81?           //   If 80:
      ""              //    nothing
     :                //   Else (81..99)
      "+"+c(i-80));   //    recursive-call with `i`-80
}                     // End of method

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

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

class M{
  static String c(int i){return i>16&i<20?"10+"+(i-10):i%100<70?i+"":i<80?"60+"+c(i-60):"4*20"+(i<81?"":"+"+c(i-80));}

  public static void main(String[] a){
    for (int i = 1; i <= 100; i++) {
      System.out.println(c(i));
    }
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.