एक बुरा टर्नरी ऑपरेटर दूसरे का वर्णन करता है


18

आज का दैनिक डब्ल्यूटीएफ कोड की निम्नलिखित पंक्ति को उद्धृत करता है ...

FailSafe==0?'No technical alarms':((FailSafe&1)!=0&&(FailSafe&2)!=0&&(FailSafe&4)!=0&&(FailSafe&8)!=0?'Detection zones staying in a given state; Bad visibility;
Initialization; Bad configuration':((FailSafe&1)!=0&&(FailSafe&2)!=0&&(FailSafe&4)!=0?'Detection zones staying in a given state; Bad visibility; Initialization':
((FailSafe&1)!=0&&(FailSafe&2)!=0&&(FailSafe&8)!=0?'Detection zones staying in a given state; Bad visibility; Bad configuration':((FailSafe&1)!=0&&(FailSafe&4)!=0&&
(FailSafe&8)!=0?'Detection zones staying in a given state; Initialization; Bad configuration':((FailSafe&2)!=0&&(FailSafe&4)!=0&&(FailSafe&8)!=0?'Bad visibility;
Initialization; Bad configuration':((FailSafe&1)!=0&&(FailSafe&2)!=0?'Detection zones staying in a given state; Bad visibility':((FailSafe&1)!=0&&(FailSafe&4)!=0?'Detection 
zones staying in a given state; Initialization':((FailSafe&1)!=0&&(FailSafe&8)!=0?'Detection zones staying in a given state; Bad configuration':((FailSafe&2)!=0&&
(FailSafe&4)!=0?'Bad visibility; Initialization':((FailSafe&2)!=0&&(FailSafe&8)!=0?'Bad visibility; Bad configuration':((FailSafe&4)!=0&&(FailSafe&8)!=0?'Initialization; Bad 
configuration':((FailSafe&1)!=0?'Detection zones staying in a given state':((FailSafe&2)!=0?'Bad visibility':((FailSafe&4)!=0?'Initialization':((FailSafe&8)!=0?'Bad 
configuration':'Unknown')))))))))))))))

कुछ कोड लिखें जो कि फेलसेफ नामक एक पूर्णांक मान लेता है और एक ही स्ट्रिंग देता है जो उपरोक्त कोड समान पूर्णांक मान से उत्पन्न होगा।

  • चुनौती उस लाइन को फिर से लिखना है, इसलिए "बॉयलरप्लेट" कोड मुफ़्त है, जिसमें कोई भी कोड शामिल है जो एक पूर्णांक मान को लोड करता है और स्ट्रिंग को आउटपुट करता है। केवल वह कोड जो पूर्णांक से स्ट्रिंग स्ट्रिंग में उपरोक्त परिवर्तन करता है।
  • यदि आप चाहें तो एक अलग नाम "फेलसेफ" का उपयोग कर सकते हैं, जब तक कि आपके चुने हुए पहचानकर्ता का गोल्फ स्कोर समान हो।
  • लुकअप करने के लिए कोई बाह्य संसाधन नहीं।
  • सामान्य कोड-गोल्फ नियम लागू होते हैं।

क्या हमें फेलसेफ को किसी अन्य चर (उदाहरण के लिए, f=FailSafeया ऐसा कुछ) में संग्रहीत करने की अनुमति है ?
प्रोग्रामफॉक्स

@ProgramFOX यह ठीक है, लेकिन वह असाइनमेंट गिनती में शामिल है। केवल बॉयलरप्लेट जो आपको उस बिंदु तक ले जाता है जहां फेलसेफ नामक एक चर मुक्त है।
बिल्वपत्र

क्या आप कृपया हमारे लिए कोड प्रिंट कर सकते हैं? या चुनौती को समझना चुनौती है?
जॉन ड्वोरक

3
@JanDvorak मुझे यकीन नहीं है कि मैं कर सकता हूँ ...
बिल्वपत्र

2
मुझे यह आशा है: pastebin.com/jzXt4fsp पढ़ने के लिए अच्छे है
eithed

जवाबों:


5

रूबी, 210 वर्ण

@ जान ड्वोरक के समाधान के समान लेकिन थोड़ा अधिक कार्यात्मक और थोड़ा छोटा।

f=FailSafe
e=[f&1,f&2,f&4,f&8,1-f].zip(["Detection zones staying in a given state","Bad visibility","Initialization","Bad configuration","No technical alarms"]).map{|a,b|a>0&&b}-[!0]
e[0]||="Unknown"
e.join"; "

5

गोल्फस्क्रिप्ट, 167 वर्ण

FailSafe.15&["Unknown"][""]"Bad configuration
Initialization
Bad visibility
Detection zones staying in a given state"
n/{`{n+1$+}+%}/1>+=n%"; "*"No technical alarms"if

कोड वेरिएबल में वैल्यू मानता है FailSafe और स्टैक पर परिणाम को पुश करता है (यानी स्टैंडअलोन प्रोग्राम के रूप में रन होने पर स्ट्रिंग को आउटपुट करता है)। आप कोड का परीक्षण ऑनलाइन कर सकते हैं ।

कोड मूल रूप से सभी 16 संभावित परिणामों की एक सरणी उत्पन्न करता है, चार सबसे कम बिट्स के आधार पर त्रुटि संदेश का चयन करता है FailSafe। सबसे बाहरी ifफिर शून्य मामले को संभालता है।


मुझे लगता है कि orइसके बजाय ifआपको बचाएंगे .। लेकिन मैं मानता हूं कि मैंने मूल कोड को समझने की कोशिश नहीं की है।
पीटर टेलर

4

रेबोल / रेड: 208 वर्ण

मुझे इस पर गोल्फ करने में कोई दिलचस्पी नहीं है क्योंकि सहमत हूँ कि नेस्टेड टर्नरी ऑपरेटर नाराज हैं ... और इस बात का उल्लेख करना वास्तव में रेबो / रेड के मामले के लिए एक अच्छा उदाहरण है । यह SWITCH से संबंधित है और वास्तव में इस तरह से चीजों को समतल करने में मदद करता है:

f: FailSafe
append case [
    0 < f and 1 ["Detection zones staying in a given state"]
    1 < f and 2 ["Bad visibility"]
    3 < f and 4 ["Initialization"]
    7 < f and 8 ["Bad configuration"]
    f > 0 ["Unknown"]
    true ["No technical alarms"]
] "; "

CASE / ALL नामक एक वेरिएंट है जो वास्तव में सभी शर्तों को चलाएगा, लेकिन डिफ़ॉल्ट पहले सच्चे एक के बाद बंद हो जाता है।

मैं इसे थोड़ा "208" गोल्फ करूँगा:

x: func [y] [y <(f: FailSafe) और ++ y] एपेंड केस [x ० ["एक निश्चित अवस्था में रहने वाले डिटेक्शन जोन"] x १ ["खराब दृश्यता"] x ३ ["प्रारंभ"] y 7 ["खराब कॉन्फ़िगरेशन"] f> 0 ["अज्ञात"] 1 ["कोई तकनीकी अलार्म नहीं"]] ";"


4

एपीएल (172)

2↓⊃,/'; '∘,¨{⍵=0:⊂'No technical alarms'⋄0=16|⍵:⊂'Unknown'⋄'Detection zones staying in a given state' 'Bad visibility' 'Initialization' 'Bad configuration'/⍨⌽⍵⊤⍨4/2}FailSafe

स्पष्टीकरण:

  • {... }FailSafe: तार उत्पन्न करते हैं
    • ⍵=0:⊂'No technical alarms': 0मामला
    • 0=16|⍵:⊂'Unknown': Unknownमामला (फेलसेफ 0 नहीं है लेकिन पहले चार बिट्स हैं)
    • 'Detection zones staying in a given state' 'Bad visibility' 'Initialization' 'Bad configuration'/⍨⌽⍵⊤⍨4/2: तर्क में सबसे कम 4 बिट्स प्राप्त करें ( ⍵⊤⍨4/2), रिवर्स ( ), और उन बिट्स के लिए स्ट्रिंग्स चुनें जो ( /⍨) हैं।
  • '; '∘,¨: '; 'प्रत्येक लौटे स्ट्रिंग के सामने जोड़ें ,
  • ⊃,/: सभी तार एक साथ जुड़ते हैं,
  • 2↓: और पहले दो पात्रों को हटा दें (क्योंकि '; 'सामने एक अतिरिक्त है ।)

⊃,/करने के लिए बदलकर दो बाइट्स सहेजें
एडम

3

रूबी, 183 वर्ण

[(f=FailSafe)<1?"No technical alarms":f&15<1?:Unknown:["Detection zones staying in a given state"*f[0],"Bad visibility"*f[1],"Initialization"*f[2],"Bad configuration"*f[3]]-[""]]*"; "

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


रूबी में आपको FailSafeउपयोग करने से पहले स्थिर (जैसे ) घोषित करना चाहिए । और आप कोड बढ़ाते हैंuninitialized constant FailSafe

4
@ :ЕлЗный जैसा कि प्रश्न में कहा गया है: "कुछ कोड लिखें जो फेलसेफ नामक पूर्णांक मान लेता है" - इसलिए मेरा कोड (यहां अन्य सभी उत्तरों की तरह) मान लिया गया है FailSafeकि पहले से ही परिभाषित है। जब आप कोड को चलाना चाहते हैं, तो आपको पहले खुद को निरंतर परिभाषित करना होगा।
वेंटरो

2

जावास्क्रिप्ट, 197 195 वर्ण

FailSafe?['Detection zones staying in a given state','Bad visibility','Initialization','Bad configuration'].filter(function(_,i){return FailSafe&1<<i}).join('; ')||'Unknown':'No technical alarms'

स्वरूपित:

FailSafe
  ? [ 'Detection zones staying in a given state',
      'Bad visibility',
      'Initialization',
      'Bad configuration'
    ].filter(function(_, i) {
      return FailSafe & 1<<i;
    }).join('; ') || 'Unknown'
  : 'No technical alarms';

ES6 या कॉफ़ीस्क्रिप्ट फ़ंक्शन अभिव्यक्तियों का उपयोग करके और कम किया जा सकता है।


क्या होगा अगर फेलसेफ 18 है? (वास्तव में, मूल चुनौती कोड केवल निचले 4 बिट्स को देखता है, इसलिए अज्ञात मामले का वास्तव में कभी पता नहीं लगाया जाता है!) तो सवाल यह है, अगर हमें वास्तव में इसकी देखभाल करनी चाहिए या "निश्चित" एल्गोरिथम प्रदान करना चाहिए।
ब्लाबला 999

@ blabla999: यह वापस आ जाएगा "Bad visibility"क्योंकि 2-बिट सेट है और अन्य निचले 4 बिट्स में से कोई भी नहीं है। Unknownमामला है जब कम 4 बिट्स में से कोई भी सेट कर दिया जाता होता है, लेकिन FailSafeहै != 0- बस मूल कोड (साथ की कोशिश के रूप में 16)। क्या हमें इसे "ठीक" करना चाहिए, आपको ओपी से पूछना चाहिए (प्रश्न पर टिप्पणी में), मुझे नहीं ...
बर्गी

सही है - मुझे बेवकूफ। मैं उस कोड ऑफ कोड से इतना भ्रमित हो गया। उसके लिए खेद है।
blabla999

2

रूबी, 213 वर्ण

f=failSafe
e=f&1>0?["Detection zones staying in a given state"]:[]
e+=["Bad visibility"]if f&2>1
e+=["Initialization"]if f&4>3
e+=["Bad configuration"]if f&8>7
e[0]||=f>0?"Unknown":"No technical alarms"
e.join"; "

यह एक फंक्शन बॉडी में लिपटे हुए ठीक काम करेगा ( def transform failSafe; ...; end)। इसे एकल अभिव्यक्ति के रूप में भी इस्तेमाल किया जा सकता है (कोष्ठकों में लपेट क्योंकि अर्धविराम / नई पंक्ति में सबसे कम प्राथमिकता होती है) या अंतिम अभिव्यक्ति ( e.join"; ") के साथ बयानों के अनुक्रम के रूप में प्रयोग किया जाता है।


मैं एक अलग नाम की अनुमति देने के लिए एक नियम जोड़ूंगा।
बिल्वपत्र

e+=["Initialization"]if f&4>3मैं पाइथन में यही चाहता हूं।
atı 14uʎs

@ ressedı byuʎs क्या आप इससे प्रभावित नहीं हैं []||=?
जॉन ड्वोरक

नहीं यकीन है कि यह क्या करता है ... इसके अलावा: since FailSafe must be a constant in Rubyहुह। पायथन का रवैया "हाँ, आप सामान तोड़ सकते हैं , लेकिन मुझे गंदगी साफ करने की उम्मीद नहीं है "
ʎı Juluɐɔs

1
@ --ı isuʎs ||=जैसा है +=लेकिन साथ है ||- a ||= bके बराबर है a = a || b। यह आमतौर पर एक चर को डिफ़ॉल्ट करने के लिए उपयोग किया जाता है जब यह गलत है।
हारून डफोर

1

VBScript, 204 234 232 वर्ण

(संपादित करें: विभाजन के बजाय सरणी () का उपयोग करके स्कोर में सुधार 2 (अब। 232)।)

f=failsafe:for b=0to 3:s=s&split(",; Detection zones staying in a given state,; Bad visibility,,; Initialization,,,,; Bad configuration",",")(f and 2^b):next:array("No technical alarms","Unknown",mid(s,3))(2+(f=0)+(len(s)=0))

(संपादित करें: "अज्ञात" भाग को भूल गए। अब 234 वर्ण हैं।)

f = विफल: b = 0to 3 के लिए: s = s & विभाजित (", एक दिए गए अवस्था में रहने वाले डिटेक्शन जोन, बुरा दृश्यता ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"> खराब ""; b): अगला: स्प्लिट ("कोई तकनीकी अलार्म नहीं, अज्ञात," और मध्य (s, 3), ",") (2+ (f = 0) + (len (s) = 0))

(मूल, 230)

b = 0to 3 के लिए: s = s & विभाजित (",; डिटेक्शन ज़ोन दिए गए अवस्था में रहने वाले; बुरी दृश्यता ,,,,,,,,,,; बुरा विन्यास", ",") (फेलसेफ और 2 ^ b), अगला: : सरणी (मध्य (एस, 3), "कोई तकनीकी अलार्म") - (- (लेन (एस) = 0))

बेशक, यह सिर्फ एक स्क्रिप्ट का हिस्सा है। इसे परखने के लिए, कुछ इस तरह आज़माएँ:

FailSafe=cint(inputbox("Please enter Failsafe as an integer"))
f=failsafe:for b=0to 3:s=s&split(",; Detection zones staying in a given state,; Bad visibility,,; Initialization,,,,; Bad configuration",",")(f and 2^b):next
msgbox array("No technical alarms","Unknown",mid(s,3))(2+(f=0)+(len(s)=0))

मुझे भी अज्ञात मामला भूल गया ;-)
blabla999

@ blabla999 दरअसल। फिक्स्ड। धन्यवाद!
JesterBLUE

1

स्मॉलटाक, 243 वर्ण

FailSave>15ifTrue:'Unknown'ifFalse:[((((1to:4)select:[:b|FailSafe isBitSet:b])collect:[:b|#('Detection zones staying in a given state' 'Bad visibility' 'Initialization' 'Bad configuration')at:b])asStringWith:'; ')ifEmpty:'No technical alarms']     

पठनीयता के लिए स्वरूपित:

FailSafe > 15 
    ifTrue:'Unknown'
    ifFalse:[
        ((((1 to:4)
            select:[:b | FailSafe isBitSet:b ])
                collect:[:b| 
                    #( 'Detection zones staying in a given state'
                       'Bad visibility'
                       'Initialization'
                       'Bad configuration') at:b ]
                    ) asStringWith:'; ')
                        ifEmpty:'No technical alarms']

पहले संस्करण में बग की ओर इशारा करने के लिए, बर्गी को धन्यवाद।

यह एक विचार लाता है: यदि मैं फेलसेफ मूल्य को 6-बिट मास्क में मैप करता हूं, (मैपिंग 0 -> 16 और अधिक से अधिक -15 -> 32), तो मैं अंतिम परीक्षणों से छुटकारा पा सकता हूं। 6bit मास्क मीटर के लिए मानचित्रण के साथ किया जा सकता है:

m := {16},(1 to: 15) at:FailSafe+1 ifAbsent:32.

वह है, मी 16 एक शून्य फेलसेफ के लिए और 32 आउट-ऑफ-द-सीमा मूल्यों के लिए होगा। फिर ऊपर के रूप में तार का चयन करें और इकट्ठा करें। यह नया कोड देता है:

m := {16},(1 to:15) at:FailSafe+1 ifAbsent:32.
(((1 to:6) select:[:b | m isBitSet:b ])
        collect:[:b| 
            #( 'Detection zones staying in a given state'
               'Bad visibility'
               'Initialization'
               'Bad configuration'
               'No technical alarms'        
               'Unknown') at:b ]
               ) joinWithAll:'; '

(मैंने asStringWith को भी शामिल किया: joinWithAll द्वारा :, जो एक उपनाम है)।

हालांकि यह एक अच्छा विचार है, यह एक ही चरित्र गिनती है - आहें। हो सकता है कि सघन ऑपरेटर नामों के साथ कुछ अन्य प्रोग्रामिंग भाषा यहां बेहतर स्कोर करें!

मैं मी के लिए एक अस्थायी चर का उपयोग न करके कुछ वर्णों को बचा सकता था, लेकिन इसे लूप में फिर से जोड़ सकता हूं और स्ट्रिंग वेक्टर के लिए शाब्दिक सरणी का उपयोग न करके, 240 वर्णों से नीचे की गिनती प्राप्त करने के लिए।

अंत में, मास्क m की गणना भी की जा सकती है m:={32},(1 to: 16) at:(FailSafe+1 min:17), जो APL में छोटी हो सकती है। फिर वेक्टर में अंतिम दो तारों का आदान-प्रदान करें।

पुनश्च: पहला संस्करण मानता है कि फेलसेफ गैर-नकारात्मक है, जैसे कुछ अन्य समाधान यहां दिए गए हैं। दूसरा कुछ भी, यहां तक ​​कि शून्य या अन्य गैर-संख्या से निपट सकता है।


2
Unknownकॉन्फ़िगरेशन के बारे में क्या ?
बर्गी जूल

ouch सॉरी - मुझे इसे ठीक करना है।
blabla999

0

कॉफीस्क्रिप्ट, 161 160 221 चार्ट

F = FailSafe;F<16 and (F and [0..3].filter((i)->(1<<i)&F).map((i)->(['Detection zones staying in a given state','Bad visibility','Initialization','Bad configuration'])[i]).join('; ') or 'No technical alarms') or 'Unknown'

क्या हुआ Unknownऔर No technical alarms?
बर्गी जूल

3
अ छ बकवास है। मुझे संदेह होना चाहिए था जब मैंने गोल्फस्क्रिप्ट जवाब को हराया ...
रयान कैनेडी

हमेशा की तरह, मैं किनारे के मामलों को भूल गया ...
रयान कैनेडी

0

VB.net

Function StateText(f As FailFlag) As String
  If f=0 Then Return "No Technical Alarm"
  Dim t=""
  If f.HasFlag(f1) Then t &= "Detection zones staying in a given state; "
  If f.HasFlag(f2) Then t &= "Bad visibility; "
  If f.HasFlag(f4) Then t &= "Initialization; "
  If f.HasFlag(f8) Then t &= "Bad configuration; "
  Return If( t<>"", t.TrimEnd("; "),"Unknown")
End Function

<Flags>
Enum FailFlag
  f1 = 1
  f2 = 2
  f4 = 4
  f8 = 8
End Enum

संपादित करें: बेहतर प्रविष्टि

Function StateText(f As FailFlag) As String
  If f = 0 Then Return "No Technical Alarm"
  Dim t = String.Join("; ",
            From e In [Enum].GetValues(GetType(FailFlag))
            Where f.HasFlag(e)
            Select [Enum].GetName(GetType(FailFlag), e).Replace("_", " "))
  Return If( t<>"", t,"Unknown")
End Function

<Flags>
Enum FailFlag
  Detection_zones_staying_in_a_given_state = 1
  Bad_visibility = 2
  Initialization = 4
  Bad_configuration = 8
End Enum

0

पर्ल, 208 197 वर्ण

$f=$FailSafe;%m=(1,'Detection zones staying in a given state',2,'Bad visibility',4,'Initialization',8,'Bad configuration');($f?join'; ',@m{map{$f&$_?$_:()}1,2,4,8}:'No technical alarms')||'Unknown'

बॉयलरप्लेट कोड के साथ यह काम करने के लिए:

#!/usr/bin/env perl
$FailSafe=17;
print failmsg() . "\n";

sub failmsg {
$f=$FailSafe;%m=(1,'Detection zones staying in a given state',2,'Bad visibility',4,'Initialization',8,'Bad configuration');($f?join'; ',@m{map{$f&$_?$_:()}1,2,4,8}:'No technical alarms')||'Unknown'
}

कोड को रेयर करें: कोई बाउंड चेक नहीं है।
टाइटेनोफोल्ड

0

जावा 275 वर्ण ( अनावश्यक सफेद स्थान की गिनती नहीं )

    String s = "";
    int b = 1;
    for (String m : new String[]{"Detection zones staying in a given state; ","Bad visibility; ", "Initialization; ", "Bad configuration; "}) {
        if ((FailSafe & b) != 0) s = s + m;
        b <<= 1;
    }
    return (s.length() == 0) ? (FailSafe == 0) ? "No technical alarms" : "Unknown" : s.substring(0, s.length() - 2);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.