Odwróć tablicę boolowską


19

Niezły prosty

Wejście

Biorąc pod uwagę tablicę boolowską (lub dopuszczalną alternatywę), możesz założyć, że tablica nigdy nie będzie miała więcej niż 32 elementy.

[false, false, true, false, false]

Wynik

Odwróć każdy element tablicy i wyślij go.

[true, true, false, true, true]

Zasady

  • Możesz napisać pełny program lub tylko funkcję
  • Obowiązują standardowe luki
  • Najkrótszy kod w bajtach, na język, wygrywa!

Przypadki testowe

Input:
[true, false]
Output:
[false, true]

Input: //Example of acceptable alternative
[0,1,1]
Output:
[1,0,0]

A może tablice 0(fałsz, wszystkie 0 bitów) i -1(prawda, wszystkie 1 bit)?
Lynn


Związane z. (Biorąc pod uwagę prostotę podstawowego zadania, powiedziałbym, że różnice w formacie są na tyle znaczące, że nie są to duplikaty.)
Martin Ender

6
To coś więcej niż tylko golf golfowy: to nie jest operator w twoim ulubionym języku? Dodatkowe punkty, jeśli działa na listach.
licorna

Odpowiedzi:



14

Galaretka , 1 bajt

¬

Wypróbuj online!

¬jest logiczne NIE (1 jeśli false-y, w przeciwnym razie 0). C(„Uzupełnienie”, 1 − z ) również działa.


12
Myślę, że @Dennis będzie cię ciężko prześcignąć.
flawr

15
@flawr To tylko kwestia czasu, zanim Dennis zrobi to w 0 bajtach lub mniej.
Erik the Outgolfer,

2
@EriktheGolfer „0 bajtów lub mniej ” hmm
zdimension

1
@zdimension To Dennis, może to zrobić krócej niż myślisz (przeczytaj memy).
Erik the Outgolfer,


12

Matlab, 4 1 bajt

To powinno być oczywiste.

~

Matlab ma jednobajtowy operator negacji ~, jeśli potrzebujesz funkcji, której możesz użyć @not.


22
dostać @rgument, nEgate, output, terminate, prawda?
Martin Ender

2
Haha, prawda, jestem zaskoczony, że jesteś tak biegły w Matlabie!
flawr

lol, to brzmi jak Borat „To powinno być zrozumiałe .... NIE”
user2023861

z pewnością ~jest właściwą odpowiedzią, ponieważ jest to operator, który otrzymuje argument. Myślę, że ~[1,0,0,1,0]jest to całkowicie właściwe.
Tasos Papastylianou

1
@TasosPapastylianou Zgłoszenia operatorów są zdecydowanie poprawne (w niektórych językach, takich jak Julia i Mathematica, definiowanie własnych operatorów jest nawet powszechną praktyką, ponieważ jest krótsze niż definiowanie własnej funkcji), ale jestem pewien, że flawr po prostu nie chce unieważnić mojego komentarza. ;)
Martin Ender

10

Haskell, 7 bajtów

map not

Przykład:

Prelude> (map not) [False, True, True]
[True,False,False]

W tym przykładzie nie potrzebujesz nawiasu, prawda?
flawr

9
Nie wiem, ale chciałem w tym przykładzie wykazać, że moja odpowiedź jest prawidłowym wyrażeniem, a nie fragmentem kodu.
Lynn

3
Właśnie zaproponowano edycję kodu not<$>, ale to nie jest poprawne wyrażenie; nie możesz f = not<$>wtedy pisać f [False, True, True]; wycinki operatora wymagają nawiasów wokół nich, które przyczyniłyby się do zwiększenia liczby bajtów.
Lynn

2
a poza tym nie powinieneś sugerować kodu poprzez edycję
undergroundmonorail


10

C, 46 bajtów wersja rekurencyjna

f(char*s){*s?putchar(*s&72?*s:*s^1),f(++s):0;}

C, 47 Bajtowa wersja iteracyjna

f(char*s){for(;*s;putchar(*s&72?*s:*s^1),s++);}

Uruchom za pomocą tej głównej funkcji

main(c,v)char**v;
{
    f(v[1]);
}

i takie dane wejściowe

a.exe [1,0,1,1,0]
[0,1,0,0,1]

Krótszy niż się spodziewałem po C!
Chris Jefferson

10

R, 1 bajt

!

Przykład:

> !c(TRUE, FALSE)
[1] FALSE  TRUE

Działa również z wprowadzaniem numerycznym:

> !c(1, 0)
[1] FALSE  TRUE

Nie ograniczamy się również do tablic jednowymiarowych. Zróbmy macierz i losowo zapełnij ją zerami i jedynkami:

> mat = matrix(rbinom(16, 1, .5), ncol=4)
> mat
     [,1] [,2] [,3] [,4]
[1,]    0    1    1    1
[2,]    0    1    0    0
[3,]    0    0    0    0
[4,]    1    1    1    0

Możemy to równie łatwo odwrócić:

> !mat
      [,1]  [,2]  [,3]  [,4]
[1,]  TRUE FALSE FALSE FALSE
[2,]  TRUE FALSE  TRUE  TRUE
[3,]  TRUE  TRUE  TRUE  TRUE
[4,] FALSE FALSE FALSE  TRUE

Możemy to nadal robić dla dowolnej liczby wymiarów. Oto przykład czterowymiarowej tablicy:

> bigarray = array(rbinom(32, 1, 0.5), dim=c(2,2,2,2))
> bigarray
, , 1, 1

     [,1] [,2]
[1,]    0    0
[2,]    0    0

, , 2, 1

     [,1] [,2]
[1,]    1    0
[2,]    0    0

, , 1, 2

     [,1] [,2]
[1,]    0    1
[2,]    0    1

, , 2, 2

     [,1] [,2]
[1,]    1    0
[2,]    1    1

> !bigarray
, , 1, 1

     [,1] [,2]
[1,] TRUE TRUE
[2,] TRUE TRUE

, , 2, 1

      [,1] [,2]
[1,] FALSE TRUE
[2,]  TRUE TRUE

, , 1, 2

     [,1]  [,2]
[1,] TRUE FALSE
[2,] TRUE FALSE

, , 2, 2

      [,1]  [,2]
[1,] FALSE  TRUE
[2,] FALSE FALSE

Obawiam się, że nie działa dla postaci.

> !"Hello world"
Error in !"Hello world" : Invalid argument type.

1
Aby zaoszczędzić na przesyłaniu identycznych odpowiedzi, działa to również w Julii (z wyjątkiem tego, że nie działa tam na wprowadzanie liczbowe)
Sp3000,

8

Perl 6 , 4 bajty

Wersja „francuska” / Unicode:

!«*

Wersja „Texas” / ASCII:

!<<*

Dane wejściowe to pojedyncza wartość, którą można traktować jako listę.

Jest to cokolwiek lambda ( *) z logicznym operatorem nieprefiksowym ( !) połączonym za pomocą przedrostka hyper operator ( «) .

W rzeczywistości jest to to samo, co:

-> $_ { $_.values.hyper.map: &prefix:<!> }
# ( currently the Rakudo implementation doesn't actually do the 「.hyper」 call,
#   but prefix 「«」 is specifically designated for doing things in parallel )

Stosowanie:

# pretend it's a method
say (True,False,True,True).&( !«* );
# (False True False False)

say ( !«* )( (False,False,True,False,False) );
# (True True False True True)


# give it a lexical name
my &list-invert = !«*;

#              v¯¯ a space is necessary here
say list-invert (True,False);
# (False True)

say (False,True).&list-invert;
# (True False)

Próbowałem tylko rozwiązać tę samą sprawę. Dotarłem tylko do {!«@_}:)
hobbs

!**powinien też działać
Jo King

7

Labirynt , 9 bajtów

,$:)%#$.,

Wypróbuj online! Zakłada wejście oddzielone znakiem nowej linii z końcowym znakiem nowej linii. Dzięki @MartinEnder za pomoc w grze w golfa.

Ten program jest trochę dziwny jak na program Labirynt - nie wykorzystuje dwuwymiarowej natury języka i faktycznie odbija się tam iz powrotem. Podczas pierwszej podróży do przodu mamy:

[Moving rightward]
,            Read char c of input
 $           XOR c with implicit 0 at bottom of stack
  :)%        Calculate c % (c+1), erroring out if c == -1 from EOF, otherwise returns c
     #$      XOR with (length of stack == 1)
       .     Output (c^1) as char
        ,    Read newline

[Moving leftward]
       .     Output newline
      $      XOR two implicit 0s, stack [0]
    %#       Mod with (length of stack == 1), giving stack [0]
 $:)         Increment, duplicate then XOR, stack still [0]
,            Read char c of input

Kolejne wystąpienie $XOR to istniejące 0 na stosie c, w przeciwieństwie do niejawnego 0 na dole stosu, jak w pierwszym uruchomieniu. Obie sytuacje pozostawiają stos jako [c], a program powtarza się później.

Alternatywne 9 bajtów:

,:):/$.:,
,::)/)$.,
,:):%)$.,

2
Ten efekt przewijania do przodu jest naprawdę fajny.
DLosc

Podoba mi się ta odpowiedź. Jest szczęśliwy :)
Pozew Fund Moniki

6

Mathematica, 7 bajtów

Not/@#&

lub bez liter:

!#&/@#&

Jeśli chodzi o cukier syntaktyczny: &oznacza prawy koniec nienazwanej funkcji i ma bardzo niski priorytet. #odnosi się do pierwszego argumentu najbliższego i otaczającego &. !jest operatorem dla Not. Tak więc !#&jest to tylko nienazwana funkcja, która neguje jej argument, innymi słowy jest identyczna z wbudowaną Not. /@jest operatorem dla Map. Więc kod byłby również równoważny z nieco bardziej czytelnym Map[Not, #]&.


11
Jak !#&/@#&mam to przeczytać? :)
Lynn

1
@Lynn Czy to pomaga? :)
Martin Ender

4
Dziwię się, że Notnie ma na liście
A Simmons

@ASimmons Tak, ja też.
Martin Ender

6

Python, 27 25 24 bajtów

Dzięki Lynn za grę w golfa za dwa bajty, a Xnor i Mego za grę w golfa za drugim.

lambda a:[b^1for b in a]

1
Tablice 0/ 1są dozwolone i 1-bsą krótsze niż not b. Zapytałem OP, czy tablice 0/ -1są dozwolone, w którym ~bto przypadku jest jeszcze krótszy.
Lynn

2
b ^ 1 również działa.
xnor

@xnor I tak byłoby lepiej, ponieważ wtedy przestrzeń przed tym formogłaby zostać upuszczona.
Mego

Nie zdawałem sobie sprawy, 1forże zostaną przeanalizowane jako dwa osobne tokeny. Huh, TIL.
Steven H.

6

C #, 19 bajtów

jako funkcja anonimowa przyjmuje bool [] i zwraca IEnumerable

b=>b.Select(x=>!x);

lub w 36 bajtach z

dynamic f(bool[]b)=>b.Select(x=>!x);

5

Formuła IBM / Lotus Notes, 2 bajty

!a

Stosowanie:

Utwórz formularz Notatki z dwoma polami o nazwach a i b.

a (wejście) = edytowalne, liczba, wiele wartości, oddzielone przecinkami

b (wynik) = obliczony, liczba, wiele wartości, oddzielone przecinkami

Wklej powyższą formułę do b i ustaw domyślną wartość 0.

Utwórz nowy dokument za pomocą formularza, wprowadź listę binarną w punkcie i naciśnij klawisz F9, aby zaktualizować dane wyjściowe.

Przykłady:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Działa, ponieważ biorąc pod uwagę listę jako dane wejściowe, formuła programu Notes zastosuje dowolne określone działanie do każdego elementu na liście.


2
O mój boże ... Moja firma właśnie odeszła od nut lotosu; Miałem nadzieję, że nigdy więcej tego nie zobaczę. +1 za ten powrót.
Magic Octopus Urn

Myślę, że wiele firm jest @carusocomputing i prawdopodobnie słusznie. Pracuję nad tym z przerwami od ponad 20 lat i nadal mnie zadziwia, co czasami język formuł może zrobić z iteracjami list. Fajnie jest od czasu do czasu otwierać projektanta i zobaczyć, ile jeszcze pamiętam :-)
ElPedro


5

Swift 3 (7 bajtów)

.map(!)

na przykład

[true, false].map(!)

Wyjaśnienie

Wydaje się to dość oczywiste. Wzywa maptablicę [true, false]. „Gotcha” polega na tym, że w Swift operatory są tylko funkcjami i mogą być przekazywane jako argumenty. Oznacza to map(!)przekazanie funkcji „nie” !do map.


Imponująco krótka odpowiedź na język, który jest straszny dla golfistów. :)
DJMcMayhem

Czuję się, jakbym złamał zasadę czy coś takiego. Nie jestem pewien, jak są one oceniane. : D
mklbtz 16.09.16

To jest niesamowite.
JAL

5

Język programowania Szekspira , 240 bajtów

.
Ajax,.
Puck,.
Act I:.
Scene I:.
[Enter Ajax and Puck]
Puck:
Open your mind.Is hog as big as you?If so, let us return to scene II.You be sum of difference of zero and you and cat.Open thy heart!Let us return to scene I.
Scene II:.
[Exeunt]

Zajmuje wejście jako ciąg \0i \1znaków sterujących. Dane wyjściowe jako ciąg 0lub 1. Jeśli wejście musi być taka sama jak na wyjściu, wymienić Open thy heartz Speak thy mindbez zmiany bytecount. Jeśli \0i \1nie może być używany, należy wykonać powyższe, ale także wymienić Open your mindsię Listen to thy heartna kary 5-bajtowego.

Nie golfowany:

The Invertion of Veronan Arrays.

Romeo, who stores the element.
Juliet, who lectures him.

Act I: In which an array is inverted.

Scene I: A silent entrance.

[Enter Romeo and Juliet]

Scene II: In which Juliet pours out her heart to Romeo.

Juliet:
  Open your mind. Is nothing better than thee? If so, let us proceed to scene III. 
  Thou art as good as the sum of the difference between nothing and thee and my 
  cat. Open your heart! Let us return to scene II.

Scene III: Finale.

[Exeunt]

To z grubsza przekłada się na następujący pseudokod C:

int romeo;

Scene1:
romeo = getchar();
if (0 > romeo) goto Scene2;
romeo = 0 - romeo + 1;
printf("%d", romeo);
goto Scene1;

Scene2:;

Używam tego tłumacza . Przykładowy przebieg:

$ python splc.py invert.spl > invert.c
$ gcc invert.c -o invert.exe
$ echo -ne "\x00\x01\x00" | ./invert
101

4

JAISBaL , 1 bajt

!

Podobnie jak wszystkie inne odpowiedzi 1-bajtowe, jest to operator negacji, który w razie potrzeby może działać na tablicy. Pozostawia to wynik na stosie, który jest drukowany na końcu programu.

W przypadku dwóch bajtów tablicę można jawnie wydrukować:

Dane wejściowe są w niezwykle dziwnym formacie tablicowym JAISBaL (który wymyśliłem, ale mi się nie podoba ...).

Przypadki testowe (dane wyjściowe z interpretera Java, 3.0.5):

Enter a value > [true][false]


--------------------
Stack: [[false, true]]
Locals: {}
----------------------------------------
Enter a value > [false][false][true][false][false]


--------------------
Stack: [[true, true, false, true, true]]
Locals: {}

4

PowerShell, 15 bajtów

$args[0]|%{!$_}

Myślę, że może to nawet działać w wersji 1, dlatego zostawiłem numer wersji wyłączony z tytułu. Pętle przechodzą przez dane wejściowe $argsi kolejno negują każdy element. Powstała tablica jest pozostawiana w potoku.

Ciekawe jest jednak to, że PowerShell jest tak luźny w swoich wymaganiach dotyczących rzutowania, że ​​możesz wykonać całkowicie mieszane dane wejściowe i uzyskać odpowiednią wartość logiczną. Na przykład tutaj są dosłowne wartości logiczne $false/ $true, liczby 0 1i 123456789jako liczby całkowite, pusty ciąg, niepusty ciąg, pusta tablica i niepusta tablica -

PS C:\Tools\Scripts\golfing> .\invert-a-boolean-array.ps1 @($false,$true,0,1,123456789,'','foo',@(),@(1,1))
True
False
True
False
False
True
False
True
False

4

Perl, 7 bajtów

Obejmuje +2 za -lp

Podaj każdą wartość logiczną jako 0 lub 1 w osobnym wierszu

invert.pl
1
1
0
^D

invert.pl:

#!/us/bin/perl -lp
$_^=1


3

Cheddar, 10 bajtów

@.map((!))

Mam nadzieję, że policzyłem, pisząc z telefonu


1
Myślę, że równoważnie, fn.vec((!))jeśli kiedykolwiek został wydany: P
Conor O'Brien

3

Java, 58 bajtów

void f(boolean[]a){for(boolean i:a)System.out.print(!i);}

Sposoby gry w golfa: zmień arrna a(zapisuje 4 bajty), pisz int[]azamiast int a[](zapisuje 1 bajt),
Olivier Grégoire

ups! jak to zapomnieć? jak szalony jestem. i dzięki @ OlivierGrégoire
Numberknot

3

brainfuck (58 bajtów)

-[>+<-----]>--->,[<[->->+<<]>[--<]>[>]<[-<+<+>>]<+.[-]<>,]

Wypróbuj tutaj

Nie golfił

-[>+<-----]>---     Number 48 (stands for 0)
>,                  Read in first point
[               
    <[->->+<<]      Subtract 1 from 48 flag, subtract 1 from read data, add 1 for new flag
    >           
    [--<]           If sitting on 1 (true) subtract 2 and move left)
        >[>]<       Move to 48 flag
        [-<+<+>>]   Add 48 to data point
        <+.[-]<     Add 1 move print, zero cell, move to new 48 cell
        >,          Read in next point
]                   Loop if input remaining

Pobiera dane wejściowe niepodzielnych 1 lub 0 (11001).


3

Kod logiczny , 9 8 bajtów

out!binp

Naprawdę proste.

Pobiera dane wejściowe jako ciąg binarny, ponieważ Logicode nie obsługuje list (tak też [true, false]byłoby 10).

outWyprowadza wynik tej linii.

!Polecenie oblicza NIE każdego bitu w ciągu, więc coś !111będzie 000.

Jest binpto wejście binarne.

1 bajt zapisany dzięki @daHugLenny


Myślę, że możesz usunąć przestrzeń pomiędzy outi !binp.
acrolith

@daHugLenny Huh, nie wiedziałem, że możesz to zrobić. Dzięki!
clismique


2

Japt, 3 bajty

¡!X

Japt nie ma danych logicznych, więc dane wejściowe to tablica zer i jedynek. Przetestuj online!

Jak to działa

¡    // Map each item X in the input to
 !X  //  the boolean NOT of X.
     // Implicit output


2

Python 2, 24 bajty (niekonkurujące)

lambda a:[i-1for i in a]

Logika jest podobna do Stevena, ale próbowałem użyć pomysłu tego komentarza, ale inaczej, ponieważ wciąż zajmuje 0/ 1tablice, a nie 0/ -1. Nie ma golenia bajtowego przy użyciu 0/ -1, więc bądźmy rozsądni. Zauważ, że to nie konkuruje, dopóki Steven lub Lynn nie pozwolą mi skorzystać z tego pomysłu. Jeśli tak, to może usunąć niekonkurującymi ślad. Pamiętaj, że ten kod nie może zostać bezwstydnie skradziony, nadal istnieje. Tylko Steven może użyć go do swojej odpowiedzi.


2

Rubinowy, 14 bajtów

Funkcja anonimowa:

->a{a.map &:!}

Sprawdź to:

->a{a.map &:!}.call([true, true, false, true, false, true, true])
# => [false, false, true, false, true, false, false]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.