Con mèo này có lỗi? Có thật không?


11

Thử thách:

Đọc đầu vào (trong phạm vi ASCII hiển thị) và đầu ra với một vài sửa đổi:

  1. Trong mỗi bộ 10 ký tự của đầu vào ngẫu nhiên (50/50):
    • thay thế một ký tự * (bằng một ký tự ** ngẫu nhiên trong phạm vi ASCII hiển thị) (ví dụ: lumberjacktrở thành lumbeZjack)
    • hoặc xóa một ký tự (ví dụ: lumberjacktrở thành lmberjack)

* Nếu bộ có ít hơn 10 ký tự, bạn không phải sửa đổi nó, nhưng bạn có thể.
** Ký tự có thể giống với một đầu vào, miễn là vẫn ngẫu nhiên.

Thí dụ:

Đầu vào: Go home cat! You're drunk!
Đầu ra: Go hom cat! YouLre drunk!
(chỉ là một ví dụ, vì đầu ra có thể là ngẫu nhiên, không sử dụng làm trường hợp thử nghiệm)

Quy tắc:

  • , ít nhân vật nhất sẽ thắng!

5
@ n4melyh4xor bạn cũng có thể đăng các thử thách trong tương lai trên Sandbox . Ở đó bạn sẽ nhận được một số thông tin phản hồi về thách thức của bạn.
Rod

1
Nếu char thay thế giống như char được thay thế thì sao?
Brad Gilbert b2gills

@ BradGilbertb2gills, tôi không kén chọn lắm, không sao đâu.
n4melyh4xor


Có phải chỉ số của nhân vật được thay thế phải là ngẫu nhiên?
Yytsi

Câu trả lời:


4

Bình thường, 27 25 byte

VczTpXNOT?<JOr\ \ÞKC127JK

Bộ thử nghiệm có sẵn ở đây.

Cảm ơn Maltysen đã cạo sạch 2 byte.

Giải trình

VczTpXNOT?<JOr\ \ÞKC127JK    z autoinitalizes to input, T autoinitializes to 10 
 czT                         chop input into strings of length 10, returned as list of strings
V                            for each string N in this list:
            Or\ \Þ            randomly pick a char between ' ' (32) and 'Þ' (222)
           J                  and assign it to variable J
                  KC127       assign the DEL char to variable K
         ?<J      K           if J < K:
     XNOT              J       replace a random character in N with J
         ?<J      K           else:
     XNOT               K      replace a random character in N with K
    p                         print this string with no trailing newline

Như thường lệ, tôi cảm thấy rằng đây là một phương pháp ngây thơ và có thể được cải thiện. Thông thường tôi tìm thấy một cái gì đó rõ ràng trong khi gõ lên lời giải thích nhưng không có gì nhảy ra với tôi lần này.


1
Sử dụng tốt các char xóa! Một mẹo là phạm vi hoạt động trên chuỗi quá
Maltysen

@Maltysen Cảm ơn! Tôi đã nghĩ về nhận xét của bạn nhưng tôi không hoàn toàn chắc chắn nơi tôi có thể sử dụng nó để tiết kiệm không gian. OC\¾là cùng số byte O190và việc gán K cho char char cũng không tiết kiệm bất kỳ khoảng trống nào.
Mike Bufardeci

@Maltysen Vì vậy, tôi đã mất một chút nhưng tôi nhận ra ý của bạn và tôi đã xóa đi 2 byte. Cảm ơn một lần nữa!
Mike Bufardeci

3

*> <> , 44 46 52 50 byte

rl5(?voooo/!|Ou+1Ox:@=?~o~oooo!
ol5(?v" ":/
o;!?l<

Hãy thử nó ở đây!

Điều này sử dụng bất kỳ ký tự ascii gần / trên không gian cho các ký tự ngẫu nhiên. Điều này luôn chỉnh sửa ký tự thứ 6, trừ khi nó kết thúc chuỗi và độ dài của chuỗi đó không phải là bội số 10. Điều này có 50% cơ hội để xóa ký tự thứ 7 thay vì chỉnh sửa ký tự thứ 6.

Đầu vào

Tiêu chuẩn IEEE về Số học dấu phẩy động (IEEE 754) là một tiêu chuẩn kỹ thuật cho tính toán dấu phẩy động được thành lập năm 1985 bởi Viện Kỹ sư Điện và Điện tử (IEEE). Tiêu chuẩn đã giải quyết nhiều vấn đề được tìm thấy trong các triển khai điểm nổi đa dạng khiến chúng khó sử dụng một cách đáng tin cậy và hợp lý. Nhiều đơn vị điểm nổi phần cứng hiện sử dụng tiêu chuẩn IEEE 754.

Đầu ra

IEE Standardfor Float $ ng-Point Aithatures (EEE 754) ia technicl standar! cho floa! ing-point! computati # n được thành lập vào năm 1985, Viện nghiên cứu của! giảng đường # và Electrnics Engi! eers (IEE%). Các st! Ndard thêm! Essed man! vấn đề # tìm thấy trong! anh thợ lặn! nổi oint impl! mentation "that mad # them Dif! icult to ue reliabl # and port! bly. Nhiều! phần cứng cho các đơn vị po # nt% ow sử dụng tiêu chuẩn th! IEEE 754".

Chỉnh sửa: Câu trả lời này có thể không phải lúc nào cũng nằm trong phạm vi ascii hiển thị, chỉnh sửa ... Đã sửa .

Edit2: Không thấy cần phải có cơ hội 50/50 để xóa nhân vật, chỉnh sửa lại ... Tôi tin rằng mọi thứ đều theo thứ tự ngay bây giờ :).


Một điều nữa, ai đó đã đề xuất một nhân vật ngẫu nhiên để bây giờ nó ngẫu nhiên.
n4melyh4xor

@ n4melyh4xor, đó là tôi! Nó là ngẫu nhiên :).
redstarcoder

2

Perl 6 ,  78  67 byte

{[~] map {~S/.**{(^.chars).pick}<(./{(' '..'~').pick x Bool.pick}/},.comb(10)}
{[~] .comb(10)».&{~S/.**{10.rand}<(./{(' '..'~').pick x 2.rand}/}}

Thử nó

Giải trình:

{
  [~]                  # reduce with string concatenation operator

  .comb(10)\           # take input and break it into chunks of up-to 10 chars

  ».\                 # on each of them call the following

  &{
    ~                  # Stringify the following

    S/                 # substituted
      .                # any char
        **             # repeated
           { 10.rand } # a random number of times

      <(               # ignore all of that

      .                # the char to be removed/replaced
    /{

      ( ' ' .. '~' ).pick  # choose a character
      x                    # string repeated
      2.rand               # zero or one times

    }/

  }
}


2

Python 3 , 75 byte

75 byte áp dụng chuyển đổi cho ký tự đầu tiên của mỗi nhóm và chỉ chọn từ 2 ký tự ngẫu nhiên, như trong câu trả lời Jelly (mà OP cho phép):

from random import*
f=lambda s:s and choice(['','a','b'])+s[1:10]+f(s[10:])

Hãy thử trực tuyến!

Đây là một hàm đệ quy, mỗi lần lặp, sẽ không có gì 'a', hoặc 'b', sau đó tự gọi nó bằng 10 ký tự đầu tiên được cắt ra. Các mạch ngắn lặp cuối cùng tại s and(một chuỗi trống là sai), tránh đệ quy vô hạn.

Kết quả của tất cả các cuộc gọi riêng biệt sau đó được nối lại và trở lại bối cảnh được gọi là hàm.

120 byte

Tất nhiên, điều đó cảm thấy hơi giống như gian lận, vì vậy đây là một điều hoàn toàn ngẫu nhiên:

from random import*;r=randint
def f(S):a=S[:10];R=r(0,len(a)-1);print(end=a[:R]+chr(r(32,126))*r(0,1)+a[R+1:]);f(S[10:])

Hãy thử trực tuyến!


OP đã đề cập đến việc chỉ số của ký tự được thay thế có thể là 0?
Yytsi

@TuukkaX các bình luận đã bị xóa để tránh lộn xộn, nhưng đó là những gì câu trả lời của thạch làm được, và OP nói rằng nó vẫn ổn.
FlipTack

1

Jelly , 15 14  13 byte 13 ký tự

2X
s⁵µ¢1¦ṫ¢µ€

Dùng thử trực tuyến!

Thay thế hoặc loại bỏ ký tự đầu tiên trong số mười ký tự, kể cả ký tự 1-9 cuối cùng nếu có một đoạn như vậy. Lựa chọn từ, nhỏ thừa nhận, tập hợp các ký tự : 1; 2.

Làm sao?

2X         - Link 1, flip a coin: no arguments
 X         - random choice from
2          - 2 (treated as the integers [1,2])

s⁵µ¢1¦ṫ¢µ€ - Main link: string of printable ASCII
s⁵         - split (s) into chunks of size ten (⁵)
  µ     µ  - monadic chain separation 
         € - for each chunk
   ¢       -     last link as a nilad
    1¦     -     apply to index 1 (replace 1st of the 10 char chunk with the chosen integer)
       ¢   -     last link as a nilad
      ṫ    - tail - if it was 1 this has no effect (50%)
                  - if it was 2 this discards the replaced character (50%)
           - implicit print

Để chọn từ tất cả ASCII có thể in thay vì chỉ 12(vẫn thay thế hoặc xóa ký tự đầu tiên của mỗi đoạn) trong 21 byte:

s⁵µ32r126¤ỌX¤1¦ṫ2X¤µ€

Đối với phiên bản hoàn toàn ngẫu nhiên (loại bỏ / thay thế 50/50, ASCII có thể in ngẫu nhiên đồng nhất và vị trí ký tự ngẫu nhiên thống nhất trong mỗi đoạn) Tôi có 30 byte (có thể không tối ưu):

95R+31ỌX;

s⁵µṙ⁵X¤©Ṗ2X¤Ŀṙ®C¤µ€

Thao tác này xoay mỗi đoạn còn lại một lượng ngẫu nhiên, tắt ký tự cuối cùng và sau đó gọi ngẫu nhiên một trong hai liên kết đầu tiên, một liên kết trống và liên kết còn lại có ký tự ASCII có thể in ngẫu nhiên; sau đó nó quay chunk lại một lần nữa.


Điều này thực sự đi ngược lại tinh thần của bài
Maltysen

@Maltysen - OP cho biết tất cả những điều này đều ổn.
Jonathan Allan

Ở đâu? Tôi không thấy bất cứ điều gì trong các ý kiến ​​hoặc OP.
Maltysen

@Maltysen họ đã bị xóa.
Jonathan Allan

1
Có một bình luận nói rõ rằng chúng tôi có thể chọn từ 2 ký tự VÀ họ không muốn đưa nó vào phần thân Câu hỏi.
Jonathan Allan

1

Python3, 188 186 184 114 ký tự

from random import*
s=input()
for c in[s[i:i+10]for i in range(0,len(s),10)]:print(end=choice(["","x","y"])+c[1:])

Có vẻ quá dài. Có lẽ có thể được rút ngắn rất nhiều với lambda.

Rõ ràng OP đã cho phép chọn ký tự ngẫu nhiên từ danh sách hai ký tự và chỉ số của ký tự được thay thế có thể là một hằng số. Sau khi sửa đổi, câu trả lời của tôi sẽ trông giống hệt như đệ trình @FlipTacks Python, vì vậy đây là hình thức tôi đang ở cùng.

@FlipTack đã lưu 5 byte!


0

Clojure, 135 139 byte

Chỉnh sửa: Quên sử dụng partition-allthay vì partition.

(fn[i](apply str(flatten(map #(let[r rand-int [b e](split-at(r 9)%)][b(if(<(rand)0.5)""(char(+(r 25)97)))(rest e)])(partition-all 10 i)))))

Ung dung:

(def f (fn[i]
         (->> i
              (partition-all 10)
              (map #(let [[begin end] (split-at (rand-int 9) %)]
                      [begin (if (< 0.5 (rand)) "" (char (+(rand-int 25)97))) (rest end)]))
              flatten
              (apply str))))

Dù các tên hàm đó dài ... Dù sao, nó sẽ phân chia đầu vào thành các phân vùng gồm 10 ký tự, chia chúng tại điểm ngẫu nhiên thành hai nửa, nhập ngẫu nhiên một chuỗi trống hoặc một ký tự ngẫu nhiên giữa chúng và loại bỏ ký tự đầu tiên của nửa sau.


0

Mathicala 133 Byte (129 ký tự)

StringReplacePart[#,Table[If[(r=RandomInteger)[]<1,"",FromCharacterCode@r@128],c=⌊StringLength@#/10⌋],Array[{g=10#-9+r@9,g}&,c]]&

76 ký tự để viết tên của 8 hàm: /

Sử dụng ⌊..⌋thay vì Floor[]lưu 5 ký tự, 1 byte.


0

Python 3, 129 byte

def f(s):f=id(s)%9+1;print(''.join(j[0:f-1]+chr(33+id(s)%94)*(id(s)//10%2)+j[f:]for j in [s[i:i+10]for i in range(0,len(s),10)]))

Để lưu một số byte, thay vì nhập mô-đun ngẫu nhiên của Python, tôi chỉ thực hiện một số thao tác modulo trên id của chuỗi, mỗi lần sẽ khác nhau. Ví dụ, chương trình sẽ quyết định loại bỏ char hay thay thế một char dựa trên việc có hay không id(string)//10(tôi chia số nguyên cho 10 vì chữ số cuối cùng sẽ luôn là số chẵn).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.