Saya menulis beberapa teks, tetapi terlihat terlalu profesional. Saya ingin membuatnya terlihat seperti saya benar-benar lelah ketika saya menulisnya. Saya ingin Anda memasukkan beberapa kesalahan ketik.
Tantangan Anda adalah mengambil satu baris teks sembarang, dan menambahkan kesalahan ketik. Ini berarti bahwa untuk setiap karakter, akan ada peluang 10% untuk itu diketikkan.
Definisi "typofied" adalah Anda harus memilih (secara acak) salah satu dari yang berikut:
- Gandakan karakter.
- Hapus karakter.
Geser karakter satu ruang keyboard. "Keyboard" didefinisikan sebagai:
qwertyuiop asdfghjkl zxcvbnm
Untuk perubahan karakter, Anda harus naik satu spasi, turun, kiri, atau kanan. Ini harus dipilih secara acak. Opsi shift hanya berlaku untuk karakter alfabet. Kasing harus dilestarikan. Berhati-hatilah dengan kasus tepi, seperti
m
!
Definisi "acak" adalah bahwa hasilnya tidak dapat diprediksi (dengan melihat hasil sebelumnya). Misalnya, Anda tidak dapat mengetik setiap karakter kesepuluh. Selanjutnya, keacakan harus memiliki distribusi yang merata. Misalnya, Anda tidak dapat melakukan 30% duplikat, 30% menghapus, dan 40% shift; itu harus menjadi 1/3 kesempatan untuk masing-masing (1/2 untuk masing-masing jika itu adalah karakter nonalphabetic).
Input contoh:
This is some correct text. It is too correct. Please un-correctify it.
Contoh output:
This iissome xorreect tex.. It is too coteect. Please jn-corretify it.
Ini adalah kode-golf , jadi kode terpendek dalam byte akan menang.
Jawaban:
GolfScript, 120 karakter
Kode dapat diuji di sini .
sumber
C, 358 byte
(Hanya ada tiga baris kode, tapi saya sudah putus baris 3 untuk keterbacaan)
Array string di awal daftar kemungkinan kunci yang berdekatan untuk setiap huruf alfabet. Saya harus menggandakan "O" (berdekatan dengan "P") untuk menghindari perhitungan
random()%1
ketika memilih karakter yang digeser.Uji coba:
Memperbarui:
Inilah versi kode sumber yang diperluas dan dikomentari:
sumber
char*s[26]
. Kompilator harus dapat mengetahuinya sendiri.continue
denganelse
s. (tinggalkan;
tempat yang pertama).Ruby, 168
Pengambilan sedikit lebih singkat menggunakan strategi pengindeksan larik:
Versi ekspresi reguler asli (184):
sumber
Kernel#putc
untuk mencetak output karena itu tidak memerlukan parens, menyelamatkan saya satu karakter. Tentu sajaputc
hanya mencetak karakter pertama, dan string output kadang-kadang bisa dua karakter. Kesalahan bodoh. Coba versi ini!Python, 251
Teknik pencarian yang sangat sederhana, untuk sesaat saya pikir mungkin lebih murah untuk menyandikan keyboard sebagai grafik yang tidak terarah tetapi overhead untuk membuat tipe seperti itu di Python terbukti penghalang. Karena fungsi acak Python memiliki nama yang terlalu deskriptif, saya menggunakan
choice()
secara eksklusif, menamainya menjadiw
. Peluang kesalahan 10% ditangani diw([z]*9+[...])
mana sembilan salinan karakter yang tidak diketik ada dalam daftar dengan satu kesalahan ketik.-16 karakter - terima kasih grc, +2 karakter (dan kebenarannya, bernilai lebih dari 2 karakter) - terima kasih Dhara
sumber
d="SQ VNH XVF...".split()
, hapus spasi setelahnyaprint
, dan gantiif
/else
dengan([...]+[...])*z.isalpha()
. Juga, Anda tidak perlu variabeld
karena Anda hanya menggunakannya sekali.w=__import__('random').choice
(setidaknya dalam Python afaik 3).input()
danprint()
untuk menyimpan 2 karakter.C #, 320 byte (360 byte dengan pembungkus program)
Termasuk dukungan untuk huruf besar "bergeser".
Sebagai fungsi (320 byte):
Sebagai program yang membaca sebaris teks (360 byte):
Sampel keluaran input:
sumber
Func<int,int> n=x=>r.Next(x);
ide bagus. Andai saja kompiler dapat menyimpulkan tipe delegasi ...JS,
303,288,275,273, 274 (perbaikan bug)Algoritma untuk keylip:
Versi Non-Golf per permintaan:
sumber
;
. Itulah satu-satunya cara untuk mengatakan bahwa ia sebenarnya memiliki 274 byte. Selain itu, ini hanya berfungsi pada versi Javascript dan JScript yang lebih baru.Perl,
278239197169162156151149Jalankan dengan
-p
, kemudian 148 +1 = 149 byte. Misalnya:Tidak golf, kurang lebih:
Pada awalnya saya berpikir bahwa memilih elemen secara acak dalam array (dari 26 dari mereka dengan panjang yang berbeda) secara statistik lebih 'bersih' (yaitu acak), tapi mungkin itu salah. (Lihat versi sebelumnya.) Upaya terakhir ini adalah, mengikuti pemimpin :-), melangkah sepanjang string dengan -1,1, -11,11 (secara acak) dan ulangi hingga langkah yang valid.
Sunting: Berkat bantuan tobyink dan optimisasi lainnya, kami berhasil mengurangi ukuran kode secara signifikan.
Pendekatan terakhir menggunakan beberapa trik dengan pencarian regexp untuk menemukan langkah yang valid di sepanjang string substitusi, menghilangkan pemeriksaan manual.
Suntingan lain: mati 5 byte karena kita tidak perlu integer untuk indeks array + trik kecil dengan indeks array ilegal. Saya mencoba trik yang sama dengan
[-4+rand@-]
(yaitu indeks negatif) dan menyingkirkan satu elemen daftar,'',
tetapi tidak menyimpan apa pun.Sunting: Kembali ke kesederhanaan - mengganti kondisi
~~rand 10
denganrand>.1
menghemat 2 byte ...sumber
sub i
. Anda tidak menggunakan ketat, jadi'QWERTYUIOP0ASDFGHJKL000ZXCVBNM'
dapat diberikan sebagai kata kunci (menyimpan dua karakter tanda kutip). Demikian pula, bisa'Z'
(meskipun ini berarti Anda perlu menambahkan spasi di antara itu dangt
, jadi itu hanya menyimpan satu karakter). Total penghematan: 4 karakter.($n=i$&=~/\pL/?3:2)?--$n?do{...}:$&x2:''
dapat ditulis ulang sebagai($&x2,'',do{...})[i$&=~/\pL/?3:2]
. Ini berarti bahwa evaluasi tidak malas (itu menghitung ketiga cara karakter dapat diganti sebelum memutuskan teknik substitusi), tetapi berhasil, dan menyimpan tujuh karakter lain dengan perhitungan saya.gt'Z'
- itu bisa dibatalkan. Dengan semua perubahan ini, Anda harus bisa mendapatkannya hingga 184 karakter.$s
menjadi$,
(variabel bawaan ini adalah pemisah bidang untukprint
, tetapi Anda tidak mencetak beberapa bidang di mana saja, jadi penggunaan bawaan itu tidak relevan, menjadikan variabel matang untuk digunakan kembali), maka Anda dapat menghilangkan ruang putih dalam$s x3
membuatnya adil$,x3
.PHP, berfungsi dengan 368 byte
Ini usahaku.
Ini beberapa "frankencode", tetapi agak berhasil.
Kode yang lebih "dapat dibaca":
Satu-satunya perbedaan antara 2 kode adalah bahwa satu memiliki banyak tab dan baris baru.
Itu tidak menghasilkan jenis "kesalahan" yang sama persis, tetapi menghapus atau mengganti char menggunakan kondisi tersebut.
Anda dapat mencobanya di http://writecodeonline.com/php/ .
Salin dan tempel kode ini:
Setelah pengujian, tolong, beri tahu saya jika itu adalah jawaban yang valid.
sumber
C #, 581 byte
dan dalam format yang lebih mudah dibaca:
sumber
PHP,
326320318315 karakterDan versi yang lebih mudah dibaca dan dikomentari:
Masih bisa ditingkatkan, saya kira.
-2, -3 terima kasih kepada Ismael Miguel
sumber
(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)?2:1))
perubahan(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?
dan Anda akan menghemat 2 byte.($e?0:32)
, mengganti dengan32*!!$e
(perhatikan kurangnya tanda kurung) simpan 2 byte. Jika$e
SELALU boolean, Anda dapat melakukannya32*!$e
dan Anda menghemat 3 byte. Ini akan berhasil karena php memiliki prioritas aritmatika. Ini berarti bahwa penggandaan dan pembagian dibuat sebelum ada penambahan dan pengurangan.Java (475 bytes)
Ini adalah percobaan saya dalam bahasa verbose yaitu Java. Mendapatkan nomor acak cukup lama di Jawa, dan pemetaannya tidak terlalu efisien. Mungkin bisa ditingkatkan.
Pemakaian:
Tanpa kompresi, pujian ditambahkan:
sumber
AutoHotkey 441 byte
Input harus diberikan sebagai parameter baris perintah, output diberikan sebagai pesan kesalahan.
Versi golf
Versi yang tidak di-golf dan dianotasi (perbedaannya adalah bahwa versi ini memiliki lebih banyak ruang putih dan penugasan variabel berada di baris terpisah untuk dibaca.)
sumber