Tugas
Diberikan string input dari satu atau lebih karakter ASCII dengan titik codep antara 0 dan 128 (eksklusif), lakukan hal berikut:
- Konversi setiap karakter menjadi kode ASCII 7-bitnya (jika kode ASCII kurang dari 7 bit, masukkan nol bit di depan)
- Menggabungkan semua bit (ini menghasilkan
7*n
bit di manan
jumlah karakter) - Untuk setiap bit dalam bitstream ini, cetak 1 jika berbeda dari bit sebelumnya, dan cetak 0 sebaliknya. Bit keluaran pertama selalu 1.
Contoh
Memasukkan:
Hi
Keluaran:
11011001011101
Penjelasan:
String "Hai" memiliki kode ASCII
72 105
yang dalam bit adalah:
1001000 1101001
Dan indikator bit transisi:
11011001011101
Ini golf kode. Hitungan byte terendah menang.
Uji Kasus
Uji kasus 1:
Hello World!
110110010101110011010101101010110001110000111110000110000001011101101010101100110001
Uji kasus 2:
%% COMMENT %%
1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111
Test case 3 (dikreditkan ke Luis Mendo):
##
11100101110010
Selamat kepada Luis Mendo untuk solusi terpendek dengan 9 byte di MATL!
##
(0
sedikit terkemuka ; beberapa jawaban saat ini gagal karena itu)Jawaban:
MATL , 9 byte
Cobalah online!
Penjelasan
sumber
Python 2 , 58 byte
Cobalah online!
sumber
Japt
-P
, 11 byteMengambil keuntungan dari fakta bahwa spasi dapat dipaksa
0
dalam JavaScript ketika mencoba melakukan matematika atau, dalam hal ini, operasi bitwise di atasnya.Cobalah atau jalankan semua test case
sumber
0100000
. Juga% karakter (37) adalah0100101
CJam , 21 byte
Cobalah online!
Penjelasan
Menampilkan tumpukan dengan input sampel
5
:Untuk melihat apakah bit berbeda dari bit sebelumnya, kita melakukan vektor (elemen-bijaksana) antara bit array dan bit array tanpa elemen pertama. Kami juga menghapus bit terakhir dari hasil, karena selalu bit terakhir dari array yang lebih panjang tidak berubah.
sumber
APL (Dyalog Unicode) , 16 byte SBCS
Program lengkap. Meminta string dari stdin.
Cobalah online!
⍞
meminta input ("kutipan di konsol")11⎕DR¨
ubah setiap karakter menjadi bit-Boolean D ata R representasi1↓¨
lepaskan bit pertama dari masing-masing∊
ϵ daftar (ratakan)2≠/
perbedaan berpasangan1,
tambahkan satusumber
Jelly , 12 byte
Cobalah online!
sumber
Arang , 25 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Konversikan semua karakter menjadi biner dan pad dengan panjang 7 dan kemudian cetak, tetapi biarkan kursor di atas digit terakhir.
Ulangi sampai kursor melebihi digit pertama.
Hitung apakah digitnya berbeda dan timpa setiap digit dengan selisihnya.
Timpa digit pertama dengan a
1
.sumber
PowerShell ,
735649 byteCobalah online!
-17 byte berkat mazzy :)
sumber
Ruby
-p
,6857 byte-11 byte dengan tanpa malu-malu mencuri metode yang digunakan oleh solusi Python xnor .
Cobalah online!
Solusi asli:
Cobalah online!
sumber
Oktaf ,
3630 bytePerbaiki terima kasih kepada Luis Mendo
-2 byte berkat Sanchises
Cobalah online!
sumber
de2bi
.Python 2 , 104 byte
Cobalah online!
Menusuknya dengan cepat.
sumber
a*128+ord(c)
! Tapi bukankahreduce
danlambda
jenisnya mahal?Dart ,
213168 byteSatu kalimat sebelumnya
Cobalah online!
Verbositas ini dan kurangnya in built mudah benar-benar membunuh yang ini. Masih berhasil menarik satu liner sekalipun.
sumber
Stax ,
1312 byteJalankan dan debug itu
Jika dijamin bahwa semua karakter input memiliki bit ke-7, seperti yang diasumsikan oleh beberapa jawaban, itu dapat dilakukan dalam 10 byte
sumber
Kotlin , 182 byte
Cobalah online!
Semoga saya bisa meningkatkan ini segera, saya merasa harus ada beberapa tempat untuk perbaikan tetapi saya tidak bisa berpikir sekarang
sumber
Perl 5
-p
, 60 byteCobalah online!
sumber
C (gcc (MinGW)), 90 byte
Membutuhkan penyediaan kompiler
itoa()
.sumber
Ruby
-p
, 50 byteCobalah online!
Penjelasan
Baris pertama, sama dengan jawaban Value Ink :
Baris kedua:
Di Ruby Anda dapat menggunakan interpolasi di Regexp literal, misalnya
/Hello #{name}/
, dan untuk variabel yang dimulai dengan$
atau@
Anda dapat menghilangkan kurung kurawal, jadi jika misalnya$&
adalah"0"
kemudian grawlixy yang/#$&$/
menjadi/0$/
.sumber
K (ngn / k) ,
913 byteLarutan:
Cobalah online!
Penjelasan:
Catatan:
sumber
#
misalnya (output hanya memiliki 6 bit)Emojicode , 263 byte
Cobalah online di sini.
Tidak Disatukan:
sumber
JavaScript (V8) ,
15095 byte-55 terima kasih kepada @dana
Cobalah online!
sumber
Python3.8 , 72 byte
Larutan:
Penjelasan:
Sejak Python 3.8 memperkenalkan ekspresi penugasan (daripada pernyataan penugasan standar), saya ingin menggunakannya dalam pemahaman daftar yang perlu mengingat item terakhir. Ini bukan cara terbaik untuk melakukan ini tetapi menunjukkan metode yang menarik dalam menggunakan ekspresi penugasan.
Kode menciptakan fungsi lambda yang mengambil argumen yang diperlukan yang merupakan string untuk dikonversi. Saat dipanggil, fungsi melanjutkan sebagai berikut. Setiap karakter dalam a dikonversi ke kode karakternya yang ditambahkan ke 128 untuk berurusan dengan karakter 6-bit (representasi biner akan selalu menjadi 8 bit dan kita dapat memotong bit pertama). Nomor ini dikonversi ke biner dan header (0x) dan 1 awal dari menambahkan 128 dipotong. String baru ini kemudian bergabung menjadi satu string yang lebih besar.
Untuk setiap karakter dalam string baru ini (yang berisi representasi 7-bit teks yang disatukan), diperiksa jika karakternya sama dengan karakter sebelumnya. Apa yang terjadi dengan karakter pertama? Karakter hasil pertama harus selalu "1" jadi kita hanya perlu memastikan bahwa apa pun yang ada di variabel karakter terakhir bukanlah "1" atau "0". Kami melakukan ini dengan menggunakan kembali parameter asli sekarang karena kami tidak menggunakannya lagi. Ini mungkin menjadi masalah jika string asli adalah satu "0" (satu "1" kebetulan bekerja) tetapi kita akan mengabaikannya.
Selama perbandingan, karakter sebelumnya dievaluasi terlebih dahulu sehingga ketika kami menggunakan ekspresi penugasan untuk mengatur variabel karakter sebelumnya ke karakter saat ini, itu tidak mempengaruhi evaluasi ekspresi perbandingan.
Perbandingan menghasilkan Benar atau Salah yang juga dapat digunakan sebagai 1 atau 0 masing-masing dalam Python, sehingga mereka digunakan untuk mencari "1" atau "0" dalam sebuah string
sumber
bin(ord(i)+128)[3:]
->f"{ord(i):07b}"
Tcl ,
215167140 byteCobalah online!
Menggunakan shift-by-one dan eksklusif-atau untuk mendeteksi transisi. Membawa lsb dari karakter saat ini ke msb dari karakter selanjutnya. Menggabungkan output untuk setiap karakter dengan menggabungkan daftar yang dikembalikan oleh lmap.
Menggunakan lambdas dengan argumen default untuk menyimpan byte pada inisialisasi dan perintah berulang.
Sangat bergantung pada urutan operasi. Bekerja untuk string kosong.
sumber
05AB1E (warisan) , 12 byte
Menggunakan versi lawas 05AB1E, karena
j
secara implisit menggabungkan string, yang membutuhkan eksplisitJ
setelahj
dalam versi baru 05AB1E.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Haskell , 137 byte
Cobalah online!
Masalah terbesar di sini adalah mengubah boolean (hasil dari XOR) menjadi '0' / '1'.
sumber
Python 3 ,
8884 byteCobalah online!
Saya merasa bahwa tugas itu harus dihindari, tetapi tidak bisa memikirkan cara untuk melakukan itu.
Memperbarui:
sumber
PHP , 90 byte
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 80 byte
Cobalah online!
sumber
JavaScript (V8) , 73 byte
Cobalah online!
sumber