Diretrizes
Tarefa
Escreva um método que use uma matriz de letras consecutivas (crescentes) como entrada e retorne a letra que falta na matriz (listas em alguns idiomas).
Regras
- Isso é código de golfe, então a resposta mais curta em bytes vence!
- Você sempre terá uma matriz válida
- Sempre haverá exatamente uma letra faltando
- O comprimento da matriz sempre será pelo menos 2.
- A matriz sempre conterá letras em apenas um caso (maiúsculas ou minúsculas)
- Você deve produzir na mesma caixa (maiúscula ou minúscula) que a entrada é
- A matriz sempre sempre vai uma letra por vez (pulando a letra que falta)
- O comprimento da matriz estará entre 2 e 25
- O primeiro ou o último elemento da matriz nunca estará ausente
Exemplos
['a','b','c','d','f'] -> 'e'
['O','Q','R','S'] -> 'P'
['x','z'] -> 'y'
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','x','y','z'] -> 'v'
code-golf
array-manipulation
alphabet
Amorris
fonte
fonte
['a','b','c','d','f','g']
, a saída['e']
?, Se isso torna o código mais curtoRespostas:
Pitão , 5 bytes
Experimente online!
fonte
C # (.NET Core) ,
48 4746 bytes, entrada como matriz de caracteresExperimente online!
Explicação: o primeiro elemento da matriz é incrementado, bem como um ponteiro iterando os seguintes elementos. Quando o primeiro elemento e o elemento atual são diferentes, ele retorna o primeiro elemento.
C # (.NET Core) ,
58 5650 bytes, entrada como sequênciaExperimente online!
Solução anterior de 58 bytes (mencionada no primeiro comentário):
Algoritmos usando System.Linq
Os seguintes algoritmos devem adicionar
using System.Linq;
(18 bytes) à contagem de bytes e, portanto, são mais longos.Gostei bastante deste (52 + 18 bytes):
E você também tem uma solução de uma linha (45 + 18) bytes:
E uma solução muito inteligente (37 + 18) de bytes, cortesia de Ed'ka:
fonte
s[i]-s[0]
, bastante inteligente!for
loop não possui uma condição de parada, portanto continuará repetindo até que aif
condição seja avaliadatrue
.a=>{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
(quando você usa a entrada comochar[]
). Não, graças a mim, graças ao comentário do @Nevay na minha resposta do Java 8 .s=>s.Select(e=>++e).Except(s).First()
Alice , 10 bytes
Experimente online!
Explicação
Esta é apenas uma estrutura para programas lineares que operam inteiramente no modo Ordinal (processamento de string):
O código linear real é então:
O que faz:
fonte
Haskell ,
3330 bytesExperimente online!
fonte
until
salva um byte:f(a:b)=until(`notElem`a:b)succ a
Ruby, 21 caracteres
Retorna uma matriz de elemento único, de acordo com o comentário do proprietário da pergunta .
Exemplo de execução:
Experimente online!
fonte
Java 8,
7057564846 bytes-14 (70 → 56) e -2 (48 → 46) bytes graças a @CarlosAlejo .
-8 (56 → 48) bytes graças ao @Nevay .
Explicação:
Experimente aqui.
fonte
a->{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
.C (gcc) , 33
3536.48.60bytesTodas as otimizações devem estar desativadas e somente no GCC de 32 bits.
Tome entrada como uma string.
Experimente online!
fonte
foo(char*a){return*a+1==a[1]?foo(a+1):++*a;}
é muito bom; Apenas 1 caractere mais curto que o mais naturalfoo(char*a){while(*a+1==a[1])a++;return++*a;}
Python 3 ,
7462584440 bytes-12 bytes graças a Erik, o Outgolfer. -18 bytes graças a Leaky Nun. -4 bytes graças ao musicman523.
Recebe a entrada como uma bytestring.
Experimente online!
Outra solução legal:
fonte
.difference({*s})
->-{*s}
Mathematica, 46 bytes
fonte
Min@Complement[CharacterRange@@#[[{1,-1}]],#]&
isso salvaria um byte.JavaScript (ES6), 70 bytes
Entrada como uma matriz de caracteres
Menos golfe
Teste
fonte
PHP> = 7.1, 46 bytes
Aceitar entrada como string
Sandbox do PHP Online
fonte
Retina ,
3325 bytesExperimente online! Funciona com qualquer intervalo de caracteres ASCII. Editar: salvou 8 bytes graças a @MartinEnder. Explicação: O primeiro estágio duplica a entrada. O segundo diminui todos os caracteres da cópia em 1 ponto de código. O terceiro estágio exclui todos os caracteres da cópia que ainda aparecem no original. Isso deixa apenas a entrada original, o caractere que precede o primeiro caractere da entrada original e o caractere ausente. O último estágio corresponde apenas ao caractere ausente.
fonte
Prolog SWI, 124 bytes
Exemplos:
Pouca explicação:
O
m
é o procedimento "principal",n
produz o próximo caractere esperado na lista. Ac
comparação faz - se a expectativa corresponder ao próximo item, continue; caso contrário, imprima o caractere esperado e pule para fora da janela.fonte
fail
:0=1
.C ++ 14, biblioteca padrão, tipo de contêiner genérico (
8786 bytes)O tipo de contêiner do espaço para nome
::std
é assumido (por exemplostd::string
,std::list
oustd::vector
. Caso contrário,using namespace std;
seria similar.Veja Live On Coliru
C ++ 14 sem biblioteca padrão (ainda genérica,
6463 bytes)Novamente, é necessário ajudar a pesquisa de nome apenas se o tipo de contêiner não for do espaço para nome
::std
(ou associado a ele)Live On Colirupor
std::string
exemploLive On Colirupor
char const[]
exemplofonte
Carvão , 18 bytes
Experimente online! Link é a versão detalhada do código. Recebe a entrada como uma sequência. Funciona com qualquer sequência quase contígua de caracteres ASCII.
fonte
C #, 104 bytes
Versão completa / formatada:
fonte
s=>s.Select(e=>++e).Except(s).First()
MATL,
87 bytes1 byte salvo graças a @Luis
Experimente no MATL Online
Explicação
fonte
Excel, 110 + 2 = 112 bytes
Deve ser inserido como uma fórmula de matriz ( Ctrl+ Shift+ Enter) que adicione colchetes
{ }
em cada extremidade, adicionando dois bytes. A entrada é como uma sequênciaA1
, o que é OK por OP .Esta não é a resposta mais curta de longe (o Excel raramente é), mas eu gosto de ver se isso pode ser feito.
fonte
Rexx (Regina) , 56 bytes
Experimente online!
Finalmente, um que permite ao REXX usar sua forte manipulação de strings.
fonte
CJam , 6 bytes (programa completo) / 7 bytes (bloco de código)
Experimente online!
Este é um programa CJam completo que lê a sequência de entrada da entrada padrão e imprime a letra ausente na saída padrão. CJam realmente não tem "métodos", que é o que o desafio pede, mas o mais próximo provavelmente seria um bloco de código executável, assim:
Experimente online!
Este bloco de código, quando avaliado, recebe a entrada como uma sequência (ou seja, uma matriz de caracteres) na pilha e retorna o caractere ausente também na pilha.
Explicação: No programa completo,
q
lê a sequência de entrada e a coloca na pilha.)
em seguida, aparece o último caractere da sequência de entrada e o operador range o,
transforma em uma matriz que contém todos os caracteres com pontos de código abaixo (incluindo todas as letras anteriores no alfabeto). Assim, por exemplo, se a entrada foicdfgh
, depois),
da pilha conteria as stringscdfg
(ou seja, a entrada com a última letra removida) e...abcdefg
, onde...
representa um monte de caracteres com códigos ASCII abaixoa
(ou seja, todos os caracteres abaixo da última entrada removida) carta).O operador de diferença de conjunto simétrico
^
combina essas cadeias em uma única cadeia que contém exatamente os caracteres que aparecem em uma das cadeias, mas não em ambas. Ele preserva a ordem em que os caracteres aparecem nas seqüências, portanto, para a entrada de exemplocdfg
, o resultado),^
será o seguinte...abe
, onde...
novamente significa um monte de caracteres com códigos ASCII abaixoa
. Finalmente,W=
apenas extrai o último caractere dessa string, que é exatamente o caracteree
que faltava que queríamos encontrar (e descarta o resto). Quando o programa termina, o intérprete CJam imprime implicitamente o conteúdo da pilha.Bônus: GolfScript , 6 bytes (programa completo)
Experimente online!
Acontece que quase o mesmo código também funciona no GolfScript. Economizamos um byte na versão completa do programa devido à entrada implícita do GolfScript, mas perdemos um byte porque, diferentemente do CJam
W
, o GolfScript não possui uma variável de letra única útil inicializada como -1.Além disso, o CJam possui tipos inteiros e de caracteres separados (e as strings são apenas matrizes que contêm caracteres), enquanto o GolfScript possui apenas um único tipo inteiro (e um tipo de string especial que se comporta de maneira um pouco diferente das matrizes normais). O resultado de tudo isso é que, se queremos que o intérprete GolfScript imprima a letra que está faltando, em vez de seu número de código ASCII, precisamos retornar uma cadeia de caracteres únicos em vez de apenas o próprio caractere. Felizmente, fazer essa alteração aqui requer apenas a substituição do operador de indexação pelo operador de
=
truncamento esquerdo da matriz / string>
.Obviamente, graças à E / S implícita do GolfScript, o código acima também pode ser usado como um trecho que lê uma string da pilha e retorna uma string de um caractere contendo a letra que falta. Ou melhor, qualquer trecho que pegue uma única string na pilha como argumento e retorne sua saída como uma string imprimível na pilha também é um programa completo do GolfScript.
fonte
q
(programa) ou{...}
(bloco). +1 para a abordagem emboraCasca , 6 bytes
Experimente online!
Esta função pega uma string (lista de caracteres) como entrada e retorna um caractere como saída.
Explicação
fonte
Python 2 - 76 bytes
Perde para a solução python 2 existente, mas é uma abordagem um pouco diferente, então pensei em publicá-la de qualquer maneira:
fonte
8o , 99 bytes
Fundamentação
Se a distância entre as letras for maior que dois, falta uma letra. A distância das letras é obtida calculando a diferença entre o código ASCII de cada letra.
Código
Versão ungolfed
Uso e exemplos
fonte
JavaScript (ES6), 64 bytes
Recebe a entrada como uma sequência.
Quão?
Inicialização: Começamos com n = 0 e p = 0 e chamar a função recursiva g () .
Etapa 1: incrementamos n até que
c = String.fromCharCode(n)
seja igual ao primeiro caractere da sequência de entrada s [0] .Etapa # 2: Agora que estamos sincronizados, incrementamos ambos n e p , ao mesmo tempo até que
c = String.fromCharCode(n)
não é igual a s [p] mais.Etapa 3: retornamos c : o caractere esperado que não foi encontrado.
Casos de teste
Mostrar snippet de código
fonte
J, 20 bytes
a.e.
máscara booleana para as letras de entrada no conjunto de caracteres ascii1 0 1&E.
nova máscara booleana indicando se a sequência101
começa nesse índice, ou seja, encontre qualquer lugar em que a sequência "pular" comeceI.
o índice dessa correspondência, ou seja, o personagem antes do ignorado>:
incrementa em 1, ou seja, o índice do caractere ignorado no conjunto de caracteres ascii{&a.
escolha esse índice no conjunto de caracteres ascii, ou seja, retorne o caractere ignoradoExperimente online!
fonte
ES6, 125 bytes:
http://jsbin.com/vasoqidawe/edit?console
A função retornada precisa ser chamada com uma matriz
pode-se salvar outros 9 bytes removendo .join ("") e passando uma string:
ES6, 108 bytes:
http://jsbin.com/tudiribiye/edit?console
fonte
a.join("")
poderia sera.join``
Lisp comum, 88 bytes
Experimente online!
fonte
Python 2 , 69 bytes
Experimente online!
Algumas explicações Como sabemos o primeiro e o último elementos da lista, podemos calcular facilmente a soma dos códigos de todos os caracteres no
list + the missed char
(usando fórmulas de resumo da progressão aritmética ). A diferença entre essa soma e a soma dos códigos de todos os caracteres nolist
fornece o código da letra perdida.fonte
05AB1E ,
97 bytesExperimente online!
fonte
2
que estamos usando o mesmo algoritmo, embora eu mal conheço 05AB1E :)APL (Dyalog) , 17 bytes
Experimente online!
⎕AV∘∊
Booleana: cada caracter na Uma Tomic V ector (conjunto de caracteres) membro do argumento?(
...)
Aplique a seguinte função tácita:⊃
o primeiro elemento de⎕AV
o Um Tomic V ector (o conjunto de caracteres)/⍨
qual∨\
segue o inicial (membro do argumento)∧
mas~
não é (um membro do argumento)fonte