부울 배열 반전


19

좋은 간단한 것

입력

부울 배열 (또는 허용 가능한 대안)이 주어지면 배열의 길이가 32 요소를 넘지 않는다고 가정 할 수 있습니다.

[false, false, true, false, false]

산출

배열의 모든 요소를 ​​뒤집어 출력합니다.

[true, true, false, true, true]

규칙

  • 당신은 전체 프로그램이나 함수를 작성할 수 있습니다
  • 표준 허점 적용
  • 언어별로 가장 짧은 바이트 단위의 코드가 승리합니다!

테스트 사례

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

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

0(false, all 0 bits) 및 -1(true, all 1 bits)의 배열은 어떻습니까?
Lynn


관련. (핵심 작업의 단순성을 감안할 때, 형식의 차이가 중복되지 않을만큼 충분히 중요하다고 말하고 싶습니다.)
Martin Ender

6
코드 골프 이상으로 이것은 나에게 다음과 같이 보입니다. 좋아하는 언어에서 연산자가 아닌 것은 무엇입니까? 목록에서 작동하는 경우 추가 포인트.
licorna

답변:



14

젤리 , 1 바이트

¬

온라인으로 사용해보십시오!

¬논리 NOT입니다 (false y이면 1, 그렇지 않으면 0). C(“complement”, 1-z )도 작동합니다.


12
@Dennis는 당신을 능가하는 데 어려움을 겪을 것이라고 생각합니다.
flawr

15
@flawr Dennis가 0 바이트 이하로 처리하는 것은 시간 문제입니다.
Outgolfer Erik

2
@EriktheGolfer "0 바이트 이하 "hmm
zdimension

1
@zdimension Dennis입니다. 그는 생각보다 짧게 할 수 있습니다 (밈을 읽으십시오).
Outgolfer Erik

13

자바 스크립트 ES6, 15 바이트

a=>a.map(b=>!b)

많은 설명이 필요하지 않은 것 같아요

f=
a=>a.map(b=>!b)

a.innerHTML = `[true, false, 1, 0] => ${ f([true, false, 1, 0]) }`
<pre id=a>


12

Matlab, 4 1 바이트

이것은 스스로 설명해야합니다.

~

Matlab에는 1 바이트 부정 연산자 ~가 있습니다. 원하는 기능을 원할 경우 사용할 수 있습니다 @not.


22
얻을 @rgument, neGate에서는, output, t오른쪽 erminate를?
Martin Ender

2
하하, 맞아 Matlab에 유창하게 놀랐습니다!
flawr

롤 보랏 같은이 소리는 "이것은해야 자기 설명 .... NOT"
user2023861

~인수를받는 연산자이기 때문에 반드시 적절한 대답입니다. 나는 ~[1,0,0,1,0]전적으로 적절 하다고 생각 합니다.
Tasos Papastylianou

1
@TasosPapastylianou 운영자 제출은 확실히 유효합니다 (Julia 및 Mathematica와 같은 일부 언어에서는 자신의 함수를 정의하는 것보다 짧기 때문에 자신의 연산자를 정의하는 것이 일반적입니다). ;)
Martin Ender

10

하스켈, 7 바이트

map not

예:

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

예제에서 괄호가 필요하지 않습니까?
flawr

9
나는하지 않지만 예제에서 내 대답이 스 니펫이 아닌 유효한 표현인지 보여주는 방법을 보여주고 싶었습니다.
Lynn

3
코드를 작성하기 위해 제안 된 편집이 not<$>있었지만 유효한 표현은 아닙니다. 당신은 쓸 수 없습니다 f = not<$>다음과 f [False, True, True]; 연산자 슬라이스는 그 주위에 괄호가 필요하므로 바이트 수에 기여합니다.
Lynn

2
그리고 어쨌든 편집을 통해 코드를 제안하지 않아야합니다
undergroundmonorail


10

C, 46 바이트 재귀 버전

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

C, 47 바이트 반복 버전

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

이 주요 기능을 사용하여 실행

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

이 같은 입력

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

내가 기대했던 것보다 짧은 C!
Chris Jefferson

10

R, 1 바이트

!

예:

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

숫자 입력에서도 작동합니다.

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

우리는 1 차원 배열로도 제한되지 않습니다. 행렬을 만들고 임의로 0과 1로 채 웁니다.

> 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

우리는 이것을 쉽게 쉽게 뒤집을 수 있습니다.

> !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

우리는 임의의 수의 차원에 대해 이것을 계속할 수 있습니다. 다음은 4 차원 배열의 예입니다.

> 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

캐릭터에게는 효과가 없습니다.

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

1
동일한 답변을 제출하지 않기 위해 줄리아에서도 작동합니다 (숫자 입력에서는 작동하지 않음)
Sp3000

8

펄 6 , 4 바이트

"프랑스어"/ 유니 코드 버전 :

!«*

"텍사스"/ ASCII 버전 :

!<<*

입력은 목록으로 취급 할 수있는 단일 값입니다.

이것은 접두사 하이퍼 연산자 ( )를 사용하여 결합한 논리적 인 접두사없는 연산자 ( )를 가진 무엇이든 람다 ( *) 입니다 .!«

실제로 이것은 다음과 같습니다.

-> $_ { $_.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 )

용법:

# 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)

난 그냥 같은 것을 퍼즐하려고했습니다. 나는 단지 {!«@_}:) 까지 도착했다
홉스

!**작동해야합니다
Jo King

7

미로 , 9 바이트

,$:)%#$.,

온라인으로 사용해보십시오! 후행 줄 바꿈과 함께 줄 바꾸기로 구분 된 입력을 가정합니다. 골프에 도움을 주신 @MartinEnder에게 감사드립니다.

이 프로그램은 Labyrinth 프로그램에서 약간 이상합니다. 언어의 2D 특성을 사용하지 않으며 실제로 앞뒤로 튀어 오릅니다. 첫 번째 여행에는 다음이 있습니다.

[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

다음 번 발생은 $스택 c의 맨 아래에있는 암시 적 0이 아니라 첫 번째 실행에서와 같이 스택의 기존 0을 XOR합니다 . 두 상황 모두 스택을로 남겨두고 [c]프로그램은 이후에 반복됩니다.

대체 9 바이트 :

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

2
이 앞으로 뒤로 효과는 정말 멋지다.
DLosc

나는이 답변을 좋아한다. 행복합니다. :)
Fund Monica의 소송

6

Mathematica, 7 바이트

Not/@#&

또는 문자없이 :

!#&/@#&

구문 설탕 &은 명명되지 않은 함수의 오른쪽 끝을 표시하고 우선 순위가 매우 낮습니다. #가장 근접하고 둘러싼 첫 번째 인수를 나타냅니다 &. !의 연산자입니다 Not. 따라서 !#&이름없는 함수는 인수를 무효화하는, 즉 내장 함수와 동일합니다 Not. /@의 연산자입니다 Map. 따라서 코드는 다소 읽기 쉬운 코드와 동일합니다 Map[Not, #]&.


11
!#&/@#&내가 어떻게 읽어야합니까? :)
Lynn

1
@ 린이 도움이 되나요? :)
Martin Ender

4
목록에 Not없는 것이 놀랍습니다
시몬스

@ASimmons 그래, 나도 마찬가지였다.
Martin Ender

6

파이썬, 27 25 24 바이트

2 바이트를 골프로 해준 Lynn과 다른 선수를 위해 골프를 해준 xnor와 Mego에게 감사드립니다.

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

1
0/의 배열 1이 허용 1-b되며보다 짧습니다 not b. 0/ 배열 -1이 허용 되는지 OP에게 물었 ~b습니다. 이 경우 훨씬 짧습니다.
Lynn

2
b ^ 1도 작동합니다.
xnor

@xnor 그리고 그것은 실제로 더 좋을 것 for입니다.
Mego

나는 그것이 1for두 개의 별도 토큰으로 파싱 될 것이라는 것을 몰랐습니다 . 허, 틸.
Steven H.

6

C #, 19 바이트

익명 함수로서 bool []을 사용하고 IEnumerable을 반환합니다.

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

또는 36 바이트

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

5

IBM / Lotus Notes 공식, 2 바이트

!a

용법:

a와 b라는 두 개의 필드로 Notes 양식을 작성하십시오.

a (입력) = 편집 가능, 숫자, 다중 값, 쉼표로 구분

b (출력) = 계산, 숫자, 다중 값, 쉼표로 구분

위의 공식을 b에 붙여넣고 aa 기본값 0을 지정하십시오.

양식을 사용하여 새 문서를 작성하고 a에 이진 목록을 입력 한 다음 F9를 눌러 출력을 업데이트하십시오.

예 :

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

목록은 입력으로 지정되었으므로 작동합니다. Notes 공식은 지정된 조치를 모두 목록의 모든 요소에 적용합니다.


2
오 마이 갓 .. 우리 회사는 방금 로터스 노트에서 전환했습니다. 나는 다시는 그것을 보지 않기를 바랐다. 후퇴에 +1.
Magic Octopus Urn

많은 회사들이 @carusocomputing이라고 생각합니다. 나는 그것을 20 년 이상 켜고 끄는 작업을 해 왔으며 때로는 목록 반복으로 수식 언어가 할 수있는 일에 여전히 놀랍습니다. 때때로 디자이너를 열어서 내가 아직도 얼마나 기억할 수 있는지 보는 것이 재미있다 :-)
ElPedro


5

스위프트 3 (7 바이트)

.map(!)

예 :

[true, false].map(!)

설명

꽤 명백한 것 같습니다. map배열을 호출 합니다 [true, false]. 하나의 "gotcha"는 Swift에서 연산자는 함수일 뿐이며 인수로 전달 될 수 있다는 것입니다. 이것은 map(!)"not"함수를 !로 전달 한다는 의미 입니다 map.


에서 골프에 대한 끔찍한 언어에 대한 인상 짧은 대답 :).
DJMcMayhem

규칙을 어겼을 것 같은 느낌이 듭니다. 이것이 어떻게 판단되는지 잘 모르겠습니다. : D
mklbtz

대단해.
JAL

5

셰익스피어 프로그래밍 언어 , 240 바이트

.
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]

(A)의 문자열로 입력을 받아 \0\1제어 문자. 0또는 의 문자열로 출력합니다 1. 입력이 출력 Open thy heartSpeak thy mind같아야하는 경우 바이트 수를 변경하지 않고 교체하십시오 . 경우 \0\1사용할 수 없습니다, 위 할뿐만 아니라 교체 Open your mindListen to thy heart5 바이트의 벌금합니다.

언 골프 드 :

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]

이것은 대략 다음 C 의사 코드로 변환됩니다.

int romeo;

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

Scene2:;

이 인터프리터를 사용 하고 있습니다. 샘플 실행 :

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

4

JAISBaL , 1 바이트

!

다른 모든 1 바이트 응답과 마찬가지로이 연산자는 부정 연산자이므로 필요한 경우 배열에서 작동 할 수 있습니다. 이렇게하면 출력이 스택에 남고 프로그램이 끝날 때 인쇄됩니다.

2 바이트의 경우 배열을 명시 적으로 인쇄 할 수 있습니다.

입력은 JAISBaL의 엄청나게 홀수 배열 형식입니다 (발명했지만 마음에 들지 않습니다 ...).

테스트 사례 (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 바이트

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

나는 이것이 v1에서도 작동 할 수 있다고 생각 하므로 버전 번호를 제목에서 제외했습니다. 입력을 반복 $args하고 각 항목을 차례로 무효화합니다. 결과 배열은 파이프 라인에 남아 있습니다.

그러나 깔끔한 것은 PowerShell이 ​​캐스팅 요구 사항이 너무 느슨하기 때문에 완전히 혼합 된 입력을 수행하고 적절한 부울 출력을 얻을 수 있다는 것입니다. 예를 들어 다음은 리터럴 부울 값 $false/ $true, 숫자 0 1123456789정수, 빈 문자열, 비어 있지 않은 문자열, 빈 배열 및 비어 있지 않은 배열입니다.

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

펄, 7 바이트

에 +2 포함 -lp

각 부울 값을 자체 줄에 0 또는 1로 지정하십시오.

invert.pl
1
1
0
^D

invert.pl:

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


3

체다, 10 바이트

@.map((!))

전화로 글을 쓸 때 올바르게 계산했으면 좋겠습니다.


1
나는 동등하게, 생각 fn.vec((!)), 즉, 지금까지 출시 된 경우 : P
코너 오브라이언

3

자바, 58 바이트

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

골프 방법 : 변화 arr로는 a(4 바이트를 저장), 쓰기 int[]a대신은 int a[], (1 바이트 저장)
올리비에 그레 구 아르

죄송합니다! 어떻게 잊어 버렸나요? 감사합니다 @ OlivierGrégoire
Numberknot

3

brainfuck (58 바이트)

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

여기 사용해보십시오

언 골프

-[>+<-----]>---     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

나누지 않은 1 또는 0을 입력합니다 (11001).


3

로직 , 9 8 바이트

out!binp

정말 간단합니다.

Logicode는 목록을 지원하지 않으므로 입력을 이진 문자열로 가져옵니다 [true, false].10 ).

그만큼 out 라인의 결과를 출력한다.

!명령은 문자열에서 모든 비트의 NOT을 계산하므로 다음과 같습니다 !111.000 .

그만큼 binp 이진 입력된다.

@daHugLenny 덕분에 1 바이트 절약


out와 사이의 공백을 제거 할 수 있다고 생각합니다 !binp.
acrolith

@daHugLenny Huh, 나는 당신이 그렇게 할 수 있다는 것을 몰랐습니다. 감사!
clismique




2

Python 2, 24 바이트 (비경쟁)

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

논리는 Steven과 비슷하지만 의견의 아이디어 를 사용하려고 시도했지만 여전히 0/ 1배열이 아닌 0/ 배열 이 필요하기 때문에 다릅니다 -1. 0/ 를 사용하기위한 바이트 쉐이빙은 없으므로 -1제정합시다. Steven 또는 Lynn이 아이디어를 사용할 수있을 때까지 이것은 경쟁이 아닙니다. 그렇다면 경쟁이 아닌 마크를 제거 할 수 있습니다 . 이 코드는 부끄럽게 도난 당할 수 없으며 여전히 여기 있습니다. Steven만이 그의 대답에 사용할 수 있습니다.


2

루비, 14 바이트

익명의 기능 :

->a{a.map &:!}

그것을 테스트하십시오 :

->a{a.map &:!}.call([true, true, false, true, false, true, true])
# => [false, false, true, false, true, false, false]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.