Wprowadzenie
Klasycznie booleany mają jeden bit; true
albo false
, 1
albo 0
. Zera wiodące byłyby po prostu zbędne. Na przykład 001
oznacza to samo co 00001
lub tylko 1
.
32-bitowa wartość logiczna
Biorąc pod uwagę wartość true / falsey, wypisuje ekwiwalent 32-bitowej wartości logicznej jako ciąg. (Lub jako liczba, jeśli dla jakiegoś powodu twój język obsługuje wiodące zera).
Twój program nie musi działać na każdy typ prawdy / fałszu, tylko na to, na co najlepiej działa Twój język programowania.
Przykład we / wy
Input >> Output
truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000
Odpowiedzi:
Python 3 ,
33251815 bajtówDzięki @ jurjen-bos za
__mod__
wskazówkę.Wypróbuj online!
źródło
lambda b:'%0.32d'%b
zadziała?None
prawda lub fałsz ?lambda b:f'{bool(b):032}'
lublambda b:f'{not b<1:032}'
0.32d
.x86-16 Kod maszynowy (DOS), 16 bajtów
Powyższa funkcja otrzymuje w
BL
rejestrze wartość logiczną (0 == falsey, 1 == prawda)BX
i wypisuje na standardowym wyjściu ciąg znaków „redundantny”.Działa poprzez wywołanie przerwania (0x21), aby wykonać wywołanie funkcji DOS (wybrane przez ustawienie
AH
na 2), które wypisuje pojedynczy znak (wDL
) na standardowe wyjście.Najpierw ładowany jest znak ASCII „0”
DL
, licznik (CX
) jest ustawiony na 31 i zapętla się, aby wydrukować „nadmiarowe” bajty. Następnie dodawana jest wartość logiczna wejściowaDL
(jeśliBL
jest falsey, dodanie 0 pozostawiDL
niezmienioną jako ASCII „0”; jeśliBL
jest prawdą,DL
zostanie zwiększone o jeden do ASCII „1”), i zostanie wydrukowany ostatni bajt.Funkcja nie zwraca wartości.
Całkiem przyzwoicie jak na język, który tak naprawdę nie robi nici.
Pełny program, 21 bajtów
Jeśli chcesz przekształcić go w pełny program, potrzeba tylko 5 dodatkowych bajtów. Zamiast przekazywać dane wejściowe do rejestru, odczytuje dane wejściowe z argumentów przekazanych w wierszu poleceń podczas wywoływania aplikacji. Argument 0 jest interpretowany jako falsey, podobnie jak całkowity brak argumentów; argument większy niż 0 jest interpretowany jako prawdziwy.
Po prostu złóż poniższy kod jako program COM, a następnie uruchom go w wierszu poleceń.
Przykładowe dane wyjściowe:
Jak to działa? Cóż, to w zasadzie to samo, dopóki nie przejdziesz do
CMP
instrukcji. Porównuje to argument wiersza poleceń z wartością parametruDL
rejestru (który, jak pamiętacie, zawiera ASCII „0”). W programie COM bajty kodu są ładowane z przesunięciem 0x100. Poprzednikiem jest prefiks segmentu programu (PSP) , który zawiera informacje o stanie programu DOS. W szczególności przy przesunięciu 0x82 znajduje się pierwszy (właściwie drugi, ponieważ pierwszy jest spacją) argument, który został podany w wierszu poleceń podczas wywoływania programu. Właśnie porównujemy ten bajt z ASCII „0”.Porównanie ustawia flagi, a następnie
SALC
instrukcja (nieudokumentowany kod operacyjny przed Pentium, równoważnysbb al, al
, ale tylko 1 bajt zamiast 2) ustawiaAL
na 0, jeśli dwie wartości były równe, lub -1, jeśli były różne. Jest wtedy oczywiste, że kiedy odejmujemyAL
odDL
powoduje to zarówno ASCII „0” lub „1”, odpowiednio.(Zauważ, że nieco ironicznie złamiesz go, jeśli podasz argument z wiodącym 0 w wierszu poleceń, ponieważ wygląda tylko na pierwszy znak.
01
Będzie to traktowane jak falsey. :-)źródło
Python 3 , 23 bajty
Wypróbuj online!
źródło
'10'[not n]
wystarczyłoby, gdyby trzeba było je wspierać.'{:032}'.format
na 15 bajtów i działa tak samo jak obecne rozwiązaniebool(n)
wystarczyłobyJavaScript, 23 bajty
!!a
wymusza a na boolean, który unary plus zmienia się w int.źródło
a=>'0'.repeat(31)+(+a)
jest o jeden bajt krótszy.Your program doesn't have to work for every truthy/falsy type, only what your programming language work best for.
a=>'0'.repeat(31)+~~a
działa z true, false, 1,0V , 8 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Neim ,
65 bajtówWypróbuj online!
Wyjaśnienie:
Zapisano bajt dzięki Okx
źródło
ᛝΨβ_I
ᛝ
nie ma na wiki, gdzie to znalazłeś?Oktawa , 17 bajtów
Funkcja anonimowa. Działa również w MATLAB.
Wypróbuj online!
źródło
ArnoldC , 369 bajtów
Wypróbuj online!
źródło
Brainfuck ,
616036 bajtówJestem pewien, że istnieje sprytny sposób, aby nie poruszać się tak bardzo za pomocą wskaźników.Miałem rację. Byli. Dzięki @Graviton za pomysł!
Następny krok: Uzyskaj wartości 32 i 48 szybciej!
Wypróbuj online!
To była zabawa dla pierwszego golfa!
Było już za późno.Co ja w ogóle robięźródło
>-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.
(przyjmuje dane wejściowe jako 0 lub 1) Wypróbuj online!Scala, 32 bajty
Przepraszam, ale byłem zmuszony to zrobić w 32 bajtach> _ <
Jest on zawarty w funkcji przyjmującej
t
jako parametr (jako,string
że może to być „0” lub „1” dla odpowiednio fałszu lub prawdy) orazs
jest zwracany.Wypróbuj online!
Prawidłowa odpowiedź: Scala, 46 bajtów
Tak jak moja odpowiedź w języku Java, miałem wziąć wartość logiczną dla parametru. Więc :
Wypróbuj online!
źródło
Braingolf ,
108 bajtówWypróbuj online!
␟
jest separatorem jednostek, ASCII0x1F
lub 31. Nie można znaleźć rzeczywistego znaku do wklejenia do TIO, więc TIO zamiast tego używa# 1-
, co przesuwa spację (32) i zmniejsza do 31.Wyjaśnienie
źródło
Oktawa , 23 bajty
Wypróbuj online!
Jest to krótsze niż wszystkie podejścia, z którymi próbowałem
printf
. Mogłem coś przeoczyć, ponieważ zrobiłem to na telefonie.Tylko jeden bajt dłużej
Może to być 18 bajtów, gdybym mógł wziąć 1/0 jako łańcuch.
Wypróbuj online!
źródło
Java 8,
3127 bajtów-4 bajty dzięki @ OlivierGrégoire .
Wypróbuj tutaj.
źródło
"".format
)String.format
, wiedziałem, że jest jakoś krótszy sposób, ale myślałem, że ostatnio użyłem zmiennej String ... Dzięki. ;)05AB1E , 5 bajtów
Wypróbuj online!
źródło
31úð0:
!Ruby, 21 bajtów
Tak, ta przestrzeń musi tam być ..: /
W Ruby wszystko oprócz
false
inil
jest prawdą; Wypróbuj online!źródło
Mathematica, 36 bajtów
Mathematica, 26 bajtów
Wypróbuj online!
źródło
Węgiel drzewny , 5 bajtów
Wypróbuj online! (Link do pełnej wersji).
Jak rozumie węgiel drzewny
0
i1
jakoTrue
lubFalse
, to po prostu drukuje 310
s, a dane wejściowe (0
lub1
) jako ciąg.źródło
True
, dziwnePython 2 ,
2625 bajtówDzięki Erikowi Outgolferowi za uratowanie bajtu!
Idzie do pełnego podejścia programowego:
Wypróbuj online!
źródło
~~
z+
o 1. Po tym cały program nie będzie już drogi . ;)Niepożądane, niepotrzebne, oportunistyczne , 7 bajtów
Podaj 1 lub 0 do rejestru.
źródło
C, 26 bajtów
Prawie taki sam pomysł jak rozwiązanie 1bluestone , ale w C jest krótszy i działa poprawnie dla każdego wejścia liczb całkowitych:
Oczywiście, to zawiera kilka niejawnie wpisywanych zmiennych / funkcji, jak wszystkie dobre odpowiedzi C-golf zrobić ... The
!!
operator jest najkrótsza droga do konwersji wszelkich wartość truthy się1
w C (przez podwójne zaprzeczenie,!
definiuje się wrócić albo1
albo0
).Testuj z:
źródło
Haskell ,
3732 bajtyWypróbuj online!
Dzięki @nimi za
-5
bajty!źródło
show(fromEnum x)
zamiastlast(...)
. Pointfree jeszcze krócej:(('0'<$[1..31])++).show.fromEnum
.Bool
toEnum
dzięki!PHP, 28 bajtów
Zapisz jako bool.php i uruchom:
źródło
printf('%032d',$argv[1]);
(wymaga-r
flagi).Ly ,
201513 bajtówEDYCJA: Oszczędność 5 bajtów dzięki ovs.
EDYCJA: Zapisano kolejne 2 bajty, drukując 0 jako liczbę, a nie znak.
źródło
65*1+["0"o1-]nu
zadziała?Oktawa,
1611 bajtówWypróbuj online!
Uchwyt funkcyjny, który przyjmuje
"00000000000000000000000000000001"
zarówno prawdę,"00000000000000000000000000000000\0"
jak i falsey.Wyjaśnienie:
In Octave an array is considered as falsey if at least one of its elements is zero. The 33th element of the second string is a character with the ASCII value of 0 so it can be considered as falsey.
źródło
Java, 40 chars, 40 bytes
This takes string as parameter, which is not correct (falsy/truthy java value is forced by OP to be represented by a boolean).
Try It Online!
Valid response : Java, 60 chars, 60 bytes
Try It Online!
I know there is already a Java answer which is shorter than this one, but still :)
źródło
return
statement is part of your code, so part of your byte-count. But your answer doesn't fulfill the rules: you must get aboolean
as input. "Truthy/falsy" is translated in Java as eithertrue
orfalse
, and nothing else. So you can't get aString
as input parameter.;
). Also, you can shorten your code like this:c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}
. Thek+=c?1:0
is to shortenk+(c?1:0)
.;
. A statement requires a semicolon. A lambda is not a statement.Japt,
1311 bytesExplanation:
Saved a byte using a base-2 conversion built-in!
To insert the string of 0s in front of the
1
/0
, I need to cast the1
and0
into a string. The typical way of doing that would be1s
(3 bytes). But because we're only converting 1s and 0s, I can use the base-2 built-in1¤
(2 bytes).Input can be in the form of an integer or string.
0
and""
are falsy in Japt.Try it online!
Test suite
źródło
C# (.NET Core), 29 bytes
OP said 1/0 can be used for truthy/falsey, so can make
a
an int and it becomesC# doesn't really have truthy/falsey though so I will not use this answer.
Try it online!
źródło
Padleft
comes in at the same byte count here.interpolated strings
can be quite useful here:b=>$"{(b?1:0):D32}"
19 bytes
MY,
109 bytesTry it online!
Explanation (codepage [with reasoning behind the character]/hex code):
I can't believe that this is possible without any two-argument commands whatsoever!
Edit: Saved 1 byte by using primes instead of arithmetic to get 31.
źródło
APL, 11 bytes
How?
1\⍨⊢
- repeat 1 input times - return empty array on falsy value1↑
- take the first item¯32↑
- align right with 31 zeros⍕
- format as stringźródło
⍕¯32↑⊢
should work∊⍕¨¯32↑⎕
or something.J, 11 bytes
Try it online!
how?
note: in J, booleans are 0 or 1, also known as "the iverson convention," after ken iverson, creator of J and APL
źródło
":
is required for this to work -- it changes a boolean to a string.