Tantangan:
Baca input (dalam rentang ASCII yang terlihat) dan output dengan beberapa modifikasi:
- Dalam setiap set 10 karakter input secara acak (50/50):
- ganti satu karakter * (dengan acak ** satu dalam rentang ASCII yang terlihat) (mis.
lumberjack
menjadilumbeZjack
) - atau hapus satu karakter (mis.
lumberjack
menjadilmberjack
)
- ganti satu karakter * (dengan acak ** satu dalam rentang ASCII yang terlihat) (mis.
* Jika set kurang dari 10 karakter, Anda tidak perlu memodifikasinya, tetapi Anda bisa.
** Karakter dapat sama dengan satu input, asalkan masih acak.
Contoh:
Input: Go home cat! You're drunk!
Output: Go hom cat! YouLre drunk!
(hanya sebuah contoh, karena output bisa acak, jangan gunakan sebagai test case)
Aturan:
- golf kode , paling tidak karakter yang menang!
Jawaban:
Pyth,
2725 byteTest suite tersedia di sini.
Terima kasih kepada Maltysen karena telah memangkas 2 byte.
Penjelasan
Seperti yang sering terjadi, saya merasa bahwa ini adalah metode yang naif dan dapat ditingkatkan. Biasanya saya menemukan sesuatu yang jelas saat mengetik penjelasan tetapi tidak ada yang melompat keluar pada saya saat ini.
sumber
OC\¾
adalah jumlah byte yang sama denganO190
, dan menugaskan K untuk menghapus char tidak menghemat ruang juga.*> <> ,
44465250 byteCoba di sini!
Ini menggunakan karakter ascii dekat / di atas ruang untuk karakter acak. Ini selalu mengedit karakter ke-6, kecuali itu adalah akhir dari string dan panjang string itu bukan kelipatan 10. Ini memiliki peluang 50% untuk menghapus karakter ke-7 daripada mengedit ke-6.
Memasukkan
Keluaran
Sunting:
Jawaban ini mungkin tidak selalu dalam rentang ascii yang terlihat, diedit ...Tetap.Sunting2:
Tidak melihat perlu ada peluang 50/50 untuk menghapus karakter, mengedit lagi ...Saya percaya semuanya sudah beres sekarang :).sumber
Perl 6 ,
7867 byteCobalah
Penjelasan:
sumber
Pyth - 21 byte
Cobalah online di sini .
sumber
Python 3 , 75 byte
75-byte menerapkan transformasi ke karakter pertama dari setiap grup, dan hanya mengambil dari 2 karakter acak, seperti pada jawaban Jelly (yang diizinkan OP):
Cobalah online!
Ini adalah fungsi rekursif yang, setiap iterasi, tidak menambahkan apa-apa
'a'
,, atau'b'
, dan kemudian menyebut dirinya sendiri dengan 10 karakter pertama yang dipotong. Sirkuit pendek iterasi terakhir dis and
(string kosong falsy), menghindari rekursi tak terbatas.Hasil dari semua panggilan terpisah kemudian digabungkan, dan dikembalikan ke konteks yang disebut fungsi.
120 byte
Tentu saja, itu terasa seperti kecurangan, jadi inilah yang benar-benar acak:
Cobalah online!
sumber
Jelly ,
15 1413 byte 13 karakterTryItOnline!
Mengganti atau menghapus yang pertama dari setiap sepuluh karakter termasuk yang dari 1-9 terakhir jika ada potongan seperti itu. Memilih dari itu, diakui kecil, subset dari karakter:
1
;2
.Bagaimana?
Untuk memilih dari semua ASCII yang dapat dicetak, bukan hanya
1
dan2
(masih mengganti atau menghapus karakter pertama dari setiap chunk) dalam 21 byte:Untuk versi yang sepenuhnya acak (50/50 menghapus / mengganti, ASCII acak yang dapat dicetak seragam, dan lokasi karakter acak yang seragam dalam setiap potongan) Saya memiliki 30 byte (mungkin tidak optimal):
Ini memutar setiap potongan yang ditinggalkan dengan jumlah acak, memunculkan karakter terakhir dan kemudian memanggil salah satu dari dua tautan pertama, salah satunya kosong dan yang lainnya digabungkan dengan karakter ASCII yang dapat dicetak secara acak; kemudian memutar potongan itu lagi.
sumber
Python3,
188186184114 karakterSepertinya terlalu lama. Mungkin bisa dipersingkat banyak dengan lambda.Rupanya OP telah memungkinkan memilih karakter acak dari daftar dua karakter dan indeks karakter yang akan diganti bisa berupa konstanta. Setelah modifikasi, jawaban saya akan terlihat persis sama dengan pengajuan @FlipTacks Python, jadi ini adalah bentuk yang saya gunakan .
@FlipTack menyelamatkan 5 byte!
sumber
Clojure,
135139 byteSunting: Lupa menggunakan
partition-all
bukanpartition
.Tidak Disatukan:
Man nama-nama fungsi itu panjang ... Pokoknya, itu membagi input menjadi partisi 10 karakter, membaginya secara acak menjadi dua bagian, secara acak menyuntikkan string kosong atau karakter acak di antara mereka dan membuang karakter pertama dari babak ke-2.
sumber
Mathematica 133 Bytes (129 karakter)
76 karakter untuk menulis nama 8 fungsi: /
Menggunakan
⌊..⌋
bukannyaFloor[]
menyimpan 5 karakter, 1 byte.sumber
Python 3, 129 byte
Untuk menghemat beberapa byte, alih-alih mengimpor modul acak Python, saya hanya melakukan beberapa operasi modulo pada id string, yang harus berbeda setiap waktu. Sebagai contoh, program akan memutuskan apakah akan menghapus char atau tidak atau mengganti yang didasarkan pada apakah
id(string)//10
genap atau tidak (saya bilangan integer dengan 10 karena angka terakhir akan selalu genap).sumber