Die heutige Daily WTF zitiert die folgende Codezeile ...
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')))))))))))))))
Schreiben Sie einen Code, der einen ganzzahligen Wert mit dem Namen FailSafe annimmt und dieselbe Zeichenfolge zurückgibt, die der obige Code aus demselben ganzzahligen Wert erzeugen würde.
- Die Herausforderung besteht darin, diese Zeile neu zu schreiben, sodass der Code "boilerplate" frei ist, einschließlich aller Codes, die einen ganzzahligen Wert laden und die Zeichenfolge ausgeben. Es zählt nur der Code, der die obige Umwandlung von einer Ganzzahl in eine Zeichenfolge ausführt.
- Wenn Sie möchten, können Sie einen anderen Namen als "FailSafe" verwenden, sofern Ihre gewählte Kennung die gleiche Golfwertung aufweist.
- Es werden keine externen Ressourcen aufgerufen, um die Suche durchzuführen.
- Es gelten die normalen Code-Golf-Regeln.
f=FailSafe
oder so ähnlich)?Antworten:
Ruby, 210 Zeichen
Ähnlich wie @Jan Dvoraks Lösung, jedoch etwas funktionaler und etwas kürzer.
quelle
GolfScript, 167 Zeichen
Der Code nimmt den Wert in Variable an
FailSafe
und überträgt das Ergebnis auf den Stack (dh er gibt den String aus, wenn er als eigenständiges Programm ausgeführt wird). Sie können den Code online testen .Der Code generiert im Grunde ein Array aller 16 möglichen Ergebnisse, wählt die Fehlermeldung in Abhängigkeit von den vier niedrigsten Bits aus
FailSafe
. Der äußerste behandeltif
dann den Nullfall.quelle
or
anstattif
dir das zu sparen.
. Aber ich gebe zu, dass ich nicht versucht habe, den Originalcode zu entschlüsseln.Rebol / Rot: 208 Zeichen
Ich bin nicht so sehr am Golfen interessiert, als daran, zuzustimmen, dass verschachtelte ternäre Operatoren ärgerlich sind ... und dies zu erwähnen, ist eigentlich eine nette Instanz für Rebol / Reds CASE . Es ist mit SWITCH verwandt und hilft wirklich dabei, Dinge wie dieses zu reduzieren:
Es gibt eine Variante mit dem Namen CASE / ALL, die alle Bedingungen ausführt, die Standardeinstellung wird jedoch erst nach der ersten echten beendet.
Ich "golf" es ein wenig bis 208:
quelle
APL (172)
Erläuterung:
{
...}FailSafe
: generiere die Strings⍵=0:⊂'No technical alarms'
: der0
Fall0=16|⍵:⊂'Unknown'
: derUnknown
Fall (FailSafe ist nicht 0, aber die ersten vier Bits sind)'Detection zones staying in a given state' 'Bad visibility' 'Initialization' 'Bad configuration'/⍨⌽⍵⊤⍨4/2
: Holen Sie sich die niedrigsten 4 Bits in das Argument (⍵⊤⍨4/2
), kehren Sie (⌽
) und wählen Sie die Zeichenfolgen für die Bits, die auf (/⍨
) sind.'; '∘,¨
:'; '
vor jeder zurückgegebenen Zeichenfolge einfügen,⊃,/
: alle Saiten zusammenfügen,2↓
: und entferne die ersten beiden Zeichen (weil'; '
vorne ein Extra ist .)quelle
⊃,/
an∊
.Ruby, 183 Zeichen
Noch eine Ruby-Lösung, aber etwas kürzer als die anderen. Dies ist ein einzelner Ausdruck, der die Konstante verwendet
FailSafe
(in Ruby sind alle Großbuchstaben Konstanten), um die Ausgabezeichenfolge zu erstellen.quelle
FailSafe
vor der Verwendung eine Konstante (like ) deklarieren . Und Sie Code erhöhenuninitialized constant FailSafe
FailSafe
bereits definiert ist. Wenn Sie den Code ausführen möchten, müssen Sie zuerst die Konstante selbst definieren.JavaScript,
197195 Zeichenformatiert:
Könnte durch die Verwendung von ES6- oder Coffeescript-Funktionsausdrücken weiter reduziert werden.
quelle
"Bad visibility"
da das 2-Bit gesetzt ist und keines der anderen unteren 4 Bits. DerUnknown
Fall geschieht , wenn keine der unteren 4 Bits gesetzt, sondernFailSafe
ist!= 0
- wie im ursprünglichen Code (versuchen Sie mit16
). Ob wir dies "beheben" sollten, sollten Sie dem OP (in einem Kommentar zu der Frage) fragen, nicht mir ...Ruby, 213 Zeichen
Dies funktioniert einwandfrei in einem Funktionskörper (
def transform failSafe; ...; end
). Es kann auch als einzelner Ausdruck (in Klammern eingeschlossen, da ein Semikolon / eine neue Zeile die niedrigste Priorität hat) oder als Folge von Anweisungen mit dem letzten Ausdruck (e.join"; "
) in einem Ausdruck verwendet werden.quelle
e+=["Initialization"]if f&4>3
Ich möchte das in Python.[]||=
?since FailSafe must be a constant in Ruby
Huh. Pythons Haltung ist eher wie "Ja, du kannst Sachen zerbrechen, aber erwarte nicht, dass ich das Chaos aufräume"||=
ist wie,+=
aber mit||
-a ||= b
ist äquivalent zua = a || b
. Es wird häufig verwendet, um eine Variable als Standard festzulegen, wenn sie falsch ist.VBScript,
204 234232 Zeichen(Bearbeiten: Verbesserte Punktzahl um 2 durch Verwendung von array () anstelle von split (). 232 now.)
(edit: vergaß den "unbekannten" Teil. 234 Zeichen jetzt.)
f = ausfallsicher: für b = 0 bis 3: s = s & split (",; Erkennungszonen bleiben in einem bestimmten Zustand; schlechte Sicht ,,; Initialisierung ,,,,; schlechte Konfiguration", ",") (f und 2 ^ b): next: split ("Keine technischen Alarme, Unbekannt," & mid (s, 3), ",") (2+ (f = 0) + (len (s) = 0))(original, 230)
für b = 0 bis 3: s = s & split (",; Erkennungszonen bleiben in einem bestimmten Zustand; schlechte Sichtbarkeit ,,; Initialisierung ,,,,; schlechte Konfiguration", ",") (FailSafe und 2 ^ b): next : Array (Mitte (n, 3), "Keine technischen Alarme") (- (Länge (n) = 0))Dies ist natürlich nur ein Teil eines Skripts. Versuchen Sie zum Testen Folgendes:
quelle
Smalltalk, 243 Zeichen
Zur besseren Lesbarkeit formatiert:
Vielen Dank an Bergi für den Hinweis auf den Fehler in der ersten Version.
Daraus ergibt sich eine Idee: Wenn ich den FailSafe-Wert einer 6-Bit-Maske zuordne (Zuordnung 0 -> 16 und größer als 15 -> 32), kann ich die endgültigen Tests loswerden. Die Abbildung auf die 6-Bit-Maske m kann erfolgen mit:
m := {16},(1 to: 15) at:FailSafe+1 ifAbsent:32.
Das heißt, m ist 16 für einen FailSafe-Wert von Null und 32 für Werte außerhalb des zulässigen Bereichs. Dann wählen und sammeln Sie die Zeichenfolgen wie oben. Dies ergibt den neuen Code:
(Ich habe auch asStringWith: durch joinWithAll: ersetzt, das ist ein Alias).
Obwohl dies eine nette Idee zu sein scheint, hat dies den gleichen Charakter - seufz. Vielleicht schneidet hier eine andere Programmiersprache mit dichteren Operatoren besser ab!
Ich könnte ein paar Zeichen sparen, indem ich keine temporäre Variable für m verwende, sondern sie in der Schleife neu berechne und kein literales Array für den Zeichenfolgenvektor verwende, um eine geringfügige Anzahl unter 240 Zeichen zu erhalten.
Schließlich könnte auch die Maske m berechnet werden
m:={32},(1 to: 16) at:(FailSafe+1 min:17)
, die in APL kürzer sein könnte. Tauschen Sie dann die letzten beiden Zeichenfolgen im Vektor aus.PS: In der ersten Version wird davon ausgegangen, dass FailSafe nicht negativ ist, wie dies bei einigen anderen Lösungen der Fall ist. Der zweite kann mit allem umgehen, auch mit Null oder anderen Nicht-Zahlen.
quelle
Unknown
Konfiguration?CoffeeScript,
161 160221 Zeichenquelle
Unknown
und passiertNo technical alarms
?VB.net
Bearbeiten: Besserer Eintrag
quelle
Perl,
208197 ZeichenMit Boilerplate-Code, damit es funktioniert:
quelle
Java 275 Zeichen (ohne unnötige Leerzeichen)
quelle