A terceira corda

45

Dadas duas seqüências, produza uma terceira sequência que não é igual a nenhuma das duas entradas, mas tem o mesmo comprimento (em caracteres) que qualquer uma das entradas. É garantido que haja pelo menos uma saída válida.

Casos de teste

Os casos de teste são citados para mostrar que são cadeias. As saídas são uma das muitas possíveis.

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"

Regras

  • Você pode escolher seu domínio de entrada, mas ele deve ser composto de pelo menos ASCII imprimível e seu domínio de saída deve ser o mesmo que seu domínio de entrada.
  • Os comprimentos de entrada podem ser iguais ou diferentes.
  • A saída deve ser válida com probabilidade 1; isto é, você pode gerar seqüências aleatórias até que uma seja válida (e teoricamente você pode executar um loop infinito), mas não pode simplesmente gerar uma sequência aleatória e esperar que seja válida. Observe que isso significa que sua saída não precisa ser determinística.
  • Novas linhas de rastreamento automáticas são permitidas, mas elas não contam para o comprimento da saída.
  • Devido a perguntas relacionadas a erros de memória, ele deve funcionar dentro de 60 segundos até os comprimentos de entrada de 6. Uma resposta que funciona para isso e teoricamente funciona para seqüências mais longas é OK, mas algo que Erros de memória no computador moderno para o comprimento da entrada 4não seja válido.

Isso é , então a resposta mais curta em bytes vence.

Stephen
fonte
14
Isso parece ser outra de uma nova categoria interessante de perguntas neste site, fáceis para humanos e difíceis para computadores. Porque os computadores não são bons em pensamento divergente! Isso me lembra o episódio de Bob Esponja, onde ele fica acordado a noite toda tentando escrever um ensaio sobre o que NÃO fazer em um semáforo.
geokavel
2
Eu entendo o domínio de saída pode ser um subconjunto do domínio de entrada, sim?
Luis Mendo
2
Boa pergunta! Eu gosto disso.
Isaacg
2
@Quelklef Não, isso não é diferente de ambas as entradas.
Ørjan Johansen
3
Sugiro "", "1" deve ser adicionado como um caso de teste, desde que eu só percebi a minha resposta falhar por isso mesmo que ele funciona para todos os casos de teste fornecidos
Loris lentos

Respostas:

3

05AB1E , 8 7 bytes

øvAyм¬?

Usa a codificação 05AB1E . Experimente online!

Adnan
fonte
1
Isso funciona quando uma entrada é a string vazia?
Betaveros
3
Não funciona se a primeira string estiver vazia. TIO
Jo King
14

Haskell, 43 bytes

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

Pega a string max (lexicograficamente mais tarde), que sabemos que não é vazia; substitui todos os caracteres por um de "a", "b" e "c" usando <$; e retorna o primeiro que não é uma das entradas. Acho que isso é semelhante à resposta do Neil's Charcoal e / ou da resposta do geokavel CJam .

(Eu espreitei por um tempo, mas esta é minha primeira vez respondendo neste site; oi!)

betaveros
fonte
9

Brainfuck, 97 bytes

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

Execute o código online (observe que "memória dinâmica" deve ser selecionada no canto inferior direito)

Desafio incrível! Eu pensei que seria trivial, mas acabou sendo realmente difícil. Continuo voltando, porque sinto que deve haver uma solução elegante de BF de 20 ou mais bytes. Neste ponto, estou muito feliz por ter (aparentemente) conseguido que funcionasse no BF.

A entrada é tomada como str1+ \0+ str2, onde as seqüências de caracteres são caracteres consecutivos diferentes de zero byte.

Retorna (first str1 + first str2) or (first str1 + 1) or 2. Este algoritmo foi pensado pelo brilhante ØrjanJohansen, (presumivelmente) baseado no meu (quebrado) original.

Comentado:

# 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
fonte
O seu "fato" é errado, por exemplo a=2, b=1. Você precisa adicionar em vez de subtrair.
Ørjan Johansen
Eu acho que você pode corrigir o Sproblema vazio adicionando >no início e depois executando [<]>no byte mais à esquerda de S- se for diferente de zero, não fará nada, caso contrário, alterna as strings.
Ørjan Johansen
@ ØrjanJohansen Oh, você está certo, pode ser igual b. Mas não a.
Quelklef
@ ØrjanJohansen Ah, isso parece funcionar! Bem pensado!
Quelklef
@ ØrjanJohansen Acompanhe o fato: Como é != aapenas, se eu imprimir em S/0, S/1, ...vez S/0, F/1, ...dele, deve funcionar.
Quelklef
6

Gelatina , 8 bytes

żḟ@€ØAZḢ

Experimente online!

Quão?

żḟ@€Ø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
fonte
Ele retorna B TIO
Jonathan Allan
De qualquer forma, o algoritmo não deveria ter certeza do que você fez.
Jonathan Allan
Nevermind meu cérebro aparentemente brincando desde que eu não vejo nenhuma Xou lá ...
Erik o Outgolfer
5

Python 3 , 62 47 57 54 51 bytes

Edit: - 5 bytes graças a @ Mr.Xcoder

Editar: +10 bytes para corrigir um erro

Edit: -3 bytes graças a @betaveros

Editar: -3 bytes usando max em vez de pop

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

Experimente online!

Halvard Hummel
fonte
{"a","b","c"}==> {*"abc"}( 57 bytes )
Sr. Xcoder 18/08/19
(x[1:]or y[1:])==> max(x,y)[1:]?
Betaveros 19/08/19
Ou apenas (x or y)[1:], acho que você só precisa evitar a string vazia.
Betaveros 19/08/19
Aliás, é uma vergonha Python 2 não tem literais conjunto com estrela, porque eu realmente queria de golfe {*"abc"}em {*`id`}...
betaveros
Salve 1 com em *len(x or y)vez de +max(x,y)[1:].
Chas Brown
4

Carvão , 22 bytes

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

Experimente online! Link é a versão detalhada do código. Gera todas as seqüências de caracteres em maiúsculas repetidas para o comprimento da entrada mais longa e superimprime todas as que não aparecem na entrada. Em outras palavras, a saída é normalmente, a ZZZ...menos que seja uma das entradas; nesse caso, a YYY...menos que seja a outra entrada; nesse caso, é XXX....

Neil
fonte
4

Mathematica, 111 bytes

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


experimente online (cole o código com ctrl + v, insira a entrada no final e pressione Shift + Enter)

entrada

["me teste"]

thanx @Não existe uma árvore para verificar e jogar golfe -21 bytes

J42161217
fonte
Como testo isso online novamente?
Stephen
link adicionado + info
J42161217
@Jenny_mathy parece falhar se o primeiro string é a cadeia vazia
Halvard Hummel
2
@HalvardHummel fixed!
precisa saber é o seguinte
1
@Notatree fixed. Se você acha que "golfe fácil" é uma razão para downvoting então você está convidado a fazê-lo
J42161217
4

Perl 6 , 38 30 bytes

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

Experimente online!

Código de bloqueio anônimo que recebe entrada como uma lista de duas cadeias e retorna o primeiro número 1111...com uma quantidade não vazia de 1s que não está na entrada.

Explicação:

{                          }   # 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
Brincadeira
fonte
O incrementador é do tipo bigint, ou isso excederá as strings suficientemente grandes?
GammaFunction 26/03
1
@GammaFunction No Perl 6, o tipo de número padrão é Int, que possui precisão infinita
Jo King
Ah legal. Eu estava indo para adaptar isso ao Zsh, mas ele usa long longinfelizmente.
GammaFunction 26/03
Você pode cortar 6 bytes apenas com o primeiro de 00 .., 111 .., 22 .. em vez de contar e seqüências: tio.run/…
Phil H
@PhilH Good idea! Eu reduzi um pouco mais mantendo a ideia da sequência
Jo King
4

Zsh , 51 47 37 36 bytes

-4 bytes usando incorporado matriz argv, -10 bytes usando remoção prefixo e RC_EXPAND_PARAM, -1 byte por inlining a expansão cinta.

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

Experimente online!

Primeiro, este foi um desafio incrível, passei por uma tonelada de idéias antes de aterrar nessa.

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

@e *não são identificadores, por isso ${ :|@}e ${ :|*}não fazer o trabalho, portanto, o uso de${ :|argv}

Este método irá trabalhar com 93 entradas e encontrar uma 94 que é única. Simplesmente substitua o {1..3}com o alcance máximo possível {~..!}.

Zsh , 48 47 bytes *

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

Experimente online!

Método completamente novo, cortesia da submissão Perl 6 do JoKing, mas não funciona em strings grandes (n> 20) devido a restrições de tamanho inteiro. $@[(I)$i]é uma pesquisa de matriz reversa para o maior índice, ele produzirá zero (falsidade na expansão aritmética) se $ i não for encontrado nos parâmetros da linha de comando.

GammaFunction
fonte
3

MATL , 12 bytes

c"1Y2@X-1)&h

Input é uma matriz de células que contém caracteres ASCII imprimíveis. A saída é formada a partir das letras 'ABC'e, portanto, pertence ao domínio de entrada.

Experimente online!

Explicação

A saída é tão longa quanto a maior string de entrada. Sua n caráter -ésima é a primeira letra do 'ABC'que é diferente do n caráter -ésimo de ambas as cadeias de entrada.

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
fonte
3

Haskell, 56 52 48 bytes

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

Experimente online!

Substituir o primeiro caractere da máxima das duas cadeias de entrada com a, be ce escolher o primeiro que é diferente de ambas as cadeias de entrada.

nimi
fonte
3

Ruby , 53 bytes

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

Experimente online!

Basicamente gera as cadeias a...a, b...be c...ce seleciona o primeiro não na entrada.

Conor O'Brien
fonte
1
Falha se a primeira entrada for a sequência vazia.
Silvio Mayolo
@SilvioMayolo corrigido
Conor O'Brien
42 bytes
Restabelece Monica iamnotmaynard 15/12
3

ES6, 54 bytes

a=>b=>(a[0]+b[0]|0?'a':9-(a[0]^b[0]))+(a||b).substr(1)
Fermyon
fonte
Bem-vindo ao PPCG :)
Shaggy
3

Pitão, 7 8 bytes

hC-LG.T

1 byte graças a Jakube

Suíte de teste

Utilizamos a .Ttransposição de preservação de comprimento, e não a Ctransposição de truncamento, para que funcione nas entradas em que uma sequência está vazia.

Dadas duas seqüências de caracteres como uma tupla, nós .Tas transpomos () -LG, em seguida, mapeamos o par de caracteres resultante ou o caractere único subtraindo o (s) caractere (s) do alfabeto inferior com , depois transpomos a lista resultante de strings de caracteres não utilizados com e C, em seguida, retornamos a primeira dessas cordas com h. Consiste na primeira letra alfabética que não está em nenhuma das seqüências, para cada posição.

isaacg
fonte
3

Java (OpenJDK 8) , 100 73 bytes

-27 bytes graças ao toque mágico de @ Nevay! :)

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

Experimente online!

Domínio de entrada = ASCII imprimível + ponto de código 127.

Olivier Grégoire
fonte
2
73 bytes
Nevay
2

Ruby, 56 bytes

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

Pitão , 23 22 bytes

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

Experimente aqui!

Pitão , 22 bytes

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

Suíte de teste!


Explicação

+.)-.{<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.
Mr. Xcoder
fonte
2

Perl 5, 82 79 bytes

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

Recebe a entrada como dois argumentos separados e retorna a terceira sequência.

A sub-rotina tenta produzir uma sequência muito semelhante à primeira, mas com o primeiro não zcaractere substituído por a z. Em seguida, lida com os casos de canto, substituindo o primeiro caractere por , you x, conforme necessário, se descobrir que uma das entradas era de fato uma sequência de todas z.

Silvio Mayolo
fonte
2

Perl 5 , 68 bytes

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

Explicação:

  • começa com (sequência da letra "a" contanto que a primeira sequência) ou segunda sequência, se for falso, ou seja, comprimento zero
  • continua aumentando isso até que seja diferente do primeiro e do segundo

Partir de "a" s era evitar incrementar até o ponto em que Perl alonga a string; com apenas duas cordas para evitar ser o mesmo, não poderia transbordar.

Executar com:

perl -e '$s = ' -E 'sub{$_="a"x length $_[0]||$_[1];$_++while $_ eq$_[0]||$_ eq$_[1];$_}' -E ';say $s->("z", "true")'
Ed.
fonte
1
Eu acho que isso falhará se a primeira string estiver vazia.
Ørjan Johansen
Muito bem! Fixo.
Ed.
2

C (gcc) ,70 65 73 67 61 bytes

A função precisa que as seqüências fornecidas sejam mutáveis ​​(ou seja, matrizes ou alocadas dinamicamente).

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

Experimente online!

Funciona para a linha ASCII padrão

Explicação:

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
escoteiro
fonte
1
Não tenho certeza se isso pode ser um domínio de entrada consistente que satisfaça as regras. E se *a==255e *b==0?
Ørjan Johansen
Você está certo. Fixo, ao custo de 8 bytes.
Scottinet 22/08/19
Lá. Eu não poderia deixar que esta solução tivesse o mesmo número de bytes que o Java! :-)
scottinet
Se você não restringir ao ASCII imprimível, poderá usar números de um dígito.
Ørjan Johansen
A menos que eu entenda mal, isso seria contra as regras deste desafio.
Scottinet 22/08/19
2

R, 89 67 bytes

@Giuseppe salvou 9 bytes, @ user2390246 salvou 13 bytes

função

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

demonstração

# 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"
Lóris lento
fonte
1
Você pode colocar xe ydentro do mesmo substrcomando. Além disso, chaves e returnsão desnecessários:function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)
user2390246
1
Você pode se livrar, returnjá que essa é uma função, e o aparelho, uma vez que é uma linha.
21717 Giuseppe
Atirar, eu só percebi que f("","1")os rendimentos "", que é igual à primeira entrada ... talvez este deve ser adicionado como um outro caso de teste
Loris lentos
2

Java 8, 119 bytes

Lambda (ao curry) de Stringpara lambda de Stringpara String. Atribuir a 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;}

Experimente Online

Lambda ungolfed

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

Esta solução gira caracteres ASCII aleatórios na cadeia mais longa até que as condições necessárias sejam atendidas. As entradas são UTF-8 e as saídas são ASCII.

Não conheço os detalhes do Unicode, mas parece plausível para mim que essa solução possa falhar quando um anexo charse une ao ponto de código anterior para formar uma única unidade de código. Se alguém que souber mais sobre isso puder verificar isso, alterarei o domínio de entrada para ASCII.

Java 8, 126 bytes

Mesmo tipo que acima.

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

Experimente Online

Lambda ungolfed

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

Isso incrementa o primeiro byte da cadeia mais longa, quebrando dentro do ASCII, até que as condições necessárias sejam atendidas. Entradas e saídas são sequências ASCII.

Jakob
fonte
1
Dada a saída do seu terceiro caso de teste, ela gera uma cadeia de comprimento três: Experimente online!
Stephen
Ah, merda. Agora vou ter que aprender como Unicode funciona, a fim de corrigir isso sem explodir a contagem de byte ...
Jakob
2

Bash, 115 .. 77 bytes

Substitui o primeiro caractere da primeira sequência de entrada (não vazia) por 1,2,3 até que nenhuma correspondência seja encontrada em nenhuma das entradas. Experimente Online!

-9, -12, -9, -8 bytes, tudo graças à GammaFunction

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

(uma melhoria em relação ao original ... )

roblogic
fonte
1
Bom método! Você pode usar =e ||na última linha e usar ${x:-empty_fallback}para remover o ternário inicial. Além disso, você precisa de aspas no eco final para o caso de espaços à direita. TIO obrigatório
GammaFunction 26/03
1
Aqui está o link do TIO , 94 bytes
GammaFunction
1
Eu gosto do que você está procurando com o shift, consegui amarrar meu método em dois métodos diferentes .
GammaFunction 26/03
1

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

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

Experimente online!

Xcali
fonte
1
Falhará se as duas cordas são de diferentes comprimentos
Halvard Hummel
Eu percebi isso. Apenas revisei.
Xcali
1

Japonês , 17 bytes

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

Repete as letras A-Zpara o comprimento da entrada mais longa, remove os valores na entrada e obtém o primeiro item da matriz.

Experimente online!

Solução antiga, 18 bytes

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

Experimente online!

Escolhe um caractere aleatório do alfabeto e o repete no comprimento da string de entrada mais longa, até que ele não esteja presente na entrada.

Justin Mariner
fonte
Falha no ["abcdefghijklmnopqrstuvwxyz", "AAAAAAAAAAAAAAAAAAAAAAAAAA"]. Quando executá-lo várias vezes, ele retornou "AAAAAAAAAAAAAAAAAAAAAAAAAA"(assim como a minha resposta Pyth fez, até que eu fixo que)
Mr. Xcoder
Falha em ["D", ""]. Se você executá-lo várias vezes você vai ter "D"
J42161217
Obrigado, imaginei que havia alguns casos que não havia testado. Corrigido por apenas +1 byte.
23717 Justin Mariner
Ìdeve funcionar no lugar de g1 uma economia de 2 bytes (em uma matriz de 2 elementos g1= gJ), mas parece haver um erro Ìao usar ;.
Shaggy
@ Shaggy Sim, acho que essa causa Jnão é mais -1por causa da ;mudança ,. É por isso que eu usei 1em primeiro lugar.
Justin Mariner
1

Python 3, 74 73 bytes

-1 byte graças a Step 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)

Imprime o número inteiro mais baixo com o mesmo comprimento que a primeira das entradas que possui um comprimento diferente de zero.

benzeno
fonte
Salvar um byte com icomo um parâmetro de função padrão: def f(x,y,i=1):. Acho que você pode salvar outro byte, while10*imas não tenho certeza.
Stephen
Você pode substituir while i*10<10**len(x or y)or str(i)in x+ypor while i<10**~-len(x or y)or str(i)in x+y ( 72 bytes )
Sr. Xcoder 20/17
E você também pode usar recursão para salvar bytes: 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 bytes )
Mr. Xcoder
1

Python 2, 77 bytes

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

Eu acho que tem algum potencial. A idéia é que ele adicione 1 ao 1º caractere na 1ª sequência e verifique se o 1º caractere da outra entrada é o mesmo.

** Observe que ^ não manipula 0 strings de comprimento, portanto, ele realmente não funciona nesse comprimento.

Aqui está uma solução super longa que funciona com 0 comprimento

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

Qualquer melhoria seria apreciada!

Braeden Smith
fonte
1

CJam, 31 30 23 bytes

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

Toma ASCII imprimível como entrada. Emite uma sequência de 0, 1 ou 2 com o mesmo comprimento de uma das sequências de entrada. A lógica é que uma dessas não pode ser uma das cadeias de entrada!

Experimente 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
fonte
Alguém tem alguma idéia de como retornar true somente se os dois bits da matriz forem falsos (NOR)? Atualmente estou fazendo :+!.
geokavel