pengantar
Secara klasik, boolean sedikit berbeda; true
atau false
, 1
atau 0
. Angka nol terdepan hanya akan menjadi berlebihan. Misalnya, 001
artinya sama dengan 00001
atau adil 1
.
Boolean 32-bit
Diberikan nilai truey / falsey, output setara boolean 32-bit sebagai string. (Atau sebagai nomor jika karena alasan tertentu bahasa Anda mendukung angka nol di muka.)
Program Anda tidak harus bekerja untuk setiap jenis kebenaran / kepalsuan, hanya apa yang paling cocok untuk bahasa pemrograman Anda.
Contoh i / o
Input >> Output
truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000
Jawaban:
Python 3 ,
33251815 byteTerima kasih @ jurjen-bos untuk
__mod__
tipnya.Cobalah online!
sumber
lambda b:'%0.32d'%b
bekerjaNone
truthy atau falsy ?lambda b:f'{bool(b):032}'
ataulambda b:f'{not b<1:032}'
0.32d
.x86-16 Kode Mesin (DOS), 16 byte
Fungsi di atas menerima nilai boolean (0 == falsey, 1 == truthy) dalam
BL
register (byte rendahBX
), dan mencetak string "redundant boolean" ke output standar.Ia bekerja dengan menggunakan interupsi (0x21) untuk membuat panggilan fungsi DOS (dipilih dengan menetapkan
AH
ke 2) yang mencetak satu karakter (dalamDL
) ke output standar.Pertama, karakter ASCII '0' dimasukkan ke dalam
DL
, penghitung (CX
) diatur ke 31, dan loop untuk mencetak byte "redundan". Kemudian, nilai input boolean ditambahkan keDL
(jikaBL
falsey, menambahkan 0 tidak akanDL
berubah sebagai ASCII '0'; jikaBL
benar,DL
akan ditambahkan oleh satu ke ASCII '1'), dan byte terakhir dicetak.Fungsi tidak mengembalikan nilai.
Lumayan untuk bahasa yang tidak terlalu bagus.
Program Lengkap, 21 byte
Jika Anda ingin membuatnya menjadi program penuh, hanya 5 byte lagi diperlukan. Alih-alih memasukkan input dalam register, ini membaca input dari argumen yang dilewatkan pada baris perintah ketika memanggil aplikasi. Argumen 0 diartikan sebagai falsey, seperti halnya kurangnya argumen; argumen yang lebih besar dari 0 ditafsirkan sebagai kebenaran.
Cukup kumpulkan kode berikut sebagai program COM, dan kemudian jalankan di baris perintah.
Output sampel:
Bagaimana cara kerjanya? Yah, pada dasarnya hal yang sama, sampai Anda selesai dengan
CMP
instruksi. Ini membandingkan argumen baris perintah dengan nilaiDL
register (yang, Anda ingat, berisi ASCII '0'). Dalam program COM, byte kode dimuat pada offset 0x100. Sebelumnya itu adalah awalan segmen program (PSP) , yang berisi informasi tentang keadaan program DOS. Khususnya, pada offset 0x82, Anda menemukan argumen pertama (sebenarnya yang kedua, karena argumen pertama adalah spasi) yang ditentukan pada baris perintah ketika program dipanggil. Jadi, kami hanya membandingkan byte ini dengan ASCII '0'.Perbandingan menetapkan bendera, dan kemudian
SALC
instruksi (opcode tidak berdokumen sebelum Pentium, setara dengansbb al, al
, tetapi hanya 1 byte, bukan 2) ditetapkanAL
ke 0 jika kedua nilai sama, atau -1 jika keduanya berbeda. Hal ini kemudian jelas bahwa ketika kita kurangiAL
dariDL
, hasil ini baik ASCII '0' atau '1', yang sesuai.(Perhatikan bahwa, agak ironisnya, Anda akan memecahnya jika Anda melewati argumen dengan 0 di baris perintah, karena itu hanya terlihat pada karakter pertama. Jadi
01
akan diperlakukan sebagai falsey. :-)sumber
Python 3 , 23 byte
Cobalah online!
sumber
'10'[not n]
akan cukup jika mereka perlu didukung.'{:032}'.format
untuk 15 byte dan bekerja sama dengan solusi Anda saat inibool(n)
sudah cukupJavascript, 23 byte
!!a
memaksa a menjadi boolean, yang plus plus unary berubah menjadi int.sumber
a=>'0'.repeat(31)+(+a)
lebih pendek satu byte.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
tidak bekerja dengan benar, salah, 1,0V , 8 byte
Cobalah online!
Penjelasan:
sumber
Neim ,
65 byteCobalah online!
Penjelasan:
Menyimpan satu byte berkat Okx
sumber
ᛝΨβ_I
ᛝ
tidak ada di wiki, di mana Anda menemukannya?Oktaf , 17 byte
Fungsi anonim. Bekerja di MATLAB juga.
Cobalah online!
sumber
ArnoldC , 369 byte
Cobalah online!
sumber
Brainfuck ,
616036 byteSaya yakin ada cara yang cerdas untuk tidak terlalu banyak bergerak dengan pointer.Saya benar. Ada. Terima kasih kepada @Graviton karena telah memberikan saya ide!
Langkah selanjutnya: Dapatkan nilai 32 dan 48 lebih cepat!
Cobalah online!
Menyenangkan untuk Golf pertama!
Sudah terlambat sekarang.Apa yang saya lakukansumber
>-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.
(mengambil input sebagai 0 atau 1) Coba Online!Scala, 32 byte
Maaf tapi saya terpaksa melakukannya dalam 32 byte> _ <
Itu tertutup oleh fungsi yang mengambil
t
parameter (sebagaistring
yang bisa "0" atau "1" untuk resp. Falsy atau truthy), dans
dikembalikan.Cobalah secara Online!
Respons yang valid: Scala, 46 byte
Sama seperti respons java saya, saya seharusnya mengambil boolean untuk parameter. Jadi:
Cobalah secara Online!
sumber
Braingolf ,
108 byteCobalah online!
␟
adalah Unit Separator, ASCII0x1F
, atau 31. Tidak dapat menemukan karakter yang sebenarnya untuk ditempelkan ke TIO, jadi TIO malah menggunakan# 1-
, yang mendorong spasi (32) dan menurun menjadi 31.Penjelasan
sumber
Oktaf , 23 byte
Cobalah online!
Ini lebih pendek dari semua pendekatan yang saya coba
printf
. Saya mungkin telah melewatkan sesuatu, karena saya melakukan ini di ponsel saya.Hanya satu byte lebih panjang
Ini bisa 18 byte jika saya bisa mengambil 1/0 sebagai string.
Cobalah online!
sumber
Java 8,
3127 byte-4 byte terima kasih kepada @ OlivierGrégoire .
Coba di sini.
sumber
"".format
)String.format
saya tahu ada cara yang lebih pendek, tapi saya pikir saya mungkin menggunakan variabel String terakhir kali ... Terima kasih. ;)05AB1E , 5 byte
Cobalah online!
sumber
31úð0:
!Ruby, 21 byte
Ya, ruang itu harus ada di sana ..: /
Di Ruby semuanya kecuali
false
dannil
benar; Cobalah online!sumber
Mathematica, 36 byte
Mathematica, 26 byte
Cobalah online!
sumber
Arang , 5 byte
Cobalah online! (Tautan ke versi verbose.)
Sebagai Charcoal mengerti
0
dan1
sebagaiTrue
atauFalse
, ini hanya mencetak 310
detik dan input (0
atau1
) sebagai string.sumber
True
, anehPython 2 ,
2625 byteBerkat Erik, Outgolfer karena telah menghemat satu byte!
Goes for the full program approach:
Cobalah online!
sumber
~~
dengan+
untuk -1. Setelah itu program lengkap tidak akan mahal lagi . ;)Tidak Diinginkan, Tidak Perlu, Oportunistik , 7 byte
Masukkan 1 atau 0 ke dalam register.
sumber
C, 26 byte
Gagasan yang hampir sama dengan solusi 1bluestone , tetapi dalam C lebih pendek, dan berfungsi dengan benar untuk setiap input integer:
Tentu saja, ini termasuk beberapa variabel / fungsi yang diketik secara implisit karena semua jawaban C-golf yang bagus lakukan ...
!!
Operator adalah cara terpendek untuk mengonversi nilai kebenaran apa pun ke1
dalam C (melalui negasi ganda,!
didefinisikan untuk mengembalikan salah satu1
atau0
).Uji dengan:
sumber
Haskell ,
3732 byteCobalah online!
Terima kasih @nimi untuk
-5
byte!sumber
show(fromEnum x)
bukannyalast(...)
. Pointfree bahkan lebih pendek:(('0'<$[1..31])++).show.fromEnum
.Bool
adalahEnum
, terima kasih!PHP, 28 byte
Simpan sebagai bool.php dan jalankan:
sumber
printf('%032d',$argv[1]);
(memerlukan-r
bendera).Ly ,
201513 byteEDIT: Disimpan 5 byte berkat ovs.
EDIT: Menyimpan 2 byte lainnya dengan mencetak 0 sebagai angka daripada karakter.
sumber
65*1+["0"o1-]nu
bekerjaOktaf,
1611 byteCobalah online!
Sebuah fungsi menangani yang
"00000000000000000000000000000001"
dianggap sebagai kebenaran dan"00000000000000000000000000000000\0"
kepalsuan.Penjelasan:
Dalam Oktaf, sebuah array dianggap sebagai falsey jika setidaknya salah satu elemennya nol. Elemen ke-33 dari string kedua adalah karakter dengan nilai ASCII dari 0 sehingga dapat dianggap sebagai falsey.
sumber
Java, 40 karakter, 40 byte
Ini mengambil string sebagai parameter, yang tidak benar (nilai java falsy / truthy dipaksa oleh OP untuk diwakili oleh boolean).
Cobalah secara Online!
Respons yang valid: Java, 60 karakter, 60 byte
Cobalah secara Online!
Saya tahu sudah ada jawaban Java yang lebih pendek dari yang ini, tapi tetap saja :)
sumber
return
pernyataan itu adalah bagian dari kode Anda, jadi bagian dari byte-count Anda. Tetapi jawaban Anda tidak memenuhi aturan: Anda harus mendapatkanboolean
masukan sebagai. "Truthy / falsy" diterjemahkan di Jawa sebagai salah satutrue
ataufalse
, dan tidak ada yang lain. Jadi Anda tidak bisa mendapatkanString
parameter input sebagai.;
). Juga, Anda dapat mempersingkat kode Anda seperti ini:c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}
. Thek+=c?1:0
adalah untuk mempersingkatk+(c?1:0)
.;
. Pernyataan membutuhkan titik koma. Lambda bukan pernyataan.Japt ,
1311 bytePenjelasan:
Menyimpan byte menggunakan konversi basis-2 bawaan!
Untuk memasukkan string 0s di depan
1
/0
, saya harus memasukkan1
dan0
ke dalam string. Cara khas untuk melakukan itu adalah1s
(3 byte). Tetapi karena kita hanya mengonversi 1s dan 0s, saya dapat menggunakan basis-2 built-in1¤
(2 byte).Input bisa dalam bentuk integer atau string.
0
dan""
palsu dalam Japt.Cobalah online!
Suite uji
sumber
C # (.NET Core) , 29 byte
OP mengatakan 1/0 dapat digunakan untuk truthy / falsey, sehingga dapat membuat
a
int dan menjadiC # tidak benar-benar memiliki kebenaran / kesalahan jadi saya tidak akan menggunakan jawaban ini.
Cobalah online!
sumber
Padleft
datang pada jumlah byte yang sama di sini.interpolated strings
bisa sangat berguna di sini:b=>$"{(b?1:0):D32}"
19 bytes
SAYA ,
109 byteCobalah online!
Penjelasan (codepage [dengan alasan di belakang karakter] / kode hex):
Saya tidak percaya ini mungkin tanpa ada dua argumen yang memerintahkan!
Sunting: Disimpan 1 byte dengan menggunakan bilangan prima alih-alih aritmatika untuk mendapatkan 31.
sumber
APL, 11 byte
Bagaimana?
1\⍨⊢
- ulangi 1 kali input - kembalikan array kosong pada nilai falsy1↑
- ambil item pertama¯32↑
- sejajarkan ke kanan dengan 31 angka nol⍕
- memformat sebagai stringsumber
⍕¯32↑⊢
harus bekerja∊⍕¨¯32↑⎕
sesuatu.J, 11 byte
Cobalah online!
bagaimana?
catatan: dalam J, boolean adalah 0 atau 1, juga dikenal sebagai "konvensi iverson," setelah ken iverson, pencipta J dan APL
sumber
":
ini diperlukan untuk bekerja - ini mengubah boolean menjadi string .