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.


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:



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!)


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

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

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!


{"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....


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


¿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

¿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.


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)

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.



3

ES6, 54 bytes

a=>b=>(a[0]+b[0]|0?'a':9-(a[0]^b[0]))+(a||b).substr(1)

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.



2

Ruby, 56 bytes

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

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.

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.


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")'

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

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"

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.


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 ... )


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
Me gusta lo que está buscando con el shift, lo tengo para vincular mi método en dos métodos diferentes .
GammaFunction




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.


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.


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!


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.

¿Alguien tiene alguna idea sobre cómo devolver verdadero solo si ambos bits en la matriz son falsos (NOR)? Actualmente lo estoy haciendo :+!.
geokavel

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.