কোনও ইউইউডি রেগেক্সগুলি ব্যবহার না করে বৈধ কিনা তা পরীক্ষা করে দেখুন


44

স্ট্রিং ইনপুট দেওয়া হয়েছে, এমন একটি প্রোগ্রাম লিখুন যা STDOUT বা সমমানের ক্ষেত্রে সত্যবাদী মান প্রিন্ট করে যদি ইনপুটটি বৈধ ইউআইডি হয়, রেজিক্সগুলি ব্যবহার না করে।

একটি বৈধ UID হয়

হাইফেন দ্বারা পৃথক পাঁচটি গ্রুপে 32 টি হেক্সাডেসিমাল অঙ্কগুলি প্রদর্শিত, মোট 36 টি অক্ষরের (32 বর্ণানুক্রমিক অক্ষর এবং চারটি হাইফেন) আকারে 8-4-4-4-12-12 আকারে।

উৎস

পরীক্ষার মামলা

0FCE98AC-1326-4C79-8EBC-94908DA8B034
    => true
00000000-0000-0000-0000-000000000000
    => true
0fce98ac-1326-4c79-8ebc-94908da8b034
    => true
0FCE98ac-1326-4c79-8EBC-94908da8B034
    => true

{0FCE98AC-1326-4C79-8EBC-94908DA8B034}
    => false (the input is wrapped in brackets)
0GCE98AC-1326-4C79-8EBC-94908DA8B034
    => false (there is a G in the input)
0FCE98AC 1326-4C79-8EBC-94908DA8B034
    => false (there is a space in the input)
0FCE98AC-13264C79-8EBC-94908DA8B034
    => false (the input is missing a hyphen)
0FCE98AC-13264-C79-8EBC-94908DA8B034
    => false (the input has a hyphen in the wrong place)
0FCE98ACD-1326-4C79-8EBC-94908DA8B034
    => false (one of the groups is too long)
0FCE98AC-1326-4C79-8EBC-94908DA8B034-
    => false (has a trailing hyphen)
0FCE98AC-1326-4C79-8EBC-94908DA8B034-123
    => false (too many groups)
0FCE98AC13264C798EBC94908DA8B034
    => false (there is no grouping)

বিধি

  • নিয়মিত প্রকাশের অনুমতি নেই
  • আক্ষরিক প্যাটার্নের মিল যা কোনও রেজেক্সের মতো তা অনুমোদিত নয়। উদাহরণস্বরূপ, [0-9a-fA-F]অন্যান্য হেক্সাডেসিমাল আইডেন্টিফায়ার ব্যবহার করে (আমরা এটিকে ডাকব n) এবং তারপরে মিলবে nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnnবা n[8]-n[4]-n[4]-n[4]-n[12]অনুমোদিত নয়
  • ইনপুট হয় হয় STDINবা একটি ফাংশন যুক্তি হিসাবে নেওয়া যেতে পারে
  • ইনপুটটি সংবেদনশীল নয়
  • এটি অনুমান করা নিরাপদ যে ইনপুটটিতে লাইনফিড বা নিউলাইন থাকবে না
  • ইনপুটটিতে কোনও মুদ্রণযোগ্য ASCII অক্ষর থাকতে পারে (স্থানগুলি অন্তর্ভুক্ত)
  • একজন truthy মান থেকে মুদ্রিত করা আবশ্যক STDOUTবা সমমানের যদি ইনপুট একটি বৈধ UUID হয়
  • একজন falsey মান থেকে মুদ্রিত করা আবশ্যক STDOUTবা সমমানের যদি ইনপুট না একটি বৈধ UUID
  • যদি কোনও ফাংশন ব্যবহার করা হয় তবে ব্যবহারের পরিবর্তে STDOUTআউটপুটটি ফাংশনের রিটার্ন মান হতে পারে
  • সত্যবাদী / মিথ্যা মানটি এতে মুদ্রণ করা যায় না STDERR
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য
  • এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে। শুভকামনা!

লিডারবোর্ড

এটি একটি স্ট্যাক স্নিপেট যা ভাষার দ্বারা লিডারবোর্ড এবং বিজয়ীদের একটি সংক্ষিপ্তসার উভয়ই উত্পন্ন করে।

আপনার উত্তরটি প্রদর্শিত হবে তা নিশ্চিত করতে, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন

## Language Name, N bytes

যেখানে এন আপনার জমা দেওয়ার আকার, বাইটগুলিতে

আপনি যদি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (উদাহরণস্বরূপ, পুরানো স্কোরগুলি ধরে ফেলা, বা বাইট গণনাতে পতাকা সহ) কেবলমাত্র নিশ্চিত হয়ে নিন যে আসল স্কোরটি আপনার শিরোনামের শেষ সংখ্যা is

## Language Name, <s>K</s> X + 2 = N bytes


32
দরিদ্র রেটিনা । ডি:
ব্রেইনস্টিল


8
কেবল রেফারেন্সের জন্য, আমি একটি 28-বাইট রেটিনা সমাধান নিয়ে আসতে পারি (গল্ফিং ভাষাগুলিতে এটি এখন অগ্রণী হওয়া সত্ত্বেও কোনও পাগল সুবিধা নয়))
মার্টিন ইন্ডার

5
লুয়ার নিদর্শনগুলি কি অনুমোদিত? এগুলি অবশ্যই নিয়মিত প্রকাশ নয়।
manatwork

1
@ জ্যাকবকেলওর আমি নিশ্চিত যে এটি আপনার সমস্ত প্রশ্নের "মিথ্যা"। আমি মনে করি চ্যালেঞ্জটি মোটামুটি পরিষ্কার যে কেবল ফর্মের স্ট্রিংগুলি \h{8}-\h{4}-\h{4}-\h{4}-\h{12}(যেখানে \hএকটি হেক্সাডেসিমাল সংখ্যা রয়েছে) বৈধ।
মার্টিন এন্ডার

উত্তর:


15

সিজেম, 31 30 29 বাইট

8 4__C]Nf*'-*qA,s'G,_el^+Ner=

সমস্ত পরীক্ষার মামলা এখানে চালান।

ব্যাখ্যা

সরাসরি ইনপুটটির সাথে মেলে প্যাটার্নের পরিবর্তে, আমরা প্রথমে এটি একটি সরল আকারে রূপান্তর করছি যা একক প্যাটার্ন স্ট্রিংয়ের সাথে সহজে তুলনা করা যায়।

8 4__C] e# Push the array of segment lengths, [8 4 4 4 12].
Nf*     e# Turn that into strings of linefeeds of the given length.
'-*     e# Join them by hyphens, giving "NNNNNNNN-NNNN-NNNN-NNNN-NNNNNNNNNNNN".
q       e# Read the input.
A,s     e# Push the string "0123456789".
'G,_el^ e# Push the string "ABCDEFabcdef".
+       e# Concatenate the two strings.
N       e# Push a linefeed.
er      e# Replace all hexadecimal digits with linefeeds.
=       e# Check for equality with the pattern string.

23

জাভাস্ক্রিপ্ট ES6, 73 55 56 অক্ষর

s=>s.split`-`.map(x=>x.length+`0x${x}0`*0)=="8,4,4,4,12"

পূর্ববর্তী 55 অক্ষরের সংস্করণটিতে গ্রুপে স্থানের পিছনে সমস্যা রয়েছে:

s=>s.split`-`.map(x=>x.length+("0x"+x)*0)=="8,4,4,4,12"
// "00000000-0000-0000-000 -000000000000" true

টেস্ট:

f=s=>s.split`-`.map(x=>x.length+`0x${x}0`*0)=="8,4,4,4,12"
;`0FCE98AC-1326-4C79-8EBC-94908DA8B034
0fce98ac-1326-4c79-8ebc-94908da8b034
0FCE98ac-1326-4c79-8EBC-94908da8B034
0GCE98AC-1326-4C79-8EBC-94908DA8B034
0FCE98AC-13264C79-8EBC-94908DA8B034
0FCE98AC-13264-C79-8EBC-94908DA8B034
0FCE98ACD-1326-4C79-8EBC-94908DA8B034
0FCE98AC-1326-4C79-8EBC-94908DA8B034-123
00000000-0000-0000-0000-000000000000
D293DBB2-0801-4E60-9141-78EAB0E298FF
0FCE98AC-1326-4C79-8EBC-94908DA8B034-
00000000-0000-0000-000 -000000000000`.split(/\n/g).every(s=>f(s)==/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(s))

দুর্দান্ত (এবং আমার জন্য
মাতাল হওয়া

@ edc65, "শুকিয়ে যাওয়া" বলতে কী বোঝ?
কিওয়ারটি

অন্তর্ভুক্ত
ingালাই


11

পাওয়ারশেল, 29 21 84 49 37 বাইট

param($g)@{36=$g-as[guid]}[$g.length]

- এই golfing সঙ্গে সাহায্য মন্তব্যের ভাবেন অনেক ধন্যবাদ পরিবর্তন নিয়ম সঙ্গে যোগাযোগ রাখা TessellatingHeckler , iFreilicht , জ্যাকব Krall এবং জোয়ি । সংশোধন এবং পুরানো সংস্করণগুলির জন্য সম্পাদনা ইতিহাস দেখুন।

এই পুনর্বিবেচনাটি ইনপুট হিসাবে নেয় $g, তারপরে একটি @{}উপাদান সহ একটি নতুন হ্যাশ টেবিল তৈরি করে , সূচকটি 36সমান হিসাবে সেট করা হয় $g-as[guid]। এই ব্যবহার বিল্ট ইন -asঅপারেটর দুই .NET ধরনের তথ্য মধ্যে রূপান্তর প্রচেষ্টা - থেকে [string]থেকে [guid]। রূপান্তরটি সফল হলে কোনও [guid]বস্তু ফিরে আসে, অন্যথায় $nullফিরে আসে। এই অংশটি নিশ্চিত করে যে ইনপুট স্ট্রিংটি একটি বৈধ। নেট নেট UID

পরবর্তী পদক্ষেপটি হ্যাশ টেবিলের সাথে সূচীকরণ করা [$g.length]। তাহলে $gদৈর্ঘ্য ঠিক 36 টি অক্ষর নয়, হ্যাশ টেবিল ফিরে আসবে $null, যা একটি falsey মান হিসাবে আউটপুট হবে। যদি $gদৈর্ঘ্যে 36 টি অক্ষর হয়, তবে .NET কলের ফলাফল আউটপুট হবে। যদি $gকোনও বৈধ .NET জিইউডি (কোনও আকারে) না হয়, তবে এটি $nullমিথ্যা মান হিসাবে আউটপুট হবে । অন্যথায় এটি একটি নেট নেট গিউড অবজেক্টটিকে সত্যবাদী মান হিসাবে আউটপুট দেয় - যদি চ্যালেঞ্জটির অনুরোধ করা ফর্ম্যাটটির সাথে মেলে তবে আউটপুট হতে পারে এমন একমাত্র উপায়।

উদাহরণ

এখানে আমি প্যারেন্সে স্ক্রিপ্ট কলটি এমপ্লসুলেট করছি এবং স্পষ্টভাবে স্পষ্টতার জন্য বুলিয়ান হিসাবে কাস্টিং করছি।

PS C:\Tools\Scripts\golfing> [bool](.\check-if-a-uuid-is-valid.ps1 '0FCE98AC-1326-4C79-8EBC-94908DA8B034')
True

PS C:\Tools\Scripts\golfing> [bool](.\check-if-a-uuid-is-valid.ps1 '0FCE98AC-1326-4C79-8EBC-94908DA8B034D')
False

PS C:\Tools\Scripts\golfing> [bool](.\check-if-a-uuid-is-valid.ps1 '0FCE98AC13264C798EBC94908DA8B034')
False

4
আমি !!($args[0]-as[guid])21 বাইটে নিক্ষেপ করব ।
টেসেল্ল্যাটিংহেকলার 0

2
আপনি কি 4 টি বাইট বাঁচাতে পারবেন না !!()? মানগুলি $NULLএবং [guid]পারস্পরিক একচেটিয়া হওয়ায় তারা ট্রুথি এবং ভুয়া মূল্যবোধ উপস্থাপন করতে যোগ্য, তাই না? যাইহোক, বুলেয়ানে রূপান্তর করার দুর্দান্ত উপায়, সমাধানটিকে ভালবাসুন!
iFreilicht

@iFreilicht এটি একটি পয়েন্ট; লিঙ্কযুক্ত "সত্যবাদী / মিথ্যা ব্যাখ্যা" পোস্টের দিকে তাকানো - আমি সম্মত করি এটি বৈধ বলে মনে হচ্ছে।
টেসেল্ল্যাটিংহেকলার

1
এই সমাধান ভুল ফেরৎ Trueজন্য 0FCE98AC13264C798EBC94908DA8B034, যা কোন হাইফেন হয়েছে
জ্যাকব Krall

1
@ টেসেল্লাটিংহেকলার নাপ, সত্য হতে পারে না। একটি অঙ্ক যুক্ত করা 0FCE98AC-1326-4C79-8EBC-94908DA8B034D( যেমন অতিরিক্ত ডি) শেষে মিথ্যা প্রত্যাবর্তন করে $TRUE, যেহেতু এটি কেবল আক্রমণাত্মক অঙ্কটি ছাঁটাই করে এবং প্রথম 36 টি অক্ষর বৈধ।
অ্যাডমবর্কবর্ক

9

ইমাস লিস্প, 236 বাইট

(lambda(s)(and(eq(string-bytes s)36)(let((l(string-to-list s))(i 0)(h '(8 13 18 23))(v t))(dolist(c l v)(set'v(and v(if(member i h)(and v(eq c 45))(or(and(> c 47)(< c 58))(and(> c 64)(< c 91))(and(> c 96)(< c 123))))))(set'i(+ i 1))))))

Ungolfed:

(lambda (s)
  (and (eq (string-bytes s) 36) ; check length
       (let ((l (string-to-list s))
             (i 0)
             ; location of hyphens
             (h '(8 13 18 23))
             (v t))
         (dolist (c l v)
           (set 'v (and v (if (member i h)      ; check if at hyphen position
                              (and v (eq c 45)) ; check if hyphen
                            (or (and (> c 47) (< c 58))      ; check if number
                                (and (> c 64) (< c 91))      ; check if upper case letter
                                (and (> c 96) (< c 123)))))) ; check if lower case letter
           (set 'i (+ i 1)))))) ; increment

8

নিয়মে পরিবর্তনের কারণে , এই উত্তরটি আর প্রতিযোগিতামূলক নয় :(

সি, 98

main(a,n){printf("%d",scanf("%8x-%4hx-%4hx-%4hx-%4hx%8x%n%c",&a,&a,&a,&a,&a,&a,&n,&a)==6&&n==36);}

বেশিরভাগ ক্ষেত্রে মোটামুটি স্ব বর্ণনামূলক। %nবিন্যাস সুনির্দিষ্টভাবে উল্লেখ করা বাইটের সংখ্যা এতদূর পড়া দেয়, 36 হওয়া উচিত যা scanf()আয় মিলেছে আইটেম সংখ্যা, যা হওয়া উচিত 6. চূড়ান্ত %cকিছু মেলানো যাবে না। যদি এটি হয়, তবে সেখানে অনুবর্তনযোগ্য পাঠ্য রয়েছে এবং scanf()7 টি ফিরে আসবে।

সমস্যাযুক্ত -wসতর্কতাগুলি দমন করার জন্য সংকলন করুন (বেশ কয়েকটি রয়েছে)।


6

জাভাস্ক্রিপ্ট ES6, 70 83

উল্লেখ্য একটি বাগ (কিছু উন্নত ও সমাধান এবং পরামর্শ) খোঁজার জন্য @Qwertiy করার ধন্যবা

Thx @ CᴏɴᴏʀO'Bʀɪᴇɴ 2 বাইট সংরক্ষণ করা হয়েছে

দৈর্ঘ্যের চেকটি সরলকরণের জন্য অন্য 9 বাইট সংরক্ষণ করা হয়েছে (জটিল পদ্ধতিটি প্রথম খসড়ায় ছোট ছিল , তবে এখন নয়)

u=>u.split`-`.every((h,l,u)=>u[4]&&-`0x${h}1`&&h.length-'40008'[l]==4)

ব্যাখ্যা

u=>u.split`-` // make an array splitting at '-'
.every( // for every element the following must be true
 (h,l,u)=> // h is the element, l is the index, u is the whole array
 u[4] // element 4 must be present (at least 5 element in array)
 && -`0x${h}1` // element must be a valid hex string with no extraneous blanks (else NaN that is falsy)
 // get requested length from index (8,4,4,4,12 sub 4 to put in 1 char)
 // a 6th elements will be rejected as undefined != 4
 && h.length-'40008'[l]==4// then check element length
)

পরীক্ষার স্নিপেট

f=u=>u.split`-`.every((h,l,u)=>u[4]&&-`0x${h}1`&&h.length-'40008'[l]==4)

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

;[
  ['0FCE98AC-1326-4C79-8EBC-94908DA8B034',true],
  ['0fce98ac-1326-4c79-8ebc-94908da8b034',true],
  ['0FCE98ac-1326-4c79-8EBC-94908da8B034',true],
  ['00000000-0000-0000-0000-000000000000', true],
  ['ffffffff-ffff-ffff-ffff-ffffffffffff', true],
  ['0GCE98AC-1326-4C79-8EBC-94908DA8B034',false],
  ['0FCE98AC-13264C79-8EBC-94908DA8B034',false],
  ['0FCE98AC-13264-C79-8EBC-94908DA8B034',false],
  ['0FCE98ACD-1326-4C79-8EBC-94908DA8B034',false],
  ['0FCE98AC-1326-4C79-8EBC',false],
  ['0FCE98AC-1326-4C79-8EBC-94908DA8B034-',false],
  ['00000000-0000-0000-000 -000000000000', false],
  ['0FCE98AC-1326-4C79-8EBC-94908DA8B034-123',false],
].forEach(x=>{
  var t=x[0], r=f(t), k=x[1]
  console.log('Test '+t+' result '+r+(r==k?' ok':' fail'))
})
<pre id=O></pre>


-1-('0x'+h)=>1/('0x'+h)
কিওয়ারটি

আমার আগের সংস্করণের মতো একই সমস্যা: এর জন্য সত্য00000000-0000-0000-000 -000000000000
কুয়ের্তি

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

'00000000-0000-0000-000 -00000000000000' এখন আমি এটি দেখতে পেয়েছি @ কুয়ের্তি আমি 4
edc65

1
পছন্দ করেছেন everyকলটির বাইরে uএকটি স্ট্রিং থাকে, অ্যারে নয়
edc65

5

নিয়মে পরিবর্তনের কারণে , এই উত্তরটি আর প্রতিযোগিতামূলক নয় :(

খাঁটি বাশ (কোনও বাহ্যিক উপযোগ নেই), 78

printf -vv %8s-%4s-%4s-%4s-%12s
p=${v// /[[:xdigit:]]}
[ "$1" -a ! "${1/$p}" ]

কমান্ড লাইন থেকে ইনপুট নেয়।

  • printfনিম্নলিখিত পংক্তি তৈরী করে - - - -
  • p=লাইন নিম্নলিখিত প্যাটার্ন এই রূপান্তরিত: [[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]-[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]-[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]-[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]-[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]। নোট করুন এটি একটি নিয়মিত প্রকাশের মতো ভয়ঙ্কর দেখাচ্ছে। তবে এটি এই প্রসঙ্গে নয়। এটি শেল প্যাটার্ন মেলানোর জন্য একটি প্যাটার্ন । এই অনুরূপ ধারণা একটি রেগুলার এক্সপ্রেশন, কিন্তু একটি ভিন্ন কনস্ট্রাক্ট (এবং বাক্য গঠন) হয়।
  • শেষ লাইন পরীক্ষা করে যদি
    • ইনপুটটি খালি নয়
    • যদি ইনপুট স্ট্রিংয়ের বাইরে প্যাটার্নটি টানলে একটি খালি স্ট্রিং তৈরি হয়

শেল থেকে পরিচয়যুক্ত, 0 এর একটি রিটার্ন কোড সাফল্য / সত্য এবং 1 ব্যর্থতা / মিথ্যা নির্দেশ করে। echo $?স্ক্রিপ্টটি চালানোর পরে রিটার্ন কোডটি পরিদর্শন করা যেতে পারে ।


1
শেল প্যাটার্নের মিলটি হয়তো রেগেক্সের বাক্য গঠনটিকে অনুসরণ করতে পারে না, তবে অক্ষর শ্রেণিটি অবশ্যই পসিক্স রেজেক্সের সংজ্ঞা এবং বাক্য গঠন ব্যবহার করে। যাইহোক, এটি গ্রহণযোগ্য কিনা তা সিদ্ধান্ত নেওয়ার জন্য এটি ওপেনের।
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

1
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ নিয়মিত অভিব্যক্তিগুলিতে পিক্সিক চরিত্রের ক্লাসগুলি অন্তর্ভুক্ত থাকতে পারে, তবে আমি মনে করি না যে এটি বোঝায় যে প্যাসিক্স অক্ষর শ্রেণি ব্যবহার করে এমন কোনও বিষয় একটি রেজেজিক। অন্য উদাহরণে trপসিক্স চরিত্রের ক্লাসগুলিও ব্যবহৃত হয় তবে এটি একটি রেজেক্স পার্সার নয়।
ডিজিটাল ট্রমা

অকেজো ডাবল উদ্ধৃতিগুলি এড়িয়ে কিছু অক্ষর শেভ করতে পারেন, যেমন প্রিন্টফ ফর্ম্যাটে।
জেনস

আমি স্পষ্ট করার জন্য চ্যালেঞ্জটি আপডেট করেছি - রেজিক্সগুলি নিষিদ্ধ হওয়ার কারণটি হ'ল হেক্স প্যাটার্নগুলি ইউয়েডগুলির সাথে ম্যাচ করার জন্য ব্যবহার করা যায় না
জোজডমো

4

জल्फ, 32 বাইট

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

 eGi'-DN&bH*28=lH.[8,4,4,4,12]S}
 e                               Property "e"very of next object
  Gi'-                           Split i at hyphen
      DN                       } every comparison function
        &                        logical conjugation of next two arguments
         bH*28                   base 16 of H (first arg); is NaN (falsey) if invalid
              =                  equality of next two items
               lH                the length of H (first arg)
                 .            S  the Sth (index) member of the object inbetween
                  [8,4,4,4,12]   array of lengths

আমার কোডে একটি ত্রুটির কারণে, এটি হওয়া উচিত তার চেয়ে দীর্ঘ। :( এর সমান [8,4,4,4,12] হওয়া উচিত{8444*26} তবে }এটি একটি ফাংশন বন্ধ হওয়া: পি


2
সুতরাং এটি তৈরির তুলনায় এটি দীর্ঘতর কারণ আপনি যে ভাষাটি তৈরি করেছেন তাতে আপনার দ্ব্যর্থক আদেশ রয়েছে? : পি
আর

@ রিকারডাব্লু মাইনর সিমেটিক ভুল এটা এখন স্থির।
কনর ও'ব্রায়েন

4

এমএটিএল , 55 বাইট

jttn36=?[9,5,5,5]XsXK)45=?36:Km~)4Y2'A':'F'hm?}F]]]N~1$

আমি Yb( strsplit) ফাংশনটি ব্যবহার করা থেকে বিরত থাকি কারণ এটি কিছুটা মিল regexp(..., 'split')। এটি কেবল সূচক এবং চরিত্রের তুলনা ব্যবহার করে।

উদাহরণ

>> matl
 > jttn36=?[9,5,5,5]XsXK)45=?36:Km~)4Y2'A':'F'hm?}F]]]N~1$
 > 
> This is a test
0

>> matl
 > jttn36=?[9,5,5,5]XsXK)45=?36:Km~)4Y2'A':'F'hm?}F]]]N~1$
 > 
> D293DBB2-0801-4E60-9141-78EAB0E298FF
1

ব্যাখ্যা

jt                     % input string, duplicate
tn36=?                 % if length is 36
  [9,5,5,5]XsXK        % build and copy indices of required '-' positions
  )45=?                % if those entries are indeed '-'
    36:Km~)            % logical index of remaining positions
    4Y2'A':'F'h        % allowed chars in those positions
    m?                 % if all those entries are legal: do nothing
    }                  % else
      F                % false value
    ]                  % end
  ]                    % end
]                      % end
N~                     % true if stack is empty
1$                     % display last result only

3

সিজেম, 52 42 বাইট

qeu__{A7*)<},\'-/83 3b{)4*}%.{\,=}[1]5*=*=

এটি অনলাইনে চেষ্টা করুন । যদি সত্য হয় তবে মূল স্ট্রিং আউটপুট দেয়, মিথ্যা হলে খালি স্ট্রিং আউটপুট দেয় ( এটি অনুমোদিত )।

ব্যাখ্যা:

qeu__                                      e# Take input, make 2 copies
     {A7*)<},\                             e# Remove invalid characters from first copy
              '-/                          e# Split top of stack on '-
                 83 3b{)4*}%               e# Array of group lengths: [8 4 4 4 12]
                            .{\,=}[1]5*=   e# Compare two arrays, return true if group lengths are correct
                                        *= e# Multiply this value by original string (0 = empty string, 1 = same string)

A7*)<শূণ্যস্থান মত অনেক অবৈধ অক্ষর সরানো হবে না, +, ?...
মার্টিন Ender

@ মার্টিনব্যাটনার ওহ গুলি করুন ... আমি বুঝতে পারি নি, আমি কয়েক মিনিটের মধ্যেই এটি ঠিক করে ফেলছি।
গামারকম্পস

3

জুলিয়া, 86 বাইট

s->(t=split(s,"-");map(length,t)==[8,4,4,4,12]&&all(i->!isnull(tryparse(Int,i,16)),t))

এটি একটি অনামী ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি বুলিয়ান দেয় returns এটি কল করার জন্য, এটির একটি নাম দিন f=s->...

Ungolfed:

function f(s::AbstractString)
    # Split the input into an array on dashes
    t = split(s, "-")

    # Ensure the lengths are appropriate
    ok1 = map(length, t) == [8, 4, 4, 4, 12]

    # Ensure each element is a valid hexadecimal number
    ok2 = all(i -> !isnull(tryparse(Int, i, 16)), t)

    return ok1 && ok2
end

3

সি # 196 বাইট

using System.Linq;class P{bool T(string v){var r=v.Length==36;for(var i=0;i<v.Length;i++)r&=new[]{8,13,18,23}.Any(t=>t==i)?v[i]=='-':v[i]>47&&v[i]<58|v[i]>64&&v[i]<71|v[i]>96&&v[i]<103;return r;}}

Ungolfed:

using System.Linq;
class P
{
    public bool T(string v)
    {
        var r = v.Length == 36;
        for (var i = 0; i < v.Length; i++)
            r &= new[] { 8, 13, 18, 23 }.Any(t => t == i) 
                ? v[i] == '-' 
                : v[i] > 47 && v[i] < 58 | v[i] > 64 && v[i] < 71 | v[i] > 96 && v[i] < 103;
        return r;
    }
}

পদ্ধতিটি যে Tকোনও নন-নাল স্ট্রিং সহ আহ্বান করা যেতে পারে এবং অন্যথায় অন্যথায় trueবৈধ জিইউইডির জন্য ফিরে আসবে false। এটি একটি ধ্রুবক সময় বৈধতা; তিনটি অক্ষরের বিনিময়ে আপনি পদ্ধতিটি প্রারম্ভিক-প্রস্থান করতে পারেন (এতে পরিবর্তন i < v.Lengthকরুন i < v.Length && r)।

আরও পরে বাইকাউন্টটি নামানোর চেষ্টা করবে।

আমি স্পষ্টতই Guid.ParseExactপথ ছেড়ে দিয়েছি কারণ এতে মজা কোথায়? এখানে এটি 86 টি বাইটে আরও গল্ফ করার অনেক চেষ্টা ছাড়াই রয়েছে :

using System;class P{bool T(string v){Guid x;return Guid.TryParseExact(v,"D",out x);}}

Ungolfed:

using System;
class P
{
    bool T(string v)
    {
        Guid x;
        return Guid.TryParseExact(v, "D", out x);
    }
}

2

পাইথন 2, 99 112 বাইট

def f(u):
 try:u=u.split()[0];int(u.replace('-',''),16);print[8,4,4,4,12]==map(len,u.split('-'))
 except:print 0

একটি বৈধ ইনপুট এ, এটি মুদ্রণ True। একটি অবৈধ ইনপুট এ এটি মুদ্রণ করে Falseবা 0এটি কেন অবৈধ ছিল তার উপর নির্ভর করে। Falseএবং 0দুটোই পাইথনে মিথ্যা।

ফাংশনটিতে 3 টি জিনিস পরীক্ষা করতে হবে:

  • প্রতিটি অ হাইফেন অক্ষর ডিজিট বা এর মধ্যে থাকে ABCDEF
  • ঠিক 4 হাইফেন আছে
  • প্রথম হাইফেনের আগে 8 টি অক্ষর রয়েছে, শেষের পরে 12 এবং অন্য কোনও দুটির মধ্যে 4 টি অক্ষর রয়েছে

এটি কীভাবে তাদের পরীক্ষা করে তা দেখানোর জন্য এখানে একটি ব্রেকডাউন's এটি সামান্য পুরানো I'm তবে আমি ক্ষুধার্ত তাই আমি এটি পরে আপডেট করব।

def f(u):
    try:
        int(u.replace('-',''),16) # Remove all hyphens from the string and parse what's
                                  # left as a base 16 number. Don't do anything with this
                                  # number, but throw an exception if it can't be done.

        return[8,4,4,4,12]==map(len,u.split('-')) # Split the string at each hyphen and
                                                  # get the length of each resulting
                                                  # string. If the lengths == [8,4,4,4,12],
                                                  # there are the right number of groups
                                                  # with the right lengths, so the string
                                                  # is valid.
    except:
        return 0 # The only way to get here is if the string (minus hyphens) couldn't be
                 # parsed as a base 16 int, so there are non-digit, non-ABCDEF characters
                 # and the string is invalid.

আমার ধারণা আপনি দুটি বাইট সংরক্ষণ করতে পারেন যদি এর returnসাথে উভয় দৃষ্টান্ত প্রতিস্থাপন করেন print। ( print
এক্ষেত্রে

1
এটি পাইথন 3 এ কাজ করে না, কারণ mapএখন কোনও "মানচিত্রের অবজেক্ট" দেয়, তালিকা নয়।
টিম পেডেরিক

এটি পাইথন 2 তে কাজ করে না (সম্ভবত 3 খুব বেশি) কারণ intফাংশনটি ফাঁকা স্থান দেয় - 0FCE98ac-1326-4c79-8EBC-94908da8B03একটি পিছনের স্থান সহ। সক্ষম হলে এখানে মুছে দেওয়া পাইথের উত্তরটিতে মন্তব্য দেখুন ।
নীল

2

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

অন্তর্নির্মিত জন্য ধার্মিকতা ধন্যবাদ! - উদ্ধৃতিতে স্ট্রিংগুলি আবদ্ধ করার বিষয়টি নিশ্চিত করুন।

import uuid
try:uuid.UUID(input());print 1
except:print 0

5
আপনি যে দস্তাবেজের সাথে লিঙ্ক করেছেন তার মতে, এটি ইনপুটটির 1জন্য মুদ্রণ করবে 12345678123456781234567812345678
ডেনিস

যদি এটি কাজ করে তবে আপনি বাইটগুলি সংরক্ষণ করতে সক্ষম হবেন try:print uuid.UUID(input())কারণ প্রয়োজনীয় সমস্ত হ'ল আপনি সত্যবাদী মূল্য মুদ্রণ করুন
আন্ডারগ্রাউন্ডম্যানোরাইল

2
এই প্রোগ্রামটি অনেকগুলি ইউইউডি ফর্ম্যাট গ্রহণ করে, তবে প্রশ্নটি হাইফেন সহ কেবলমাত্র ৩ 36-অক্ষরের ইউআইডি ফর্ম্যাট চায়।
জ্যাকব ক্রোল

2
ইনপুট স্ট্রিংটি ইউয়েডের সাথে স্ট্রিং-এ রূপান্তরিত হওয়ার সমান কিনা তা পরীক্ষা করে আপনি আপডেট হওয়া নিয়মের সাথে লড়াই করে এটি উদ্ধার করতে পারেন। এখনই আপনাকে সত্যবাদী মূল্য দেয়।
অজস্র

2

পাইথ, 39 বাইট

&&!+1xzd.xi:zK\-k16ZqxKc+zK1mid36"8dinz

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


আপনার "এটি এখানে চেষ্টা করুন" লিঙ্কটিতে \অক্ষরটি অনুপস্থিত K\-k, তাই এটি চলতে ব্যর্থ।
অ্যালেক্স

এটি এখনই ঠিক করা হয়েছে
নীল

2

পার্ল 6 ,  83   67 বাইট

# 83 bytes
{
  (
    my@a=.uc.split('-')
  ).map(*.comb)⊆('0'..'9','A'..'F')
&&
  @a».chars~~(8,4,4,4,12)
}

# 67 bytes
{
  (
    $/=.split('-')
  ).map({:16($_)//|()})==5
&&
  $/».chars~~(8,4,4,4,12)
}

(গণনাগুলিতে নিউলাইনগুলি বা ইনডেন্টগুলি অন্তর্ভুক্ত করে না কারণ তাদের প্রয়োজন নেই)

ব্যবহার:

# give it a name
my &code = {...}

say map &code, «
  D293DBB2-0801-4E60-9141-78EAB0E298FF
  0FCE98AC-1326-4C79-8EBC-94908DA8B034
  0fce98ac-1326-4c79-8ebc-94908da8b034
  0FCE98ac-1326-4c79-8EBC-94908da8B034
  00000000-1326-4c79-8EBC-94908da8B034
»;
# (True True True True True)

say map &code, «
  0GCE98AC-1326-4C79-8EBC-94908DA8B034
 '0FCE98AC 1326-4C79-8EBC-94908DA8B034'
  0FCE98AC-13264C79-8EBC-94908DA8B034
  0FCE98AC-13264-C79-8EBC-94908DA8B034
  0FCE98ACD-1326-4C79-8EBC-94908DA8B034
  0FCE98AC-1326-4C79-8EBC-94908DA8B034-
  0FCE98AC-1326-4C79-8EBC-94908DA8B034-123
»;
# (False False False False False False False)

2

কমন লিস্প - 161

(lambda(s &aux(u(remove #\- s)))(and(=(length s)36)(=(length u)32)(every(lambda(p)(char=(char s p)#\-))'(8 13 18 23))(ignore-errors(parse-integer u :radix 16))))

প্রত্যাশিত মানটি হ্যাশ হিসাবে একটি সংখ্যা হিসাবে, যা কার্যকর ফলাফল which

Ungolfed

(defun uuid-p (string &aux (undashed (remove #\- string)))
  (and
   ;; length of input string must be 36
   (= (length string) 36)

   ;; there are exactly 4 dashes
   (= (length undashed) 32)

   ;; We check that we find dashes where expected
   (every (lambda (position)
            (char= (char string position) #\-))
          '(8 13 18 23))

   ;; Finally, we decode the undashed string as a number in base 16,
   ;; but do not throw an exception if this is not possible.
   (ignore-errors
    (parse-integer undashed :radix 16))))

@ জোজোদমো হ্যাঁ, অবশ্যই! ধন্যবাদ
coredump

2

F # 44 টি অক্ষর

fun s->System.Guid.TryParseExact(s,"D")|>fst

এফ # তে, outপরামিতিগুলির সাথে ফাংশনগুলি আউট প্যারামিটার বাদ দিয়ে বলা যেতে পারে; বিনিময়ে এর মানটি ফাংশনের আসল প্রত্যাবর্তনের মানটিকে একটি টিউপলে মিশ্রিত করা হবে।

এখানে, fstটিউপলটি ফাংশনে পাইপ করা হয়েছে, এটি তার প্রথম সদস্যকে ফেরত দেয়, যা এই ক্ষেত্রে কলের সাফল্য বা ব্যর্থতার ইঙ্গিত দেয় ট্রাইপার্সেক্স্যাক্টের বুলিয়ান রিটার্ন মান।

সঠিক ফর্ম্যাটটির চেক হিসাবে, trueস্ট্রিংটি 36 টি অক্ষর দীর্ঘ হলেই আমরা ফিরে আসি।

রবিআইআইআই এর সি # উত্তরটি দেখার আগে আমি ট্রাইপার্সি এক্স্যাক্ট ব্যবহার করার কথা ভাবিনি, তাই আমার উত্তরটি তিনটি চরিত্রের বেশি হওয়া উচিত ছিল:

fun s->System.Guid.TryParse s|>fst&&s.Length=36

TryParse(string, Guid) নিম্নলিখিত ফর্ম্যাটগুলিতে ইনপুট গ্রহণ করে:

00000000000000000000000000000000 
00000000-0000-0000-0000-000000000000 
{00000000-0000-0000-0000-000000000000} 
(00000000-0000-0000-0000-000000000000)
{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

এর মধ্যে কেবল দ্বিতীয়টি 36 টি অক্ষর দীর্ঘ।


2

পাইথন 2, 93 89 85 বাইট

lambda u:(set(u)<=set("-0123456789abcdefABCDEF"))*map(len,u.split("-"))==[8,4,4,4,12]

map()কল গ্যারান্টী যে বিভাগে অধিকার লেন্থ হয়, এবং all()পরীক্ষার পারেন একটি হাইফেন বা একটি অবাধ-কেস হেক্স অঙ্ক হওয়ার জন্য প্রতিটি অক্ষর। জেনারেটর এক্সপ্রেশন প্রতিটি অক্ষরটিকে পুরো স্ট্রিংয়ের মাধ্যমে পুনরাবৃত্তি করে পরীক্ষা করে দেখায়, তাই এটি সর্বাধিক পারফরম্যান্ট পদ্ধতি নয়, আমি ভীত, তবে এটি পরীক্ষার ক্ষেত্রে সন্তুষ্ট হওয়া উচিত:

>>> f=lambda u:(set(u)<=set("-0123456789abcdefABCDEF"))*map(len,u.split("-"))==[8,4,4,4,12]
>>> testcases = """\
... D293DBB2-0801-4E60-9141-78EAB0E298FF
... 0FCE98AC-1326-4C79-8EBC-94908DA8B034
... 0fce98ac-1326-4c79-8ebc-94908da8b034
... 0FCE98ac-1326-4c79-8EBC-94908da8B034
... 00000000-0000-0000-0000-000000000000""".splitlines()
>>> failcases = """\
... 0GCE98AC-1326-4C79-8EBC-94908DA8B034
... 0FCE98AC 1326-4C79-8EBC-94908DA8B034
... 0FCE98AC-13264C79-8EBC-94908DA8B034
... 0FCE98AC-13264-C79-8EBC-94908DA8B034
... 0FCE98ACD-1326-4C79-8EBC-94908DA8B034
... 0FCE98AC-1326-4C79-8EBC-94908DA8B034-
... 0FCE98AC-1326-4C79-8EBC-94908DA8B034-123
... 00000000-0000-0000-000 -000000000000
... 00000000-0000-0000- 000-000000000000""".splitlines()
>>> all(f(u) for u in testcases)
True
>>> any(f(u) for u in failcases)
False
>>> 

সংক্ষিপ্ততম সঠিক পাইথন উত্তরটি কেন নিম্নমানের করা হয়েছে তার কারও ধারণা আছে? যথেষ্ট ব্যাখ্যা নেই?
rsandwick3

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

2
আপনি ব্লকের f=স্ট্রিংয়ের চারপাশে থাকা এবং স্পেসগুলি সরাতে পারেন all
FryAmTheEggman

ওহ দারুণ, দুর্দান্ত ক্যাচ - সম্পাদিত
আরএসবানউইক 3

1
আপনি সংরক্ষণ করতে পারবেন 8 আপনার রূপান্তর দ্বারা বাইট (অথবা 6, আপনি প্রথম বন্ধনী যোগ করতে হবে পারে) all(..)অন্তর্ভুক্তি পরীক্ষামূলক সেট করতে: set(u)<=set("-0123456789abcdefABCDEF")
409_ কনফ্লিক্ট

1

এসএএস, 171 144 141

data;infile stdin;file stdout;input a$9b$14c$19d$24;e=(a!!b!!c!!d='----')*length(_infile_)=36*(1-missing(put(input(compress(_infile_,,'adk'),$hex32.),$hex32.)));put e;run;

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

আরও ভাল পদ্ধতির - একবারে একটি চরিত্র:

data;infile stdin;file stdout;do i=1 to 37;input@i c$1.@;a+ifn(i in(9,14,19,24),c='-',n(input(c,hex.))-36*(i>36&c^=''));end;b=a=36;put b;run;

কেন্দ্রীয় প্রকাশের বাইরে আরও 6 টি চরিত্র গল্ফ করেছেন!

Ungolfed:

data;
infile stdin;
file stdout;
do i=1 to 37;
input@i c$1.@;
a+ifn(i in(9,14,19,24),c='-',n(input(c,hex.))-36*(i>36&c^=''));
end;
b=a=36;
put b;
run;

এটি লগে বেশ কয়েকটি সতর্কতা এবং নোট জেনারেট করে, তবে এটি স্টাডাউট বা স্ট্ডারগুলিতে মুদ্রণ করে না, তাই আমি মনে করি এটি ন্যায্য খেলা।


1

সি, 391 বাইট

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define F printf("0")
#define T printf("1")
#define E return 0
main(){char s[99],*t;int k=1,l,i;scanf("%99[^\n]",s);if(s[strlen(s)-1]=='-'){F;E;}t=strtok(s,"-");while(t!=NULL){for(i=0,l=0;t[i]!=0;i++,l++){if(!isxdigit(t[i])){F;E;}}if((k==1&&l!=8)||((k>1&&k<5)&&l!=4)||(k==5&&l!=12)){F;E;}k++;t=strtok(NULL,"-");}if(k==6){T;E;};F;}

1

ম্যাটল্যাব, 126 বাইট

function f(a)
b='-';if length(a)==36&&a(9)==b&&a(13)==b&&a(17)==b&&a(21)==b;a(a==b)=[];if any(isnan(hex2dec(a)));0;end;1;end;0

1

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

def a(i):
 try:l=[1+int(k,16)and(len(k)==c)for k,c in zip(i.split("-"),[8,4,4,4,12])];return(len(l)==5)&(0 not in l)
 except:return 0

ইন্ট (কে, 16) কে বেস -16 ইন্টের জন্য কাস্ট করার চেষ্টা করে। 0-9a-fA-F- ব্যতীত অন্য কোনও চরিত্রের ক্ষেত্রে এটি ব্যর্থ হয়, এক্ষেত্রে আমরা 0 ফিরি, যা মিথ্যা। এই ইনটগুলিতে 1 যুক্ত করুন এবং আমরা একটি গ্যারান্টিযুক্ত সত্যবাদী মান পাই - str.split () সহ আমরা সমস্ত হাইফেনগুলি সরিয়ে ফেলেছি যাতে আমরা মান -1 পেতে পারি না এবং সমস্ত অ -0 ইনট সত্যবাদী।


1

সি ফাংশন, 102

একটি নিয়ম পরিবর্তন আমার পূর্ববর্তী সি- scanf()ভিত্তিক উত্তরটিকে অস্বীকার করেছে , সুতরাং এখানে আরও একটি সি উত্তর ব্যবহার করা হয়েছে isxdigit()যা আমি মনে করি যে প্রতিযোগিতা করার অনুমতি দেওয়া উচিত :

i;f(char *s){for(i=8;i<24;i+=5)s[i]=s[i]-45?1:s[i]+3;for(i=0;isxdigit(s[i]);i++);return i==36&&!s[i];}

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

  • -সংশ্লিষ্ট অবস্থানগুলিতে অক্ষরগুলির জন্য (ASCII 45) পরীক্ষা করুন - যদি তা হয় তবে তাদের সাথে 0এস (ASCII 48 (= 45 + 3)) প্রতিস্থাপন করুন
  • স্ট্রিংটি প্রতিটি চর দিয়ে পরীক্ষা করে চলুন isxdigit()
  • যদি স্ট্রিংয়ের দৈর্ঘ্য 36 হয় এবং চূড়ান্ত অক্ষরটি NUL হয় তবে সত্যগুলি ফেরান।

1

ব্যাচ, 148 139 + 2 = 150 141 বাইট

@set/pu=
@for %%d in (1 2 3 4 5 6 7 8 9 A B C D E F)do @set u=!u:%%d=0!
@if -!u!==-00000000-0000-0000-0000-000000000000 exit/b0
@exit/b1

2 বাইট যুক্ত করা হয়েছে কারণ আপনার /vস্যুইচটি ব্যবহার করতে হবে CMD.EXE

সাফল্যে ERRORLEVEL 0 সহ প্রস্থান করে, 1 ব্যর্থতায়।

সম্পাদনা: কিছু বাইট সংরক্ষণ করা হয়েছে মূলত কারণ :=সংবেদনশীল তবে অন্যান্য টুইটগুলিও ছিল।


1

জাভা, 345 বাইট

interface q{static void main(String[]a){int i=-1;char[]b=a[0].toCharArray();java.io.PrintStream u=System.out;if(b.length>36||b.length<36)u.print(1<0);if(b[8]!='-'||b[13]!='-'||b[18]!='-'||b[23]!='-')u.print(1<0);while(++i<b.length){if(i!=8&&i!=13&&i!=18&&i!=23){if(!((b[i]>='0'&&b[i]<='F')||(b[i]>='a'&&b[i]<='f')))u.print(1<0);}}u.print(1>0);}}

ইনপুট হ'ল প্রথম কমান্ড লাইন আর্গুমেন্ট। আউটপুটটি ত্রুটি কোড (0 এর অর্থ বৈধ ইউআইডি, 1 এর অর্থ বৈধ নয়)

মন্তব্যে অসম্পূর্ণ:

interface q {
    static void main(String[] a) {
        int i = -1;                                                             // Index
        char[] b = a[0].toCharArray();                                          // Characters from input
        java.io.PrintStream u = System.out;                                     // STDOUT
        if (b.length > 36||b.length < 36)                                       // If input length is not 36
            u.print(1<0);                                                       // Invalid
        if (b[8]!='-'||b[13]!='-'||b[18]!='-'||b[23]!='-')                      // If hasn't got separators at correct positions
            u.print(1<0);                                                       // Invalid
        while (++i<b.length) {                                                  // Iterate over all characters
            if (i!=8 && i!=13 & i!=18 && i!=23) {                               // If not at separator indexes
                if ( !( (b[i]>='0'&&b[i]<='F') || (b[i]>='a'&&b[i]<='f') ))     // If incorrect hexadecimal number
                    u.print(1<0);                                               // Invalid
            }
        }
        u.print(1>0);                                                           // Valid
    }
}

সম্পাদনা: STDOUT অংশটি লক্ষ্য করেনি। উফ, ঠিক আছে এখন।


নিস! আপনি if(b.length>36||b.length<36)সহজভাবে প্রতিস্থাপন করতে পারেন if(b.length!=36)। এছাড়াও, আপনি সত্যবাদী মান মুদ্রণ করতে পারেন , আপনি কেবল 0পরিবর্তে 1<0এবং 1পরিবর্তে মুদ্রণ করতে পারে 1>0
জোজোদমো

@Jojodmo ভোট উপর ভিত্তি করে, একটি truthy মান আকারে if(truthy_value){ doSomethingOnYes(); } else{ doSomethingOnFalse(); }তাই জাভা একটি বুলিয়ান একটি truthy মান, কিন্তু 1বা 0নয়। কেবল তখনই যখন কোনও চ্যালেঞ্জের ওপি এই জাতীয় কিছু বলে: " আপনার আউটপুটটি সত্য / মিথ্যা, 0/1, খালি / অ-খালি হতে পারে; যতক্ষণ আপনি যা ব্যবহার করেন তা নির্দিষ্ট করে দেন " "তবে আপনি সত্যই ব্যবহার করতে পারবেন 0এবং 1পরিবর্তে সত্য true/falseহিসাবে / ভুয়া মান।
কেভিন ক্রুইজসেন

1
কুকির জন্য গল্ফিংয়ের টিপস হিসাবে: @ জোজডমো এটিকে প্রতিস্থাপনের সাথে সত্যই সঠিক if(b.length!=36); ||হতে পারে |একাধিক জায়গা, সেইসাথে &&থেকে &; if(...!='-')হতে পারে if(...!=45); int i=-1; ... while(++i<b.length){সঙ্গে প্রতিস্থাপন করা যেতে পারে for(int i=-1;++i<b.length;){; 'F'হতে পারে 70( 'f'১০২ টি হতে পারে, তবে এটি একই বাইট-কাউন্টের কারণে গুরুত্বপূর্ণ নয়)। আমি পছন্দ করি আপনি java.io.PrintStream u=System.out;বিটিডব্লিউ কীভাবে ব্যবহার করেছেন , আমার এটি মনে রাখা উচিত! সূতরাং ধন্যবাদ.
কেভিন ক্রুইজসেন


1

পিএইচপি, 109 বাইট

সত্যের জন্য 1 এবং মিথ্যাটির জন্য 0 প্রিন্ট করে

for($t=($l=strlen($a=$argn))==36;$i<$l;$i++)$t*=$i>7&$i<24&!($i%5-3)?$a[$i]=="-":ctype_xdigit($a[$i]);echo$t;

$i>7&$i<24&!($i%5-3) 5 বাইট তখন সংক্ষিপ্ত in_array($i,[8,13,18,23])

112 বাইট

echo array_filter(str_split($argn),function($i){return!ctype_xdigit($i);})==[8=>"-",13=>"-",18=>"-",23=>"-"]?:0;

113 বাইট

echo array_diff(str_split(strtolower($argn)),array_map(dechex,range(0,15)))==[8=>"-",13=>"-",18=>"-",23=>"-"]?:0;

0

জাভা, 172 বাইট 168 বাইট (ধন্যবাদ গম উইজার্ড)

যেহেতু আমি জাভা.ইটিল.ইউইউডি ব্যবহার করেছি, কিন্ত এখানে চলে গেছে:

import java.util.UUID;class ValidUUID{public static void main(String[] a){try{UUID.fromString(a[0]);System.out.println(1);}catch(Exception e){System.out.println(0);}}}

অবরুদ্ধ সংস্করণ:

import java.util.UUID;

class ValidUUID {

    public static void main(String[] a) {
        try {
            UUID.fromString(a[0]);
            System.out.println(1);
        } catch(Exception e) {System.out.println(0);}
    }
}

সাইটে স্বাগতম! আমি মনে করি আপনি tryএবং এর মধ্যে স্থান সরাতে পারেন {
গম উইজার্ড

@ ওয়েট উইজার্ড আপনাকে ধন্যবাদ: ডি আরও লক্ষ্য করেছেন যে আমি "0 এবং 1
ryxn

2
আপনার মধ্যে String[]এবং এর মধ্যবর্তী স্থান সরাতে সক্ষম হওয়া উচিত a। এছাড়াও, আপনার printlnসাথে প্রতিস্থাপন করতে সক্ষম হওয়া উচিত print
ক্লিমিক

1
শ্রেণীর নাম 1 অক্ষর হতে পারে। আপনি java.util.UUID.fromStringআমদানির পরিবর্তে ব্যবহার করতে পারেন ।
পোকে

0

এডাব্লুকে, 98 বাইট

BEGIN{FS=""}{for(j=4;k<NF;){h+=(j+=5)<25?$j=="-":0
s+=strtonum("0x"$++k 1)>0}$0=h+s==36&&NF==36}1

কেবলমাত্র প্রতিটি চরিত্রের রেখাটি বিভক্ত করে প্রতিটি অক্ষর একটি হেক্স ডিজিট এবং উপযুক্ত জায়গায় হাইফেন রয়েছে কিনা তা পরীক্ষা করে দেখি। strtonumঅবৈধ অক্ষরে রূপান্তর করে 00এবং m(এবং নির্বিচারে নির্বাচিত অবৈধ চরিত্রের) মধ্যে তুলনা করার জন্য অতিরিক্ত পদক্ষেপের প্রয়োজন। ভাগ্যক্রমে 01একটি বৈধ হেক্স নম্বর, তবে m1তা নয়।

প্রথমদিকে আমি দুটি forলুপ লিখেছি , তবে আমি এক সাথে বাইট করে 1 বাইট সংরক্ষণ করেছি। :)

দ্রষ্টব্য: GAWKহেক্স নম্বর হিসাবে ইনপুট পড়তে পারে তবে এর জন্য খুব দীর্ঘ কমান্ড লাইন বিকল্পের প্রয়োজন।

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