Dzisiejszy Daily WTF cytuje następujący wiersz kodu ...
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')))))))))))))))
Napisz kod, który przyjmuje wartość całkowitą o nazwie FailSafe i zwraca ten sam ciąg, który powyższy kod wygenerowałby z tej samej wartości całkowitej.
- Wyzwanie polega na przepisaniu tego wiersza, aby kod „kocioł” był wolny, w tym każdy kod, który ładuje wartość całkowitą i wysyła ciąg. Liczy się tylko kod, który wykonuje powyższą transformację z liczby całkowitej na ciąg.
- Jeśli chcesz, możesz użyć innej nazwy niż „FailSafe”, o ile wybrany identyfikator ma taki sam wynik golfowy.
- Brak wywoływania zewnętrznych zasobów w celu wykonania wyszukiwania.
- Obowiązują normalne zasady gry w golfa.
f=FailSafe
czy coś takiego)?Odpowiedzi:
Ruby, 210 znaków
Podobne do rozwiązania @Jana Dvoraka, ale nieco bardziej funkcjonalne i nieco krótsze.
źródło
GolfScript, 167 znaków
Kod przyjmuje wartość w zmiennej
FailSafe
i wypycha wynik na stos (tzn. Wyprowadza ciąg znaków, jeśli działa jako samodzielny program). Możesz przetestować kod online .Kod w zasadzie generuje tablicę wszystkich 16 możliwych wyników, wybiera komunikat błędu w zależności od czterech najniższych bitów
FailSafe
. Zewnętrznyif
obsługuje wtedy zerową wielkość liter.źródło
or
zamiastif
ocaliłbym cię.
. Przyznaję jednak, że nie próbowałem odszyfrować oryginalnego kodu.Rebol / Red: 208 znaków
Nie jestem tak zainteresowany w golfa to jak w zgadzając się, że operatorzy zagnieżdżonych trójskładnikowych są irytujące ... i wspomnieć, to jest rzeczywiście ładny przykład dla REBOL / czerwony za CASE . Jest powiązany z SWITCH i naprawdę pomaga spłaszczyć takie rzeczy:
Istnieje wariant o nazwie CASE / ALL, który faktycznie uruchomi wszystkie warunki, ale domyślnie zatrzymuje się po pierwszym prawdziwym.
„Gra w golfa” trochę do 208:
źródło
APL (172)
Wyjaśnienie:
{
...}FailSafe
: generuj ciągi⍵=0:⊂'No technical alarms'
:0
sprawa0=16|⍵:⊂'Unknown'
:Unknown
przypadek (FailSafe nie jest równy 0, ale pierwsze cztery bity są)'Detection zones staying in a given state' 'Bad visibility' 'Initialization' 'Bad configuration'/⍨⌽⍵⊤⍨4/2
: pobierz najniższe 4 bity w argumencie (⍵⊤⍨4/2
), reverse (⌽
) i wybierz ciągi bitów, które są włączone (/⍨
).'; '∘,¨
: dodaj'; '
z przodu każdego zwracanego ciągu,⊃,/
: połącz wszystkie struny razem,2↓
: i usuń pierwsze dwa znaki (ponieważ jest dodatkowy'; '
z przodu).źródło
⊃,/
na∊
.Ruby, 183 znaków
Kolejne rozwiązanie Ruby, ale nieco krótsze niż inne. To pojedyncze wyrażenie, które używa stałej
FailSafe
(w Rubim wszystkie identyfikatory pisane wielkimi literami są stałymi) do utworzenia łańcucha wyjściowego.źródło
FailSafe
) przed użyciem. Iuninitialized constant FailSafe
FailSafe
jest już zdefiniowany. Kiedy chcesz uruchomić kod, musisz najpierw zdefiniować stałą.JavaScript,
197195 znakówsformatowany:
Można jeszcze bardziej zmniejszyć, używając wyrażeń funkcji ES6 lub Coffeescript.
źródło
"Bad visibility"
ponieważ 2-bit jest ustawiony i żaden z pozostałych niższych 4 bitów.Unknown
Sprawa dzieje się, gdy żaden z dolnych 4 bitów jest ustawiony, aleFailSafe
jest!= 0
- podobnie jak w oryginalnym kodzie (spróbuj16
). Czy powinniśmy to „naprawić”, należy zapytać OP (w komentarzu do pytania), a nie ja…Ruby, 213 znaków
Będzie to działać dobrze opakowane w funkcję body (
def transform failSafe; ...; end
). Może być również używany jako pojedyncze wyrażenie (zawijanie w nawiasach, ponieważ średnik / znak nowej linii ma najniższy priorytet) lub jako sekwencja instrukcji z ostatnim wyrażeniem (e.join"; "
) użytym w wyrażeniu.źródło
e+=["Initialization"]if f&4>3
Chcę tego w Pythonie.[]||=
?since FailSafe must be a constant in Ruby
Huh. Postawa Pythona jest bardziej jak „Tak, może złamać rzeczy, ale nie należy się spodziewać mi posprzątać ten bałagan”||=
jest jak,+=
ale z||
-a ||= b
jest równoważnea = a || b
. Jest powszechnie używany do domyślnej zmiennej, gdy jest ona fałszywa.VBScript,
204 234232 znaki(edycja: poprawiono wynik o 2 za pomocą array () zamiast split (). 232 teraz.)
(edytuj: zapomniałem części „nieznana”. 234 znaków).
f = bezpieczne: dla b = 0 do 3: s = s i podział (",; Strefy detekcji pozostają w danym stanie ;; Zła widoczność ,,; Inicjalizacja ,,,,; Zła konfiguracja", ",") (f i 2 ^ b): next: split („Brak alarmów technicznych, nieznane” i mid (s, 3), „,”) (2+ (f = 0) + (len (s) = 0))(oryginał, 230)
dla b = 0 do 3: s = s & split (",; Strefy detekcji pozostają w danym stanie ;; Zła widoczność ,,; Inicjalizacja ,,,,; Zła konfiguracja", ",") (FailSafe i 2 ^ b): dalej : array (mid (s, 3), „No alarms technicznych”) (- (len (s) = 0))Oczywiście jest to tylko część skryptu. aby to przetestować, spróbuj czegoś takiego:
źródło
Smalltalk, 243 znaków
sformatowane dla czytelności:
Dzięki Bergi za wskazanie błędu w pierwszej wersji.
To nasuwa pomysł: jeśli zamapuję wartość FailSafe na maskę 6-bitową (mapowanie 0 -> 16 i więcej niż 15 -> 32), mogę pozbyć się ostatecznych testów. Mapowanie do 6-bitowej maski m można wykonać za pomocą:
m := {16},(1 to: 15) at:FailSafe+1 ifAbsent:32.
to znaczy, m będzie 16 dla zerowego FailSafe i 32 dla wartości poza granicami. Następnie wybierz i zbierz ciągi jak wyżej. To daje nowy kod:
(Zastąpiłem również asStringWith: przez joinWithAll :, który jest aliasem).
Chociaż wydaje się to fajny pomysł, ma on tę samą liczbę znaków - westchnienie. Może lepszy jest tutaj inny język programowania z gęstszymi nazwami operatorów!
Mógłbym zapisać kilka znaków, nie używając tymczasowej zmiennej dla m, ale ponownie obliczyć ją w pętli i nie używając literalnej tablicy dla wektora łańcucha, aby uzyskać liczbę nieznacznie poniżej 240 znaków.
Na koniec można również obliczyć maskę m
m:={32},(1 to: 16) at:(FailSafe+1 min:17)
, która może być krótsza w APL. Następnie zamień dwa ostatnie ciągi w wektorze.PS: Pierwsza wersja zakłada, że FailSafe jest nieujemny, podobnie jak niektóre inne rozwiązania tutaj. Drugi może poradzić sobie ze wszystkim, nawet zerowym lub innymi nieliczbami.
źródło
Unknown
konfiguracją?CoffeeScript,
161 160221 znakówźródło
Unknown
iNo technical alarms
?VB.net
Edycja: lepszy wpis
źródło
Perl,
208197 znakówZ kodem płyty kotła, aby działał:
źródło
Java 275 znaków (nie licząc niepotrzebnych białych znaków )
źródło