Rekan kerja saya dan saya bekerja pada perangkat lunak lama yang kadang kami benci. Setiap kali Anda menjalankannya, pernyataan debug datang ke mana-mana, dan tidak pernah ada jaminan bahwa apa pun akan berfungsi. Motivasi untuk putaran kode golf ini datang dari rekan kerja saya yang mengatakan hal berikut tentang perangkat lunak kami .
"Ini seperti setiap kali Anda menjalankan program ini, Anda menyetujui beberapa ketentuan layanan yang mengatakan bahwa setiap bit ke-17 pada hard drive Anda akan berubah menjadi 1"
Sasaran: Menulis program yang akan membuat salinan file yang tepat dan mengubah setiap bit ke-17 file teks menjadi 1
- Anda TIDAK boleh mengubah SETIAP bit file ke 1. yaitu program Anda harus menunjukkan beberapa kecerdasan bahwa itu hanya menargetkan setiap bit ke-17
- Anda TIDAK boleh menulis ke file asli dengan cara apa pun
- The Winner adalah penyampaian program yang terkecil di akhir bulan
Bersenang senanglah dengan yang satu ini! Pergilah!
code-golf
kode terpendek dalam byte yang menang. Acode-challenge
membutuhkan sistem penilaian yang ditentukan dengan baik. 2. Mengubah setiap bit ke-18 hard drive menjadi 1 hanya dimungkinkan dengan menulis langsung ke drive. Ini tidak dapat dilakukan dengan membuat dan / atau memodifikasi file. 3. Melakukan ini akan membuat seluruh drive tidak dapat digunakan, sehingga solusi yang sesuai akan merusak. Saya tidak tahu seberapa baik komunitas akan menerima permintaan untuk menulis malware ...:/
Jawaban:
CJam, 22 byte
Cobalah online.
Menyentuh setiap bit ke-17, menghitung dari yang terakhir.
Saya telah menggunakan STDIN dan STDOUT karena CJam tidak memiliki file I / O. Jika tidak diizinkan, program dapat dibungkus dengan skrip Bash dengan biaya 24 byte tambahan:
Bagaimana itu bekerja
sumber
Perl 59
substitusi regex pada string bit:
pemakaian:
sumber
b
danB
dipack
templatC, 125
Asumsikan bilangan bulat big-endian dan 16-bit .
Bekerja dengan menerapkan bitwise-OR pada setiap dua byte.
File input adalah
y
, outputz
.Tidak disatukan
sumber
00000000 00000001 00000000 00000000 10000000 00000000
dengan demikiana
harus nol pada titik-titik tertentu. Mesin harus menggunakan big endian (atau yang Anda miliki00000000 10000000
alih - alih10000000 00000000
, yang akan memberikan nilai yang salah).c = __builtin_bswap16(c);
dikoreksi itu.Python 2, 112 byte
Ini menetapkan setiap bit big-endian ke-17, mulai 17 dari awal. Tidak menggunakan perpustakaan. Ia bekerja dengan mengonversi file input ke
n
integer bit- gigantic dan ORING dengan bitwise2**n/(2**17 - 1) == 0b10000000000000000100000000000000001…
.sumber
C - 139
Membaca dari file bernama "i", output ke file bernama "o".
Dengan jeda baris:
Menghitung bit input dan kemudian menggunakan bitmask mengambang untuk mengatur setiap bit ketujuh belas.
sumber
Jawa - 247
Menggunakan a
BitSet
dan loop sederhana alih-alih menangani / menutupi byte secara manual. Tentu saja ini java, boilerplate adalah setengah dari program, jadi tidak terlalu pendek.Tetap saja, bukan yang terakhir! : D
Versi tanpa-gulir:
sumber
Python - 98 byte
Baca dari saya, tulis ke o. Menggunakan perpustakaan bitarray https://pypi.python.org/pypi/bitarray
ungolfed
sumber
a[::17]=1
?from bitarray import*
dana=bitarray()
.Cobra - 308
Setiap kali saya melakukan salah satu dari tantangan 'memanipulasi bit individu sesuatu' ini, saya berharap Cobra atau .NET standard library memiliki
binary string => integer
konverter.sumber
Javascript (+ HTML5), 282
Mungkin bukan yang terpendek, tetapi ramah pengguna: D
Ini lintas browser, tetapi tampaknya chrome adalah satu-satunya yang memungkinkan ketika file html adalah file lokal (= akses dengan
file://...
). Untuk browser lain, Anda harus meletakkannya di server web.File keluaran harus disimpan ke direktori unduhan default, mungkin dengan prompt file (tergantung pada konfigurasi Anda).
Versi tidak disatukan:
sumber
Python 3 - 187 byte
Membaca dari
i
dan menulis keo
.Kode:
Tidak Disatukan:
sumber
Python 3 - 103 karakter
Ubah
f
ke jalur file yang ingin Anda baca dano
ke jalur file yang ingin Anda tulis.sumber