Objetivo
Escreva um programa ou função (ou equivalente) que classifique e retorne a letra ímpar na matriz de tamanho aleatório.
Detalhes
Você receberá uma matriz (como uma string) como entrada de dimensões aleatórias como esta.
bbbbbbbbbb bbbbbdbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
Seu trabalho é encontrar a letra que não corresponde ao restante (neste caso, é d
encontrada na linha 2, coluna 6) e retornar essa letra como saída. A matriz será composta por letras A-Z
, a-z
novas linhas ( \n
apenas nas extremidades das linhas) e terá dimensões que variam de 5x5 a 10x10 (25 a 100 letras).
Aplicam-se brechas padrão. Este é um desafio de código de golfe; entrada com código de menos bytes ganha.
Entrada
A entrada será transmitida através da entrada padrão como uma string, se for um programa ou como argumento, se for uma função (ou similar).
Resultado
A única personagem que é o "estranho" na matriz ou None
, nil
, NUL
ou a corda "None"
se não houver nenhum caráter "estranho".
Mais exemplos
AAAAAAA AAAAAAA AAAAAAA AAAIAAA AAAAAAA
Responda: I
vvqvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv vvvvvvvvvv
Responda: q
puuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu uuuuuuuuu
Responda: p
Gerador
Aqui está um gerador de matriz aleatória escrito em Python que você pode usar para testar seu programa. Nota: Há uma pequena chance de que isso possa cometer um erro e não colocar uma letra estranha.
Respostas:
Python 3 , 27 bytes
Experimente online!
fonte
J ,
12 107 bytesExperimente online!
Versão de 10 bytes
assobios ...
fonte
Braquilog ,
84 bytesExperimente online!
Explicação
Eu não usei o Brachylog antes, então isso pode não ser o ideal.
fonte
∋≠
afterḅ
para obter os resultados do comprimento 1 é muito inteligente. Você definitivamente deve publicá-lo na pergunta sobre dicas do Brachylog .K (oK) ,
76 bytesSolução
Experimente online!
Exemplo:
Explicação:
Foi encontrada uma abordagem um pouco mais curta: avaliada da direita para a esquerda:
Notas:
Enquanto espero que o aspecto bônus deste desafio seja descartado, esta solução retornará o caractere de nova linha
\n
se não houver um caractere estranho:fonte
Prolog (SWI) , 46 bytes
Experimente online!
Ou se a saída verdadeira padrão das consultas de prólogo não estiver correta :
Prolog (SWI) , 48 bytes
Experimente online!
Explicação
fonte
C (gcc) ,
9392906662 bytesMuito mais curto como uma função
Experimente online!
código de teste
versão antiga é um programa
C 86 bytes
Emite o caractere ímpar ou nada. corra assim;
fonte
gets()
no driver de teste, pois está limpando a entrada removendo os \ n caracteres para você. Isso está fazendo algum trabalho para que sua função não esteja funcionando na entrada original.05AB1E ,
42 bytesEconomizou 2 bytes graças a Adnan
Experimente online!
Explicação
fonte
2x2
matrizes. Eu perdi a parte5x5
e subi. Obrigado!nil
se não tiver um "estranho", não é?Retina , 13 bytes
Experimente online!
Explicação
Classifique todos os caracteres.
Remova todos os caracteres que aparecerem pelo menos duas vezes.
fonte
Casca , 2 bytes
Experimente online!
Esta é uma função que recebe uma string como entrada e retorna um caractere. É necessário o mínimo da string de entrada ao comparar caracteres para igualdade (ou seja, retorna o caractere que é igual ao menor número de outros caracteres).
fonte
C, 94 bytes
Retorno por ponteiro. Se não houver, retorne
\0
.Isso causará vazamentos de memória. Supondo que
int
sejam 4 bytes.Experimente online!
fonte
t
seja zerada antes de chamar cada vez que não é a primeira vez.Mathematica, 27 bytes
Experimente online!
-1 byte de Martin Ender
fonte
Bash ,
1520 bytesExperimente online!
Explicação:
fold
s a entrada do1
caractere por linha,sort
s em grupos de letras correspondentes e, em seguida, imprime apenas as linhas que sãouniq
ue.Obrigado a @Nahuel Fouilleul por capturar e ajudar a solucionar um problema com essa abordagem.
fonte
|sort|
mas pode haver uma solução melhorgrep -oP '^(.)((?=(?!\1).){2}|.*\K(?!\1).)'
sort
correção, obrigado. Você sempre pode postar essa resposta grep como sua, se quiser.Pitão , 4 bytes
Experimente aqui!
fonte
.m/Q
é de 4 bytes bemPerl 5, 17 + 3 (-00p) -25% = 15 bytes
experimente online
fonte
Matlab, 25 bytes
A entrada "a" onde "a" não é o modo de "a". Produz um array vazio para nenhum oddball.
fonte
Haskell, 33 * 0,75 = 24,75 bytes
Retorna uma lista vazia se não houver um caractere ímpar.
Experimente online!
Para cada caractere
c
na matriz (fornecido como uma strings
), faça uma string de todos os caracteress
iguaisc
e mantenha os caracteres de comprimento 1.fonte
JavaScript (ES6), 37 bytes
Retorna
null
se não houver uma letra ímpar.Casos de teste
Mostrar snippet de código
fonte
Japt , 6 bytes
Recebe a entrada como uma sequência de linhas múltiplas e gera uma única sequência de caracteres ou uma sequência vazia, se não houver solução.
Tente
Explicação
Remova os caracteres que retornam verdade (
k
) quando passados por uma função (@
) que conta (è
) as ocorrências do elemento atual (X
) na entrada e subtrai 1 (É
).fonte
Lisp comum, 47 bytes
Experimente online!
Retorna a letra ímpar ou NIL, se não existir.
fonte
Gelatina , 4 bytes
Experimente online!
Retornar
\n
(uma única nova linha) caso não haja caracteres estranhos. Obviamente\n
não é um caractere imprimível.Coincidentemente, esse é exatamente o mesmo algoritmo que a resposta do Mr.Xcoder Python. (Eu vim com ele de forma independente)
Explicação:
Isso funciona porque em uma
m×n
matriz:m-1
novas linhas, 1 caractere ímpar em×n-1
caractere normal e1 < m-1 < m×n-1
porque5 ≤ m, n ≤ 10
.m-1
novas linhas em×n
caracteres normais, em-1 < m×n
.fonte
C # (.NET Core) , 54 bytes
Experimente online!
fonte
using
instrução na contagem de bytes.C (gcc) ,
9186827971 bytesExperimente online!
Explicação:
Compare o caractere atual e o anterior, ignorando as novas linhas. Se diferente, compare com o próximo caractere. Isso nos diz se retornamos caracteres atuais ou anteriores. A função retorna o valor de caractere "ímpar" se existir ou 0 se a matriz não for ímpar. Nós nos safamos da "próxima" verificação de char, porque sempre há uma nova linha antes do
\0
char. Se não houver um caractere ímpar, retornamos intrinsecamente o \ 0 do loop for.Código xor mais antigo e mais sexy Explicação:
Faça uma máscara xor em execução dos próximos 3 valores de sequência. Se forem todos iguais, o valor será igual a qualquer um dos três. Se forem diferentes, os 2 idênticos se cancelarão deixando o único.
Deve fatorar / n antes do xor ou ficar confuso. Também é necessário verificar 2 caracteres quanto à desigualdade, caso s [0] seja o valor ímpar. Isso custa o extra || Verifica.
fonte
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;}
No entanto o seu cavalo vencedor é o outro, se você mexer com ele um pouco, para 73:v;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
vez de*++s==10?s+=2:0
Oitava ,
2625 bytes1 byte salvo graças a @Giuseppe
Função anônima que recebe uma matriz de caracteres 2D como entrada e gera uma letra ímpar ou uma sequência vazia, se não existir.
Experimente online!
fonte
Alice , 16 * 75% = 12 bytes
Experimente online!
Saídas
Jabberwocky
se não houver caracteres duplicados.Explicação
Essa é uma estrutura para programas lineares que operam inteiramente no Ordinal (modo de processamento de strings). O código real é executado em zigue-zague e se desdobra em:
Em vez de
&-
, também poderíamos usarey
(transliteração para uma string vazia). Como alternativa, gastando mais um caractere na manipulação de pilha, também poderíamos deduplicar a entrada, o que nos permite remover os caracteres indesejadosN
, mas ainda é a mesma contagem de bytes:Alice , 13 bytes
Experimente online!
Esta é a solução sem o bônus, simplesmente está faltando o
.n*
.fonte
Retina , 22 bytes
Experimente online! Requer apenas altura e largura de pelo menos 3, em vez de 5.
fonte
APL + WIN, 16 bytes
Solicita a entrada na tela e gera uma letra ímpar ou nada se não houver uma letra ímpar
fonte
a/⍨1=+/a∘.=a←,⎕
para um bytePowerShell , 39 bytes
Experimente online!
Recebe a entrada como uma string com novas linhas (conforme especificado no desafio) e a converte em uma
char
matriz. Nós, então,Group-Object
os caracteres, para que os caracteres sejam agrupados por seus nomes e depois comsort
base noc
ount. Isso garante que o caractere solitário seja o primeiro, então pegamos o[0]
índice e produzimos seu.Name
.Se a nova linha for aceitável para "nada", isso será qualificado para o bônus.
fonte
sort c*)[0]
poder ser encurtado, mas o que eu criei foi o mesmo número de bytes? c* -eq 1)
,.$args
. Além disso, é mais preciso fazer([char[]]$args|group|? c* -eq 1).Name
isso, pois retornará com precisãonull
quando não houver caracteres ímpares (em vez de nova linha). No entanto, em termos de bytes isso ainda não lhe trará abaixo 37.None
,nil
,NUL
ou a corda"None"
se não houver nenhum caráter "estranho".) Deve ainda ser alterada. A nova linha não faz parte das respostas aceitáveis.Perl 6 ,
2724 -25% = 18 bytesTeste-o
Teste-o
Isso retornará um valor indefinido quando receber uma entrada que não tenha um caractere ímpar.
Expandido:
fonte
Brainfuck, 125 bytes
Experimente Online
Imprime a letra da matriz se não houver um número ímpar
fonte
Java 8, 85 bytes
Este é um lambda de
String
paraString
(por exemploFunction<String, String>
). É essencialmente uma cópia da solução de Luca , mas reduzi um pouco a seqüência de caracteres.Experimente Online
fonte