Terinspirasi oleh komik XKCD berikut:
Dalam "Work It" Missy Elliot, bagian dari paduan suara berbunyi sebagai berikut:
Is it worth it, let me work it
I put my thing down, flip it and reverse it
Mengingat hal itu, saya mengusulkan tantangan golf kode berikut:
Buat kode yang sesuai, dalam urutan:
- Mengambil input ASCII 8-bit dari STDIN; mis.
n
(Hex 6E, atau Bin 01101110) - Menggeser 8 bit setiap byte dari level 1 bit (saya percaya ini disebut pergeseran bitwise ke bawah), misalnya
01101110
menjadi00110111
("letakkan barang saya"); - Menghindari bit setiap byte, misalnya
00110111
menjadi11001000
("flip it"); - Membalik bit untuk setiap byte, misalnya
11001000
menjadi00010011
("membalikkannya"); - Jika nilai byte kurang dari 32, maka lakukan
(95 + [byte value])
, atau dengan kata lain(126-(31-[byte value]))
, pada byte sebelum mengonversi kembali ke ASCII ... Jika nilai byte masih kurang dari 32, ulangi langkah 5 - Jika nilai byte lebih besar dari 126, maka lakukan
([byte value] - 95)
, atau dengan kata lain(32+([byte value]-127))
, pada byte sebelum mengkonversi kembali ke ASCII ... JIKA nilainya masih lebih besar dari 126, ulangi langkah 6. - Tampilkan string yang baru dikonversi sebagai ASCII.
Contoh kode ini dalam aksi:
(Masukan, apakah itu layak?)
workit missy
("missy" menjadi input, "workit" adalah fungsinya)
Sekarang di belakang layar ...
(biarkan saya bekerja ... Menjadi biner)
01101101 01101001 01110011 01110011 01111001
(Letakkan barang saya ... Bitwise)
00110110 00110100 00111001 00111001 00111100
(... Balikkan ...)
11001001 11001011 11000110 11000110 11000011
(... Dan balikkan!)
10010011 11010011 01100011 01100011 11000011
(Dikonversi kembali ke Desimal)
147 211 99 99 195
(Lakukan matematika yang diperlukan)
147-95 211-95 99 99 195-95 => 52 116 99 99 100
(Konversi kembali ke ASCII dan tampilkan, output)
4tccd
Aturan
- Kemenangan kode terpendek ... sesederhana itu ...
- Input dapat melalui fungsi, dengan prompt atau apa pun yang berfungsi untuk Anda, selama Anda dapat membuat Aturan 1 "berfungsi" untuk Anda ...;)
- Saya tidak mengejar reversibilitas, selama Anda dapat membuat kode melakukan apa yang saya minta, saya akan senang ...
Semoga berhasil!
sumber
0 1 1 0 1 1 0 1
dan0 1 1 0 1 0 0 1
untukmi
P
berubah menjadi nilai byte235
dan mengurangkan95
daun Anda dengan140
. Masih tidak patut dicetak. Atau apakah saya salah paham?Jawaban:
APL
5045Mengambil input pada keyboard, misalnya:
sumber
GolfScript
433835Penjelasan: Untuk setiap karakter dalam string, kami akan melakukan hal berikut:
Pemakaian:
Terima kasih atas bantuan dari PeterTaylor.
sumber
2base{0\+.,9<}do
itu512+2base(;
. Perhatikan juga bahwa jika tujuannya hanya untuk mendapatkan output yang benar, Anda dapat menyusun ulang operasi, jadi{!}%
Anda tidak perlu hanya~
input sebelum konversi basis (dan kemudian ganti512+
dengan511&
).2/
sebagai sedikit pergeseran maka Anda masih dapat menggeser sedikit, lalu~
, lalu konversi basis ...K,
6858.
sumber
J - 61
sumber
J,
5554 karaktersumber
Ruby, 115
Entri ini panjangnya tidak kompetitif. Jadi saya akan pergi dengan, "tetapi Anda bisa membacanya!" :-P
Baca dari
stdin
:sumber
Python 2.7, 106
Jawaban lain yang agak panjang, tapi hei ini percobaan pertama saya:
Dimodifikasi berdasarkan dari Darren Stone dan komentar grc di bawah ...
sumber
a:
.chr
ekspresi dengan ini selama tabungan 1-char:chr(x-(95,(-95,0)[x>32])[x<126])
.print'\b%c'%(x+95*((x<32)-(x>126))),
Python 2.7 - 73
86Berkat perubahan aturan saya menemukan cara yang lebih sederhana untuk melakukan ini semua menggunakan manipulasi biner dan integer. Ini menghemat ruang lebih dari Quirlioms dengan tidak memerlukan variabel sementara:
Dan dalam bentuk penjelasan:
sumber