रेगेक्स, पेपर, कैंची, छिपकली, स्पॉक


81

वार्म अप: रेगेक्स, पेपर, कैंची

यह वह चुनौती है जिसे मैं मूल रूप से पोस्ट करना चाहता था, यह महसूस करने से पहले कि कुछ बहुत ही कम समाधान मौजूद हैं। फिर भी, नीचे दी गई वास्तविक चुनौती की तैयारी के बारे में सोचना एक दिलचस्प समस्या हो सकती है।

तीन रेगेक्स आर , पी और एस लिखें जैसे कि वे चक्रीय रॉक, पेपर, कैंची फैशन में एक-दूसरे से मेल खाते हों। विशेष रूप से, आर से मेल खाता है एस , एस से मेल खाता पी और पी से मेल खाता है आर , लेकिन आर नहीं है से मेल पी , एस नहीं करता है से मेल आर और पी से मेल नहीं खाता एस । यहाँ एक आसान तालिका है:

Regex   Matches   Doesn't match
R       S         P
P       R         S
S       P         R

इससे कोई फर्क नहीं पड़ता कि R , P और S किसी भी अन्य इनपुट पर करते हैं, जिसमें स्वयं भी शामिल है।

यहां, मिलान का अर्थ है कि इनपुट के कुछ (संभवतः खाली) मिलान से मेल खाता है। मैच को पूरे इनपुट को कवर करने की आवश्यकता नहीं है।

चुनौती: रेगेक्स, पेपर, कैंची, छिपकली, स्पॉक

इस चुनौती के लिए, आप आरपीएस संस्करण रॉक, पेपर, कैंची, छिपकली, स्पॉक ( द बिग बैंग थ्योरी द्वारा लोकप्रिय ) के आधार पर, उपरोक्त समस्या का एक कठिन संस्करण हल करेंगे । RPSLV में, पांच अलग-अलग प्रतीक हैं, जो एक दूसरे को दो चक्रों में हराते हैं:

  • रॉक → कैंची → छिपकली → कागज → स्पॉक → रॉक
  • रॉक → छिपकली → स्पॉक → कैंची → पेपर → रॉक

आपको पांच रेगेक्स आर , पी , एस , एल और वी लिखना चाहिए जो इस संरचना की नकल करते हैं जब एक दूसरे को इनपुट के रूप में दिया जाता है। यहाँ इसी तालिका है:

Regex   Matches   Doesn't match
R       L, S      V, P
L       V, P      S, R
V       S, R      P, L
S       P, L      R, V
P       R, V      L, S

बस स्पष्ट होने के लिए आपको चाहिए नहीं स्ट्रिंग से मेल R, P, आदि, लेकिन अन्य regexes। उदाहरण के लिए यदि आपके regex आर है ^\w$उदाहरण के लिए, तो पी और वी स्ट्रिंग मिलान करने ^\w$, जबकि एस और एल नहीं करना चाहिए।

फिर से, मैच का मतलब है कि इनपुट का कम से कम एक (संभवतः खाली) मिलान किया जाता है। मैच को पूरे इनपुट को कवर करने की आवश्यकता नहीं है। उदाहरण के लिए \b(शब्द सीमा) मैच hello(शुरुआत में और अंत में), लेकिन यह मेल नहीं खाता (^,^)

आप किसी भी रेगेक्स स्वाद का उपयोग कर सकते हैं, लेकिन कृपया अपने उत्तर में पसंद बताएं और यदि संभव हो तो चुने हुए स्वाद के लिए ऑनलाइन परीक्षक को लिंक प्रदान करें। आप किसी भी regex सुविधाओं का उपयोग नहीं कर सकते हैं जो आपको फ़्लॉवर की होस्ट भाषा (पर्ल फ्लॉवर्स के eसंशोधक की तरह) में कोड लागू करने देता है ।

/regex/अन्य के लिए इनपुट के रूप में दिए जाने पर डेलिमिटर (जैसे ) को रेगेक्स में शामिल नहीं किया जाता है, और आप उन संशोधक का उपयोग नहीं कर सकते हैं जो रेगेक्स के बाहर हैं। कुछ स्वाद अभी भी आपको इनलाइन सिंटैक्स जैसे संशोधक का उपयोग करने देते हैं (?s)

आपका स्कोर बाइट्स में पाँच regexes की लंबाई का योग है। नीचा बेहतर है।

यह इस समस्या का एक कार्यशील समाधान खोजने के लिए बहुत सरल हो जाता है, क्योंकि यह पहली बार में लग सकता है, लेकिन मुझे आशा है कि एक इष्टतम समाधान खोजना काफी मुश्किल है।


क्या, कहते हैं, R को S के पूरे रेक्सक्स या S के एक विकल्प से मेल खाना है, बशर्ते कि यह P या V के किसी भी सब्सट्रिंग से मेल न खाता हो?
ओकेक्स

@ ऑक्स "मैच का मतलब सिर्फ इतना है कि इनपुट का कम से कम एक (संभवतः खाली) मिलान किया जाता है। मैच को पूरे इनपुट को कवर करने की आवश्यकता नहीं है। उदाहरण के लिए \b(शब्द सीमा) मैच hello(शुरुआत में और अंत में), लेकिन यह मेल नहीं खाता (^,^)। "
मार्टिन एंडर

1
संभवत: यह कोई फर्क नहीं पड़ता कि एक रेगेक्स खुद से मेल खाता है?
ब्रिलियनड

@ ब्रिलियनड सही।
मार्टिन एंडर

1
महान पहेली। मैंने यहां एक संवादात्मक संस्करण बनाया है, अगर किसी को भी दिलचस्पी है: shark.fish/rock-paper-screens
shark.dp

जवाबों:


45

PCRE .NET, 35 32 बाइट्स

मार्टिन बायर को -3 बाइट्स धन्यवाद

चट्टान:

([*?]$)

पेपर:

[)$]$+

कैंची:

[+?]$.*

छिपकली:

[+$]$.?

स्पॉक:

[*)]$

यहाँ विचार अन्य रीगेक्स के अंत में वर्णों का मिलान करने का है जो आरक्षित रेगेक्स वर्ण हैं, लेकिन एक वर्ण वर्ग के अंदर होने पर इस तरह से व्यवहार किया जाना बंद कर देते हैं।


1
ठीक है, आप जीतते हैं: P
ETHproductions


44

पीसीआरई, 15 14 बाइट्स

चट्टान:
B

पेपर:
\b$

कैंची:
b|B.

छिपकली:
\B.

स्पॉक:
^\w


4
बहुत प्रभावशाली।
एरिक डुमिनील

अपराजेय! मैं रॉक के साथ फ़िडलिंग कर रहा हूं = Q(एक 14 बी समाधान छिपकली = `क्यू \` के साथ मौजूद है, तो बाकी आपके समान है) लेकिन पूरी तरह से कोई फायदा नहीं हुआ।
ज्येष्ठ

40

कोई फैंसी सुविधाएँ, 35 30 बाइट्स

नील के विचार द्वारा 5 बाइट्स बचाए गए हैं जो कि उपयोग की ]आवश्यकता नहीं है \

यह अजगर reमॉड्यूल के साथ उदाहरण के लिए काम करता है ।

R='[SLR]]'
P='[RVP]]'
S='[PLS]]'
L='[PVL]]'
V='[SRV]]'

यह ]एक पत्र से पहले की खोज करता है जो इंगित करता है कि यह किस नियम का है।

पिछले संस्करण का इस्तेमाल किया R='\[[RSL]'आदि।

स्कोर 40 के साथ पहले का प्रयास R='[SL]x|Rx'आदि का उपयोग कर रहा था ।


1
सब कुछ उल्टा करके 5 बाइट्स बचाएं: R='[LSR]]'आदि
नील

@ नील यह एक महान सुधार है, धन्यवाद!
क्रिश्चियन सिवर्स

This works with python's reठीक है, अजगर को शायद हेडर होना चाहिए
बिल्ली

1
@cat मैंने भी "उदाहरण के लिए" लिखा, पूरा वाक्य सिर्फ कुछ ठोस कहने के लिए है जो मैंने वास्तव में कोशिश की थी। मुझे लगता है कि मैं कह सकता हूं कि पोसिक्स कुछ अन्य लोगों की तरह था, लेकिन मुझे लगता है कि मेरा हेडर काफी सही है।
क्रिश्चियन सिवर्स

26

पीसीआरई, 20 19

चट्टान

W

कागज़

^\w

कैंची

^\W

स्पॉक

w?\x57$

छिपकली

[w]W?


8

जावास्क्रिप्ट, 45 बाइट्स

एक और तुच्छ समाधान।

R:
^R|^.[SL]
P:
^P|^.[RV]
S:
^S|^.[PL]
L:
^L|^.[PV]
V:
^V|^.[SR]

ओह बस एहसास हुआ कि मेरा जवाब तुम्हारा एक लंबा / समान संस्करण है, मुझे इसे हटाना चाहते हैं?
TheLethalCoder

4
@TheLethalCoder वर्तमान में सभी उत्तर सिर्फ एक दूसरे के लंबे / छोटे संस्करण हैं: p
dzaima

1
मुझे लगता है हाहा ...
TheLethalCoder

5

पोसिक्स, 50 45 बाइट्स

Rock
.{5}RP?V?
Paper
.{5}PS?L?
Scissors
.{5}SR?V?
Lizard
.{5}LR?S?
Vulcan (Spock)
.{5}VP?L?

कम किया जा सकता है लेकिन ($ के बाद मैच छिपाना) चाल का उपयोग किया गया है, इसलिए मैं दूसरा रास्ता तलाश रहा हूं

मिलान करते समय प्रत्येक स्ट्रिंग के पहले 5 वर्णों को अनदेखा किया जाता है। तो प्रभावी लक्ष्य स्ट्रिंग सिर्फ X? Y के लिए सरल है? उनमें से किसी के पास कोई दोहरा पत्र नहीं है क्योंकि "?" एक साधारण चार है, इसलिए जब रेगेक्स के रूप में उपयोग किया जाता है तो अंतिम 4 वर्णों को मेल करना होता है (नल स्ट्रिंग)। तो पैटर्न नीचे गिरता है "लक्ष्य पत्र के बाद 5 वर्ण होते हैं": लक्ष्य के 6-9 का अर्थ है लक्ष्य पत्र (प्रत्येक स्ट्रिंग में 5 वां चार्ट) होना चाहिए

अद्यतन: नीचे 35 बाइट संस्करण, अब!


मैंने हमेशा सोचा था कि V वास्तव में V ulcan के लिए नहीं है, लेकिन Vulcan salute (जो हाथ का इशारा आप व्यक्ति में RPSLV खेलते समय Spock का प्रतिनिधित्व करने के लिए उपयोग करते हैं) का प्रतिनिधित्व करने के लिए है।
मार्टिन एंडर

वैसे भी, PPCG में आपका स्वागत है! अच्छा पहला जवाब। मुझे पसंद है कि आपने सभी मौजूदा उत्तरों की तुलना में तर्क को उल्टा कर दिया है (केवल एक अक्षर का मिलान करते हुए और अक्षरों को वर्तमान रेगेक्स को रेगेक्स में डालते हुए)।
मार्टिन एंडर

क्या POSIX स्वचालित रूप से स्ट्रिंग की शुरुआत के लिए मैच का लंगर डालता है? अन्यथा, क्या आप उन अल्पविरामों को नहीं छोड़ सकते थे?
मार्टिन एंडर

मुझे लगता है कि इसका POSIX। प्रति हो सकता है। लेकिन हाँ, अच्छी तरह से देखा! 5 चार्ट कम!
स्टिलेज

4
जेली के साथ प्रतिस्पर्धा करने की कोई आवश्यकता नहीं है। बस आप अपनी पसंद की भाषा चुनें और आनंद लें। :)
मार्टिन एंडर

3

पीसीआरई, 65 बाइट्स

यह वास्तव में एक तुच्छ समाधान है - और बहुत चालाक नहीं है - लेकिन मैं इसे गोल्फ करने की कोशिश करूंगा।

वी:

(?#V).+[SR]\)

एल:

(?#L).+[PV]\)

एस:

(?#S).+[PL]\)

पी:

(?#P).+[RV]\)

आर:

(?#R).+[SL]\)

अनिवार्य रूप से, प्रत्येक रेगेक्स में एक 'पहचानकर्ता' होता है, जो एक टिप्पणी के रूप में होता है, जो अन्य रेगेक्स को बताता है कि इसका मिलान होना चाहिए या नहीं।


3

.NET, 50 बाइट्स

आदेश में वे हैं R, P, S, L, V

[^R]\^[SL]
[^P]\^[RV]
[^S]\^[PL]
[^L]\^[PV]
[^V]\^[SR]

[^R]प्रत्येक अन्य अभिव्यक्ति में पहचानकर्ता समूह (उदाहरण के लिए ) की तलाश करके काम करता है ।

भावों को बदलना ^R|\^[SL], या समान करना, काम करने लगता है, लेकिन फिर यह @ dimaima के उत्तर से थोड़ा सा समान है, हालांकि यह 45 बाइट्स में मिलेगा।


3

वेनिला आरई, 40 अक्षर

सबसे संक्षिप्त या सुरुचिपूर्ण समाधान नहीं है, लेकिन एक मनभावन अर्ध-अर्थ दृश्य संरचना है!

[^r][sl]
[^p][vr]
[^s][lp]
[^l][pv]
[^v][rs]

रॉक बीट्स कैंची या छिपकली
पेपर बीट वल्कन या रॉक
कैंची बीट छिपकली या पेपर
छिपकली बीट्स पेपर या वल्कन
वालकैन बीट्स रॉक या कैंची


2

पोसिक्स, 35 बाइट्स

Rock
R?^[LS]
Paper
P?^[RV]
Scissors
S?^[LP]
Lizard
L?^[PV]
Vulcan (Spock)
V?^[RS]

एक शुरुआत / अंत प्रतीक के पीछे "छिपाने" के लिए एक पूरी तरह से अलग तरीका है, इसलिए मुझे इसके बारे में ठीक लगता है :) मैं शुरू करने के लिए मिलान कर रहा हूं क्योंकि "?" हमेशा पत्र और अंत के बीच जाना होगा / $ अगर दूसरे तरीके से किया।

मेरे 1 समाधान से 10 बाइट्स कम, और वैचारिक रूप से सरल जो मुझे पसंद है एक बोनस है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.