Bu kedinin böcekleri mi var? Gerçekten mi?


11

Meydan okuma:

Girişi (görünür ASCII aralığında) ve çıkışı birkaç değişiklikle okuyun:

  1. Girişin 10 karakterlik rastgele her kümesinde (50/50):
    • bir karakteri * (görünür ASCII aralığında rastgele ** bir karakterle değiştirin) (ör. lumberjackolur lumbeZjack)
    • veya bir karakteri kaldırın (ör. lumberjackolur lmberjack)

* Küme 10 karakterden azsa, değiştirmeniz gerekmez, ancak değiştirebilirsiniz.
** Karakter, rastgele olduğu sürece bir girişle aynı olabilir.

Misal:

Girdi: Go home cat! You're drunk!
Çıktı: Go hom cat! YouLre drunk!
(sadece bir örnek, çıktı rasgele olabileceğinden, bir test durumu olarak kullanmayın)

Kurallar:


5
@ n4melyh4xor ayrıca gelecekteki zorlukların sonrası olabilir Sandbox . Orada meydan okuma hakkında bazı geribildirim alacaksınız.
çubuk

1
Yeni karakter, değiştirilecek karakterle aynıysa ne olur?
Brad Gilbert b2gills

@ BradGilbertb2gills, o kadar seçici değilim, sorun değil.
n4melyh4xor


Değiştirilecek karakterin indeksinin rastgele olması gerekiyor mu?
Yytsi

Yanıtlar:


4

Pyth, 27 25 bayt

VczTpXNOT?<JOr\ \ÞKC127JK

Test paketi burada mevcuttur.

2 bayt tıraş ettiği için Maltysen'e teşekkürler .

açıklama

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

Genellikle olduğu gibi, bunun biraz naif bir yöntem olduğunu ve geliştirilebileceğini hissediyorum. Genellikle açıklamayı yazarken belirgin bir şey bulurum ama bu sefer hiçbir şey atlamamıştı.


1
Silme char güzel kullanımı! Bir ipucu da bu menzilin tel üzerinde çalıştığı
Maltysen

@Maltysen Teşekkürler! Yorumunuzu düşündüm ama yerden tasarruf etmek için nerede kullanabileceğimden tam olarak emin değilim. OC\¾ile aynı bayt sayısıdır O190ve sil karakterine K atamak da yer tasarrufu sağlamaz.
Mike Bufardeci

@Maltysen Bu yüzden beni biraz aldı ama ne demek istediğini anladım ve 2 bayt tıraş oldum. Tekrar teşekkürler!
Mike Bufardeci

3

*> <> , 44 46 52 50 bayt

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

Burada deneyin!

Rastgele karakterler için uzayda / üstünde herhangi bir ascii karakteri kullanır. Bu, bir dizenin sonu olmadığı ve dizenin uzunluğu 10'un katı olmadığı sürece her zaman 6. karakteri düzenler. Bu, 6. karakteri düzenlemek yerine 7. karakteri kaldırma şansı% 50'dir.

Giriş

Kayan Nokta Aritmetiği için IEEE Standardı (IEEE 754), Elektrik ve Elektronik Mühendisleri Enstitüsü (IEEE) tarafından 1985 yılında kurulan kayan nokta hesaplaması için teknik bir standarttır. Standart, farklı kayan nokta uygulamalarında bulunan ve güvenilir ve taşınabilir bir şekilde kullanılmasını zorlaştıran birçok sorunu ele aldı. Birçok donanım kayan nokta birimi artık IEEE 754 standardını kullanmaktadır.

Çıktı

Float $ ng-Point Aithmetic için IEE Standardı (EEE 754) teknik bir standarttır! floraling-point-computati # n 1985 yılında! lectrical # ve Electrnics Engi! eers Enstitüsü (% IEE) tarafından kurulmuştur. St! Ndard eklemek! Esed adam! sorunlar # bulundu! o dalgıçlar! yüzer merhem impl! mentation "o deli # onları farklı ue için kabartma # ve port! bly. Birçok! donanım foating po # nt birimleri% ow th kullanmak! IEEE 754" standart.

Edit: Bu cevap muhtemelen her zaman görünür ascii aralığında, düzenleme ... Sabit.

Edit2: Bir karakteri kaldırmak için 50/50 şansı olması gerektiğini görmedim, tekrar düzenleme ... Her şeyin yolunda olduğuna inanıyorum :).


Bir şey daha var, birisi rastgele bir karakter önerdi, bu yüzden şimdi rastgele.
n4melyh4xor

@ n4melyh4xor, o bendim! Rastgele :).
redstarcoder

2

Perl 6 ,  78  67 bayt

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

Dene

Açıklama:

{
  [~]                  # 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 bayt

75 bayt, dönüşümü her grubun ilk karakterine uygular ve yalnızca Jelly yanıtında (OP'ye izin verilir) olduğu gibi 2 rastgele karakterden seçer :

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

Çevrimiçi deneyin!

Bu, her yinelemede hiçbir şey önermeyen 'a'veya 'b'daha sonra dilimlenmiş ilk 10 karakterle kendini çağıran özyinelemeli bir işlevdir . Son yineleme kısa devreleri s and(boş bir dizgi falsidir), sonsuz tekrarlamadan kaçınır.

Tüm ayrı aramaların sonucu birleştirilir ve işlevi çağıran bağlama döndürülür.

120 bayt

Tabii ki, bu biraz hile gibi geliyor, bu yüzden tamamen rastgele bir tane:

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

Çevrimiçi deneyin!


OP değiştirilen karakterin indeksinin 0 olabileceğini nereden söyledi?
Yytsi

@TuukkaX, dağınıklığı önlemek için yorumlar kaldırıldı, ancak jöle cevabının yaptığı şey ve OP bunun iyi olduğunu söyledi.
FlipTack

1

Jöle , 15 14  13 bayt 13 karakter

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

TryItOnline!

Böyle bir yığın varsa, son 1-9 karakter dahil her on karakterden ilkini değiştirir veya kaldırır. Kuşkusuz küçük karakter alt kümesinden seçim yapar 1:; 2.

Nasıl?

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

21 baytta sadece 1ve 2(hala her bir yığının 1. karakterini değiştirerek veya kaldırarak) değil, yazdırılabilir ASCII arasından seçim yapmak için :

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

Bir İçin tamamen rasgele sürümü 30 bayt (muhtemelen optimal olmayan) sahip (50/50 kaldır /, tekdüze rasgele yazdırılabilir ASCII, her parçanın içinde eşit olarak rasgele karakter konumunu değiştirin):

95R+31ỌX;

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

Bu, her bir parçayı rastgele bir miktar sola döndürür, son karakteri çıkarır ve ardından biri boş olan diğeri rastgele yazdırılabilir ASCII karakteriyle birleşen rastgele ilk iki bağlantıdan birini rastgele çağırır; sonra parçayı tekrar sağa döndürür.


Bu gerçekten yazı ruhuna aykırı
Maltysen

@Maltysen - OP bütün bunların iyi olduğunu söyledi.
Jonathan Allan

Nerede? Yorumlarda veya OP'de hiçbir şey görmüyorum.
Maltysen

@Maltysen temizlendiler.
Jonathan Allan

1
Açıkça 2 karakter arasından seçim yapabileceğimizi ve Soru gövdesine koymak istemediklerini söyleyen bir yorum vardı.
Jonathan Allan

1

Python3, 188 186 184 114 karakter

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

Çok uzun görünüyor. Muhtemelen bir lambda ile çok kısaltılabilir.

Görünüşe göre OP iki karakter listesinden rastgele karakter seçilmesine izin verdi ve değiştirilecek karakterin indeksi sabit olabilir. Değişikliklerden sonra, cevabım @FlipTacks Python gönderimi ile tamamen aynı görünecekti , bu yüzden kalıyorum.

@FlipTack 5 bayt kurtardı!


0

Clojure, 135 139 bayt

Düzenleme: partition-allBunun yerine kullanmayı unuttum 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))))

Adam bu fonksiyon isimleri uzundur ... Her neyse, girişi 10 karakterin bölümlerine böler, rastgele noktada iki yarıya böler, rastgele boş bir dize veya aralarına rastgele bir karakter enjekte eder ve 2. yarının ilk karakterini atar.


0

Mathematica 133 Bayt (129 karakter)

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

8 fonksiyonun isimlerini yazmak için 76 karakter: /

⌊..⌋Bunun yerine kullanarak Floor[]5 karakter 1 bayt kaydeder.


0

Python 3, 129 bayt

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

Bazı baytları kaydetmek için, Python'un rastgele modülünü içe aktarmak yerine, her seferinde farklı olması gereken dizenin kimliğinde bazı modulo işlemleri yaptım. Örneğin, program bir karakterin çıkarılıp çıkarılmayacağına veya çift olup olmadığına bağlı olarak bir karakterin değiştirilip değiştirilmeyeceğine karar verecektir id(string)//10(son basamak her zaman eşit olacağı için 10 tam sayı bölüyorum).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.