Catatan: bagian pertama dari tantangan ini berasal dari tantangan Martin Ender sebelumnya, Visualisasi Bit Weaving .
Kejahatan bahasa pemrograman esoterik memiliki operasi yang menarik pada nilai byte yang disebutnya "tenun".
Ini pada dasarnya adalah permutasi dari delapan bit byte (tidak masalah dari mana kita mulai menghitung, karena polanya simetris):
- Bit 0 dipindahkan ke bit 2
- Bit 1 dipindahkan ke bit 0
- Bit 2 dipindahkan ke bit 4
- Bit 3 dipindahkan ke bit 1
- Bit 4 dipindahkan ke bit 6
- Bit 5 dipindahkan ke bit 3
- Bit 6 dipindahkan ke bit 7
- Bit 7 dipindahkan ke bit 5
Untuk kenyamanan, berikut adalah tiga representasi permutasi lainnya. Sebagai sebuah siklus:
(02467531)
Sebagai pemetaan:
57361402 -> 76543210 -> 64725031
Dan sebagai daftar pasangan pemetaan:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Setelah 8
tenun, byte pada dasarnya direset.
Misalnya, menenun nomor 10011101
(yang ada 157
di basis 10) akan menghasilkan 01110110
(yang ada 118
di basis 10).
Memasukkan
Hanya ada 256
input yang valid, yaitu semua bilangan bulat di antara 0
dan 255
inklusif. Itu dapat diambil dalam basis apa pun, tetapi harus konsisten dan Anda harus menentukannya jika basis yang Anda pilih bukan basis sepuluh.
Anda tidak boleh memasukkan input dengan benar.
Keluaran
Anda harus menampilkan hasil dari bit weaving, dalam basis apa pun, yang juga harus konsisten dan ditentukan jika bukan basis sepuluh.
Anda dapat mem-pad-out output Anda.
Terkait: Visualisasikan Bit Weaving
sumber
Jawaban:
Python 2.7,
44-> 36 bytesumber
|
bukan+
dan menutupi setelah bergeser maka Anda dapat mencukur 8 byte dengan menghapus tanda kurung.<strike></strike>
skor byte lama Anda untuk menunjukkan kemajuan :-)Evil, 3 karakter
Cobalah online!
Input dalam basis 256, (misalnya ASCII), misalnya untuk memasukkan digit 63, masukkan ASCII 63 yang
?
.Penjelasan:
Ini jadi terasa seperti kecurangan.
sumber
CJam,
1512 byteTerima kasih kepada FryAmTheEggman karena telah menghemat 3 byte.
Input pada basis 2. Output juga pada basis 2, diisi hingga 8 bit dengan nol.
Uji di sini.
Penjelasan
sumber
MATL , 14 byte
Input dalam desimal. Output adalah biner nol-empuk.
Cobalah online!
Penjelasan
sumber
Jelly, 11 byte
Terjemahan dari jawaban CJam Martin. Coba di sini.
sumber
JavaScript (ES6), 30 byte
sumber
J, 12 byte
Menggunakan permutasi bawaan
A.
dengan indeks permutasi6532
yang sesuai dengan operasi penenaman bit.Pemakaian
Input adalah daftar digit biner. Output adalah daftar nol-digit 8 digit biner.
Penjelasan
sumber
Retina , 39 byte
Input dan output dalam basis 2, output dibiarkan berlapis.
Cobalah online!
Penjelasan
Ini hanya menyisakan input dengan nol. Itu
+
menunjukkan bahwa tahap ini diulang sampai string berhenti berubah. Ini cocok dengan awal string selama ada kurang dari 8 karakter di dalamnya, dan sisipkan a0
di posisi itu.Sekarang untuk permutasi yang sebenarnya. Solusi lurus ke depan adalah ini:
Namun itu sangat panjang dan berlebihan. Saya menemukan formulasi permutasi yang berbeda yang jauh lebih mudah untuk diterapkan di Retina (
X
mewakili pertukaran bit yang berdekatan):Nah, itu jauh lebih mudah untuk diterapkan:
Ini hanya cocok dengan dua karakter dan menukar mereka. Karena pertandingan tidak tumpang tindih, ini menukar keempat pasangan.
Sekarang kami ingin melakukan hal yang sama lagi, tetapi kami ingin melewatkan karakter pertama. Cara termudah untuk melakukannya adalah dengan meminta agar kecocokan tidak dimulai pada batas kata
\B
.sumber
kode mesin x86, 20 byte
Dalam hex:
Ini adalah prosedur mengambil input dan mengembalikan hasil melalui register AL
Membongkar
sumber
C (makro tidak aman), 39 byte
C (fungsi), 41 byte
C (program penuh), 59 byte
(kembali melalui kode keluar, jadi panggil dengan
echo "157" | ./weave;echo $?
)C (program lengkap standar-compliant), 86 byte
C (program lengkap standar-compliant tanpa peringatan kompiler), 95 byte
C (program penuh standar-compliant tanpa peringatan kompiler yang dapat membaca dari argumen atau stdin dan termasuk pengecekan error / range), 262 byte
Kerusakan
Hampir sama dengan banyak jawaban yang ada: bit-shift semua bit ke tempatnya dengan menggunakan
<<2
(*4
),<<1
(*2
),>>1
(/2
) dan>>2
(/4
), lalu|
semuanya bersamaan.Sisanya tidak lain hanyalah rasa berbeda dari pelat ketel.
sumber
Mathematica, 34 byte
Fungsi anonim. Mengambil daftar digit biner, dan menampilkan daftar empuk 8 digit biner.
sumber
PowerShell v2 +, 34 byte
Terjemahan dari jawaban @ LegionMammal978 . Program lengkap. Mengambil input melalui argumen baris perintah sebagai angka biner, output sebagai array biner, nol-empuk.
The
"{0:D8}"-f
porsi menggunakan standar format numerik string untuk tambahkan0
ke input$args
. Karena-f
operator mendukung pengambilan array sebagai input, dan kami telah secara eksplisit mengatakan untuk menggunakan elemen pertama{0:
, kami tidak perlu melakukan hal yang biasa$args[0]
. Kami merangkum string itu dalam parens, lalu mengindeksnya[1,3,0,5,2,7,4,6]
dengan tenun. Array yang dihasilkan ditinggalkan di pipeline dan output implisit.Contohnya
(default
.ToString()
untuk array memiliki separator sebagai`n
, jadi itu sebabnya output dipisahkan baris baru di sini)sumber
Matlab,
494844 byteMengambil input sebagai string nilai biner. Output empuk. 4 byte disimpan berkat @Luis Mendo.
Penjelasan:
sumber
V , 17 byte
Cobalah online!
Ini membutuhkan input dan output dalam biner. Sebagian besar jumlah byte berasal dari padding dengan 0's. Jika mengisi input diizinkan, kami bisa melakukan:
Berkat solusi Martin untuk metode bertukar karakter, misalnya:
Penjelasan:
sumber
05AB1E,
1412 bytePenjelasan
Input ada di basis 10.
Output di basis 2.
Pinjam trik permutasi dari jawaban CJam MartinEnder
Cobalah online
sumber
Pyth, 19 karakter
Input dan output adalah basis 2.
Jauh dari ahli Pyth, tetapi karena tidak ada orang lain yang menjawabnya, saya mencobanya.
Penjelasan:
sumber
Labirin ,
2726 byteInput dan output pada basis 2. Output diisi.
Cobalah online!
sumber
UGL , 50 byte
Cobalah online!
Div-mod berulang kali dengan 2, lalu
%
swap dan@
roll untuk mendapatkannya dalam urutan yang benar.Input dalam basis-sepuluh, output dalam basis-dua.
sumber
vi, 27 byte
Dimana
<ESC>
mewakili karakter Escape. I / O dalam biner, output diisi. 24 byte dalam vim:sumber
<ESC>
perlu backticks di sekitarnya. Saya akan mengedit, tapi saya tidak tahu 4 byte lagi untuk diubah ...Sebenarnya, 27 byte
Cobalah online!
Program ini melakukan input dan output sebagai string biner (output bernilai nol hingga 8 bit).
Penjelasan:
sumber
JavaScript, 98 Bytes
Input diambil dalam basis-2 sebagai string, output juga basis-2 sebagai string
sumber