У цієї кішки є помилки? Дійсно?


11

Виклик:

Прочитайте вхід (у видимому діапазоні ASCII) та виведіть з кількома модифікаціями:

  1. У кожному наборі по 10 символів вводу випадковим чином (50/50):
    • замініть один символ * (на випадковий ** один у видимому діапазоні ASCII) (наприклад, lumberjackстає lumbeZjack)
    • або видаліть один символ (колишній lumberjackстає lmberjack)

* Якщо набір містить менше 10 символів, його не потрібно змінювати, але ви можете.
** Символ може бути таким же, як і один вхід, якщо він все ще є випадковим.

Приклад:

Input: Go home cat! You're drunk!
Output: Go hom cat! YouLre drunk!
(лише приклад, оскільки вихід може бути випадковим, не використовуйте як тестовий випадок)

Правила:


5
@ n4melyh4xor також ви можете розмістити майбутні проблеми на пісочниці . Там ви отримаєте деякий відгук про свій виклик.
Прут

1
Що робити, якщо замінювальний char такий же, як і char, який слід замінити?
Бред Гілберт b2gills

@ BradGilbertb2gills, я не такий вибагливий, це добре.
n4melyh4xor


Чи повинен індекс символу, який потрібно замінити, бути випадковим?
Yytsi

Відповіді:


4

Pyth, 27 25 байт

VczTpXNOT?<JOr\ \ÞKC127JK

Тут ви знайдете тестовий набір.

Дякую Малтісену за бриття 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
Приємне використання видалення char! Одна порада - це те, що діапазон працює і на рядку
Малтісен

@Maltysen Дякую! Я подумав про ваш коментар, але я не зовсім впевнений, де міг би його використати для економії місця. OC\¾така ж кількість байтів, як O190і присвоєння знаку K видаленню також не економить місця.
Майк Буфардечі

@Maltysen Отже, це зайняло мене трохи, але я зрозумів, що ти маєш на увазі, і я поголив 2 байти. Знову дякую!
Майк Буфардечі

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 для Float $ ng-Point Aithmetic (EEE 754) в технічних стандартах! для floa! ing-point! computati # n, створене в 1985 р. Інститутом! лектричних # та інженерів електротехніки (IEE%). St! Ndard додати! Essed man! проблеми # знайдені! він пірнає! плаваюча мазь імп! ментація ", що божевільний # їм різний! ульт для того, щоб забезпечити # надійний # і порт! bly. Багато! апаратного обмацування po # nt одиниць% власник використання th! IEEE 754" стандарт.

Редагувати: Ця відповідь, ймовірно, не завжди знаходиться у видимому діапазоні ascii, редагування ... Виправлено.

Edit2: Не бачив, що має бути шанс 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-байт застосовує перетворення до першого символу кожної групи, і вибирає лише з двох випадкових символів, наприклад, у відповіді Jelly (яка дозволена ОП):

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

Спробуйте в Інтернеті!


Де ОП згадувало, що індекс заміненого символу може бути 0?
Іци

@TuukkaX коментарі були видалені, щоб уникнути захаращення, але це те, що робить відповідь желе , і ОП заявила, що це добре.
FlipTack

1

Желе , 15 14  13 байт 13 символів

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

СпробуйтеItOnline!

Замінює або видаляє перший з кожні десять символів, включаючи останній 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 вони були очищені.
Джонатан Аллан

1
Був коментар, в якому прямо сказано, що ми можемо вибрати з двох символів І що вони не хочуть ставити його до органу запитання.
Джонатан Аллан

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

Здається, занадто довго. Можливо, може бути багато скоротити лямбда.

Мабуть, ОП дозволило вибрати випадковий символ із списку з двох символів, а індекс символу, який слід замінити, може бути постійним. Після внесення змін моя відповідь виглядала б точно так само, як подання @FlipTacks Python, тож це форма, в якій я залишаюся.

@FlipTack врятував 5 байт!


0

Clojure, 135 139 байт

Редагувати: Забули використовувати partition-allзамість 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)))))

Безголівки:

(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 символів, розбиває їх у випадковій точці на дві половинки, випадково вводить порожній рядок або випадковий символ між ними і відкидає перший символ 2-ї половини.


0

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

Щоб зберегти кілька байтів, замість того, щоб імпортувати випадковий модуль Python, я просто зробив кілька модульних операцій над ідентифікатором рядка, який повинен бути різним щоразу. Наприклад, програма вирішить, чи потрібно видаляти знак чи замінити один на основі id(string)//10рівного чи ні (я ціле ділення на 10, оскільки остання цифра завжди буде парною).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.