मैं <3 सशर्त


11

आप अपने कोड में बहुत लंबे, उबाऊ दिखने वाले सशर्त हैं:

if flag == 1:

while have != needed:

if type == 7:

इन्हें उनके बहुत अधिक प्यारा <3सशर्त समकक्षों में बदला जा सकता है:

if abs(flag - 1) + 2 <3:

while 3 - abs(have - needed) <3:

if 2 + abs(type - 7) <3:

कार्य

आपका काम सशर्त लेना है और इसके संदर्भ में बनाना है <3। एकमात्र अंतर जो मायने रखता है वह यह है कि <और कोई नहीं है 3

सशर्त, दो से या तो अलग भाव हो जाएगा ==, !=, >, <, >=या <=
अभिव्यक्तियों में केवल जोड़, घटाव, एकात्मक नकार ( -something) होगा, जहां प्रत्येक चर या संख्याओं में से एक +या -पहले होता है (पहले को छोड़कर जिसके पास कुछ भी नहीं है या -पहले नहीं है)।
संख्याएँ होंगी [0-9]+, और चर होंगे [a-z]+। यदि उत्तर का उपयोग करने की आवश्यकता है |x|(निरपेक्ष मूल्य x), तो abs()फ़ंक्शन का उपयोग करें । आप मान सकते हैं कि सभी चर पूर्णांक हैं, और इनपुट में सभी संख्या स्थिरांक <1000 हैं।

आउटपुट को सरलतम रूप में होना आवश्यक नहीं है। यह ऊपर की तरह एक सशर्त होने की आवश्यकता है, जिसका अर्थ है कि यह केवल दो अभिव्यक्तियाँ हैं, एक सशर्त संकेत द्वारा अलग है, लेकिन यह absफ़ंक्शन का उपयोग भी कर सकता है , एक वैध अभिव्यक्ति को संलग्न करता है, और फिर यह वैधता के संदर्भ में एक चर की तरह कार्य करता है।

यदि इनपुट में किसी वैरिएबल के किसी भी मूल्य के लिए आउटपुट नहीं है, तो ऐसी स्थिति का उत्पादन करें जो हमेशा गलत हो, लेकिन फिर भी <3

चुनौती का एक हिस्सा यह पता लगाना है कि यह कैसे करना है, लेकिन यहां have != neededऊपर दिए गए कदम हैं :

have != needed
have - needed != 0
abs(have - needed) > 0
-abs(have - needed) < 0
3 - abs(have - needed) <3

स्कोरिंग

यह कोड-गोल्फ है, इसलिए बाइट्स में सबसे छोटा वैध कोड है, जीतता है।

परीक्षण के मामलों

(ध्यान दें, ये आउटपुट केवल आउटपुट नहीं हैं, लेकिन मैंने उन्हें सरल बनाने की कोशिश की है।)

flag == 1
abs(flag - 1) + 2 <3

have != needed
3 - abs(have - needed) <3

type == 7
2 + abs(type - 7) <3

x > y
3 - x + y <3

x + 5 < -y
x + 8 + y <3

x + 6 <= y
x + 8 - y <3

-x >= y + 3
x + y + 5 <3

x < x
3 <3
# Unsimplified; both would be valid outputs.
x - x + 3 <3

क्या इनपुट टोकन के बीच हमेशा एक स्थान होता है?
दरवाज़े

@Doorknob नंबर 0 या 1 स्पेस होगा।
अरितर

जवाबों:


3

रेटिना , 95 बाइट्स

<=
<1+
>=
>-1+
(.*)(.=)(.*)
$2abs($1-($3))
==
2+
!=
3-
(.*)>(.*)
$2<$1
(.*)<(.*)
$1-($2)+3
$
<3

इसे ऑनलाइन आज़माएं!

बल्कि एक भोली समाधान, लेकिन मैं कोई सुधार नहीं कर पाया।

यह प्रतिस्थापन की एक श्रृंखला है:

<=
<1+
>=
>-1+

के x <= yसाथ x < 1 + yऔर x >= yसाथ की तुलना करके "या बराबर" से छुटकारा पाएं x > -1 + y

(.*)(.=)(.*)
$2abs($1-($3))

के x == yसाथ ==abs(x - y), और के x != yसाथ बदलें !=abs(x - y)

==
2+
!=
3-

के ==साथ 2+और !=साथ बदलें 3-, ताकि समग्र प्रतिस्थापन x == y2 + abs(x - y)और x != y→ बन जाएं 3 - abs(x - y)

(.*)>(.*)
$2<$1

शेष असमानताओं की दिशा को सामान्य करें, के x > yसाथ प्रतिस्थापित करें y < x

(.*)<(.*)
$1-($2)+3

बदलें x < yके साथ x - y + 3

$
<3

स्ट्रिंग के अंत में एक दिल जोड़ें।

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