Esta ideia é vagamente baseada na mensagem de bate-papo de @ TùxCräftîñg .
Dê uma olhada na sequência de exemplo abaixo:
INVALID0
, INVALID1
, INVALID2
INVALID3
, INVALID4
...INVALID9
Depois INVALID9
, continua assim:
INVALI0
, INVALI1
, INVALI2
, INVALI3
...INVALI9
E depois INVALI9
, é assim:
INVAL0
, INVAL1
, INVAL2
, INVAL3
...INVAL9
Depois, INVAL9
é assim:
INVA0
, INVA1
, INVA2
, INVA3
, ...INVA9
Observe como sempre removíamos uma letra da palavra INVALID
.
Você continuará repetindo isso até chegar a uma única letra, ou seja, a letra I
:
I0
, I1
, I2
, I3
, I4
...I9
Agora, sua tarefa é pegar uma entrada de uma palavra e produzir uma sequência a partir dela, como no exemplo acima. Seu código também deve funcionar com letras únicas e, nesse caso, a sequência resultante será mais curta.
Você pode escolher qualquer formato de entrada e saída que preferir (com ou sem um separador, conforme desejar), mas deve especificar qual você escolheu.
A sequência precisa estar na ordem exata especificada.
O código mais curto, em bytes, que conclui esse desafio com êxito, vence o desafio.
Sequência completa no exemplo acima:
INVALID0, INVALID1, INVALID2, INVALID3, INVALID4, INVALID5, INVALID6, INVALID7, INVALID8, INVALID9, INVALI0, INVALI1, INVALI2, INVALI3, INVALI4, INVALI5, INVALI6, INVALI7, INVALI8, INVALI9, INVAL0, INVAL1, INVAL2, INVAL3, INVAL4, INVAL5, INVAL6, INVAL7, INVAL8, INVAL9, INVA0, INVA1, INVA2, INVA3, INVA4, INVA5, INVA6, INVA7, INVA8, INVA9, INV0, INV1, INV2, INV3, INV4, INV5, INV6, INV7, INV8, INV9, IN0, IN1, IN2, IN3, IN4, IN5, IN6, IN7, IN8, IN9, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9
Outros exemplos:
Entrada: MAYBE
(Maiúsculas e minúsculas não importam)
Saída:
MAYBE0, MAYBE1, MAYBE2, MAYBE3, MAYBE4, MAYBE5, MAYBE6, MAYBE7, MAYBE8, MAYBE9, MAYB0, MAYB1, MAYB2, MAYB3, MAYB4, MAYB5, MAYB6, MAYB7, MAYB8, MAYB9, MAY0, MAY1, MAY2, MAY3, MAY4, MAY5, MAY6, MAY7, MAY8, MAY9, MA0, MA1, MA2, MA3, MA4, MA5, MA6, MA7, MA8, MA9, M0, M1, M2, M3, M4, M5, M6, M7, M8, M9
Entrada: AFTER
Saída:
AFTER0, AFTER1, AFTER2, AFTER3, AFTER4, AFTER5, AFTER6, AFTER7, AFTER8, AFTER9, AFTE0, AFTE1, AFTE2, AFTE3, AFTE4, AFTE5, AFTE6, AFTE7, AFTE8, AFTE9, AFT0, AFT1, AFT2, AFT3, AFT4, AFT5, AFT6, AFT7, AFT8, AFT9, AF0, AF1, AF2, AF3, AF4, AF5, AF6, AF7, AF8, AF9, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9
Entrada: WHAT ARE YOU DOING
WHAT ARE YOU DOING0, WHAT ARE YOU DOING1, WHAT ARE YOU DOING2, WHAT ARE YOU DOING3, WHAT ARE YOU DOING4, WHAT ARE YOU DOING5, WHAT ARE YOU DOING6, WHAT ARE YOU DOING7, WHAT ARE YOU DOING8, WHAT ARE YOU DOING9, WHAT ARE YOU DOIN0, WHAT ARE YOU DOIN1, WHAT ARE YOU DOIN2, WHAT ARE YOU DOIN3, WHAT ARE YOU DOIN4, WHAT ARE YOU DOIN5, WHAT ARE YOU DOIN6, WHAT ARE YOU DOIN7, WHAT ARE YOU DOIN8, WHAT ARE YOU DOIN9, WHAT ARE YOU DOI0, WHAT ARE YOU DOI1, WHAT ARE YOU DOI2, WHAT ARE YOU DOI3, WHAT ARE YOU DOI4, WHAT ARE YOU DOI5, WHAT ARE YOU DOI6, WHAT ARE YOU DOI7, WHAT ARE YOU DOI8, WHAT ARE YOU DOI9, WHAT ARE YOU DO0, WHAT ARE YOU DO1, WHAT ARE YOU DO2, WHAT ARE YOU DO3, WHAT ARE YOU DO4, WHAT ARE YOU DO5, WHAT ARE YOU DO6, WHAT ARE YOU DO7, WHAT ARE YOU DO8, WHAT ARE YOU DO9, WHAT ARE YOU D0, WHAT ARE YOU D1, WHAT ARE YOU D2, WHAT ARE YOU D3, WHAT ARE YOU D4, WHAT ARE YOU D5, WHAT ARE YOU D6, WHAT ARE YOU D7, WHAT ARE YOU D8, WHAT ARE YOU D9, WHAT ARE YOU 0, WHAT ARE YOU 1, WHAT ARE YOU 2, WHAT ARE YOU 3, WHAT ARE YOU 4, WHAT ARE YOU 5, WHAT ARE YOU 6, WHAT ARE YOU 7, WHAT ARE YOU 8, WHAT ARE YOU 9, WHAT ARE YOU0, WHAT ARE YOU1, WHAT ARE YOU2, WHAT ARE YOU3, WHAT ARE YOU4, WHAT ARE YOU5, WHAT ARE YOU6, WHAT ARE YOU7, WHAT ARE YOU8, WHAT ARE YOU9, WHAT ARE YO0, WHAT ARE YO1, WHAT ARE YO2, WHAT ARE YO3, WHAT ARE YO4, WHAT ARE YO5, WHAT ARE YO6, WHAT ARE YO7, WHAT ARE YO8, WHAT ARE YO9, WHAT ARE Y0, WHAT ARE Y1, WHAT ARE Y2, WHAT ARE Y3, WHAT ARE Y4, WHAT ARE Y5, WHAT ARE Y6, WHAT ARE Y7, WHAT ARE Y8, WHAT ARE Y9, WHAT ARE 0, WHAT ARE 1, WHAT ARE 2, WHAT ARE 3, WHAT ARE 4, WHAT ARE 5, WHAT ARE 6, WHAT ARE 7, WHAT ARE 8, WHAT ARE 9, WHAT ARE0, WHAT ARE1, WHAT ARE2, WHAT ARE3, WHAT ARE4, WHAT ARE5, WHAT ARE6, WHAT ARE7, WHAT ARE8, WHAT ARE9, WHAT AR0, WHAT AR1, WHAT AR2, WHAT AR3, WHAT AR4, WHAT AR5, WHAT AR6, WHAT AR7, WHAT AR8, WHAT AR9, WHAT A0, WHAT A1, WHAT A2, WHAT A3, WHAT A4, WHAT A5, WHAT A6, WHAT A7, WHAT A8, WHAT A9, WHAT 0, WHAT 1, WHAT 2, WHAT 3, WHAT 4, WHAT 5, WHAT 6, WHAT 7, WHAT 8, WHAT 9, WHAT0, WHAT1, WHAT2, WHAT3, WHAT4, WHAT5, WHAT6, WHAT7, WHAT8, WHAT9, WHA0, WHA1, WHA2, WHA3, WHA4, WHA5, WHA6, WHA7, WHA8, WHA9, WH0, WH1, WH2, WH3, WH4, WH5, WH6, WH7, WH8, WH9, W0, W1, W2, W3, W4, W5, W6, W7, W8, W9
Entre os melhores
fonte
INVALID0INVALID1INVALID2
) é um formato de saída válido?Respostas:
Geléia , 7 bytes
Experimente online!
Como funciona
fonte
05AB1E ,
108 bytesExplicação
Experimente online!
Economizou 2 bytes graças a Adnan
fonte
.p
é equivalente aŒ¹g£
:).Javascript (ES6),
5347 bytesGuardado 6 bytes graças a Peanut & Neil
Saída: todas as palavras como uma única sequência sem separador.
Exemplo
fonte
s&&
vez des?
...:''
?+''
parte do último código publicado. Experimente aqui!Perl, 29 bytes
Inclui +1 para
-n
Execute com entrada no STDIN:
Apenas o código:
fonte
^
... Parece que ele faz o mesmo trabalho que(*FAIL)
, mas não vejo o porquê. Você poderia explicar?^
faz com que o jogo falhar o que obriga o regex antes que voltar atrás^
... Quero dizer, com seu exemplo, por,/
que não funciona, mas^/
funciona?^
está além do entendimento atual do otimizador. Qualquer um dos dois comportamentos podem mudar no futuro ..Haskell,
4743 bytesExemplo de uso:
f "IN"
->["IN0","IN1","IN2","IN3","IN4","IN5","IN6","IN7","IN8","IN9","I0","I1","I2","I3","I4","I5","I6","I7","I8","I9"]
.Abordagem recursiva simples. Acrescente cada dígito à palavra e uma chamada recursiva com a última letra removida.
fonte
Pitão, 9 bytes
Um programa que recebe a entrada de uma string entre aspas no STDIN e imprime uma lista de strings.
Experimente online
Como funciona
fonte
Pip ,
1211 bytesLeva a palavra como um argumento cmdline. Saídas sem separadores.
Experimente online!
Explicação:
fonte
V , 20 bytes
Experimente online!
Como contém caracteres não imprimíveis, eis o formato legível:
E aqui está um hexdump:
Explicação:
fonte
Bash + coreutils, 54 bytes:
Simplesmente percorre uma sequência
[Length of Input,1]
e, durante cada iteração, gera a palavra de entrada com a duração do valor atual da iteração9
vezes com cada número[0,9]
anexado a cada uma das9
cópias da palavra. Execute-o dentro de um arquivo e a palavra ou palavras entre aspas, iebash A.sh "blah blah blah"
.fonte
Floróide -
50 4731 bytesAtualmente, usa um método semelhante ao @JonathanAllan usa em seu segundo método recursivo.
Poderia ter sido isso se eu tivesse implementado o produto cartesiano com mais cuidado no idioma:
Bc:ca([c]+[c[:-a-1]KaIw(Z(c)-1)],hd)
.Casos de teste
fonte
(lambdabot) Haskell - 49 bytes
Lambdabot é um bot de IRC do #haskell; ele importa automaticamente um monte de módulos, incluindo o
Data.List
que é o local onde ele estáinits
. E como uma linguagem é definida por sua implementação, eu posso chamar isso de lambdabot haskell e não pagar os bytes pelas importações.Haskell regular:
fonte
tails
funciona?INVALID, NVALID, VALID, ALID, LID, ID, D,
braingasm ,
34333128 bytesNo estado atual, o braingasm é apenas um fôlego cerebral glorificado com alguns ( como, 3? ) Recursos extras. Passei a maior parte do tempo de desenvolvimento tornando-o o mais "empreendedor" possível, em vez de realmente adicionar recursos ...
De qualquer forma, o código a seguir deve funcionar com o instantâneo de desenvolvimento mais recente. É necessária uma entrada sem linha de nova de stdin, like
$ echo -n INVALID | braingasm invalid.bg
e impressa em stdout.Explicação:
editar: Aparentemente, não há problema em
ignorar ouso de string vazia como delimitadorfonte
Python 2,
5355 bytes+2 bytes: declarar f é necessário com recursão (como apontado por @Destructible Watermelon)
Recursa até a sequência vazia (produzindo uma lista vazia), corta um caractere de cada vez e precede com uma lista de dez da sequência atual com os dígitos 0 a 9 anexados a cada um.
Teste em ideone
Python 3,
5456 bytesTeste em ideone
fonte
f=
parte (um pouco como como você não pode assumir variáveis têm valores)Swift 3, 150 bytes
Não é a solução mais curta, mas não é terrível para a Swift
Teste isso on-line na IBM Swift Sandbox
Ungolfed
fonte
Ruby, 51
Nenhum separador usado.
Adicione o seguinte
i%10
para separadores:,$/
para nova linha,,?|
para|
(semelhante a qualquer caractere imprimível),,' '
para espaço.No programa de teste
fonte
PHP,
6456 bytesfonte
Haskell,
4946 bytesfonte
f=(>>=(
mapa['0'..'9']).snoc).tail.reverse.inits
. 3 usando o fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
reverse.tail.inits
, em vez detail.reverse.inits
você também terá a saída correta;)tail
, eu acho que eu quis dizerinit
, mas trocando-o com obras reversíveis quer :-)C #,
107102 bytesUngolfed
fonte
k++
no loop for e adicionando++
após o usok
, assim:string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k+++",";i=i.Remove(i.Length-1);}return o;}
Além disso, as vírgulas não são exigidas pelo desafio do OP, embora se você preferir, é claro que pode mantê-las. Sem é isso:string f(string i){var o="";while(i!=""){for(int k=0;k<=9;)o+=i+k++;i=i.Remove(i.Length-1);}return o;}
Ruby,
9085 bytesSe a sequência estiver vazia, retorne uma matriz vazia. Caso contrário, gere a sequência + o número em cada número de 0 a 9 e chame
f
com a sequência sem o último caractere.Guardado 5 bytes graças a @LevelRiverSt
fonte
def
eend
. Você pode fazer um lambda para não precisar dar um nome a ele, desde que atribua a uma variável e chame-a com os argumentos entre colchetes.f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}
é 5 bytes mais curto.->
sintaxef=->s{s==""&&(return[]);(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}
salva outros 4 bytes. Ruby avalia expressões booleanas da esquerda para a direita e não avalia termos posteriores, a menos que seja necessário para determinar o resultado. A mesma técnica de golfe pode ser usado em C. Eu não sei por que a()
voltareturn[]
são necessários neste caso.Perl 6, 32 = 31 bytes + 1 para -p
Eu não sou tão proficiente em Perl 6, então pode haver maneiras de reduzi-lo ainda mais.
Ele usa
-p
para avaliar uma vez para cada linha de entrada. A linha é colocada$_
e, após a execução do programa, é impressa$_
.A
(~$_,*.chop...^!*)
é uma lista, onde o primeiro elemento é Stringified (~
) de entrada, cada elemento subsequente é obtida cortando o último carácter fora a anterior (*.chop
) e que continua até que a corda está vazio (!*
), excluindo o caso cadeia vazia (o^
na...^
) .X~
gera todos os pares de listas à esquerda e à direita, usando a operação especificada, neste caso, a concatenação de cadeias (~
) neles.^10
é uma lista de 0, 1, ... 9.Finalmente, a lista é novamente estratificada com
~
, fornecendo as palavras necessárias com espaço como separador.fonte
PowerShell v2 +, 60 bytes
Loops do comprimento da string de entrada até
1
. A cada iteração, defina o auxiliar$i
igual ao número atual menos1
. Isso é necessário porque.length
é o número total de caracteres, mas a indexação de uma sequência é baseada em 0. Então, passamos de0
para9
. Cada loop interno divide a string de entrada com$n
base no valor do loop externo,-join
volta para uma string e concatena a string na contagem de loop interno. Cada resultado individual do loop é colocado no pipeline e a saída é implícita na conclusão do programa.fonte
Dyalog APL ,
1411 bytesRetorna a lista de strings.
,
listify (transformar tabela em lista)⎕D
todos os dígitos∘.,⍨
anexado a todos (ou seja, fazendo todas as combinações com)⌽
a lista invertida de,\
a concatenação cumulativa de⍞
a entrada de textoTryAPL online!
fonte
Groovy (58 bytes)
Não sei por que estou me preocupando em postar uma resposta Groovy ... O tamanho mínimo exigido para um golfe Groovy é 2 com base na necessidade de um fechamento, portanto a melhor resposta aqui é o dobro do meu tamanho mínimo.
Experimente aqui: https://groovyconsole.appspot.com/script/5148433803378688
fonte
Lote,
8583 bytesfonte
Java 7,
10598 bytes-7 bytes graças a @Poke .
Ungolfed :
Código do teste:
Experimente aqui.
Saída:
fonte
void c(String s){for(int x=0,l=s.length();x<l*10;)System.out.print(s.substring(0,l-x/10)+x++%10);}
Python 3, 62 bytes
Não usa recursão como a outra resposta.
O motivo pelo qual ""
x+" "
está lá: -0 ainda é zero e, portanto, não podemos usar a notação de menos para obter toda a string dessa maneira, para que o máximo que possamos alcançar seja menos um, de modo que o "" seja preenchido a corda,fonte
C,
72, 70 bytesToma seqüências como pares de ponteiro / tamanho. Teste principal:
fonte
Retina , 37 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
Explicação
Obtenha todos os prefixos da entrada combinando e imprimindo todas as correspondências sobrepostas da direita.
Acrescente a
0
a cada linha.A
{
indica que os restantes três etapas são executadas em um loop até que eles não conseguem mudar a string. o%
diz que eles devem ser aplicados a cada linha separadamente.O estágio em si simplesmente duplica a última linha (inicialmente essa é apenas a linha na qual é executada, mas cada iteração dos três estágios adiciona outra linha).
Incremente o dígito na última linha executando a seguinte substituição de caractere:
E finalmente:
Mantenha apenas as 10 primeiras linhas, para remover a linha que adicionamos depois
INPUT9
.fonte
Scala,
7370 bytesChame como
f("INVALID")
. Retorna uma sequência de caracteres.Explicação
Solução alternativa, 73 bytes
define uma função anônima. Para chamá-lo, escreva
e chame assim
Ele retorna uma sequência de strings, que terá a seguinte aparência quando impressa:
Explicação
fonte
CJam,
2928 bytesExplicação:
Experimente online
fonte