중복 부울


19

소개

기본적으로 부울은 1 비트입니다. true또는 false, 1또는 0. 선행 0은 중복됩니다. 예를 들어, 001동일한 수단 00001하거나 1.

32 비트 부울

진리 / 거짓 값이 주어지면 동등한 32 비트 부울을 문자열로 출력합니다. ( 어떤 이유로 언어가 선행 0을 지원하는 경우 숫자로 )

당신의 프로그램은 모든 진실 / 거짓 유형에 대해 작동 할 필요는 없으며, 프로그래밍 언어가 가장 잘 작동하는 것만 가능합니다.

예제 I / O

Input >> Output

truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000

이것은 이므로 가장 낮은 바이트가 이깁니다!


6
우리는 가능한 진실성 또는 거짓 가치를 처리해야합니까 아니면 부울 만 처리해야합니까?
xnor

내 언어가 유형을 지원하고 부울이 있으면 1 (int)을 진실로 사용할 수 있습니까?
LiefdeWen

@LiefdeWen 물론
Graviton

1
진실 / 거짓 입력이 각 답변 / 언어마다 다를 수 없으므로 더 이상 복제되지 않습니다.
Graviton

나는 왜 그러나 응, 알았어 ~ 표시되지 않습니다
V. COURTOIS

답변:


10

파이썬 3 , 33 25 18 15 바이트

__mod__팁에 @ jurjen-bos 감사합니다 .

'%.32d'.__mod__

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


시겠습니까 lambda b:'%0.32d'%b일?
ბიმო

오,이다 None truthy 또는 falsy은 ?
ბიმო

@BruceForte Falsey
wrymug

1
또한 25 바이트이지만 python3.6 +의 경우 : lambda b:f'{bool(b):032}'또는lambda b:f'{not b<1:032}'
Felipe Nardi Batista

1
에서 선행 0을 제거하여 1 바이트를 절약 할 수 있습니다 0.32d.
GarethPW

9

x86-16 머신 코드 (DOS), 16 바이트

B4 02          mov  ah,  2
B2 30          mov  dl, '0'
B9 1F 00       mov  cx, 31

            PrintZeros:
CD 21          int  0x21
E2 FC          loop PrintZeros

00 CA          add  dl, bl
CD 21          int  0x21
C3             ret

위 함수는 BL레지스터 (하위 바이트 )에서 부울 값 (0 == falsey, 1 == truthy)을 수신하고 BX"중복 부울"문자열을 표준 출력으로 인쇄합니다.

인터럽트 (0x21)를 호출 AH하여 단일 문자 (in DL)를 표준 출력으로 인쇄하는 DOS 함수 호출 ( 2 로 설정 하여 선택 )을 수행합니다.

먼저 ASCII 문자 '0' 이로 로드되고 DL카운터 ( CX)가 31로 설정되고 "중복"바이트를 인쇄하기 위해 반복됩니다. 그리고, 입력 부울 값에 추가된다 DL(만약 BLfalsey이고, 0을 추가하여 떠나 DLASCII '0'으로 변경되지 않고, 경우 BLtruthy이고, DLASCII '1'로 하나씩 증가한다), 최종 바이트가 인쇄된다.

이 함수는 값을 반환하지 않습니다.

실제로 문자열을 수행하지 않는 언어에 적합합니다.


풀 프로그램, 21 바이트

전체 프로그램으로 만들려면 5 바이트 만 더 필요합니다. 레지스터에서 입력을 전달하는 대신 응용 프로그램을 호출 할 때 명령 줄에 전달 된 인수에서 입력을 읽습니다. 인수 0은 인수가 완전히없는 것처럼 거짓으로 해석됩니다. 0보다 큰 인수는 진실한 것으로 해석됩니다.

다음 코드를 COM 프로그램으로 조립 한 다음 명령 줄에서 실행하면됩니다.

B4 02            mov   ah,  2
B2 30            mov   dl, '0'
B9 1F 00         mov   cx, 31

               PrintZeros:
CD 21            int   0x21
E2 FC            loop  PrintZeros

3A 16 82 00      cmp   dl, BYTE PTR [0x82]  ; compare to 2nd arg, at offset 0x82 in PSP
D6               salc                       ; equivalent to sbb al, al
28 C2            sub   dl, al
CD 21            int   0x21
C3               ret                        ; you can simply 'ret' to end a COM program

샘플 출력 :

C:\>bool.com
00000000000000000000000000000000
C:\>bool.com 0
00000000000000000000000000000000
C:\>bool.com 1
00000000000000000000000000000001 
C:\>bool.com 2
00000000000000000000000000000001
C:\>bool.com 7
00000000000000000000000000000001

어떻게 작동합니까? 글쎄, 그것은 CMP지시에 도달 할 때까지 기본적으로 같은 것 입니다. 이것은 명령 행 인수와 DL레지스터 값 (ASCII '0'을 포함 함)을 비교합니다. COM 프로그램에서 코드 바이트는 오프셋 0x100에로드됩니다. 그 앞에는 DOS 프로그램의 상태에 대한 정보가 들어있는 PSP (프로그램 세그먼트두부) 가 있습니다. 특히 오프셋 0x82에서 프로그램을 호출 할 때 명령 줄에 지정된 첫 번째 (실제로 두 번째는 공백이므로) 인수를 찾습니다. 따라서이 바이트를 ASCII '0'과 비교합니다.

비교는 플래그를 설정 한 다음 두 값이 같으면 SALC명령어 (Pentium 이전에 문서화되지 않은 opcode sbb al, al, 2 대신 1 바이트 만) AL를 0으로 설정 하고, 값이 다르면 -1로 설정합니다. 그것은 우리가 뺄 때 다음 명백한 AL에서 DL적절한이 중 ASCII '0'의 결과 또는 '1'.

(어떤 아이러니하게도, 첫 문자 만 보이므로 명령 행에서 앞에 0이 01붙은 인수를 전달하면 인수가 중단됩니다. 따라서 거짓으로 취급됩니다. :-)



7

자바 스크립트, 23 바이트

a=>'0'.repeat(31)+ +!!a

!!a a를 부울로 강제하고, 단항 더하기는 int로 바뀝니다.


a=>'0'.repeat(31)+(+a)1 바이트 더 짧습니다.
Kritixi Lithos

문자열, 빈 배열, NaN, 함수 및 숫자로의 강제 변환이 0 또는 1이 아닌 다른 값에서 실패하는 @Cowsquack
SuperStormer

비어있는 객체, 배열, 무한대 및 정의되지 않음
SuperStormer

1
... 그러나 지금 ...Your program doesn't have to work for every truthy/falsy type, only what your programming language work best for.
edc65

1
a=>'0'.repeat(31)+~~atrue, false, 1,0와 함께 작동합니다
edc65




4

ArnoldC , 369 바이트

IT'S SHOWTIME
HEY CHRISTMAS TREE A
YOU SET US UP 0
GET YOUR ASS TO MARS A
DO IT NOW
I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
BECAUSE I'M GOING TO SAY PLEASE A
TALK TO THE HAND "00000000000000000000000000000001"
BULLSHIT
TALK TO THE HAND "00000000000000000000000000000000"
YOU HAVE NO RESPECT FOR LOGIC
YOU HAVE BEEN TERMINATED

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


2
PPCG에 오신 것을 환영합니다!
Stephen

4

브레인 포트 , 61 60 36 바이트

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

포인터로 너무 많이 움직이지 않는 영리한 방법이 있다고 확신합니다.

내가 맞았 어. 있었다. 아이디어를 주신 @Graviton에게 감사드립니다!

다음 단계 : 값 32와 48을 더 빨리 얻으십시오!

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

++++        - Increment 1st slot by 4
[           - Loop until 4 becomes 0
    >++++   - Add 4 to 2nd slot
    <-      - Decrement loop
]           - At this point, we point to slot 1 and slot 2 contains 16, which is the Greatest Common Divisor of 48 (value 0 in ASCII) and 32 (final length of answer)
>           - Point to value 16 (slot 2)
[           - Start loop to get our target values 32 and 48
    >++     - Point to slot 3 and multiply 16 by 2 = 32
    >+++    - Point to slot 4 and multiply 16 by 3 = 48
    <<-     - Decrement the loop so that slot 2 becomes 0
]           - We now point slot 2
>-          - Move to slot 3 and remove one so we can spam (output) 31 zeroes
[           - Start outputting until slot 3 is empty
    >.      - Move to slot 4 where our ASCII value for 0 is
    <-      - Decrement the loop so that slot 3 becomes 0
]           - We are now at slot 3 and it is empty.
,.          - We can now gather input from the user and output it.

첫번째 골프를 위해 재미 있었다!

너무 늦었습니다. 내가 뭘하고 있니


엔트로피 덕분에 숫자 16까지 1 바이트 더 짧아졌습니다.
Raphaël Côté

재미있게 여기 60 바이트 버전이 있습니다 : >-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.(0 또는 1로 입력을받습니다) 온라인으로보십시오!
Graviton

글쎄, @Graviton 너무 감사합니다. ASCII 값을 0으로 낮추는 데 너무 많은 노력을 기울이고 있다는 것을 깨달았습니다.
Raphaël Côté

3

스칼라, 32 바이트

죄송하지만 32 바이트로 강제로 실행했습니다.> _ <

var s=t
for(u<-0 to 30)s="0"+s
s

t매개 변수 로 사용되는 함수로 묶여 있으며 ( string거짓 또는 진실을 나타내는 경우 "0"또는 "1"일 수 있음) s반환됩니다.

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

유효한 응답 : 스칼라, 46 바이트

내 자바 응답과 마찬가지로 매개 변수에 대해 부울을 가져야했습니다. 그래서 :

var s=if(t)"1"else"0"
for(u<-0 to 30)s="0"+s
s

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


3

Braingolf , 10 8 바이트

#␟>[0_]N

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

단위 구분 기호, ASCII 0x1F또는 31입니다. 실제로 TIO에 붙여 넣을 문자를 찾을 수 없으므로 TIO는 대신# 1- 공백을 공간 (32)을 31로 줄입니다.

설명

#␟>[0_]N  Implicit input from commandline args
#␟        Push unit separator (31)
   >       Move top item to bottom of stack
    [..]   Loop, runs 31 times
     0_    Print 0
        N  Boolean conversion, truthy values become 1, falsey values become 0
           Implicit output of top of stack

여기에 0x1F 문자가있는 tio 링크가 있습니다. TIO
PunPun1000

@ PunPun1000 아 감사합니다! 게시물을 업데이트하겠습니다
Skidsdev


2

자바 8, 31 27 바이트

b->"".format("%032d",b?1:0)

@ OlivierGrégoire 덕분에 -4 바이트 .

여기에서 시도하십시오.


1
그래, 여전히 당신을 outgolf하기 위해 : "".format;)
Olivier Grégoire

1
@ OlivierGrégoire 그게 다야! 젠장, 멍청한 데 .. xD 타이핑 할 때 String.format어떻게 든 더 짧은 방법이 있다는 것을 알았지 만, 아마도 지난번에 String 변수를 사용했을 것입니다 ... 감사합니다. ;)
Kevin Cruijssen







1

C, 26 바이트

1bluestone의 솔루션거의 동일 하지만 C에서는 더 짧으며 모든 정수 입력에 대해 올바르게 작동합니다.

f(a){printf("%032i",!!a);}

모든 좋은의 C-골프 답변처럼 물론,이 몇 가지 암시 적으로 형식화 된 변수 / 기능을 포함 ... !!운영자는 어떤 truthy 값을 변환하는 가장 짧은 방법 1(이중 부정을 통해, C에서 !반환 하나에 정의 1또는 0).

다음을 사용하여 테스트하십시오.

#include <stdio.h>
f(a){printf("%032i",!!a);}
int main() {
    f(0), printf("\n");
    f(1), printf("\n");
    f(2), printf("\n");
    f(-1), printf("\n");
}

1

Haskell, 37 32 bytes

(('0'<$[1..31])++).show.fromEnum

Try it online!

Thanks @nimi for -5 bytes!


2
show(fromEnum x) instead of last(...). Pointfree even shorter: (('0'<$[1..31])++).show.fromEnum.
nimi

@nimi Didn't know that Bool is an Enum, thanks!
ბიმო

1

PHP, 28 bytes

<?=str_pad($argv[1],32,0,0);

Save as bool.php and run:

$ php bool.php 0
00000000000000000000000000000000
$ php bool.php 1
00000000000000000000000000000001

3 bytes shorter: printf('%032d',$argv[1]); (requires the -r flag).
user63956

1

Ly, 20 15 13 bytes

65*1+[0u1-]nu

EDIT: Saved 5 bytes thanks to ovs.
EDIT: Saved another 2 bytes by printing 0 as a number rather than a character.


Would 65*1+["0"o1-]nu work?
ovs

1

Octave,16 11 bytes

@(x)x(1:32)

Try it online!

A function handle that takes "00000000000000000000000000000001" as truthy and "00000000000000000000000000000000\0" as falsey.

Explanation:

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.


1

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

c->{for(int i=0;++i<32;c=0+c);return c;}

Try It Online!

Valid response : Java, 60 chars, 60 bytes

c->{String k="";for(k+=c?1:0;k.length()<32;k=0+k);return k;}

Try It Online!

I know there is already a Java answer which is shorter than this one, but still :)


Yes, the return statement is part of your code, so part of your byte-count. But your answer doesn't fulfill the rules: you must get a boolean as input. "Truthy/falsy" is translated in Java as either true or false, and nothing else. So you can't get a String as input parameter.
Olivier Grégoire

I see. I'll modify it soon enough. Thanks.
V. Courtois

1
You don't need to put the final semicolon (;). Also, you can shorten your code like this: c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}. The k+=c?1:0 is to shorten k+(c?1:0).
Olivier Grégoire

@OlivierGrégoire Thanks but why isn't the final semicolon mandatory?
V. Courtois

1
It is mandatory, in the code, but not in the snippet. In the TIO, the footer can simply start with ;. A statement requires a semicolon. A lambda is not a statement.
Olivier Grégoire

1

Japt, 13 11 bytes

?1:0 ¤i31ç0

Explanation:

?1:0 ¤i31ç0
?              // If the input is a truthy, return:
 1             //   1
  :0           //   Else, 0
     ¤         // Convert to a base-2 string
      i        // Insert at index 0:
       31ç0    //   A string filled with 0s, length 31

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 the 1 and 0 into a string. The typical way of doing that would be 1s  (3 bytes). But because we're only converting 1s and 0s, I can use the base-2 built-in (2 bytes).


Input can be in the form of an integer or string.

0 and "" are falsy in Japt.

Try it online!

Test suite


1

C# (.NET Core), 29 bytes

a=>new string('0',31)+(a?1:0)

OP said 1/0 can be used for truthy/falsey, so can make a an int and it becomes

a=>new string('0',31)+a

C# doesn't really have truthy/falsey though so I will not use this answer.

Try it online!


1
I don't think the second one is valid. Integers are neither truthy nor falsey in C#, only bools are.
Skidsdev

@Mayube I did ask and OP said its okay, but I kinda agree with you so will edit.
LiefdeWen

1
Annoyingly Padleft comes in at the same byte count here.
TheLethalCoder

@TheLethalCoder Started with PadLeft as well :)
LiefdeWen

2
Not sure if this is possible, but interpolated strings can be quite useful here: b=>$"{(b?1:0):D32}" 19 bytes
auhmaan

1

MY, 10 9 bytes

𝕫BṄiℑpέ←←

Try it online!

Explanation (codepage [with reasoning behind the character]/hex code):

𝕫: 1A - Push an integer from STDIN (lowercase integers)
B: 0B - Push 11 (B is 11 in hex)
Ṅ: 36 - Pop n; push the nth prime, 11th prime is 31 (Ṅ-th)
i: 49 - Pop n; push [1,...,n] (index/iota)
ℑ: 34 - Pop n; push imag(n) (ℑmaginary part, applied to each element, which gives 0 for real numbers)
p: 60 - Pop n; push stringified n (0=>"0" ... 35=>"Z", the b in base upside down)
έ: 56 - Pop n; push n joined by "" (έmpty string)
←: 26 - Pop n; output n with no newline (out←in)
←: 26 - Pop n; output n with no newline (out←in)

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.


0

APL, 11 bytes

⍕¯32↑1↑1\⍨⊢

How?

1\⍨⊢ - repeat 1 input times - return empty array on falsy value

1↑ - take the first item

¯32↑ - align right with 31 zeros

- format as string


Simply ⍕¯32↑⊢ should work
Kritixi Lithos

1
@Cowsquack & Uriel Neither works as they include spaces. You need ∊⍕¨¯32↑⎕ or something.
Adám

0

J, 11 bytes

(31#'0'),":

Try it online!

how?

31 zeros
00...000  append     turn the 0 or 1 input into string
(31#'0')    ,       ":

note: in J, booleans are 0 or 1, also known as "the iverson convention," after ken iverson, creator of J and APL


I understand that 1 and 0 are booleans in J, but you're just appending the input to 31 0s. Shouldn't there be some form of boolean validation?
Oliver

@Oliver The problem specifies "Given a truthy/falsey value..." so no, I don't think you should be validating... Also, note that ": is required for this to work -- it changes a boolean to a string.
Jonah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.