String Ketiga

45

Diberikan dua string, menghasilkan string ketiga yang tidak sama dengan salah satu dari dua input, tetapi memiliki panjang yang sama (dalam karakter) sebagai salah satu dari input. Dijamin ada setidaknya satu output yang valid.

Uji Kasus

Test case dikutip untuk menunjukkan bahwa mereka adalah string. Keluaran adalah salah satu dari banyak kemungkinan.

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"

Aturan

  • Anda dapat memilih domain input Anda, tetapi domain itu harus terdiri dari setidaknya ASCII yang dapat dicetak, dan domain output Anda harus sama dengan domain input Anda.
  • Panjang input mungkin sama atau berbeda.
  • Output harus valid dengan probabilitas 1; yaitu, Anda dapat menghasilkan string acak sampai satu valid (dan secara teoritis Anda mungkin infinite loop), tetapi Anda tidak bisa hanya mengeluarkan string acak dan berharap itu valid. Perhatikan bahwa ini berarti output Anda tidak perlu bersifat deterministik.
  • New trailing newlines diperbolehkan, tetapi mereka tidak diperhitungkan terhadap panjang output.
  • Karena pertanyaan tentang Kesalahan Memori, itu harus bekerja dalam 60 detik hingga panjang input 6. Sebuah jawaban yang bekerja untuk itu dan secara teoritis bekerja untuk string yang lebih lama adalah OK, tetapi sesuatu yang Kesalahan Memori pada komputer modern untuk panjang input 4tidak valid.

Ini adalah , jadi jawaban tersingkat dalam byte menang.

Stephen
sumber
14
Ini sepertinya kategori pertanyaan baru yang menarik di situs ini yang mudah bagi manusia dan sulit untuk komputer. Karena komputer tidak pandai berpikir divergen! Itu mengingatkan saya pada episode Spongebob di mana dia terjaga sepanjang malam mencoba menulis esai tentang apa yang TIDAK boleh dilakukan di lampu merah.
geokavel
2
Saya mengerti domain output dapat berupa subset dari domain input, ya?
Luis Mendo
2
Pertanyaan bagus! Saya suka itu.
isaacg
2
@Quelklef Tidak, itu tidak berbeda dari kedua input.
Ørjan Johansen
3
Saya sarankan "", "1" harus ditambahkan sebagai test case, karena saya baru menyadari jawaban saya gagal untuk ini walaupun itu berfungsi untuk semua case test yang disediakan
Slow loris

Jawaban:

3

05AB1E , 8 7 byte

øvAyм¬?

Menggunakan penyandian 05AB1E . Cobalah online!

Adnan
sumber
1
Apakah ini berfungsi ketika satu input adalah string kosong?
betaveros
3
Tidak berfungsi jika string pertama kosong. TIO
Jo King
14

Haskell, 43 byte

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

Mengambil string maks (secara leksikografis kemudian), yang kita tahu tidak kosong; mengganti semua karakter dengan salah satu dari "a", "b", dan "c" menggunakan <$; dan mengembalikan yang pertama yang bukan input. Saya pikir ini mirip dengan jawaban Arang Neil dan / atau jawaban CJam dari geokavel .

(Saya sudah mengintai untuk sementara waktu tetapi ini adalah pertama kalinya saya menjawab di situs ini; hai!)

betaveros
sumber
9

Brainfuck, 97 byte

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

Jalankan kode online (perhatikan bahwa "memori dinamis" harus dipilih di kanan bawah)

Tantangan yang luar biasa! Saya pikir itu akan sepele tetapi akhirnya menjadi sangat sulit. Saya terus kembali ke sana karena saya merasa harus ada solusi BF 20-atau-begitu-elegan yang elegan. Pada titik ini, saya cukup senang saya (tampaknya) dapat berfungsi sama sekali di BF.

Input diambil sebagai str1+ \0+ str2, di mana string adalah karakter 1-byte non-nol berturut-turut.

Pengembalian (first str1 + first str2) or (first str1 + 1) or 2. Algoritma ini dipikirkan oleh brilian @ ØrjanJohansen, (mungkin) berdasarkan yang asli saya (rusak).

Berkomentar:

# 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
Quelklef
sumber
"Fakta" Anda salah, mis . a=2, b=1. Anda perlu menambahkan alih-alih mengurangi.
Ørjan Johansen
Saya pikir Anda dapat memperbaiki Smasalah kosong dengan menambahkan >di awal dan kemudian melakukan [<]>pada byte paling kiri S- jika bukan nol itu tidak melakukan apa-apa, kalau tidak itu akan mengubah string.
Ørjan Johansen
@ ØrjanJohansen Oh kau benar, itu bisa sama b. Tapi tidak a.
Quelklef
@ ØrjanJohansen Ah, sepertinya berhasil! Pemikiran yang bagus!
Quelklef
@ ØrjanJohansen Menindaklanjuti fakta: Karena != ahanya itu, jika saya mencetak S/0, S/1, ...alih-alih S/0, F/1, ...itu akan berfungsi.
Quelklef
6

Jelly , 8 byte

żḟ@€ØAZḢ

Cobalah online!

Bagaimana?

żḟ@€Ø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
Jonathan Allan
sumber
Ia mengembalikan B TIO
Jonathan Allan
Algoritma tidak seharusnya, tidak yakin apa yang Anda lakukan.
Jonathan Allan
Nevermind otakku ternyata memainkan trik karena saya tidak melihat ada Xatau di sana ...
Erik the Outgolfer
5

Python 3 , 62 47 57 54 51 byte

Sunting: - 5 byte berkat @ Mr.Xcoder

Edit: +10 byte untuk memperbaiki bug

Edit: -3 byte terima kasih kepada @betaveros

Edit: -3 byte dengan menggunakan max, bukan pop

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

Cobalah online!

Halvard Hummel
sumber
{"a","b","c"}==> {*"abc"}( 57 byte )
Tuan Xcoder
(x[1:]or y[1:])==> max(x,y)[1:]?
betaveros
Atau hanya (x or y)[1:], saya pikir Anda hanya perlu menghindari string kosong.
betaveros
Kebetulan, itu memalukan Python 2 tidak memiliki bintang menetapkan himpunan literal, karena saya benar-benar ingin bermain golf {*"abc"}ke {*`id`}...
betaveros
Simpan 1 dengan *len(x or y)sebagai gantinya +max(x,y)[1:].
Chas Brown
4

Arang , 22 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Menghasilkan semua string karakter huruf besar yang diulang dengan panjang input yang lebih panjang dan mencetak lebih banyak semua yang tidak muncul dalam input. Dengan kata lain, output biasanya ZZZ...kecuali itu adalah salah satu input, dalam hal ini YYY...kecuali jika itu adalah input lain, dalam hal ini itu XXX....

Neil
sumber
4

Mathematica, 111 byte

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


coba online (tempel kode dengan ctrl + v, masukkan input di akhir dan tekan shift + enter)

memasukkan

["uji aku"]

thanx @Tidak pohon untuk memeriksa dan golf -21 byte

J42161217
sumber
Bagaimana saya menguji ini secara online lagi?
Stephen
menambahkan tautan + info
J42161217
@Jenny_mathy Tampaknya gagal jika string pertama adalah string kosong
Halvard Hummel
2
@HalvardHummel diperbaiki!
J42161217
1
@ Notatree diperbaiki. Jika Anda berpikir bahwa "golf mudah" adalah alasan untuk downvoting maka Anda dapat melakukannya
J42161217
4

Perl 6 , 38 30 byte

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

Cobalah online!

Codeblock anonim yang mengambil input sebagai daftar dari dua string, dan mengembalikan nomor pertama dari 1111...dengan jumlah 1s yang tidak kosong yang tidak ada dalam input.

Penjelasan:

{                          }   # 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
Jo King
sumber
Apakah incrementor jenis bigint, atau akankah ini meluap untuk string yang cukup besar?
Fungsi Gamma
1
@GammaFunction Di Perl 6, tipe angka default adalah Int, yang memiliki ketelitian tak terbatas
Jo King
Oh bagus. Saya akan mengadaptasi ini ke Zsh, tetapi long longsayangnya menggunakan .
GammaFunction
Anda dapat memotong 6 byte dengan hanya mengambil yang pertama dari 00 .., 111 .., 22 .. daripada menghitung dan urutan: tio.run/…
Phil H
@PhilH Ide bagus! Saya telah memperpendeknya sedikit lebih banyak dengan mengikuti ide urutan
Jo King
4

Zsh , 51 47 37 36 byte

-4 byte dengan menggunakan array builtinargv , -10 byte dengan menggunakan prefix removal dan RC_EXPAND_PARAM, -1 byte dengan menggarisbawahi ekspansi brace.

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

Cobalah online!

Pertama, ini adalah tantangan yang luar biasa, saya pergi melalui banyak ide sebelum mendarat yang ini.

<<<${${${:-{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

@dan *bukan pengidentifikasi, jadi ${ :|@}dan ${ :|*}tidak berfungsi, karenanya penggunaan${ :|argv}

Metode ini akan bekerja hingga 93 input dan menemukan input ke-94 yang unik. Cukup ganti {1..3}dengan rentang maksimum yang dimungkinkan {~..!}.

Zsh , 48 47 byte *

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

Cobalah online!

Sepenuhnya metode baru milik pengajuan Perl 6 JoKing, tetapi tidak bekerja pada string besar (n> 20) karena batasan ukuran bilangan bulat. $@[(I)$i]adalah lookup array terbalik untuk indeks terbesar, itu akan menghasilkan nol (falsy dalam ekspansi aritmatika) jika $ i tidak ditemukan dalam parameter baris perintah.

Fungsi Gamma
sumber
3

MATL , 12 byte

c"1Y2@X-1)&h

Input adalah array sel string yang berisi karakter ASCII yang dapat dicetak. Keluaran dibentuk dari huruf-huruf'ABC' , dan jadi milik domain input.

Cobalah online!

Penjelasan

Outputnya sepanjang input string terpanjang. Karakter ke- n adalah huruf pertama dari 'ABC'yang berbeda dari karakter ke- n dari kedua string input.

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)
Luis Mendo
sumber
3

Haskell, 56 52 48 byte

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

Cobalah online!

Ganti karakter pertama dengan maksimum dua string input a, bdan cdan pilih karakter pertama yang berbeda dari kedua string input.

nimi
sumber
3

Ruby , 53 byte

->a,b{([?a,?b,?c].map{|e|e*[a,b].max.size}-[a,b])[0]}

Cobalah online!

Pada dasarnya menghasilkan string a...a,, b...bdan c...cdan memilih yang pertama tidak di input.

Conor O'Brien
sumber
1
Gagal jika input pertama adalah string kosong.
Silvio Mayolo
@SilvioMayolo diperbaiki
Conor O'Brien
42 byte
Pasang kembali Monica iamnotmaynard
3

ES6, 54 byte

a=>b=>(a[0]+b[0]|0?'a':9-(a[0]^b[0]))+(a||b).substr(1)
Fermyon
sumber
Selamat datang di PPCG :)
Shaggy
3

Pyth, 7 8 byte

hC-LG.T

Terima kasih 1 byte untuk Jakube

Suite uji

Kami menggunakan .T, mempertahankan transpos panjang, bukanC , memotong transpos, sehingga bekerja pada input di mana satu string kosong.

Dengan diberi dua string sebagai tupel, kami memindahkannya ( .T), lalu memetakan pasangan karakter atau karakter tunggal yang dihasilkan dengan mengurangkan karakter dari alfabet lowerase dengan -LG, lalu mentransposasikan daftar string yang dihasilkan dari karakter yang tidak digunakan dengan C, lalu kembali string pertama dengan h. Ini terdiri dari huruf pertama secara alfabet yang tidak ada dalam string, untuk setiap posisi.

isaacg
sumber
3

Java (OpenJDK 8) , 100 73 byte

-27 byte berkat sentuhan magis @ Nevay! :)

a->b->{b=b.length<1?a:b;if(a.length<1||(b[0]^=2)==a[0])b[0]^=1;return b;}

Cobalah online!

Input domain = Printable ASCII + codepoint 127.

Olivier Grégoire
sumber
2
73 bytes
Nevay
2

Ruby, 56 byte

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

Pyth , 23 22 byte

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

Coba di sini!

Pyth , 22 byte

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

Test Suite!


Penjelasan

+.)-.{<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.
Tuan Xcoder
sumber
2

Perl 5, 82 79 byte

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

Mengambil input sebagai dua argumen terpisah dan mengembalikan string ketiga.

Subrutin mencoba menghasilkan string yang sangat mirip dengan string pertama tetapi dengan non- zkarakter pertama diganti dengan a z. Kemudian ia berurusan dengan kasus sudut dengan mengganti karakter pertama dengan yatau x, sesuai kebutuhan, jika menemukan bahwa salah satu input sebenarnya adalah urutan dari semua z.

Silvio Mayolo
sumber
2

Perl 5 , 68 byte

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

Penjelasan:

  • dimulai dengan (string huruf "a" selama string pertama) atau string kedua jika itu salah yaitu panjang nol
  • terus bertambah hingga berbeda dari yang pertama dan kedua

Mulai dari "a" adalah untuk menghindari kenaikan ke titik di mana Perl memperpanjang string; dengan hanya dua string untuk menghindari yang sama, itu tidak bisa meluap.

Jalankan dengan:

perl -e '$s = ' -E 'sub{$_="a"x length $_[0]||$_[1];$_++while $_ eq$_[0]||$_ eq$_[1];$_}' -E ';say $s->("z", "true")'
Ed.
sumber
1
Saya pikir ini akan gagal jika string pertama kosong.
Ørjan Johansen
Benar sekali! Tetap.
Ed.
2

C (gcc) ,70 65 73 67 61 byte

Fungsi ini membutuhkan string yang disediakan agar bisa berubah (yaitu array atau dialokasikan secara dinamis).

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

Cobalah online!

Bekerja untuk kisaran ASCII standar

Penjelasan:

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
scottinet
sumber
1
Saya tidak yakin ini dapat diberikan domain input yang konsisten memenuhi aturan. Bagaimana jika *a==255dan *b==0?
Ørjan Johansen
Kamu benar. Tetap, dengan biaya 8 byte.
scottinet
Sana. Saya tidak bisa membiarkan solusi ini memiliki bytecount yang sama dengan Java! :-)
scottinet
Jika Anda tidak membatasi untuk mencetak ASCII maka Anda dapat menggunakan nomor satu digit.
Ørjan Johansen
Kecuali saya salah paham, itu akan melanggar aturan tantangan ini.
scottinet
2

R, 89 67 byte

@Giuseppe menyimpan 9 byte, @ user2390246 menyimpan 13 byte

fungsi

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

demo

# 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"
Kukang
sumber
1
Anda dapat menempatkan xdan ydalam substrperintah yang sama . Juga, kurung kurawal dan returntidak perlu:function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)
user2390246
1
Anda dapat menyingkirkan returnkarena ini adalah fungsi, dan kawat gigi karena itu adalah satu liner.
Giuseppe
Tembak, saya baru menyadari bahwa f("","1")hasil "", yang sama dengan input pertama ... mungkin ini harus ditambahkan sebagai test case lain
Slow loris
2

Java 8, 119 byte

Lambda (kari) dari Stringke lambda dari Stringke String. Tetapkan untuk 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;}

Cobalah secara Online

Lambda yang tidak tersentuh

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;
    }

Solusi ini memutar karakter ASCII acak ke string yang lebih panjang sampai kondisi yang diperlukan terpenuhi. Input adalah UTF-8 dan output adalah ASCII.

Saya tidak tahu rincian kasar dari Unicode, tetapi tampaknya masuk akal bagi saya bahwa solusi ini bisa gagal ketika ditambahkan menambahkan chartitik kode sebelumnya untuk membentuk unit kode tunggal. Jika seseorang yang tahu lebih banyak tentang ini dapat memverifikasi ini, saya akan mengubah domain input ke ASCII.

Java 8, 126 byte

Jenis yang sama seperti di atas.

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;}

Cobalah secara Online

Lambda yang tidak tersentuh

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;
    }

Ini menambah byte pertama dari string yang lebih panjang, membungkus dalam ASCII, sampai kondisi yang diperlukan terpenuhi. Input dan output adalah string ASCII.

Jakob
sumber
1
Diberikan output dari test case ketiga Anda, itu menghasilkan string dengan panjang tiga: Cobalah online!
Stephen
Ah, sial. Sekarang saya harus belajar bagaimana Unicode bekerja untuk memperbaikinya tanpa meledakkan hitungan byte ...
Jakob
2

Bash, 115 .. 77 byte

Mengganti karakter pertama dari string input pertama (tidak kosong) dengan 1,2,3 hingga tidak ada kecocokan yang ditemukan pada input mana pun. Cobalah secara Online!

-9, -12, -9, -8 byte semua berkat GammaFunction

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

(Cukup perbaikan dari aslinya ... )

roblogic
sumber
1
Metode yang bagus! Anda dapat menggunakan =dan ||di baris terakhir, dan menggunakan ${x:-empty_fallback}untuk menghapus terner mulai. Juga, Anda perlu mengutip gema akhir untuk kasus spasi tambahan. TIO Wajib
Fungsi Gamma
1
Inilah tautan TIO , 94 byte
GammaFunction
1
Saya suka apa yang akan Anda lakukan dengan shift, saya mendapatkannya untuk mengikat metode saya dalam dua metode yang berbeda .
GammaFunction
1

Perl 5 , 79 + 1 (-p) = 80 byte

$"=<>;chop;$_=length($,=$_)>length$"?$_:$";s/./chr$&+65+$i++/e while/^($"|$,)$/

Cobalah online!

Xcali
sumber
1
Gagal jika kedua string memiliki panjang yang berbeda
Halvard Hummel
Aku tahu itu. Baru saja direvisi.
Xcali
1

Japt , 17 byte

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

Mengulangi huruf A-Zdengan panjang input yang lebih panjang, menghilangkan nilai-nilai dalam input, dan mendapatkan item pertama dalam array.

Cobalah online!

Solusi lama, 18 byte

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

Cobalah online!

Pilih karakter acak dari alfabet dan ulangi hingga panjang string input yang lebih panjang, hingga tidak ada dalam input.

Justin Mariner
sumber
Gagal ["abcdefghijklmnopqrstuvwxyz", "AAAAAAAAAAAAAAAAAAAAAAAAAA"]. Ketika menjalankannya berkali-kali, ia kembali "AAAAAAAAAAAAAAAAAAAAAAAAAA"(seperti jawaban Pyth saya, sampai saya memperbaikinya)
Tn. Xcoder
Gagal untuk ["D", ""]. jika Anda menjalankannya beberapa kali Anda akan mendapatkan "D"
J42161217
Terima kasih, saya pikir ada beberapa kasus yang belum saya uji. Diperbaiki hanya +1 byte.
Justin Mariner
Ìharus berfungsi sebagai pengganti g1 untuk penyimpanan 2 byte (dalam array 2 elemen g1= gJ) tetapi tampaknya ada bug Ìketika menggunakan ;.
Shaggy
@Shaggy Ya, saya pikir penyebabnya Jtidak lagi -1karena ;mengubahnya ,. Itu sebabnya saya menggunakan 1di tempat pertama.
Justin Mariner
1

Python 3, 74 73 byte

-1 byte berkat Langkah Hen

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

Mencetak integer terendah dengan panjang yang sama dengan input pertama yang memiliki panjang bukan nol.

bensol
sumber
Simpan byte dengan isebagai parameter fungsi default: def f(x,y,i=1):. Saya pikir Anda dapat menyimpan byte lain dengan while10*itetapi saya tidak yakin.
Stephen
Anda dapat mengganti while i*10<10**len(x or y)or str(i)in x+ydengan while i<10**~-len(x or y)or str(i)in x+y ( 72 bytes )
Mr. Xcoder
Dan Anda juga dapat menggunakan rekursi untuk menghemat byte: 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 i( 71 byte )
Tn. Xcoder
1

Python 2, 77 byte

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

Saya pikir ini memiliki beberapa potensi. Idenya adalah bahwa ia menambahkan 1 ke char 1 di string 1, kemudian memeriksa apakah char 1 input lain adalah sama.

** Catatan, ^ tidak menangani 0 string panjang, jadi itu tidak benar-benar berfungsi pada panjang ini.

Inilah solusi super panjang yang bekerja dengan 0 length

146 Bytes

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

Setiap perbaikan akan dihargai!

Braeden Smith
sumber
1

CJam, 31 30 23 byte

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

Mengambil ASCII yang dapat dicetak sebagai input. Menghasilkan string 0's, 1's, atau 2's yang panjangnya sama dengan salah satu string input. Logikanya adalah bahwa salah satu dari mereka tidak dapat berupa string input!

Cobalah secara Online

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.
geokavel
sumber
Adakah yang punya ide tentang cara mengembalikan true hanya jika kedua bit dalam array itu false (NOR)? Saat ini, saya sedang melakukan :+!.
geokavel
1

C # (Mono) , 94 byte

s=>t=>{var r=s!=""?s:t;while(r==s|r==t)r=r.Substring(1).Insert(0,(char)(r[0]+1)+"");return r;}

Cobalah online!

TheLethalCoder
sumber