Czyń fałszywie
W pracy dzisiaj jeden z moich kolegów opisywał przypadek użycia do while (fałsz). Osoba, z którą rozmawiał, pomyślała, że to głupie i proste, jeśli stwierdzenia byłyby znacznie lepsze. Następnie zmarnowaliśmy połowę naszego dnia, omawiając najlepszy sposób napisania czegoś równoważnego do:
do
{
//some code that should always execute...
if ( condition )
{
//do some stuff
break;
}
//some code that should execute if condition is not true
if ( condition2 )
{
//do some more stuff
break;
}
//further code that should not execute if condition or condition2 are true
}
while(false);
Jest to idiom, który dość często występuje w c. Twój program powinien generować takie same wyniki, jak poniższy pseudo-kod, w zależności od warunków.
do
{
result += "A";
if ( C1)
{
result += "B";
break;
}
result += "C"
if ( C2 )
{
result += "D";
break;
}
result += "E";
}
while(false);
print(result);
Dlatego dane wejściowe mogą być:
1. C1 = true, C2 = true
2. C1 = true, C2 = false
3. C1 = false, C2 = true
4. C1 = false, C2 = false
i wynik powinien być:
1. "AB"
2. "AB"
3. "ACD"
4. "ACE"
To jest golf golfowy, więc odpowiedzi będą oceniane według bajtów. Standardowe luki są zabronione.
Tak, to jest proste, ale mam nadzieję, że zobaczymy kilka kreatywnych odpowiedzi. Mam nadzieję, że prostota zachęci ludzi do używania języków, z którymi są mniej pewni.
return result
zamiastbreak
. Następnie otrzymasz bonusy za ponowne użycie i uproszczenie kodu wywoławczego. Ale może coś mi umknęło.goto
ponieważ używaniegoto
jest złej formie :)do{}while(false)
to makra. Prosteif
nie wystarcza, ponieważ źle współdziała zelse
otoczeniem, które może być obecne. Bez makra równie dobrze możesz usunąćdo
iwhile
.Odpowiedzi:
Python 3, 31
Zaoszczędzono 1 bajt dzięki xnor.
Tylko jeden bajt od ES6. : / Głupi Python i jego długa anonimowa składnia funkcji.
Brawo dla jednego liniowca!
Przypadki testowe:
źródło
x*"AB"
, możesz później zaoszczędzić miejsce.λ
synonimem,lambda
byłby świetny :)JavaScript ES6,
302625 bajtówProsta anonimowa funkcja pobierająca dwa dane wejściowe. Przypisz zmienną do wywołania. Aktualizacja : Przejdźmy do indeksu modwagon. Oszczędza 4 bajty. Zapewniłem sobie przewagę nad Pythonem . Zapisano bajt, curryjąc funkcję; zadzwoń jak
(...)(a)(b)
. Dzięki Patrick Roberts!Stara, oryginalna wersja, 30 bajtów (dołączona, aby nie wtopić się w odpowiedź na python
(;
):źródło
:b?
Makro preprocesora C, 34
Wypróbuj online .
źródło
Haskell, 28 bajtów
Przykład użycia:
False # True
->"ACD"
.Wykorzystanie wartości wejściowych bezpośrednio jako osłon.
źródło
MATL , 15
17bajtówWejścia są w osobnych liniach
0
lub są1
w osobnych liniach. Alternatywnie,0
może być zastąpione przezF
(Mátl użytkownikafalse
) oraz1
przezT
(Mátl użytkownikatrue
).Wypróbuj online!
źródło
Brainfuck, 65 bajtów
Zakłada się, że C1 i C2 są wprowadzane jako nieprzetworzone 0 lub 1 bajtów. na przykład
Gra w golfa:
Nie golfowany:
Uważam, że warto zauważyć, że rozwiązanie to jest w rzeczywistości opiera się na wyrwanie się z podczas pętli.
źródło
GNU Sed, 21
Ideone .
źródło
NTFJ , 110 bajtów
Bardziej czytelny:
To z pewnością było zabawne. Wypróbuj tutaj , używając dwóch znaków (
0
lub1
) jako danych wejściowych.Dzięki zastosowaniu metody ETHProduction do konwersji na 0, 1 (znaki) na bity staje się to prostsze.
To jest ta metoda. Pushing 193 (
##~~~~~#@
), NANDing it (|
) najwyższą wartością wejściową (w tym przypadku kod pierwszego znaku, 48 lub 49). Daje to 254 dla 1 i 255 dla 0. NANDOWANIE z 255 (########@
) daje 0 lub 1 bit zgodnie z danymi wejściowymi.Wyświetla to
A
, ponieważ wszystkie dane wejściowe zaczynają się odA
.*
wyskakujeA
podczas drukowania, więc stos pozostaje niezmieniony w stosunku do poprzedniego stanu.Przypadek 1: pierwszy bit to
1
i(
aktywuje kod w środku.~#~~~~#~@*
drukujeB
,########@^
wypycha 255 i przeskakuje do tej pozycji w kodzie. Jest to koniec programu i kończy się.Przypadek 2: pierwszy bit to
0
.(
przeskakuje do)
i kod jest kontynuowany.Wyświetla to
C
, ponieważ jest to następny znak.Konwertuje to nasze drugie wejście na nieco.
Jeśli nasz drugi bit to 1, przystępujemy do drukowania
E
.Jest to reprezentacja NAND Boolean negacji naszej bit:
A NAND (0 NAND A) = NOT A
.Aktywuje się teraz, jeśli bit był a
0
, i drukujeE
.źródło
Pyth, 16 bajtów
Zestaw testowy
Trójce!
Wyjaśnienie:
Wprowadź dwa kolejne wiersze.
źródło
CJam, 15
1617bajtówWypróbuj online!
Jeden bajt wolny dzięki @randomra i jeden bajt wolny dzięki @Dennis
Wyjaśnienie:
Stara wersja (16 bajtów):
Wyjaśnienie:
źródło
Pyth, 13 znaków, 19 bajtów
Pobiera dane wejściowe w formie [a, b]
Wyjaśnienie
Wypróbuj tutaj
Lub użyj pakietu testowego
źródło
«
jako 1 bajt każdy (2 bajty w UTF-8). Zarównowc
i to zgadza się, że ma 19 bajtów.C, 76 bajtów
Zmieniłem nazwę
c1
nac
,c2
naC
iresult
nar
. Programiści C starają się unikaćgoto
. Jeśli kiedykolwiek masz problum z absurdalną składnią w C, najprawdopodobniej dzieje się tak, ponieważ nie używałeśgoto
.Bez golfa
źródło
char r[4]="A";
? Moje C jest zardzewiałe."AC"
i zastępując wszystko odr[1]=67
dor[2]=69;
zr[2]=c2?68:69;
C, 41 bajtów
Nie jestem pewien, czy pytanie wymaga programu, funkcji lub fragmentu kodu.
Oto funkcja:
Pobiera dane wejściowe w dwóch parametrach, które muszą wynosić 0 lub 1 (no cóż,
b
muszą), i drukuje na standardowe wyjście.Zestawy
a
do jednego0x4241
,0x454341
lub0x444341
. Po wydrukowaniu jako ciąg znaków w małym systemie ASCII daje wymagane dane wyjściowe.źródło
R ,
413937 bajtówWypróbuj online!
W R
TRUE
iFALSE
są przymuszane do1
i0
odpowiednio przy próbie użycia ich jako liczb. Możemy przekonwertować te numery indeksów1
,2
oraz3
poprzez formuły1+a+a^b
.Wartości te są następnie używane do wskaźnika listy
ACD
,ACE
,AB
w celu uzyskania prawidłowej produkcji.Zaoszczędź dwa bajty dzięki JayCe.
Jeśli zamiast tego wolisz wersję z
if
instrukcją, istnieje 41 bajtów:Wypróbuj online!
źródło
^
Mathematica,
3530 bajtówBardzo proste. Funkcja anonimowa.
źródło
Siatkówka, 22 bajty
Wypróbuj online
źródło
^
zm`
, aby działał w przypadku wprowadzania wieloliniowego, co nie jest konieczne w przypadku pytania, ale ułatwia testowanie.JavaScript, 38 bajtów
Użyj no-delimiter
0
lub1
zamiastfalse
/true
źródło
split` `
zamiastsplit(" ")
+('0b'+prompt())
zamiastparseInt(prompt(),2)
Caché ObjectScript , 27 bajtów
źródło
ArnoldC , 423 bajty
Ponieważ wydaje się, że ArnoldC nie ma formalnych danych wejściowych, po prostu zmień pierwsze 2
YOU SET US UP
wartości na 0 lub 1 zamiast tego.Wyjaśnienie
To tylko cała masa instrukcji warunkowych, które uwzględniają wszystkie możliwe wyniki. Dlaczego możesz zapytać? Cóż, ArnoldC tak naprawdę nie rozumie napisów. Nie może nawet łączyć łańcuchów! W rezultacie musimy skorzystać z bardziej ... nieefektywnej ... metody.
źródło
Java, 28 bajtów
Taki sam szablon jak wiele odpowiedzi. typ to
BiFunction<Boolean,Boolean, String>
.źródło
(c,d)->
można zagrać w golfa o 1 bajt,c->d->
gdy używaszjava.util.function.Function<Boolean, java.util.function.Function<Boolean, String>>
.Pyth, 21 bajtów
Wypróbuj tutaj!
Dane wejściowe są przyjmowane jako 0 lub 1 zamiast true / false, gdy C1 jest na pierwszym miejscu.
Wyjaśnienie
Wystarczy skorzystać z faktu, że są tylko 4 możliwe wyniki. Działa, interpretując dane wejściowe jako binarne, konwertując je na bazę 10 i wykorzystując je do wybrania właściwego wyniku z ciągu wyszukiwania.
źródło
Y , 20 bajtów
W przypadku, gdy pierwsze wejście jest jedno, pobierane jest tylko jedno wejście. Zakładam, że takie zachowanie jest dozwolone. Wypróbuj tutaj!
Nie golfowany:
Wyjaśniono:
To popycha znaki
B
następnieA
do komina.To zajmuje jedno wejście, zwiększa je, wyskakuje i przesuwa się o tę liczbę sekcji.
Przypadek 1:
j1 = 0
. To jest bardziej interesujące.r$
odwraca stos i wyskakuje wartość,'C'E
wypycha znakiC
iE
.@
konwertujeE
na swój numeryczny odpowiednik, odejmuje drugie wejście i przekształca je w znak.r
cofa stos. Następnie program widzi C-link i przechodzi do następnego linkup
, i drukuje stos.Przypadek 2: program przechodzi do ostatniego łącza
p
, które jedynie drukuje cały stos.źródło
PowerShell, 40 bajtów
Zagnieżdżone tablice indeksowane według danych wejściowych. W PowerShell,
$true
/1
i$false
/0
są praktycznie równoważne (dzięki bardzo luźnemu rzutowaniu), dzięki czemu ładnie indeksuje się do tablicy dwuelementowej. Jest to tak blisko trójki, jak PowerShell, i używałem jej wiele razy w golfie.Przykłady
źródło
K, 37 bajtów
źródło
Vitsy , 26 bajtów
Oczekuje danych wejściowych jako 1s lub 0s przez STDIN z separacją nowej linii.
Podczas tego wyzwania odkryłem poważny problem z oświadczeniami if. D: Jest to opublikowane z uszkodzoną wersją, ale działa dobrze. (Zaktualizuję to po rozwiązaniu problemu)Należy pamiętać, że zaktualizowałem Vitsy z poprawką if / ifnot. Ta zmiana nie daje mi żadnej korzyści, a jedynie wyjaśnienie.Wyjaśnienie:
Wypróbuj online!
źródło
wosk pszczeli , 26 bajtów
Tłumaczenie
0
jako fałszywe,1
jak prawdziwe.Wynik:
Sklonuj mój interpreter wosku pszczelego z mojego repozytorium Github .
źródło
C,
4745 bajtówPonieważ są tylko 3 różne wyniki, możemy wybrać jeden z trzech ciągów:
Podziękowania dla Hermana L za 2 bajty
Próbny
źródło
char*f(c,d){return"AB\0 ACE\0ACD"+(!c<<d+2);}
Perl, 23 bajty
Wymaga
-E
|-M5.010
flag i przyjmuje dane wejściowe jako 1 i 0:Alternatywne rozwiązanie, które wymaga
-p
i wynosi 22 + 1 = 23 bajty:źródło
say-<>?AB:-<>?ACD:ACE
jest dwa bajty krótszy.05AB1E ,
2320 bajtówKod:
Wypróbuj online!
źródło
i„ABë„AC69I-çJ
Wypróbuj online lub sprawdź wszystkie przypadki testowe .I
. ; pJapt, 19 bajtów
Przetestuj online!
Ciekawostka: byłoby 16 bajtów, gdyby nie błąd:
źródło