この猫にはバグがありますか?本当に?


11

チャレンジ:

入力を(目に見えるASCII範囲内で)読み取り、いくつかの変更を加えて出力します。

  1. ランダムに入力された10文字の各セット(50/50):
    • 1つの文字を*(目に見えるASCII範囲内のランダムなものに置き換えます)(例:にlumberjackなりますlumbeZjack
    • または1文字を削除します(例:にlumberjackなりますlmberjack

*セットが10文字未満の場合、変更する必要はありませんが、変更できます。
**文字は、ランダムである限り、1つの入力と同じにすることができます。

例:

入力:Go home cat! You're drunk!
出力:(Go hom cat! YouLre drunk!
出力はランダムになる可能性があるため、テストケースとして使用しないでください)

ルール:

  • 、最小の文字が勝ちます!

5
@ n4melyh4xorまた、将来の課題をSandboxに投稿できます。そこで、あなたの挑戦についてのフィードバックが得られます。
ロッド

1
置換文字が置換される文字と同じ場合はどうなりますか?
ブラッドギルバートb2gills

@ BradGilbertb2gills、私はそんなに好きじゃない、大丈夫だ。
n4melyh4xor


置き換えられる文字のインデックスはランダムでなければなりませんか?
Yytsi 16

回答:


4

Pyth、27 25バイト

VczTpXNOT?<JOr\ \ÞKC127JK

テストスイートはこちらから入手できます。

2バイトを削ってくれたMaltysenに感謝します。

説明

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を割り当ててもスペースは節約されません。
マイクブファルデチ16

@Maltysenそれで少し時間がかかりましたが、私はあなたが何を意味するのかを理解し、2バイト削りました。再度、感謝します!
マイクブファルデチ16

3

*> <>44 46 52 50バイト

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

ここで試してみてください!

これは、ランダム文字にスペースの近く/上にある任意のアスキー文字を使用します。これは、文字列の末尾であり、その文字列の長さが10の倍数でない場合を除き、常に6番目の文字を編集します。

入力

IEEE浮動小数点演算の標準(IEEE 754)は、1985年に米国電気電子学会(IEEE)によって確立された浮動小数点計算の技術標準です。この規格は、多様な浮動小数点の実装に見られる多くの問題に対処しており、信頼性と移植性の点でそれらの使用を困難にしました。現在、多くのハードウェア浮動小数点ユニットはIEEE 754標準を使用しています。

出力

浮動小数点演算のIEE標準(EEE 754)は技術的な標準です!1985年に!lectrical#and Electrnics Engi!eers(IEE%)によって設立されたfloa!ing-point!computati#nのために。st!ndard add!essed man!問題#ダイバーに発見!多くの!ハードウェアを生成するpo#ntユニットは、IEEE 754 "標準を使用します。

編集:この答えはおそらく目に見えるアスキーの範囲に常にあるとは限らず、編集しています...修正されました。

Edit2:キャラクターを削除するために50/50の機会が必要であるとは思わなかったので、再び編集します...すべてが順調になったと思います:)。


もう1つ、誰かがランダムなキャラクターを提案したので、今はランダムです。
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の回答(OPで許可されている)などの2つのランダムな文字からのみ選択します

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 16

@TuukkaXは、混乱を避けるためにコメントを削除しましたが、ゼリーの答えはそれであり、OPはそれは大丈夫だと言いました。
FlipTack 16

1

ゼリー15 14  13 バイト 13文字

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

TryItOnline!

そのようなチャンクがある場合、最後の1〜9の文字を含む10文字ごとの最初の文字を置換または削除します。明らかに小さい文字のサブセットから選択し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

21バイト単位で(1および2各チャンクの最初の文字を置換または削除する)だけでなく、すべての印刷可能なASCIIから選択するには:

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

以下のために、完全にランダムなバージョン(50/50削除/置き換え、一様乱数印刷可能なASCII、および各チャンク内に一様にランダムな文字の場所)私は30バイト(おそらく非最適)を持っています:

95R+31ỌX;

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

これにより、残った各チャンクがランダムに回転し、最後の文字がポップされ、最初の2つのリンクのうちの1つがランダムに呼び出されます。1つは空で、もう1つはランダムな印刷可能なASCII文字と連結します; その後、チャンクを再び右に回転します。


これは本当にポストの精神に反する
Maltysen

@Maltysen-OPは、これらすべてが問題ないと述べました。
ジョナサンアラン

どこ?コメントやOPには何も表示されません。
マルティセン16

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

長すぎるようです。ラムダでおそらく短くなる可能性があります。

どうやらOPは2つの文字のリストからランダムな文字を選択することを許可しており、置換される文字のインデックスは定数である可能性があります。変更後、私の答えはPythonの@FlipTacks提出とまったく同じに見えたので、これは私が滞在しているフォームです。

@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

Mathematica 133バイト(129文字)

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

8つの関数の名前を記述する76文字:/

⌊..⌋代わりにを使用すると、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に対してモジュロ演算を行いました。これは毎回異なるはずです。たとえば、プログラムid(string)//10は、偶数かどうかに基づいて、charを削除するか、charを置き換えるかを決定します(最後の桁は常に偶数になるため、10で整数除算します)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.