한 나쁜 제삼자 운영자는 다른 사람에게 가치가있다


18

오늘의 일일 WTF 는 다음 코드 줄을 인용합니다 ...

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')))))))))))))))

FailSafe라는 정수 값을 사용하고 위의 코드가 동일한 정수 값에서 생성하는 것과 동일한 문자열을 반환하는 코드를 작성하십시오.

  • 문제는 해당 줄을 다시 작성하는 것이므로 정수 값을로드하고 문자열을 출력하는 코드를 포함하여 "boilerplate"코드는 무료입니다. 정수에서 문자열로의 위 변환을 수행하는 코드 만 계산됩니다.
  • 선택한 식별자가 동일한 골프 점수를 갖는 한, 다른 이름을 "FailSafe"로 사용할 수 있습니다.
  • 조회를 수행하기 위해 외부 리소스를 호출하지 않습니다.
  • 일반적인 코드 골프 규칙이 적용됩니다.

FailSafe를 다른 변수 (예 : f=FailSafe이와 유사한 변수)에 저장할 수 있습니까?
ProgramFOX

@ProgramFOX 괜찮습니다.하지만 그 과제는 계산에 포함됩니다. FailSafe라는 변수가있는 지점을 안내하는 상용구 만 무료입니다.
billpg

우리를 위해 코드를 예쁘게 인쇄 해 주시겠습니까? 아니면 도전을 이해하는 도전입니까?
John Dvorak

3
@JanDvorak 나는 확실하지 않다 ...
billpg

2
나는이 희망 : pastebin.com/jzXt4fsp가 읽기 좋네요
eithed

답변:


5

루비, 210 자

@Jan Dvorak의 솔루션과 비슷하지만 조금 더 기능적이고 짧습니다.

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

GolfScript, 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 개의 가능한 결과의 배열을 생성하고의 4 개의 가장 낮은 비트에 따라 오류 메시지를 선택합니다 FailSafe. if그런 다음 가장 바깥 쪽 이 0 인 경우를 처리합니다.


or대신에 if당신을 구할 것이라고 생각 합니다 .. 그러나 나는 원래 코드를 해독하려고 시도하지 않았다는 것을 인정합니다.
피터 테일러

4

Rebol / Red : 208 자

나는 중첩 된 원 사업자가 성가신 것을 동의 같이이 골프에 관심이로 아니에요 ...이 언급 실제로 REBOL / 레드의에 대한 좋은 예이다 CASE . 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 0 [ "주어진 상태에있는 감지 영역"] x 1 [ "나쁜 가시성"] x 3 [ "초기화"] y 7 [ "잘못된 구성"] f> 0 [ "알 수 없음"] 1 [ "기술 경보 없음"]] ";"


4

APL (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경우 (FailSafe는 0이 아니지만 처음 4 비트는)
    • 'Detection zones staying in a given state' 'Bad visibility' 'Initialization' 'Bad configuration'/⍨⌽⍵⊤⍨4/2: 인수에서 가장 낮은 4 비트 ⍵⊤⍨4/2( )를 가져오고 반대 ( )로 설정 한 비트의 문자열을 선택합니다 ( /⍨).
  • '; '∘,¨: '; '반환 된 각 문자열 앞에 추가
  • ⊃,/: 모든 문자열을 결합하고
  • 2↓: '; '앞 의 추가 문자가 있기 때문에 처음 두 문자를 제거하십시오 .

로 변경 ⊃,/하여 2 바이트를 저장하십시오 .
Adám

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출력 문자열을 만들기 위해 상수 (Ruby에서는 모든 대문자 식별자가 상수 임)를 사용하는 단일 표현식입니다 .


루비에서는 FailSafe사용하기 전에 상수 (와 같은 )를 선언해야합니다 . 그리고 당신은 코드 올리기uninitialized constant FailSafe

4
@ Зелёный 질문에 따르면 : "FailSafe라는 정수 값을 취하는 일부 코드를 작성하십시오"-따라서 내 코드 (여기의 다른 답변과 마찬가지로) FailSafe는 이미 정의되어 있다고 가정합니다 . 코드를 실행하려면 먼저 상수를 직접 정의해야합니다.
Ventero

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 또는 Coffeescript 함수 표현식을 사용하여 더 줄일 수 있습니다.


FailSafe가 18이면 어떻게 되나요? (실제로, 원래의 챌린지 코드는 하위 4 비트 만 보므로 알 수없는 경우는 실제로 감지되지 않습니다!) 따라서 문제를 실제로 처리하거나 "고정 된"알고리즘을 제공해야하는지 여부는 문제입니다.
blabla999

@ blabla999 : "Bad visibility"2 비트가 설정되고 다른 하위 4 비트가 없기 때문에 반환됩니다 . Unknown경우는 하위 4 비트 중 어느 것도 설정되어 있지 않은 경우에 발생하지만, FailSafe!= 0- 그냥 원래 코드 (시도와 같이 16). 우리가이 문제를 "수정"해야하는지 여부는 나에게 질문이 아니라 OP에 질문해야합니다.
Bergi

당신 말이 맞아-바보 같아 나는 그 코드 조각에 너무 혼란스러워했다. 그 죄송합니다.
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"; "내 에서 마지막 표현식 ( )이 포함 된 일련의 명령문으로 사용할 수도 있습니다.


다른 이름을 허용하는 규칙을 추가하겠습니다.
billpg

e+=["Initialization"]if f&4>3나는 이것을 파이썬으로 원한다.
ɐɔıʇǝɥʇuʎs

@ ɐɔıʇǝɥʇuʎs 님은 감동하지 않으 []||=십니까?
John Dvorak

그것이 무엇을하는지 모르겠다 ... 또한 : since FailSafe must be a constant in Ruby허. 파이썬의 태도는 "그렇습니다. 물건 수는 있지만 내가 엉망을 정리할 것으로 기대하지는 마십시오 "와
비슷합니다.

1
@ ɐɔıʇǝɥʇuʎs ||=+=같지만 ||- a ||= b는 - 와 같습니다 a = a || b. 일반적으로 변수가 거짓 일 때 기본값을 지정하는 데 사용됩니다.
Aaron Dufour

1

VBScript를, 204 개 (234) 232 문자

(편집 : split () 대신 array ()를 사용하여 점수 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 = failsafe : b = 0에서 3 : s = s & slit ( ",; 감지 영역이 지정된 상태에 머무름, 가시성 불량, 초기화 ,,,,; 불량 구성", ",") (f 및 2 ^ b) : 다음 : 분할 ( "기술 경보 없음, 알 수 없음", & mid (s, 3), ",") (2+ (f = 0) + (len (s) = 0))

(원본, 230)

b = 0에서 3 : s = s & split ( ",; 감지 영역이 지정된 상태를 유지함; 가시성 불량, 초기화; ,,,, 불량 구성", ",") (FailSafe 및 2 ^ b) : next : 배열 (중 (들), "기술 경보 없음") (-(len (s) = 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']

첫 번째 버전의 버그를 지적한 Bergi에게 감사합니다.

이것은 FailSafe 값을 6 비트 마스크 (0-> 16 및 15보다 큰-> 32)로 매핑하면 최종 테스트를 제거 할 수 있습니다. 6 비트 마스크 m에 대한 맵핑은 다음을 사용하여 수행 할 수 있습니다.

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

즉, 제로 FailSafe의 경우 m은 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 :으로 대체했습니다).

이것은 좋은 생각 인 것처럼 보이지만 한숨의 문자 수는 같습니다. 어쩌면 밀도가 높은 연산자 이름을 가진 다른 프로그래밍 언어의 점수가 더 높을 수도 있습니다!

m에 임시 변수를 사용하지 않고 몇 문자를 절약 할 수 있지만 루프에서 다시 계산하고 문자열 벡터에 리터럴 배열을 사용하지 않으면 240 문자 미만의 카운트를 얻을 수 있습니다.

마지막으로 마스크 m은 다음과 같이 계산할 수도 있습니다. m:={32},(1 to: 16) at:(FailSafe+1 min:17) 될 수 있으며, 이는 APL에서 더 짧을 수있다. 그런 다음 벡터에서 마지막 두 문자열을 교환하십시오.

추신 : 첫 번째 버전은 다른 솔루션과 마찬가지로 FailSafe가 음이 아닌 것으로 가정합니다. 두 번째는 nil 또는 다른 숫자가 아닌 것을 처리 할 수 ​​있습니다.


2
[정보] 어떤 Unknown구성?
Bergi

죄송합니다. 문제를 해결해야합니다.
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'

무슨 일이 일어난 UnknownNo technical alarms?
Bergi

3
쓰레기. 내가 GolfScript 답변을 이길 때 나는 의심했을 것입니다 ...
라이언 케네디

항상 그렇듯이, 나는 최첨단 사건을 잊었다.
Ryan Kennedy

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'
}

코드를 다시 읽으십시오 : 바운드 검사가 없습니다.
titanofold

0

Java 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);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.