La tercera cuerda

45

Dadas dos cadenas, genera una tercera cadena que no es igual a ninguna de las dos entradas, pero que tiene la misma longitud (en caracteres) que cualquiera de las entradas. Se garantiza que haya al menos una salida válida.

Casos de prueba

Los casos de prueba se citan para mostrar que son cadenas. Las salidas son una de las muchas posibles.

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"

Reglas

  • Puede elegir su dominio de entrada, pero debe estar compuesto al menos por ASCII imprimible, y su dominio de salida debe ser el mismo que su dominio de entrada.
  • Las longitudes de entrada pueden ser iguales o diferentes.
  • La salida debe ser válida con probabilidad 1; es decir, puede generar cadenas aleatorias hasta que una sea válida (y en teoría podría tener un bucle infinito), pero no puede simplemente generar una cadena aleatoria y esperar que sea válida. Tenga en cuenta que esto significa que su salida no necesita ser determinista.
  • Se permiten nuevas líneas finales automáticas, pero no cuentan para la longitud de la salida.
  • Debido a preguntas sobre errores de memoria, debe funcionar dentro de los 60 segundos hasta las longitudes de entrada de 6. Una respuesta que funciona para eso y teóricamente funciona para cadenas más largas está bien, pero algo que los errores de memoria en la computadora moderna para la longitud de entrada 4no son válidos.

Este es el , por lo que la respuesta más corta en bytes gana.

Stephen
fuente
14
Esta parece ser otra de una nueva categoría interesante de preguntas en este sitio que son fáciles para los humanos y difíciles para las computadoras. ¡Porque las computadoras no son buenas para el pensamiento divergente! Me recuerda al episodio de Bob Esponja, donde está despierto toda la noche tratando de escribir un ensayo sobre qué NO hacer en un semáforo.
geokavel
2
Entiendo que el dominio de salida puede ser un subconjunto del dominio de entrada, ¿sí?
Luis Mendo
2
¡Buena pregunta! Me gusta.
isaacg
2
@Quelklef No, eso no es diferente de ambas entradas.
Ørjan Johansen
3
Sugiero que se agregue "", "1" como un caso de prueba, ya que me di cuenta de que mi respuesta falla para esto a pesar de que funciona para todos los casos de prueba provistos
Slow loris

Respuestas:

3

05AB1E , 8 7 bytes

øvAyм¬?

Utiliza la codificación 05AB1E . Pruébalo en línea!

Adnan
fuente
1
¿Funciona esto cuando una entrada es la cadena vacía?
betaveros
3
No funciona si la primera cadena está vacía. TIO
Jo King
14

Haskell, 43 bytes

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

Toma la cadena max (lexicográficamente más tarde), que sabemos que no está vacía; reemplaza todos los caracteres con uno de "a", "b" y "c" usando <$; y devuelve el primero que no es ninguna de las entradas. Creo que esto es similar a la respuesta de Neil's Charcoal y / o la respuesta de geokavel CJam .

(He acechado por un tiempo, pero esta es la primera vez que respondo en este sitio; ¡Hola!)

betaveros
fuente
9

Brainfuck, 97 bytes

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

Ejecute el código en línea (tenga en cuenta que "memoria dinámica" debe seleccionarse en la parte inferior derecha)

Desafío impresionante! Pensé que sería trivial, pero terminó siendo realmente difícil. Sigo volviendo a ello porque siento que debería haber una solución elegante de BF de 20 o más bytes. En este punto, estoy bastante feliz de que (aparentemente) lo hice funcionar en BF.

La entrada se toma como str1+ \0+ str2, donde las cadenas son caracteres consecutivos distintos de cero de 1 byte.

Las devoluciones (first str1 + first str2) or (first str1 + 1) or 2. Este algoritmo fue pensado por el brillante @ ØrjanJohansen, (presumiblemente) basado en mi (roto) 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
fuente
Su "hecho" es un error, por ejemplo a=2, b=1. Necesita sumar en lugar de restar.
Ørjan Johansen
Creo que puede solucionar el Sproblema vacío agregando >al principio y luego haciendo [<]>en el byte más a la izquierda de S- si eso no es cero, no hace nada, de lo contrario cambia las cadenas.
Ørjan Johansen
@ ØrjanJohansen Oh, tienes razón, puede ser igual b. Pero no a.
Quelklef
@ ØrjanJohansen Ah, ¡eso parece funcionar! ¡Buen pensamiento!
Quelklef
@ ØrjanJohansen Haga un seguimiento del hecho: dado que es != asolo, si imprimo en S/0, S/1, ...lugar de S/0, F/1, ...hacerlo debería funcionar.
Quelklef
6

Jalea , 8 bytes

żḟ@€ØAZḢ

Pruébalo en línea!

¿Cómo?

żḟ@€Ø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
fuente
Vuelve B TIO
Jonathan Allan
El algoritmo no debería de todos modos, no estoy seguro de lo que hiciste.
Jonathan Allan
no importa mi cerebro aparentemente jugando trucos ya que no veo ninguno Xo allí ...
Erik the Outgolfer
5

Python 3 , 62 47 57 54 51 bytes

Editar: - 5 bytes gracias a @ Mr.Xcoder

Editar: +10 bytes para corregir un error

Editar: -3 bytes gracias a @betaveros

Editar: -3 bytes usando max en lugar de pop

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

Pruébalo en línea!

Halvard Hummel
fuente
{"a","b","c"}==> {*"abc"}( 57 bytes )
Sr. Xcoder
(x[1:]or y[1:])==> max(x,y)[1:]?
betaveros
O simplemente (x or y)[1:], creo que solo necesitas evitar la cadena vacía.
betaveros
Por cierto, es una pena Python 2 no tiene literales de conjunto con estrellas, porque realmente quería al golf {*"abc"}en {*`id`}...
betaveros
Ahorre 1 con en *len(x or y)lugar de +max(x,y)[1:].
Chas Brown
4

Carbón de leña , 22 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Genera todas las cadenas de caracteres en mayúscula repetidas a la longitud de la entrada más larga y sobreimprime todas aquellas que no aparecen en la entrada. En otras palabras, la salida es normalmente a ZZZ...menos que sea una de las entradas, en cuyo caso es a YYY...menos que sea la otra entrada, en cuyo caso es XXX....

Neil
fuente
4

Mathematica, 111 bytes

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


pruébelo en línea (pegue el código con ctrl + v, coloque la entrada al final y presione shift + enter)

entrada

["pruebame"]

Gracias @ No hay un árbol para comprobar y jugar golf -21 bytes

J42161217
fuente
¿Cómo pruebo esto en línea nuevamente?
Stephen
enlace agregado + información
J42161217
@ Jenny_mathy parece fallar si la primera cadena es la cadena vacía
Halvard Hummel
2
@HalvardHummel arreglado!
J42161217
1
@Notatree fijo. Si cree que "jugar al golf fácil" es una razón para rechazar el voto, entonces puede hacerlo
J42161217
4

Perl 6 , 38 30 bytes

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

Pruébalo en línea!

Codeblock anónimo que toma la entrada como una lista de dos cadenas y devuelve el primer número 1111...con una cantidad no vacía de 1s que no está en la entrada.

Explicación:

{                          }   # 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
fuente
¿El incrementador es de tipo bigint, o se desbordará para cadenas suficientemente grandes?
GammaFunction
1
@GammaFunction En Perl 6, el tipo de número predeterminado es Int, que tiene una precisión infinita
Jo King
Oh bien. Iba a adaptar esto a Zsh, pero long longdesafortunadamente se usa .
GammaFunction
Puede recortar 6 bytes simplemente tomando el primero de 00 .., 111 .., 22 .. en lugar de contar y secuencias: tio.run/…
Phil H
@PhilH ¡Buena idea! Lo acorté un poco más siguiendo la idea de la secuencia
Jo King,
4

Zsh , 51 47 37 36 bytes

-4 bytes utilizando incorporado array argv, -10 bytes mediante el uso de eliminación de prefijo y RC_EXPAND_PARAM, -1 byte por inlining la expansión de llaves.

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

Pruébalo en línea!

Primero, este fue un desafío increíble, revisé un montón de ideas antes de aterrizar en este.

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

@y *no son identificadores, de modo ${ :|@}y ${ :|*}no trabajo, por lo tanto, el uso de${ :|argv}

Este método funcionará hasta 93 entradas y encontrará un 94o que es único. Simplemente reemplace el {1..3}con el rango máximo posible {~..!}.

Zsh , 48 47 bytes *

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

Pruébalo en línea!

Método completamente nuevo, cortesía del envío Perl 6 de JoKing, pero no funciona en cadenas grandes (n> 20) debido a restricciones de tamaño entero. $@[(I)$i]es una búsqueda de matriz inversa al índice más grande, generará cero (falso en la expansión aritmética) si $ i no se encuentra en los parámetros de la línea de comando.

Función Gamma
fuente
3

MATL , 12 bytes

c"1Y2@X-1)&h

La entrada es un conjunto de celdas de cadenas que contienen caracteres ASCII imprimibles. La salida se forma a partir de las letras 'ABC'y, por lo tanto, pertenece al dominio de entrada.

Pruébalo en línea!

Explicación

La salida es tan larga como la cadena de entrada más larga. Su n carácter -ésimo es la primera carta del 'ABC'que es diferente de la n caracter -ésimo de ambas cadenas 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
fuente
3

Haskell, 56 52 48 bytes

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

Pruébalo en línea!

Sustituir el primer carácter de la máxima de las dos cadenas de entrada con a, by cy recoger la primera que es diferente de ambas cadenas de entrada.

nimi
fuente
3

Ruby , 53 bytes

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

Pruébalo en línea!

Básicamente genera las cadenas a...a, b...by c...cy selecciona el primero que no está en la entrada.

Conor O'Brien
fuente
1
Falla si la primera entrada es la cadena vacía.
Silvio Mayolo
@SilvioMayolo arreglado
Conor O'Brien
42 bytes
Restablecer Monica iamnotmaynard
3

ES6, 54 bytes

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

Pyth, 7 8 bytes

hC-LG.T

1 byte gracias a Jakube

Banco de pruebas

Usamos .Ttransposición de preservación de longitud, en lugar de Ctransposición truncada, para que funcione en entradas donde una cadena está vacía.

Dadas dos cadenas como una tupla, las transponemos ( .T), luego mapeamos el par de caracteres resultante o un solo carácter restando los caracteres del alfabeto de minúsculas con -LG, luego transponemos la lista resultante de cadenas de caracteres no utilizados con C, luego regresamos la primera de esas cadenas con h. Consiste en la primera letra alfabéticamente que no está en ninguna cadena, para cada posición.

isaacg
fuente
3

Java (OpenJDK 8) , 100 73 bytes

-27 bytes gracias al 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;}

Pruébalo en línea!

Dominio de entrada = ASCII imprimible + punto de código 127.

Olivier Grégoire
fuente
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
fuente
2

Pyth , 23 22 bytes

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

Pruébalo aquí!

Pyth , 22 bytes

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

¡Banco de pruebas!


Explicación

+.)-.{<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.
Sr. Xcoder
fuente
2

Perl 5, 82 79 bytes

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

Toma la entrada como dos argumentos separados y devuelve la tercera cadena.

La subrutina intenta producir una cadena muy similar a la primera cadena pero con el primer no zcarácter reemplazado por a z. Luego se ocupa de los casos de esquina reemplazando el primer carácter con yo x, según sea necesario, si encuentra que una de las entradas era de hecho una secuencia de todos z.

Silvio Mayolo
fuente
2

Perl 5 , 68 bytes

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

Explicación:

  • comienza con (cadena de letra "a" tan larga como la primera cadena) o segunda cadena si eso es falso, es decir, longitud cero
  • sigue incrementándolo hasta que sea diferente del primero y el segundo

Comenzar desde "a" s era evitar incrementar hasta el punto donde Perl alarga la cadena; con solo dos cadenas para evitar ser el mismo, no podría desbordarse.

Ejecutar con:

perl -e '$s = ' -E 'sub{$_="a"x length $_[0]||$_[1];$_++while $_ eq$_[0]||$_ eq$_[1];$_}' -E ';say $s->("z", "true")'
Ed.
fuente
1
Creo que esto fallará si la primera cadena está vacía.
Ørjan Johansen
¡Muy bien! Fijo.
Ed.
2

C (gcc) ,70 sesenta y cinco 73 67 61 bytes

La función necesita que las cadenas proporcionadas sean mutables (es decir, matrices o asignadas dinámicamente).

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

Pruébalo en línea!

Funciona para la gama estándar ASCII

Explicación:

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
fuente
1
No estoy seguro de que se le pueda dar un dominio de entrada consistente que satisfaga las reglas. ¿Qué pasa si *a==255y *b==0?
Ørjan Johansen
Tienes razón. Fijo, a un costo de 8 bytes.
scottinet
Ahí. ¡No podía permitir que esta solución tuviera el mismo bytecount que la de Java! :-)
scottinet
Si no restringe a ASCII imprimible, puede usar números de un solo dígito.
Ørjan Johansen
A menos que haya entendido mal, eso sería contrario a las reglas de este desafío.
scottinet
2

R, 89 67 bytes

@Giuseppe guardó 9 bytes, @ user2390246 guardó 13 bytes

función

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

manifestación

# 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"
Loris lento
fuente
1
Puedes poner xy ydentro del mismo substrcomando. Además, las llaves no returnson necesarias:function(x,y)sub("^.",letters[!letters%in%substr(c(x,y),1,1)][1],x)
user2390246
1
Puede deshacerse de returnesto ya que esta es una función y los frenos ya que es un revestimiento.
Giuseppe
Dispara, me acabo de dar cuenta de que los f("","1")rendimientos "", que es igual a la primera entrada ... tal vez esto debería agregarse como otro caso de prueba
Slow loris
2

Java 8, 119 bytes

Lambda (al curry) de Stringa lambda de Stringa String. Asignar 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;}

Pruébalo en línea

Lambda sin golf

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 solución gira caracteres ASCII aleatorios en la cadena más larga hasta que se cumplan las condiciones requeridas. Las entradas son UTF-8 y las salidas son ASCII.

No conozco los detalles arenosos de Unicode, pero me parece plausible que esta solución pueda fallar cuando un anexo se charune al punto de código anterior para formar una sola unidad de código. Si alguien que sabe más sobre esto puede verificar esto, cambiaré el dominio de entrada a ASCII.

Java 8, 126 bytes

Mismo tipo que el anterior.

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

Pruébalo en línea

Lambda sin golf

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

Esto incrementa el primer byte de la cadena más larga, envolviendo dentro de ASCII, hasta que se cumplan las condiciones requeridas. Las entradas y salidas son cadenas ASCII.

Jakob
fuente
1
Dado el resultado de su tercer caso de prueba, genera una cadena de longitud tres: ¡ Pruébelo en línea!
Stephen
Oh, mierda. Ahora voy a tener que aprender cómo funciona Unicode para arreglar esto sin explotar el conteo de bytes ...
Jakob
2

Bash, 115 .. 77 bytes

Reemplaza el primer carácter de la primera cadena de entrada (no vacía) con 1,2,3 hasta que no se encuentre coincidencia con ninguna de las entradas. Pruébalo en línea!

-9, -12, -9, -8 bytes, todo gracias a la función Gamma

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

(una gran mejora sobre el original ... )

roblogic
fuente
1
Buen método! Puede usar =y ||en la última línea, y usar ${x:-empty_fallback}para eliminar el ternario de inicio. Además, necesita comillas en el eco final para el caso de espacios finales. TIO obligatorio
GammaFunction
1
Aquí está el enlace TIO , 94 bytes
GammaFunction
1
Me gusta lo que está buscando con el shift, lo tengo para vincular mi método en dos métodos diferentes .
GammaFunction
1

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

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

Pruébalo en línea!

Xcali
fuente
1
Falla si las dos cadenas son de diferente longitud
Halvard Hummel
Me di cuenta que. Solo lo revisé.
Xcali
1

Japt , 17 bytes

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

Repite las letras A-Za la longitud de la entrada más larga, elimina los valores en la entrada y obtiene el primer elemento en la matriz.

Pruébalo en línea!

Solución anterior, 18 bytes

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

Pruébalo en línea!

Elige un carácter aleatorio del alfabeto y lo repite a la longitud de la cadena de entrada más larga, hasta que no esté presente en la entrada.

Justin Mariner
fuente
Falló por ["abcdefghijklmnopqrstuvwxyz", "AAAAAAAAAAAAAAAAAAAAAAAAAA"]. Al ejecutarlo varias veces, regresó "AAAAAAAAAAAAAAAAAAAAAAAAAA"(al igual que mi respuesta de Pyth, hasta que lo solucioné)
Sr. Xcoder
Falla para ["D", ""]. si lo ejecuta varias veces obtendrá "D"
J42161217
Gracias, pensé que había algunos casos que no había probado. Solucionado por solo +1 byte.
Justin Mariner
Ìdebería funcionar en lugar de g1 un ahorro de 2 bytes (en una matriz de 2 elementos g1= gJ) pero parece haber un error con el Ìuso ;.
Shaggy
@ Shaggy Sí, creo que esa causa Jya no se -1debe al ;cambio a ,. Es por eso que solía 1en primer lugar.
Justin Mariner
1

Python 3, 74 73 bytes

-1 byte gracias 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 el entero más bajo con la misma longitud que la primera de las entradas que tiene una longitud distinta de cero.

benceno
fuente
Guardar un byte con iun parámetro de la función por defecto: def f(x,y,i=1):. Creo que puede guardar otro byte con while10*ipero no estoy seguro.
Stephen
Puede reemplazar while i*10<10**len(x or y)or str(i)in x+ycon while i<10**~-len(x or y)or str(i)in x+y ( 72 bytes )
Mr. Xcoder
Y también puede usar la recursión para guardar 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 )
Sr. 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]

Creo que tiene algo de potencial. La idea es que agrega 1 al primer carácter en la primera cadena, luego comprueba si el primer carácter de la otra entrada es el mismo.

** Nota, ^ no maneja cadenas de longitud 0, por lo que realmente no funciona con esta longitud.

Aquí hay una solución súper larga que funciona con longitud 0

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

Cualquier mejora sería apreciada!

Braeden Smith
fuente
1

CJam, 31 30 23 bytes

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

Toma ASCII imprimible como entrada. Emite una cadena de 0, 1 o 2 que tiene la misma longitud que una de las cadenas de entrada. ¡La lógica es que uno de esos no puede ser ninguna de las cadenas de entrada!

Pruébalo en línea

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
fuente
¿Alguien tiene alguna idea sobre cómo devolver verdadero solo si ambos bits en la matriz son falsos (NOR)? Actualmente lo estoy haciendo :+!.
geokavel