Objetivo
Escriba un programa o función (o equivalente) que clasifique y devuelva la letra impar en la matriz de tamaño aleatorio.
Detalles
Se le pasará una matriz (como una cadena) como entrada de dimensiones aleatorias como esta.
bbbbbbbbbb bbbbbdbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
Su trabajo es encontrar la letra que no coincide con el resto (en este caso, se d
encuentra en la línea 2, col 6) y devolver esa letra como salida. La matriz consistirá en letras A-Z
, a-z
líneas nuevas ( \n
solo en los extremos de las filas) y tendrá dimensiones que van desde 5x5 a 10x10 (25-100 letras).
Se aplican lagunas estándar. Este es un desafío de código de golf; la entrada con el código de bytes mínimos gana.
Entrada
La entrada se pasará a través de la entrada estándar como una cadena si es un programa o como argumento si es una función (o similar).
Salida
Un único personaje que es la "extraña" en la matriz o None
, nil
, NUL
, o la cadena "None"
, si no hay ningún carácter "extraño".
Más ejemplos
AAAAAAA AAAAAAA AAAAAAA AAAIAAA AAAAAAA
Responder: I
vvqvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv
Responder: q
puuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu
Responder: p
Generador
Aquí hay un generador de matriz aleatorio escrito en Python que puede usar para probar su programa. Nota: Existe una pequeña posibilidad de que pueda cometer un error y no poner una letra extraña.
Respuestas:
Python 3 , 27 bytes
Pruébalo en línea!
fuente
J ,
12 107 bytesPruébalo en línea!
Versión de 10 bytes
siseo ...
fuente
Brachylog ,
84 bytesPruébalo en línea!
Explicación
No he usado Brachylog antes, por lo que esto puede no ser óptimo.
fuente
∋≠
afterḅ
para obtener los resultados de la longitud 1 es muy inteligente. Definitivamente debe publicarlo en la pregunta de consejos Brachylog .K (oK) ,
76 bytesSolución
Pruébalo en línea!
Ejemplo:
Explicación:
Encontró un enfoque un poco más corto: evaluado de derecha a izquierda:
Notas:
Si bien espero que se elimine el aspecto adicional de este desafío, esta solución devolverá el carácter de nueva línea
\n
si no hay un carácter extraño:fuente
Prólogo (SWI) , 46 bytes
Pruébalo en línea!
O si el resultado verdadero estándar de las consultas de prólogo no está bien:
Prólogo (SWI) , 48 bytes
Pruébalo en línea!
Explicación
fuente
C (gcc) ,
9392906662 BytesMucho más corto como una función
Pruébalo en línea!
código de prueba
la versión anterior es un programa
C 86 Bytes
Emite el carácter impar, o nada. corre así;
fuente
gets()
en el controlador de prueba, ya que está desinfectando la entrada al eliminar los caracteres \ n para usted. Eso está haciendo un trabajo para que su función no funcione en la entrada original.05AB1E ,
42 bytesGuardado 2 bytes gracias a Adnan
Pruébalo en línea!
Explicación
fuente
2x2
matrices. Me perdí la parte sobre5x5
y arriba. ¡Gracias!nil
si no tiene un "extraño" ¿no?Retina , 13 bytes
Pruébalo en línea!
Explicación
Ordenar todos los personajes.
Elimina los caracteres que aparezcan al menos dos veces.
fuente
Casco , 2 bytes
Pruébalo en línea!
Esta es una función que toma una cadena como entrada y devuelve un carácter. Se necesita el mínimo de la cadena de entrada al comparar caracteres para igualdad (es decir, devuelve el carácter que es igual al menor número de otros caracteres).
fuente
C, 94 bytes
Regreso por puntero. Si no hay ninguno, regrese
\0
.Esto provocará pérdidas de memoria. Suponiendo que
int
es de 4 bytes.Pruébalo en línea!
fuente
t
se ponga a cero antes de llamar cada vez, no la primera vez.Mathematica, 27 bytes
Pruébalo en línea!
-1 byte de Martin Ender
fuente
Bash ,
1520 bytesPruébalo en línea!
Explicación:
fold
s la entrada al1
carácter por línea,sort
s en grupos de letras coincidentes, luego imprime solo las líneas que sonuniq
ue.Gracias @Nahuel Fouilleul por atrapar y ayudar a solucionar un problema con este enfoque.
fuente
|sort|
pero puede haber una solución mejorgrep -oP '^(.)((?=(?!\1).){2}|.*\K(?!\1).)'
sort
solución, gracias. Sin embargo, siempre puedes publicar esa respuesta grep como si fuera tuya.Pyth , 4 bytes
Pruébalo aquí!
fuente
.m/Q
es de 4 bytes tambiénPerl 5, 17 + 3 (-00p) -25% = 15 bytes
pruébalo en línea
fuente
Matlab, 25 bytes
La entrada "a" donde "a" no es el modo de "a". Emite una matriz vacía para ningún bicho raro.
fuente
Haskell, 33 * 0.75 = 24.75 bytes
Devuelve una lista vacía si no hay caracteres extraños.
Pruébalo en línea!
Para cada carácter
c
en la matriz (dado como una cadenas
), haga una cadena de todos los caracteress
que sean igualesc
y mantenga los de longitud 1.fuente
JavaScript (ES6), 37 bytes
Devuelve
null
si no hay letras impares.Casos de prueba
Mostrar fragmento de código
fuente
Japt , 6 bytes
Toma la entrada como una cadena de varias líneas y genera una cadena de un solo carácter, o una cadena vacía si no hay solución.
Intentalo
Explicación
Elimine los caracteres que devuelven verdadero (
k
) cuando se pasa a través de una función (@
) que cuenta (è
) las ocurrencias del elemento actual (X
) en la entrada y resta 1 (É
).fuente
Lisp común, 47 bytes
Pruébalo en línea!
Devuelve la letra impar o NIL si no existe.
fuente
Jalea , 4 bytes
Pruébalo en línea!
Regresar
\n
(una nueva línea) en caso de que no haya un carácter impar. Obviamente\n
no es un personaje imprimible.Casualmente, este es exactamente el mismo algoritmo que la respuesta Mr.Xcoder Python. (Se me ocurrió de forma independiente)
Explicación:
Eso funciona porque en una
m×n
matriz:m-1
líneas nuevas, 1 carácter impar ym×n-1
carácter normal, y1 < m-1 < m×n-1
porque5 ≤ m, n ≤ 10
.m-1
líneas nuevas ym×n
caracteres normales, ym-1 < m×n
.fuente
C # (.NET Core) , 54 bytes
Pruébalo en línea!
fuente
using
declaración en el recuento de bytes.C (gcc) ,
9186827971 bytesPruébalo en línea!
Explicación:
Compara los caracteres actuales y anteriores mientras saltas las nuevas líneas. Si es diferente, compare con el siguiente personaje. Esto nos dice si devolvemos los caracteres actuales o anteriores. La función devuelve el valor char "impar" si existe o 0 si la matriz no es impar. Nos salimos con la "próxima" verificación de caracteres porque siempre hay una nueva línea antes del
\0
carácter. Si no hay caracteres impares, retornamos intrínsecamente el \ 0 del ciclo for.Código xor más antiguo y sexy Explicación:
Haga una máscara xor en ejecución de los siguientes 3 valores de cadena. Si son todos iguales, entonces el valor será igual a cualquiera de los tres. Si son diferentes, entonces los 2 idénticos se cancelarán entre sí dejando el único.
Debe factorizar / n antes del xor o se vuelve desordenado. También debe verificar 2 caracteres para la desigualdad en caso de que s [0] sea el valor impar. Esto cuesta el extra || cheque.
fuente
v;f(char*s){while(s[3]){s[2]==10?s+=3:0;v=*s^s[1]^s[2];if(v^*s++||v^*s)break;}}
v;f(char*s){while(s[2]==10?s+=3:0,v=*s^s[1]^s[2],s[3])if(v^*s++||v^*s)break;}
Sin embargo, tu caballo ganador es el otro, siv;f(char*s){for(v=-1;*++s==10?s+=2,v--:0,*s;v=0)if(*s^s[-1])return s[v];}
s+=*++s-10?0:2
lugar de*++s==10?s+=2:0
Octava ,
2625 bytes1 byte guardado gracias a @Giuseppe
Función anónima que toma una matriz de caracteres 2D como entrada y emite la letra impar o una cadena vacía si no existe.
Pruébalo en línea!
fuente
Alice , 16 * 75% = 12 bytes
Pruébalo en línea!
Salidas
Jabberwocky
si no hay caracteres duplicados.Explicación
Este es un marco para programas lineales que operan completamente en Ordinal (modo de procesamiento de cadenas). El código real se ejecuta en zigzag y se despliega para:
En lugar de
&-
, también podríamos usarey
(transliteración a una cadena vacía). Alternativamente, al gastar un carácter más en la manipulación de la pila, también podríamos deduplicar la entrada que nos permite eliminar los caracteres no deseadosN
, pero sigue siendo el mismo número de bytes:Alice , 13 bytes
Pruébalo en línea!
Esta es la solución sin la bonificación, simplemente falta la
.n*
.fuente
Retina , 22 bytes
Pruébalo en línea! Solo requiere altura y ancho de al menos 3, en lugar de 5.
fuente
APL + WIN, 16 bytes
Solicita la entrada de pantalla y genera letras impares o nada si no hay letras impares
fuente
a/⍨1=+/a∘.=a←,⎕
por un bytePowerShell , 39 bytes
Pruébalo en línea!
Toma la entrada como una cadena con nuevas líneas (como se especifica en el desafío), la convierte en una
char
matriz. Luego,Group-Object
los personajes, de modo que los personajes se agrupan por sus nombres, luego ensort
función de lac
búsqueda. Esto asegura que el personaje solitario sea el primero, por lo que tomamos el[0]
índice y lo sacamos.Name
.Si la nueva línea es aceptable para "nada", entonces esto califica para el bono.
fuente
sort c*)[0]
podría acortarse, pero lo que ocurrió fue el mismo número de bytes,? c* -eq 1)
.$args
. También es más preciso hacerlo,([char[]]$args|group|? c* -eq 1).Name
ya que regresará con precisiónnull
cuando no haya caracteres extraños (en lugar de una nueva línea). Sin embargo, en términos de bytes, esto todavía no lo llevará por debajo de 37.None
,nil
,NUL
, o la cadena"None"
, si no hay ningún carácter "extraño".) Todavía debe ser cambiado. Newline no es parte de las respuestas aceptables.Perl 6 ,
2724-25% = 18 bytesPruébalo
Pruébalo
Esto devolverá un valor indefinido cuando se le da una entrada que no tiene un carácter extraño.
Expandido:
fuente
Brainfuck, 125 bytes
Pruébalo en línea
Imprime la letra de la matriz si no hay ninguna extraña
fuente
Java 8, 85 bytes
Este es un lambda de
String
aString
(por ejemploFunction<String, String>
). Es esencialmente una copia de la solución de Luca , pero he reducido un poco la clasificación de cadenas.Pruébalo en línea
fuente