একটি ইনপুট ধরণ নির্ধারণ করুন


15

চ্যালেঞ্জটি সহজ: একটি ইনপুটের ধরণ নির্ধারণ করুন এবং এটি কোন ধরণের তা বলার জন্য একটি সনাক্তকারী আউটপুট করুন।

  • "UI 'তে", স্বাক্ষরবিহীন পূর্ণসংখ্যা: 0, 1, 34,111111111111111111111111111111111111111111
  • "এসআই", পূর্ণসংখ্যা সাইন ইন করুন: +0, +1, +42, -1, -3,-111111111111111111111111111111111111111111
  • "ইউডি", সাইন করা হয়নি দশমিক: 0.0, 1.23,1234.1234
  • "এসডি", দশমিক সাইন ইন করুন: -0.0, +0.0,-1.235
  • "এলই", চিঠি: a- zএবং A-Z
  • "এসওয়াই", প্রতীক: এএসসিআইআই কোড পয়েন্ট: [32-47, 58-64, 91-96, 123-126](যেমন সংখ্যা এবং বর্ণ বাদে সমস্ত অক্ষর)
  • "এসটি", স্ট্রিং: দুই বা ততোধিক অক্ষর যা উপরের সংখ্যা বিন্যাসগুলির কোনও হিসাবে পার্স করা যায় না

নিয়মাবলী:

  • ইনপুটটি 1-99 অক্ষর দীর্ঘ হবে
  • ইনপুটটিতে কেবল মুদ্রণযোগ্য ASCII অক্ষর, কোড পয়েন্ট থাকবে: 32-126।
  • উপরে বর্ণিত হিসাবে আউটপুট দুটি শনাক্তকারী অক্ষর হওয়া উচিত (ইউআই, এসআই ...)
  • স্ট্যান্ডার্ড আই / ও বিধি প্রযোজ্য

উদাহরণ:

UI:
0
01
34
12938219383278319086135768712319838871631827319218923

SI:
-0
+01
+1
-123
+123

UD:
0.0
3.1415
2.718281828459045235360287471352662497757

SD:
+0.0
-3.1415
+2.718281828459045235360287471352662497757

LE:
a
k
L
Z

SY:
@
"
+
-

ST:
Hello, World!
f2!"
+23df
1234A
'"!
.012
1.
UI
+-1
5+3

SYএকাধিক চরিত্র হতে পারে?
FryAmTheEggman

আমি 111111111111111111111111111111111111111111পূর্ণসংখ্যার ধরণের হিসাবে বিবেচনা করব না ।
ম্যাট

@ ফ্রাইএইমডিজম্যান সিএই একটি চরিত্র।
স্টিভি গ্রিফিন

সুতরাং আমরা স্ট্রিং হিসাবে ইনপুট নিতে?
lirtosiast

6
@ ম্যাট, এটি একটি uint8বা নাও হতে পারে int64তবে এটি অবশ্যই একটি পূর্ণসংখ্যা
স্টিভি গ্রিফিন 21

উত্তর:


0

পাইথ - 47 বাইট

কিছু কাটা কৌশল দ্বারা গল্ফ কয়েক বাইট বন্ধ করতে পারেন।

.x-+?@z"+-"\S\U?@z\.\D\Isz?!tz?}rzZG"LE""SY""ST

টেস্ট স্যুট


5

জাভাস্ক্রিপ্ট (ES6), 99

x=>(z=x.match(/^([+-])?\d+(\.\d+)?$/))?'SU'[+!z[1]]+'DI'[+!z[2]]:x[1]?'ST':parseInt(x,36)?'LE':'SY'

পরীক্ষা

f=x=>(z=x.match(/^([+-])?\d+(\.\d+)?$/))?'SU'[+!z[1]]+'DI'[+!z[2]]:x[1]?'ST':parseInt(x,36)?'LE':'SY'

console.log=x=>O.textContent+=x+'\n'

;console.log(['0','01','34','12938219383278319086135768712319838871631827319218923'].map(x=>f(x)+' '+x).join`\n`)
;console.log(['-0','+01','+1','-123','+123'].map(x=>f(x)+' '+x).join`\n`)
;console.log(['0.0','3.1415','2.718281828459045235360287471352662497757'].map(x=>f(x)+' '+x).join`\n`)
;console.log(['+0.0','-3.1415','+2.718281828459045235360287471352662497757'].map(x=>f(x)+' '+x).join`\n`)
;console.log([...'akLZ'].map(x=>f(x)+' '+x).join`\n`)
;console.log([...'@"+-'].map(x=>f(x)+' '+x).join`\n`)
;console.log(['Hello, World!','f2!"','+23df','1234A',`'"!`,'.012','1.','UI','+-1','5+3'].map(x=>f(x)+' '+x).join`\n`)
<pre id=O></pre>


1
আমি নিশ্চিত ছিলাম যে কেউ ভাগ করে নেওয়া কেসগুলির জন্য অনুকূল করতে সক্ষম হবে তবে আমি অক্ষরগুলি সনাক্ত করতে আপনার পার্সেন্টের ব্যবহার পছন্দ করি।
নীল

আপনার
রেজেক্সে

@ আবশী এটি প্রয়োজনীয় যেহেতু আমার কাছে এস বা ইউ পার্থক্য করার জন্য সাইন জন্য একটি ক্যাপচার গ্রুপ দরকার
edc65

@ ওয়াশিংটনগুয়েডস না, এটি হতে পারে (\+|-)তবে কোনও বাইট সংরক্ষিত হতে পারে
edc65

3

ট্যুরিং মেশিন কোড, 1544 বাইট

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

0 + _ r s
0 - _ r s
0 0 _ r u
0 1 _ r u
0 2 _ r u
0 3 _ r u
0 4 _ r u
0 5 _ r u
0 6 _ r u
0 7 _ r u
0 8 _ r u
0 9 _ r u
0 a _ r l
0 b _ r l
0 c _ r l
0 d _ r l
0 e _ r l
0 f _ r l
0 g _ r l
0 h _ r l
0 i _ r l
0 j _ r l
0 k _ r l
0 l _ r l
0 m _ r l
0 n _ r l
0 o _ r l
0 p _ r l
0 q _ r l
0 r _ r l
0 s _ r l
0 t _ r l
0 u _ r l
0 v _ r l
0 w _ r l
0 x _ r l
0 y _ r l
0 z _ r l
0 A _ r l
0 B _ r l
0 C _ r l
0 D _ r l
0 E _ r l
0 F _ r l
0 G _ r l
0 H _ r l
0 I _ r l
0 J _ r l
0 K _ r l
0 L _ r l
0 M _ r l
0 N _ r l
0 O _ r l
0 P _ r l
0 Q _ r l
0 R _ r l
0 S _ r l
0 T _ r l
0 U _ r l
0 V _ r l
0 W _ r l
0 X _ r l
0 Y _ r l
0 Z _ r l
0 * _ r y
s 0 _ r s
s 1 _ r s
s 2 _ r s
s 3 _ r s
s 4 _ r s
s 5 _ r s
s 6 _ r s
s 7 _ r s
s 8 _ r s
s 9 _ r s
s . _ r d
s _ _ r i
s * _ r T
u 0 _ r u
u 1 _ r u
u 2 _ r u
u 3 _ r u
u 4 _ r u
u 5 _ r u
u 6 _ r u
u 7 _ r u
u 8 _ r u
u 9 _ r u
u . _ r D
u _ _ r I
u * _ r T
l _ _ r L
l * _ r T
y _ _ r S
y * _ r T
d 0 _ r d
d 1 _ r d
d 2 _ r d
d 3 _ r d
d 4 _ r d
d 5 _ r d
d 6 _ r d
d 7 _ r d
d 8 _ r d
d 9 _ r d
d _ _ r e
d * _ r T
i 0 _ r i
i 1 _ r i
i 2 _ r i
i 3 _ r i
i 4 _ r i
i 5 _ r i
i 6 _ r i
i 7 _ r i
i 8 _ r i
i 9 _ r i
i _ _ r j
i * _ r T
D 0 _ r D
D 1 _ r D
D 2 _ r D
D 3 _ r D
D 4 _ r D
D 5 _ r D
D 6 _ r D
D 7 _ r D
D 8 _ r D
D 9 _ r D
D _ _ r E
D * _ r T
I 0 _ r I
I 1 _ r I
I 2 _ r I
I 3 _ r I
I 4 _ r I
I 5 _ r I
I 6 _ r I
I 7 _ r I
I 8 _ r I
I 9 _ r I
I _ _ r J
I * _ r T
L * L r M
M * E r halt
S * S r Y
Y * Y r halt
e * S r f
f * D r halt
j * S r k
k * I r halt
E * U r f
J * U r k
T _ S r U
T * _ r T
U * T r halt

3
দয়া করে কোডটির একটি সম্পূর্ণ গল্ফ সংস্করণ অন্তর্ভুক্ত করুন। যদি সাদা স্থানটি অপসারণ করা যায় না, তবে এটি অবশ্যই বাইট গণনায় গণনা করতে হবে।
মেগো

2
দেখে মনে হচ্ছে এটি অপসারণ করা যায় না, প্রতীকগুলির মধ্যে ফাঁকা স্থান ছাড়া প্রোগ্রামটি ঠিকমতো কাজ করে না।
ম্যাথু স্মিথ

এটি "+ -1" (উদাহরণগুলি থেকে) এসটি হিসাবে শ্রেণিবদ্ধ বলে মনে হচ্ছে না।
Xantix

2

রেটিনা, 98 97 বাইট

সত্যিই আমার রেগেক্স দক্ষতা অনুশীলনের একটি দুর্দান্ত উপায়।

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

^(?![+-]?\d+(\.\d+)?$)..+
ST
^([+-]?)\d+$
$1UI
^([+-]?)\d+\.\d+$
$1UD
i`^[a-z]$
LE
^.$
SY
[+-]U
S

4
আপনি একটি বাইট সংরক্ষণ করতে পরিবর্তন ^[a-zA-Z]$করতে পারেনi`^[a-z]$
ডাভকো

1

লুয়া, 157 বাইট

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

Golfed:

n=(...)m=string.match s=m(n,"^[+-]")and"S"or"U"print(m(n,"^[+-]?%d+%.%d+$")and s.."D"or m(n,"^[+-]?%d+")and s.."I"or m(n,"^%w$")and"LE"or#n==1 and"SY"or"ST")

Ungolfed:

n = "2.718281828459045"

s = n:sub(1,1):match("[+-]") and "S" or "U"

if n:match("^[+-]?%d+%.%d+$") then
    print(s.."D")
elseif n:match("^[+-]?%d+") then
    print(s.."I")
elseif n:match("^%w$") then
    print("LE")
elseif #n==1 then
    print("SY")
else
    print("ST")
end

1

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

s=>"UISIUDSDLESYST".substr(s.match(/^((\d+)|([+-]\d+)|(\d+\.\d+)|([+-]\d+\.\d+)|([A-Z])|(.)|(.*))$/i).indexOf(s,2)*2-4,2)

বিকল্প সংস্করণ, এছাড়াও 120 বাইট:

s=>"STUISIUDSDLESY".substr(s.match(/^(?:(\d+)|([+-]\d+)|(\d+\.\d+)|([+-]\d+\.\d+)|([A-Z])|(.)|.*)$/i).lastIndexOf(s)*2,2)

অবশ্যই রেইজেক্সটি একটি রেইজেক্স eval(`/regex/`)কনস্ট্রাক্টর + টেম্পলেট স্ট্রিং সহ গল্ফ করা যেতে পারে
ডাউনওয়েট

0

জাভা, 192 বাইট

String t(String v){for(String[]x:new String[][]{{"\\d+","UI"},{"[-+]\\d+","SI"},{"\\d+\\.\\d+","UD"},{"[-+]\\d+\\.\\d+","SD"}})if(v.matches(x[0]))return x[1];return (v.length()==1?"SY":"ST");}

return (v.length()==1?"SY":"ST");হতে পারে return v.length()<2?"SY":"ST";(-3 বাইটস) অথবা এটা এই হতে পারে: String t(String v){for(String x:"UI\\d+;SI[-+]\\d+;UD\\d+\\.\\d+;SD[-+]\\d+\\.\\d+".split(";"))if(v.matches(x.substring(2)))return x.substring(0,2);return v.length()<2?"SY":"ST";}( 179 বাইট ) এবং ছাড়াও আপনি পরিবর্তন হতে পারে String t(String v)জন্য v->যখন আপনি একটি জাভা 8 ল্যামডা ব্যবহার করুন।
কেভিন ক্রুইজসেন

0

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

আমি replaceআরও "অভিনব" হতে চেষ্টা করেছি ।

এটি একটি বেনামে ফাংশন তৈরি করে যা টাইপের স্ট্রিংটি দেয়।

s=>s.replace(/^((([+-])?(\d+)(\.\d+)?)|([a-z])|([ -~])|([^\0]*))$/i,(_,a,b,c,d,e,f,g)=>b?(c?'S':'U')+(e?'D':'I'):(f?'LE':'S'+(g?'Y':'T')))

এটি উন্নত করার জন্য কোনও পরামর্শ সম্পূর্ণরূপে স্বাগত জানানো হবে।


1
1.হওয়া উচিত ST, না UD। আপনার পরিবর্তন \d*করতে\d+
edc65

@ edc65 কিভাবে? এটি দশমিক। যে হিসাবে একই 1.0
ইসমাইল মিগুয়েল

এটি বৈধ হতে পারে বা না (এর 1.পরিবর্তে আমি লিখি না 1) তবে এটি আপনার পছন্দ বা আমার নয়: পরীক্ষার মামলা রয়েছে
edc65

@ edc65 আপনি ঠিক বলেছেন আমি খুব বিশাল তালিকা এড়িয়ে গেছি। আমি এটা ঠিক করেছি। ধন্যবাদ!
ইসমাইল মিগুয়েল

0

পাইথন 3.5 - 241 240 বাইট:

( @ বিড়ালআরএফ্লুফিকে ধন্যবাদ 1 বাইট সংরক্ষিত )

import re
def r(g):
 y={'^\d+$':'UI','^[+-]\d+$':'SI','^[0-9]\d*(\.\d+)?$':'UD','[+-](?=[0-9]\d*(\.\d+))':'SD','[a-zA-Z]+':'LE','^[^A-Za-z0-9]+$':'SY'};d=[y[i]for i in list(y.keys())if re.match(i,g)]
 if len(d)>0:return d[0]
 else:return'ST'

এটি কিছুটা দীর্ঘ হতে পারে, তবে কাজটি বেশ নিখুঁতভাবে করে। এটি আমার নিয়মিত প্রকাশের দক্ষতা উন্নত করার সত্যিই ভাল উপায় ছিল। চ্যালেঞ্জের জন্য ধন্যবাদ। :) আমি যদি চেষ্টা করতে পারি তবে আরও সংক্ষিপ্ত করে চেষ্টা করব।


কোনও স্থান বাঁচাতে আপনি ফাংশনের বাইরে আমদানি পুনরায় সরিয়ে নিতে পারেন । (ব্যাকটিক্সবিহীন মূ .় আইপ্যাড কীবোর্ড)
ক্যালকুলেটরফলাইন

@ ক্যাটস আরেফ্লাফি হ্যাঁ, আমি এটি ভাবিনি। ধন্যবাদ! :)
আর কাপ,

@CatsAreFluffy: বাস্তবিক, আইওএস কীবোর্ড করে ব্যাকটিক অনুমতি দেয়! আমার আইফোন ব্যবহার করে মার্কডাউন
হোমারসিম্পসন

নিবন্ধন করুন এটা জানা ভাল.
আর কাপ,

এছাড়াও len(d)>0==d>[]
ক্যালকুলেটরলাইন 14

0

টিসিএল 414 বাইট

অসমাপ্ত বাস্তবায়ন, পাঠযোগ্য:

proc a b {
  if {[string index $b 0] eq "+" || [string index $b 0] eq "-"} {
    set c S
  } elseif {[string match {[A-Za-z]} $b]} {
    return LE
  } elseif {[regexp {^(?![+-]?\d+(\.\d+)?$)..+} $b]} {
    return ST
  } elseif {[regexp {[^a-zA-Z0-9.]} $b]} {
    return SY
  } else {
    set c U
  }
  if {[string match *.* $b]} {
    return $c\U
  } else {
    return $c\I
  }
}
puts [a $argv]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.