3番目の文字列


45

2つの文字列が与えられた場合、2つの入力のいずれとも等しくないが、入力のいずれかと同じ長さ(文字数)を持つ3番目の文字列を出力します。有効な出力が少なくとも1つあることが保証されています。

テストケース

テストケースは、文字列であることを示すために引用されています。出力は多くの可能性の1つです。

input, input -> output

"test", "test" -> "tttt"
"do", "don't" -> "dnut_"
"ye s", "yes" -> "fals"
"yes", "yes" -> "noo"
"maybe", "mayue" -> "false"
"false", "false" -> "truee"
"false", "true" -> "fatr"
"1", "" -> "0"
"", "t" -> "s"
"", "abcabc" -> "testst"
"abcdefghijklmnopqrstuvwxyz", "aaaaaaaaaaaaaaaaaaaaaaaaaa" -> "zbcdefghijklmnopqrstuvwxya"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" -> "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"

ルール

  • 入力ドメインを選択できますが、少なくとも印刷可能なASCIIで構成されている必要があり、出力ドメインは入力ドメインと同じである必要があります。
  • 入力の長さは同じでも異なっていてもかまいません。
  • 出力は、確率1で有効でなければなりません。つまり、有効になるまでランダムな文字列を生成できます(理論的には無限ループになる可能性があります)が、ランダムな文字列を出力して有効であることを期待することはできません。これは、出力が確定的である必要がないことを意味することに注意してください。
  • 自動末尾改行は許可されますが、出力の長さにはカウントされません。
  • メモリエラーに関する質問のため、60秒以内に入力の長さまで動作する必要があります6。そのために機能し、理論的にはより長い文字列に対して機能する答えは問題4ありませんが、現代のコンピューターの入力長に対するメモリエラーは無効です。

これはであるため、バイト単位の最短回答が優先されます。


14
これは、人間にとっては簡単で、コンピューターにとっては難しい、このサイトの質問の興味深い新しいカテゴリの別のようです。コンピューターは発散的思考が得意ではないからです!スポンジボブのエピソードを思い出します。彼は一晩中起きて、信号のないところでエッセイを書こうとしています。
-geokavel

2
出力ドメインが入力ドメインのサブセットになる可能性があることを理解していますか?
ルイスメンドー

2
いい質問です!私はそれが好きです。
isaacg

2
@Quelklefいいえ、両方の入力と違いはありません。
Ørjanヨハンセン

3
私はちょうど私の答えは、それがすべて提供されるテストケースのために働くにもかかわらず、このために失敗したため、実現1「は、テストケースとして追加する必要があります「」」示唆
スローロリス

回答:



14

Haskell、43バイト

x!y=[s|s<-(<$max x y)<$>"abc",s/=x,s/=y]!!0

空(空ではない)であることがわかっている最大の(辞書的に後の)文字列を取得します。<$; を使用して、すべての文字を「a」、「b」、および「c」のいずれかに置き換えます。そして、どちらの入力でもない最初のものを返します。これはニールのチャコールの回答ジオカベルのCJamの回答に似ていると思います

(私はしばらく潜んでいましたが、このサイトで回答するのは初めてです;こんにちは!)


9

Brainfuck、97バイト

+>+[-,[>>,]<<[<<]>]>>[>]<<<[<]>[<+>>[-<+<+>>][>]<[->+<]<[-]>>>++<[<]>[.>>]>[>>]]>[+[>]+[<]>[.>>]]

オンラインでコードを実行します(「ダイナミックメモリ」は右下で選択する必要があります)

素晴らしいチャレンジ!些細なことだと思いましたが、本当に難しいものになりました。洗練された20バイト程度のBFソリューションがあるべきだと感じているので、私はそれを繰り返し続けています。この時点で、BFで(一見)動作するようになったのはかなりうれしいです。

入力はstr1+ \0+ として取得されstr2ます。文字列はゼロ以外の連続した1バイト文字です。

を返します(first str1 + first str2) or (first str1 + 1) or 2。このアルゴリズムは、(おそらく)私の(壊れた)元のアルゴリズムに基づいて、素晴らしい@ØrjanJohansenによって考案されました。

コメント:

# Let (Kn) be the nth character of K
# Let (^) designate the pointer
# Let F be the first string inputted
# Let S be the second string inputted

+>+[-  # Twice do
,[>>,]  # Input string (characters separated by 1)
<<[<<]>  # Go to left of beginning of string
]>  # End on first character of second string
# If second string is null we will end one too far to the left
>[>]<<<[<]>  # If first string is null we will end there too
# We will use this to do flow control

[  # Only run if both strings were non null

# Tape:    S0 ' F0 ' S1 ' F1 ' S2 ' F2 ' etc
#          ^

<+>>  # Let F0* = F0 (plus) 1  (is 1 as of now; F0 will be added later)
[-<+<+>>] # Let A = S0 (plus) F0
# A may or may not be zero
# F0* may or may not be zero
# Tape:    F0* ' A ' 0  ' S1 ' F1 ' etc
#                ^

[>]<[->+<]  # Let B = A or F0*
# B may or may not be zero
<[-]>>  # Clear F0*
# Tape:     0 ' B ' 0 ' S1 ' F1 ' etc    (if A was zero)
#               ^
# OR        0 ' 0 ' B ' s1 ' F1 ' etc    (if A was nonzero)
#                   ^

# Let C = B or 2
# C will be guaranteed nonzero and unique from S0 and F0
>++<[<]>  # Create C
[.>>]  # Print (using S or F; does not matter)

>[>>]  # End on a zero cells with zero cells all to the right
# This is necessary for the coming functionality
# also as to not loop
]  # End non null block

# Now we consider if one of the strings was null
# Tape:    0 ' E0 ' 0 ' E1 ' etc    (if one string was null)
#          ^
# Tape:    0 '  0 ' 0 '  0 ' etc    (if neither string was null)
#          ^
# Where E is F or S (we don't care)

>[  # Execute only if one string was null

+  # Let A = E0 (plus) 1
# A may or many not be zero
# Tape: 0 ' A ' 0 ' E1 ' etc
#           ^

[>]+[<]>  # Let B = A or 1
# B is guaranteed nonzero and != E0
# Tape: 0 ' B ' ? ' E1 ' 0 ' E2 ' etc
#           ^

[.>>]  # Print

# End on zero cell as not to loop
]  # End null block

あなたの「事実」は例えば、間違っていますa=2b=1。減算する代わりに加算する必要があります。
Ørjanヨハンセン

S空の問題>は、開始時に追加し、後で[<]>左端のバイトに追加することで解決できると思いますS-それがゼロ以外の場合は何もしませんが、そうでなければ文字列を切り替えます。
Ørjanヨハンセン

@ØrjanJohansenおっしゃるとおりですb。しかし、そうではありませんa
-Quelklef

@ØrjanJohansenああ、それはうまくいくようです!いい考え!
-Quelklef

@ØrjanJohansen事実についてフォローアップしてください:それは!= a唯一のものなので、S/0, S/1, ...代わりに印刷すればうまくS/0, F/1, ...いくはずです。
-Quelklef

6

ゼリー、8 バイト

żḟ@€ØAZḢ

オンラインでお試しください!

どうやって?

żḟ@€ØAZḢ - Link: list of characters, a; list of characters, b
ż        - zip a and b
    ØA   - uppercase alphabet
 ḟ@€     - filter discard for €ach (swap @rguments)
      Z  - transpose the result
       Ḣ - head


アルゴリズムはとにかくすべきではなく、あなたが何をしたかわからない。
ジョナサンアラン

私は表示されませんので、用事私の脳は明らかにトリックを再生するXか、そこに...
エリックOutgolfer

5

Pythonの362の 47 57 54 51バイト

編集: - @ Mr.Xcoderのおかげで5バイト

編集:バグを修正するには+10バイト

編集:@betaverosのおかげで-3バイト

編集:ポップの代わりにmaxを使用して-3バイト

lambda x,y:max({*"abc"}-{x[:1],y[:1]})+max(x,y)[1:]

オンラインでお試しください!


{"a","b","c"}==> {*"abc"}57バイト
ミスターXcoder

(x[1:]or y[1:])==> max(x,y)[1:]
-betaveros

または(x or y)[1:]、空の文字列を避けるだけでよいと思います。
-betaveros

ちなみに、Python 2にはスター付きセットリテラルがないのは残念です。本当にゴルフを{*"abc"}したかったから{*`id`}です
...-betaveros

*len(x or y)代わりに1を保存します+max(x,y)[1:]
Chas Brown

4

、22バイト

FEα×ι⌈⟦LθLη⟧¿¬№⟦θη⟧ιPι

オンラインでお試しください!リンクは、コードの詳細バージョンです。長い入力の長さまで繰り返される大文字のすべての文字列を生成し、入力に表示されないすべての文字をオーバープリントします。言い換えると、出力は通常ZZZ...、それが入力の1つである場合をYYY...除き、その場合は他の入力である場合を除き、その場合はそれXXX...です。


4

Mathematica、111バイト

(c=Characters;a=#2;While[f=Alphabet[]~RandomChoice~Length@#;f==#||f==c@a]&[#&@@c@{##}~MaximalBy~Length];""<>f)&


オンラインで試してください(ctrl + vでコードを貼り付け、最後に入力を配置して、shift + enterを押します)

入力

["試して下さい"]

thanx @チェックおよびゴルフ用のツリーではありません -21バイト


これをもう一度オンラインでテストするにはどうすればよいですか?
スティーブン

リンク+情報を追加
-J42161217

@Jenny_mathy最初の文字列が空の文字列である場合、失敗したようです
Halvard Hummel

2
@HalvardHummel修正!
J42161217

1
@Notatreeが修正されました。「簡単なゴルフ」が
ダウン投票の

4

Perl 6の38の 30バイト

{(1 x.max.comb...*∉$_).tail}

オンラインでお試しください!

2つの文字列のリストとして入力を受け取り、入力に1111...ない空でない1の値を持つ最初の数値を返す匿名コードブロック。

説明:

{                          }   # Anonymous code block
  1 x.max.comb                 # String multiply 1 by the size of the non-empty string
              ...              # Create a sequence increasing by 1
                 *∉$_          # Until the number is not in the input
 (                   ).tail    # And take the last number

インクリメンターはbigint型ですか、それとも十分に大きな文字列に対してオーバーフローしますか?
GammaFunction

1
@GammaFunction Perl 6では、デフォルトの数値型はIntであり、精度は無限です
Jo King

いいね。私はこれをZshに適応させるつもりでしたが、long long残念ながら使用しています。
GammaFunction

カウントとシーケンスの代わりに、00 ..、111 ..、22 ..の最初を取得するだけで6バイトをトリミングできます。tio.run
Phil H

@PhilHいいね!私は、シーケンスのアイデアを保つことによって、もう少しそれを短縮しました
ジョー・キング

4

Zsh51 47 37 36バイト

-4組み込みアレイを使用してバイトargv-10プレフィックス除去および使用してバイトRC_EXPAND_PARAM-1ブレース拡張をインライン化することによってバイト。

<<<${${${:-{1..3}${^@#?}}:|argv}[1]}

オンラインでお試しください!

まず、これは素晴らしい挑戦でした。私はこれに着く前にたくさんのアイデアを経験しました。

<<<${${${:-{1..3}${^@#?}}:|argv}[1]}
       ${:-             }            # empty fallback
                 ${ @#?}             # remove first character from each parameter
                 ${^@  }             # enable brace expansion (set -P)
           {1..3}${^@#?}             # expand to 1foo 2foo 3foo 1bar 2bar 3bar
     ${                  :|argv}     # Set difference with 'argv'
   ${                           [1]} # The first found element
<<<                                  # print to stdout

@そして*識別子ではないので${ :|@}、動作${ :|*}しません。したがって、${ :|argv}

このメソッドは最大93の入力を処理し、一意の94番目を見つけます。を{1..3}最大可能範囲に置き換えるだけです{~..!}

Zsh48 47バイト*

for ((;$#i<${#${1:-$2}}||$@[(I)$i];i++)):
<<<$i

オンラインでお試しください!

JoKingのPerl 6による完全に新しいメソッドの提供。ただし、整数サイズの制限により、大きな文字列(n> 20)では機能しません。$@[(I)$i]は、最大インデックスへの逆配列ルックアップであり、コマンドラインパラメータで$ iが見つからない場合はゼロ(算術展開では偽)を出力します。


3

MATL、12バイト

c"1Y2@X-1)&h

入力は、印刷可能なASCII文字を含む文字列のセル配列です。出力は文字から形成される'ABC'ため、入力ドメインに属します。

オンラインでお試しください!

説明

出力は、最長の入力文字列と同じ長さです。そのn番目の文字は、両方の入力文字列のn番目の文字'ABC'とは異なる最初の文字です。

c        % Concatenate the two strings vertically. If one is shorter it is
         % right-padded with spaces. Gives a 2-row character matrix
"        % For each column
  1Y2    %   Push the string 'ABC...Z' (the upper-case letters)
  @      %   Push current column
  X-     %   Set difference
  1)     %   Get first character
  &h     %   Horizontally concatenate the results so far
         % End (implicit). Display stack (implicit)

3

Haskell、56 52 48バイト

x#y|_:t<-max x y=[c:t|c<-"abc",c:t/=x,c:t/=y]!!0

オンラインでお試しください!

有する2つの入力文字列の最大の最初の文字を置き換えabそしてc両方の入力文字列とは異なる最初のものを選びます。




3

Pyth、7 8バイト

hC-LG.T

ジャクベのおかげで1バイト

テストスイート

1つの文字列が空の入力で機能するように、転置を切り捨てるの.Tではなく、長さを保持する転置を使用しCます。

2つの文字列をタプルとして指定し、それらを転置(.T)し、で小文字のアルファベットから文字を減算することにより、結果の文字のペアまたは単一の文字をマッピングし-LG、で、未使用文字の文字列の結果のリストを転置しC、を返します最初のそのような文字列h。これは、各位置のどちらの文字列にもないアルファベット順の最初の文字で構成されます。



2

ルビー、56バイト

->a,b{a,b=b,a if a<b;a[0]=([?a,?b,?c]-[a[0],b[0]])[0];a}

2

Pyth23 22バイト

+.)-.{<G3.{,<Q1<KE1t|K

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

Pyth、22バイト

+eS-.{<G3.{,<Q1<KE1t|K

テストスイート!


説明

+.)-.{<G3.{,<Q1<KE1t|K  - Full program.
      <G3               - Yields the String "abc"; Alphabet[:3].
    .{                  - Set formed by the above.
         .{,<Q1<KE1     - Set formed by input_1[:1] and input_2[:1]
   -                    - Set subtraction.
 .)                     - Pop the last element.
+                       - Append.
                   t|K  - input_1[1:] or input_2[1:], relying on the result of Logical OR.

2

Perl 5の、82の 79バイト

sub{$_=$_[0];$_=$_[1]||$_ if/^(xz*)?$/;s/[^z]/z/||s/./y/;$_ eq$_[1]&&s/./x/;$_}

入力を2つの独立した引数として受け取り、3番目の文字列を返します。

サブルーチンは、最初の文字列に非常に似ているが、最初の非z文字をz。に置き換えた文字列を生成しようとします。次に、入力の1つが実際にはすべてのシーケンスであることが判明した場合、必要に応じて最初の文字をyまたはxで置き換えることにより、コーナーケースを処理しzます。


2

Perl 5、68バイト

sub{$_="a"x length $_[0]||$_[1];$_++while $_ eq$_[0]||$_ eq$_[1];$_}

説明:

  • (最初の文字列と同じ長さの文字 "a"の文字列)またはそれが偽の場合、つまり長さがゼロの場合は2番目の文字列で始まる
  • 1番目と2番目の両方と異なるまで増分し続けます

「a」から始まるのは、Perlが文字列を長くする場所を指すようにインクリメントを避けることでした。同じことを避けるために2つの文字列のみで、オーバーフローすることはできませんでした。

以下で実行:

perl -e '$s = ' -E 'sub{$_="a"x length $_[0]||$_[1];$_++while $_ eq$_[0]||$_ eq$_[1];$_}' -E ';say $s->("z", "true")'

1
最初の文字列が空の場合、これは失敗すると思います。
Ørjanヨハンセン

まったく正しい!一定。
エド。

2

C(gcc)70 65 73 67 61バイト

この関数は、提供された文字列が変更可能である必要があります(配列または動的に割り当てられた)

f(a,b)char*a,*b;{a=*a?a:b;*a=*a>70?33:99;*a+=*a==*b;puts(a);}

オンラインでお試しください!

標準のASCII範囲で動作します

説明:

a=*a?a:b           // If a is empty, point to b instead
*a=*a>70?33:99     // Choose a different value for the 1st character of a,
                   // while giving enough space to increment it without 
                   // going back to its previous value
*a+=*a==*b         // Increment the 1st character of a if the arbitrary
                   // chosen value is equal to the value of the 1st 
                   // character of b
puts(a)            // Outputs a

1
ルールを満たす一貫した入力ドメインがこれに与えられるかどうかはわかりません。どのような場合*a==255*b==0
Ørjanヨハンセン

あなたが正しい。固定、8バイトのコストで。
スコチネット

そこ。このソリューションにJavaのバイトカウントと同じバイトカウントを持たせることはできませんでした!:
スコチネット

印刷可能なASCIIに制限しない場合は、1桁の数字を使用できます。
Ørjanヨハンセン

誤解しない限り、それはこのチャレンジルールに反するでしょう。
スコッティネ

2

R、89 67バイト

@Giuseppeは9バイトを節約、@ user2390246は13バイトを節約

関数

function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)

デモ

# define function
f <- function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)

# test cases
f("test","test")
[1] "aest"
f("do","don't")
[1] "ao"
f("ye s","yes")
[1] "ae s"
f("maybe","mayue")
[1] "aaybe"
f("false","false")
[1] "aalse"
f("false","true")
[1] "aalse"
f("1","")
[1] "a"
f("art","bug")
[1] "crt"

1
あなたは置くことができますxし、y同じ内のsubstrコマンド。また、中括弧returnは不要ですfunction(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)
。– user2390246

1
あなたは取り除くことができreturn、それは1ライナーですので、これは関数であることから、ブレース。
ジュゼッペ

撮影、私はちょうど最初の入力に等しいf("","1")yields ""に気付きました...多分これは別のテストケースとして追加する必要があります
スローロリス

2

Java 8、119バイト

ラムダ(カレー)from Stringto lambda from Stringto String。に割り当てFunction<String, Function<String, String>>ます。

s->t->{String r=s.length()>t.length()?s:t;while((s+t).contains(r))r=r.substring(1)+(char)(Math.random()*128);return r;}

オンラインで試す

ゴルフされていないラムダ

s ->
    t -> {
        String r = s.length() > t.length() ? s : t;
        while ((s + t).contains(r))
            r = r.substring(1) + (char) (Math.random() * 128);
        return r;
    }

このソリューションは、必要な条件が満たされるまで、ランダムなASCII文字を長い文字列に回転させます。入力はUTF-8で、出力はASCIIです。

Unicodeのザラザラした詳細は知りませんが、追加されたcharコードポイントが先行するコードポイントを結合して単一のコードユニットを形成すると、このソリューションが失敗する可能性があります。これについて詳しく知っている人がこれを確認できる場合は、入力ドメインをASCIIに変更します。

Java 8、126バイト

上記と同じタイプ。

s->t->{String r;for(byte[]o=(s.length()>t.length()?s:t).getBytes();(s+t).contains(r=new String(o));o[0]%=128)o[0]++;return r;}

オンラインで試す

ゴルフされていないラムダ

s ->
    t -> {
        String r;
        for (
            byte[] o = (s.length() > t.length() ? s : t).getBytes();
            (s + t).contains(r = new String(o));
            o[0] %= 128
        )
            o[0]++;
        return r;
    }

これにより、長い文字列の最初のバイトがインクリメントされ、必要な条件が満たされるまでASCIIでラップされます。入力と出力はASCII文字列です。


1
3番目のテストケースの出力が与えられると、長さ3の文字列が出力されます。オンラインで試してください!
スティーブン

ああ、がらくた。バイトカウントを爆発させることなくこれを修正するために、Unicodeがどのように機能するかを学ぶ必要があります
Jakob


2

Bash、115 .. 77バイト

最初の(空ではない)入力文字列の最初の文字を、どちらの入力にも一致するものが見つかるまで、1,2,3に置き換えます。オンラインでお試しください!

-9、-12、-9、-8バイトはすべてGammaFunctionのおかげです

x="${1:-$2}"
for s in {1..3}"${x:1}"
{ [[ $s = @($1|$2) ]]||break;}
echo "$s"

(元のものよりかなり改善...


1
いい方法!あなたは使用することができます=し、||最後の行で、かつ使用${x:-empty_fallback}開始三元を削除します。また、末尾のスペースの場合、終了エコーに引用符が必要です。
必須の

1
TIOリンク、94バイト
GammaFunction

1
私はあなたがのために行っているもののようshift私はそれが私の方法を結ぶことになった中で二つの異なる方法
GammaFunction




1

Japt、17バイト

;B¬£ñl g1 çXÃkU v

A-Z長い入力の長さまで文字を繰り返し、入力の値を削除して、配列の最初の項目を取得します。

オンラインでお試しください!

古いソリューション、18バイト

;@!UøX}a@ñl g1 çBö

オンラインでお試しください!

アルファベットからランダムな文字を選択し、入力に存在しなくなるまで、長い文字列の長さまで繰り返します。


に失敗しました["abcdefghijklmnopqrstuvwxyz", "AAAAAAAAAAAAAAAAAAAAAAAAAA"]。それを複数回実行する場合、それが返された"AAAAAAAAAAAAAAAAAAAAAAAAAA"(私はそれを修正するまで、私のPythの答えがやったように)
ミスターXcoder

["D"、 ""]に対して失敗します。数回実行すると「D」が表示されます
-J42161217

おかげで、私はテストしていないいくつかのケースがあると考えました。+1バイトのみを修正。
ジャスティンマリナー

Ìg1 、2バイトの節約(2要素の配列g1= gJ)の代わりに動作するはずですがÌ、を使用するとバグがあるよう;です。
シャギー

@Shaggyうん、私はそれがに変わったので、それが原因でJはなくなっ-1たと思う。それが私がそもそも使用した理由です。;,1
ジャスティンマリナー

1

Python 3、74 73バイト

ステップ編のおかげで-1バイト

def f(x,y,i=1):
 while i*10<10**len(x or y)or str(i)in x+y:i*=2
 print(i)

長さがゼロでない最初の入力と同じ長さの最小整数を出力します。


iデフォルトの関数パラメーターとしてを使用してバイトを保存しますdef f(x,y,i=1):。別のバイトを保存できると思いますがwhile10*i、わかりません。
スティーブン

あなたは置き換えることができ while i*10<10**len(x or y)or str(i)in x+ywhile i<10**~-len(x or y)or str(i)in x+y72バイト
ミスターXcoder

そして、あなたはまた、バイト保存するために再帰を使用することができますf=lambda x,y,i=1:(i<10**~-len(x or y)or str(i)in x+y)and f(x,y,i*2)or i71バイト
ミスターXcoder

1

Python 2、77バイト

a=input()
b=ord(a[0][0])+1
if b==ord(a[1][0]):b+=1
print unichr(b)+a[0][1:-1]

それにはいくつかの可能性があると思います。これは、1番目の文字列の1番目の文字に1を追加し、他の入力の1番目の文字が同じかどうかをチェックするという考え方です。

**注、^は長さ0の文字列を処理しないため、この長さでは実際には機能しません。

長さ0で機能する超長解法

146バイト

a=input()
def c(i):print unichr(ord(a[i][0])+1)+a[i][1:];exit();
for x in range(2):if len(a[x-1])<1:c(x)
if a[0]==a[1]:c(1)
print a[1][0]+a[0][1:]

改善点をいただければ幸いです!


1

CJam、31 30 23バイト

q~:A:e>,3,sf*{A\f=:+!}=

入力として印刷可能なASCIIを受け取ります。入力文字列の1つと同じ長さの0、1、または2の文字列を出力します。論理的には、これらのいずれかを入力文字列のいずれかにすることはできません!

オンラインで試す

q~:A    e# Store input array as var 'A'
:e>,    e# Take the length of the lexicographically greater string in the input array
3,s     e# Generate "012"
f*      e# Repeat each number as many times as the longer string length, yielding something like ["000","111","222"]
{       e# Search array of number strings for first that returns true for this function
A\f=    e# Map each string in the input array to whether it equals the current number string (0,1)
:+!     e# Add up the array of bits and take the logical not. This returns true iff both array values were not equal to the current number string.
}=      e# Return the first number string that returns true.

配列の両方のビットが偽(NOR)である場合にのみ真を返す方法についてのアイデアはありますか?現在、私はやってい:+!ます。
geokavel

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