แมวตัวนี้มีข้อบกพร่อง? จริงๆ?


11

ท้าทาย:

อ่านอินพุต (ภายในช่วง ASCII ที่มองเห็นได้) และเอาต์พุตพร้อมการแก้ไขเล็กน้อย:

  1. ในแต่ละชุดของอักขระ 10 ตัวของอินพุตสุ่ม (50/50):
    • แทนที่หนึ่งอักขระ * (ด้วยการสุ่ม ** หนึ่งตัวในช่วง ASCII ที่มองเห็นได้) (เช่นlumberjackกลายเป็นlumbeZjack)
    • หรือลบอักขระหนึ่งตัว (เช่นlumberjackกลายเป็นlmberjack)

* หากชุดมีอักขระน้อยกว่า 10 ตัวคุณไม่จำเป็นต้องแก้ไข แต่คุณสามารถทำได้
** ตัวละครอาจเหมือนกับอินพุตหนึ่งตราบใดที่ยังสุ่ม

ตัวอย่าง:

อินพุต: Go home cat! You're drunk!
เอาต์พุต: Go hom cat! YouLre drunk!
(เป็นเพียงตัวอย่างเนื่องจากเอาต์พุตอาจเป็นแบบสุ่มไม่ได้ใช้เป็นกรณีทดสอบ)

กฎ:


5
@ n4melyh4xor ยังให้คุณสามารถโพสต์ความท้าทายในอนาคตในSandbox คุณจะได้รับคำติชมเกี่ยวกับการท้าทายของคุณ
ร็อด

1
จะเกิดอะไรขึ้นถ้าถ่านการเปลี่ยนเหมือนกับถ่านที่จะถูกแทนที่?
แบรดกิลเบิร์ต b2gills

@ BradGilbertb2gills ฉันไม่ใช่คนจู้จี้จุกจิกมันก็ดี
n4melyh4xor


ดัชนีของตัวละครที่จะถูกแทนที่จะต้องเป็นแบบสุ่มหรือไม่?
Yytsi

คำตอบ:


4

Pyth, 27 25 ไบต์

VczTpXNOT?<JOr\ \ÞKC127JK

ชุดทดสอบใช้ได้ที่นี่

ขอบคุณMaltysenสำหรับการโกนหนวด 2 ไบต์

คำอธิบาย

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

บ่อยครั้งที่ฉันรู้สึกว่านี่เป็นวิธีการที่ไร้เดียงสาและอาจได้รับการปรับปรุงให้ดีขึ้น ปกติฉันจะพบสิ่งที่ชัดเจนในขณะที่พิมพ์คำอธิบาย แต่คราวนี้ฉันไม่มีอะไรโดดออกมาเลย


1
ใช้ประโยชน์จากการลบถ่าน! หนึ่งเคล็ดลับก็คือช่วงนั้นทำงานกับสตริงด้วย
Maltysen

@ Maltysen ขอบคุณ! ฉันคิดเกี่ยวกับความคิดเห็นของคุณ แต่ฉันไม่แน่ใจว่าฉันจะใช้ที่ใดเพื่อประหยัดพื้นที่ OC\¾มีจำนวนไบต์เท่าO190กันและการกำหนด K ให้กับตัวลบจะไม่ประหยัดพื้นที่ใด ๆ
Mike Bufardeci

@Maltysen ดังนั้นฉันต้องใช้เวลาสักหน่อย แต่ฉันก็รู้ว่าคุณหมายถึงอะไรและฉันได้โกนออกไป 2 ไบต์ ขอบคุณอีกครั้ง!
Mike Bufardeci

3

*> <> , 44 46 52 50 ไบต์

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

ลองที่นี่!

ใช้อักขระ ASCII ใดก็ได้ที่อยู่ใกล้ / สูงกว่าช่องว่างสำหรับอักขระสุ่ม วิธีนี้จะแก้ไขอักขระตัวที่ 6 ยกเว้นว่ามันจะเป็นจุดสิ้นสุดของสตริงและความยาวของสตริงนั้นไม่ได้เป็นหลายเท่าของ 10 ซึ่งมีโอกาส 50% ที่จะลบอักขระตัวที่ 7 แทนการแก้ไขตัวที่ 6

อินพุต

มาตรฐาน IEEE สำหรับการคำนวณเลขทศนิยม (IEEE 754) เป็นมาตรฐานทางเทคนิคสำหรับการคำนวณจุดลอยตัวที่จัดตั้งขึ้นในปี 1985 โดยสถาบันวิศวกรไฟฟ้าและอิเล็กทรอนิกส์ (IEEE) มาตรฐานได้กล่าวถึงปัญหาต่าง ๆ ที่พบในการใช้งานจุดลอยตัวที่หลากหลายซึ่งทำให้ยากต่อการใช้อย่างเชื่อถือได้และพกพาได้ ตอนนี้อุปกรณ์หลายจุดลอยตัวของฮาร์ดแวร์ใช้มาตรฐาน IEEE 754

เอาท์พุต

มาตรฐาน IEE สำหรับโฟลต $ ng-Point เลขคณิต (EEE 754) เป็นมาตรฐานทางเทคนิค! สำหรับ floa! ing-point! computati # n ก่อตั้งขึ้นในปี 1985 โดย Insitute of! lectrical # และ Electrnics Engi! eers (IEE%) St! ndard เพิ่ม! คนทำเอสเซนต์! ปัญหา # ที่พบใน! เขาหลากหลาย! oint impl ลอย! mentation "ที่บ้า # พวกเขายากที่จะ ue reliabl # และพอร์ต! bly หลายฮาร์ดแวร์ foating po # nt หน่วย% โอ๊ยใช้ th! IEEE 754" มาตรฐาน

แก้ไข: คำตอบนี้อาจไม่อยู่ในช่วง ascii ที่มองเห็นเสมอไปแก้ไข ...แก้ไข

แก้ไข 2: ไม่เห็นว่าจะต้องมีโอกาส 50/50 ในการลบตัวอักษรแก้ไขอีกครั้ง ...ฉันเชื่อว่าตอนนี้ทุกอย่างเรียบร้อยแล้ว :)


อีกอย่างหนึ่งมีคนแนะนำตัวละครแบบสุ่มดังนั้นมันจึงเป็นแบบสุ่ม
n4melyh4xor

@ n4melyh4xor นั่นคือฉัน! มันเป็นการสุ่ม :)
redstarcoder

2

Perl 6 ,  78  67 ไบต์

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

ลองมัน

คำอธิบาย:

{
  [~]                  # 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 ไบต์

75- ไบต์ใช้การแปลงกับอักขระตัวแรกของแต่ละกลุ่มและเลือกจากอักขระสุ่ม 2 ตัวเท่านั้นเช่นในคำตอบของ Jelly (อนุญาต OP ที่):

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

ลองออนไลน์!

นี่คือฟังก์ชั่นวนซ้ำซึ่งทุกการวนซ้ำจะไม่ทำอะไรเลย'a'หรือ'b'จากนั้นเรียกตัวเองโดยที่อักขระ 10 ตัวแรกถูกตัดออก วงจรสั้นซ้ำครั้งสุดท้ายที่s and(สตริงว่างเปล่าเป็นเท็จ) หลีกเลี่ยงการเรียกซ้ำแบบไม่สิ้นสุด

ผลลัพธ์ของการโทรที่แยกต่างหากทั้งหมดจะถูกต่อกันและกลับสู่บริบทที่เรียกว่าฟังก์ชัน

120 ไบต์

แน่นอนว่ารู้สึกเหมือนโกงดังนั้นนี่เป็นตัวอย่างที่สมบูรณ์แบบ:

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:])

ลองออนไลน์!


OP ระบุว่าดัชนีของอักขระที่ถูกแทนที่สามารถเป็น 0 ได้ที่ไหน
Yytsi

@ TuukkaX ความคิดเห็นถูกลบออกเพื่อหลีกเลี่ยงความยุ่งเหยิง แต่นั่นคือสิ่งที่คำตอบของเยลลี่ทำและ OP บอกว่ามันดี
FlipTack

1

เยลลี่ , 15 14  13 ไบต์ 13 ตัวอักษร

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

TryItOnline!

แทนที่หรือลบอักขระแรกของทุก ๆ สิบอักขระรวมถึงอักขระ 1-9 ที่ผ่านมาหากมีชิ้นส่วนดังกล่าว เลือกจากชุดอักขระย่อยที่ยอมรับได้: 1; 2.

อย่างไร?

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

ในการเลือกจาก ASCII ที่พิมพ์ได้ทั้งหมดแทนที่จะเป็นเพียง1และ2(ยังคงแทนที่หรือลบอักขระที่ 1 ของแต่ละอัน) ในขนาด 21 ไบต์:

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

สำหรับรุ่นสุ่มเต็มรูปแบบ (ลบ / เปลี่ยน 50/50 แบบสุ่ม ASCII ที่พิมพ์ได้อย่างสม่ำเสมอและตำแหน่งอักขระแบบสุ่มอย่างสม่ำเสมอภายในแต่ละก้อน) ฉันมี 30 ไบต์ (อาจไม่เหมาะสมที่สุด):

95R+31ỌX;

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

สิ่งนี้จะหมุนแต่ละอันที่เหลือโดยการสุ่มปรากฏอักขระสุดท้ายออกแล้วเรียกการสุ่มหนึ่งในสองลิงก์แรกอันหนึ่งอันว่างเปล่าและอีกอันหนึ่งซึ่งเชื่อมโยงกับอักขระ ASCII แบบสุ่มที่พิมพ์ได้ จากนั้นมันจะหมุนก้อนขวาอีกครั้ง


สิ่งนี้ขัดกับจิตวิญญาณของโพสต์
Maltysen

@Maltysen - OP กล่าวว่าสิ่งเหล่านี้ดี
Jonathan Allan

ที่ไหน? ฉันไม่เห็นอะไรเลยในความคิดเห็นหรือ OP
Maltysen

@Maltysen พวกเขาถูกล้าง
Jonathan Allan

1
มีความคิดเห็นอย่างชัดเจนว่าเราสามารถเลือกได้จาก 2 ตัวอักษรและพวกเขาไม่ต้องการใส่มันลงในเนื้อความคำถาม
Jonathan Allan

1

Python3, 188 186 184 114 ตัวอักษร

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:])

ดูเหมือนยาวเกินไป อาจจะสั้นลงมากด้วยแลมบ์ดา

เห็นได้ชัดว่า OP อนุญาตให้เลือกอักขระแบบสุ่มจากรายการของอักขระสองตัวและดัชนีของอักขระที่จะถูกแทนที่อาจเป็นค่าคงที่ หลังจากการดัดแปลงคำตอบของฉันจะเหมือนกับการส่ง@FlipTacks Python ดังนั้นนี่คือแบบฟอร์มที่ฉันอยู่ด้วย

@FlipTackบันทึก 5 ไบต์!


0

Clojure 135 139 ไบต์

แก้ไข: ลืมที่จะใช้แทนpartition-allpartition

(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)))))

Ungolfed:

(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))))

คนชื่อฟังก์ชั่นเหล่านั้นมีความยาว ... อย่างไรก็ตามมันจะแยกอินพุตออกเป็นพาร์ติชั่น 10 ตัวแยกเป็นจุดสุ่มสองส่วนแบ่งสุ่มสตริงว่างหรืออักขระสุ่มระหว่างพวกเขาและทิ้งตัวอักษรตัวแรกของครึ่งหลัง


0

Mathematica 133 ไบต์ (129 ตัวอักษร)

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

76 ตัวอักษรเพื่อเขียนชื่อของ 8 ฟังก์ชั่น: /

ใช้⌊..⌋แทนการFloor[]บันทึก 5 ตัวอักษร 1 ไบต์


0

Python 3, 129 ไบต์

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)]))

เพื่อประหยัดไบต์บางส่วนแทนที่จะนำเข้าโมดูลแบบสุ่มของไพ ธ อนฉันเพิ่งทำการโมดูโลบางอย่างบน id ของสตริงซึ่งควรจะแตกต่างกันทุกครั้ง ตัวอย่างเช่นโปรแกรมจะตัดสินใจว่าจะลบตัวถ่านหรือไม่หรือแทนที่อันนั้นขึ้นอยู่กับว่าid(string)//10เป็นเลขคู่หรือไม่(ฉันจำนวนเต็มหารด้วย 10 เพราะเลขตัวสุดท้ายจะเป็นเลขคู่เสมอ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.