প্রায় নিখুঁত লাইসেন্স প্লেটগুলি সনাক্ত করুন


15

দ্রষ্টব্য: এটি @Willbeing দ্বারা এই প্রশ্নটি দ্বারা অনুপ্রাণিত হয়েছে যেখানে কোনও নির্দিষ্ট দৈর্ঘ্যের নিখুঁত প্লেটের সংখ্যা গণনা করার কাজটি ছিল তবে এটি কিছুটা আলাদা।


আমরা একটি নিখুঁত লাইসেন্স প্লেটকে কল বলি যার পাঠ্যটি নিম্নলিখিত শর্তগুলিকে সন্তুষ্ট করে:

  • এটিতে অক্ষর রয়েছে, যা হয় বড় হাতের অক্ষর ( [A-Z]) বা অঙ্ক ( [0-9]) হতে পারে
  • ইংরেজি বর্ণমালা তার চিঠির অবস্থানের সামিং, 1-ইন্ডেক্স (অর্থাৎ, A=1,B=2,...,Z=26) একটি পূর্ণসংখ্যা দেয় এন
  • প্রতিটি সংখ্যার অঙ্ক পাওয়া, সেগুলি সংমিশ্রণ করা এবং তারপরে সমস্ত ফলাফলকে গুণ করা একই ফলাফল দেয়, এন
  • এন একটি নিখুঁত বর্গ (যেমন: 49 (7 2 ) , 16 (4 2 ) )

একটি প্রায় নিখুঁত লাইসেন্স প্লেট , একটি নিখুঁত লাইসেন্স প্লেট জন্য শর্ত পূরণ ছাড়া এন হয় না একটি নিখুঁত বর্গক্ষেত্র।


ইনপুট

হার্ডকডিং ব্যতীত কোনও স্ট্যান্ডার্ড ফর্মের ইনপুট হিসাবে নেওয়া লাইসেন্স প্লেটের পাঠ্যের প্রতিনিধিত্বকারী একটি স্ট্রিং।

আউটপুট

যদি প্রদত্ত স্ট্রিংটি প্রায় নিখুঁত লাইসেন্স প্লেটের প্রতিনিধিত্ব করে তবে সত্যবাদী মানটি (যেমন: True/ 1) প্রদান করুন, অন্যথায় একটি মিথ্যা মান (যেমন: False/ 0) প্রদান করুন। এই ফাঁকগুলি কঠোরভাবে নিষিদ্ধ করা হয়েছে তা নোট নেওয়ার সময় কোনও মানক আউটপুট গ্রহণ করা হয়।


উদাহরণ

licence plate -> output


A1B2C3 -> 1

A + B + C = 1 + 2 + 3 = 6
1 * 2 * 3 = 6 
6 is not a perfect square, 6 = 6 => nearly perfect plate

01G61 -> 1

(0 + 1) * (6 + 1) = 7
G = 7
7 is not a perfect square, 7 = 7 => nearly perfect plate

11BB2 -> 0

(1 + 1) * 2 = 4
B + B = 2 + 2 = 4
4 = 4, but 4 is the square of 2 => perfect license plate (not what we want)

67FF1 -> 0

(6 + 7) * 1 = 13
F + F = 6 + 6 = 12
12 != 13 => not perfect at all!

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর!



আমি মনে করি কোড-গল্ফ হিসাবে এটি আরও ভাল হবে ।
এরিক আউটগল্ফার

আমি নিশ্চিত এটি নিশ্চিত করুন। আমরা কেবলমাত্র আউটপুট truthy যদি লাইসেন্স প্লেট নির্ভুল এবং nহয় না একটি নিখুঁত বর্গক্ষেত্র?
গণিত জাঙ্কি

@ মাথজানকি হ্যাঁ টিএল; ডিআর: কেবলমাত্র লাইসেন্সটি প্রায় নিখুঁত হলে (দেরী সাড়া পাওয়ার জন্য পিএস দুঃখিত)
মিঃ এক্সকোডার

1
কেউ এ বিষয়ে কিছু s/licence/license/igকরার আগে জেনে রাখুন যে "লাইসেন্স" হ'ল ব্রিটিশ ইংরেজিতে (পাশাপাশি বিশ্বের অন্যান্য অঞ্চলে ইংরেজি) সঠিক বানান।
মেগো

উত্তর:


7

জেলি , 29 28 30 বাইট

একটি বাগ ফিক্স +1 বাইট ChristianSievers দ্বারা (ভুল শুধুমাত্র শূন্য, সাবস্ট্রিং সঙ্গে তার আচরণ) + 1 বাইট বিক্ষোভ জন্য মিথ্যা পজিটিভ ফিক্স "0", "00", ... উপরে ফিক্সিং সময় পাওয়া (0 একটি নিখুঁত বর্গক্ষেত্র যায়)।

i@€ØAS;Ʋ$
e€ØAœpV€€LÐfS€P;0⁼Ç

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

কিভাবে?

i@€ØAS;Ʋ$ - Link 1: [letter-sum, letter-sum is perfect square?]: plate
i@€        - index of €ach char in plate [reversed @rguments] (1-based, 0 otherwise) in:
   ØA      -     uppercase alphabet
     S     - sum
         $ - last two links as a monad:
      ;    -     concatenate with:
       Ʋ  -         is square?

e€ØAœpV€€LÐfS€P;0⁼Ç - Main link: plate                        e.g. "11BB2"
    œp              - partition plate at truthy values of:
e€                  -     is in? for €ach char in plate:
  ØA                -         uppercase alphabet                   [['1','1'],[''],['2']]
      V€€           - evaluate for €ach for €ach                   [[1,1],[],[2]]
          Ðf        - filter keep:
         L          -     length                                   [[1,1],[2]]
            S€      - sum each                                     [2,2]
              P     - product                                      4
               ;0   - concatenate a zero                           [4,0]
                  Ç - last link (1) as a monad (taking plate)      [4,1]
                 ⁼  - equal? (non-vectorising)                     0

বাহ, প্রতিভা জেলি সমাধান!
মিঃ এক্সকোডার 16


@ ক্রিশ্চিয়ানসিভারস, ভাল ক্যাচ অন্যটির সাথে সংযুক্ত, ধরণের সম্পর্কিত, বাগ এবং পরীক্ষার স্যুটটি বাড়ানো হয়েছে।
জনাথন অ্যালান

7

এমএটিএল, 36 34 33 35 বাইট

3Y432YXU"@V!Usvp]GlY2&msy=wtQ:qUm~v

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

ব্যাখ্যা

        % Implicitly grab input as a string
3Y4     % Push the predefined literal '[A-Za-z]+' to the stack
32      % Push the literal 32 to the stack (ASCII for ' ')
YX      % Replace the matched regex with spaces (puts a space in place of all letters)
U       % Convert the string to a number. The spaces make it such that each group of
        % of consecutive digits is made into a number
"       % For each of these numbers
  @V!U  % Break it into digits
  s     % Sum the digits
  v     % Vertically concatenate the entire stack
  p     % Compute the product of this vector
]       % End of for loop
G       % Explicitly grab the input again
lY2     % Push the predefined literal 'ABCD....XYZ' to the stack
&m      % Check membership of each character in the input in this array and 
        % return an array that is 0 where it wasn't a letter and the index in 'ABC..XYZ'
        % when it was a letter
s       % Sum the resulting vector
y       % Duplicate the product of the sums of digits result
=       % Compare to the sum of letter indices result
w       % Flip the top two stack elements
Q       % Add one to this value (N)
t:      % Duplicate and compute the array [1...N]
q       % Subtract 1 from this array to yield [0...N-1]
U       % Square all elements to create all perfect squares between 1 and N^2
m~      % Check to ensure that N is not in the array of perfect squares
v       % Vertically concatenate the stack.
        % Implicitly display the truthy/falsey result

কেবল জিরো সমন্বিত প্লেটের জন্য মিথ্যা ইতিবাচক ফলন দেয়, উদাহরণস্বরূপ '0'বা '00'(এফডাব্লুআইডাব্লু আমি কেবল আমার কোডটিতে এটি স্থির করেছি)।
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান আপডেট হয়েছে
স্যুভার

6

পাইথন 2, 120 118 বাইট

s=t=p=0;r=1
for n in input():
 h=int(n,36)
 if h>9:s+=h-9;r*=t**p
 p=h<10;t=(t+h)*p
print(s==r*t**p)&(int(s**.5)**2<s)

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

বেস -36 ( h) -তে প্রতিটি চরিত্রকে একটি সংখ্যা হিসাবে ব্যাখ্যা করে । দশমিক রূপান্তর করে এবং যোগফল যোগ করে h>9(যার অর্থ এটি একটি চিঠি), অন্যথায় এমন একটি ভেরিয়েবল যুক্ত করে যা পরে চলমান পণ্য গঠনে গুণিত হয়।


4

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

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

$.*=eval s/./+$&/gr for/\d+/g;$t-=64-ord for/\pl/g;$_=$.==$t&&($.**.5|0)**2!=$.

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

$.*=eval s/./+$&/gr for/\d+/g;একটানা সংখ্যার যোগফলকে গুণ করে। (আমি ব্যবহার করছি $.কারণ এটির প্রাথমিক মানটি 1, যার অর্থ এটি গুণকের নিরপেক্ষ উপাদান)। আরও সুনির্দিষ্টভাবে, প্রতিটি সংখ্যার ( for/\d+/g) এর জন্য, প্রতিটি অঙ্কের আগে s/./+$&/grএকটি স্থান রাখে +, তারপরে স্ট্রিংটি evaluated হয় এবং বর্তমান পণ্যটির সাথে গুণিত হয়।
দ্বিতীয়ত, প্রতিটি বর্ণের $t-=64-ord for/\pl/g;অঙ্কগুলি $t( for/\pl/g)। ( ordচিঠির জন্য ascii কোডটি ফিরিয়ে দিন এবং 64-..এটি 1 এবং 26 এর মধ্যে হয়ে যায়
Finally অবশেষে, $.==$tউভয় মান একই এবং ($.**.5|0)**2!=$.এটি একটি নিখুঁত বর্গ নয় তা পরীক্ষা করে।


4

পাইথন 2, 267 207 বাইট

Ovs ধন্যবাদ 60 বাইট সংরক্ষণ করা

import re
def g(l):a=reduce(lambda a,b:a*b,[sum(map(int,list(i)))for i in re.sub(r'\D',' ',l).split()],1);return a==sum(sum(k)for k in[[ord(i)-64for i in x]for x in re.sub(r'\d',' ',l).split()])and a**.5%1>0

ব্যবহার সহ ফাংশন: print(g('A1B2C3'))

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



4

পাইথন 3 , 163 156 155 164 161 বাইট

from math import*
m=1;s=t=p=0
for x in input():
 try:t+=int(x);p=1
 except:m*=[1,t][p];p=t=0;s+=ord(x.upper())-64
if p:m*=t
print(m==s and sqrt(m)!=int(sqrt(m)))

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

  • জোনাথন এবং শুকিকে ধন্যবাদ 7 বাইট সংরক্ষণ করুন
  • 1 বাইট সংরক্ষণ করা হয়েছে: এছাড়াও মিথ্যা ইতিবাচক সমস্যাটি স্থির করে। জনাথনকে ধন্যবাদএটি নির্দেশ !
  • 11 বাইট যুক্ত করা হয়েছে: পূর্ববর্তী সম্পাদনাটি ভুল ছিল (একটি অযাচিত লুপে অঙ্কের যোগফলের গুণমান চলছে)

1
from math import*আরও ছোট
shooqie

1
আপনার দরকার নেই a, শুধু ব্যবহার করুন for x in input():। প্লেটগুলি জিরো (যেমন 11AA00) এর স্ট্রিংয়ের সাথে শেষ হওয়ার জন্য আপনার মিথ্যা ধনাত্মকতা থাকতে পারে , যেহেতু ফাইনালটি m*=tকার্যকর হয় না।
জোনাথন অ্যালান

1
স্পষ্টতই, আমার কোড এতে বিচ্ছিন্ন শূন্যগুলির সাথে যে কোনও স্ট্রিংয়ের জন্য মিথ্যা পজিটিভ দেখায় (3A0B এছাড়াও সত্য দেখানো হয়) ... @ জোনাথান অ্যালান দেখানোর জন্য ধন্যবাদ। আমি এটি ঠিক করার চেষ্টা করব।
officialaimm

নতুন সংস্করণটি দেখুন ... আমি অঙ্কগুলির যোগফলকে গুণিত করব কিনা তা নির্ধারণ করার জন্য একটি নতুন পতাকা চলক 'পি' যুক্ত করেছি।
অফিসিয়ালাইম

3

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

সত্যের জন্য 1, মিথ্যা হিসাবে 0 প্রদান করে

[1-9]
$ *
10 | 01
1
S_` (\ ডি)
O`
{ `1 (? = 1 * \ N (+1 টি))
$ 1
) 2 = `1 + + \ N

[জাতীয়]
1 $ + +
[টি জেড]
2 $ + +
T`0L`ddd
1> `\ D + \ N?
$ *
^ (((1) (((2) \ 2 (11) |? 111)) | 1)) * \ N

^ (1 *) \ n \ n 1 $

অনলাইনে চেষ্টা করে দেখুন!

ব্যাখ্যা:

[1-9]
$ *
10 | 01
1

প্রথমত, আমরা সমস্ত অ-শূন্য অঙ্কগুলি তাদের অবিচ্ছিন্ন উপস্থাপনের সাথে প্রতিস্থাপন করি। আমরা সংলগ্ন সংখ্যার সাথে যে কোনও শূন্যকে সরিয়ে ফেলি যাতে তারা আমাদের অবিচ্ছিন্ন ক্রিয়াকে প্রভাবিত না করে don't

S_` (\ ডি)

খালি লাইনগুলি বাদ দেওয়ার বিষয়ে সতর্ক হয়ে, ফলস্বরূপ স্ট্রিংগুলিকে বিভক্ত করুন (দুটি অক্ষর পরপর হলে এটি সমস্যা হয় AA)।

O`
{ `1 (? = 1 * \ N (+1 টি))
$ 1
) 2 = `1 + + \ N

স্ট্রিংকে ডিক্সিকোগ্রাফিকভাবে বাছাই করুন। তারপরে বারবার নিম্নলিখিতগুলি করুন:

1) নিম্নলিখিত লাইনে প্রতিটি 1সংখ্যার সাথে প্রতিস্থাপন 1করুন (এটি গুণকে নকল করে)

2) দ্বিতীয় লাইন সরান 1গুলি

[জাতীয়]
1 $ + +
[টি জেড]
2 $ + +
T`0L`ddd

অক্ষর প্রতিস্থাপন J-Sসঙ্গে 1J, 1Kইত্যাদি ও অক্ষর প্রতিস্থাপন T-Zসঙ্গে 2T, 2Uইত্যাদি তারপর গ্রুপের জন্য প্রতিস্থাপন A-I, J-Sএবং T-Zসঙ্গে 1-9। আমরা (যেমন। প্রতিটি চিঠির সংখ্যাগত মান থাকবে না 13জন্য M)।

1> `\ D + \ N?
$ *

প্রতিটি লাইনকে তবে প্রথমটি আনারিতে রূপান্তর করুন (প্রথম লাইনটি ইতিমধ্যে আনারিতে রয়েছে)। এই রেখাগুলি সংহত করুন। আমরা এখন ফর্মের একটি স্ট্রিং বাকি আছে <product of digits>\n<sum of letters>

^ (((1) (((2) \ 2 (11) |? 111)) | 1)) * \ N

খালি স্ট্রিং সহ একটি বর্গাকার নম্বর প্রতিস্থাপন করুন। এটি "পার্থক্য গাছ" পদ্ধতিটি ব্যবহার করে ।

^ (1 *) \ n \ n 1 $

ম্যাচের 1দু'দিকে দুটি স্ট্রিং থাকলে ফিরে আসুন \n। অন্যথায়, ফিরে 0


জন্য মিথ্যা পজিটিভ 11AA0, 0AA11ইত্যাদি
জনাথন অ্যালান

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