У этого кота есть ошибки? В самом деле?


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
Что, если заменяющий символ совпадает с заменяемым символом?
Брэд Гилберт 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 Спасибо! Я подумал о вашем комментарии, но я не совсем уверен, где я мог бы использовать его для экономии места. 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 для арифметики с плавающей точкой $ NG (EEE 754) в техническом стандарте! для начального уровня! computati # n, созданного в 1985 году Институтом лекторов и электриков (IEE%). Стандард добавить! Оценил человек! проблемы, найденные в! он дайвер! «плавающая точка» подразумевает! «что безумно # их трудно! надежно # и порт! bly. Многие! аппаратные точки запуска #% используют стандарт! 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-байт применяет преобразование к первому символу каждой группы и выбирает только из 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 сказал, что все это хорошо.
Джонатан Аллан

Куда? Я не вижу ничего в комментариях или ОП.
Maltysen

@ Maltysen они были очищены.
Джонатан Аллан

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

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

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


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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.