Invali Invali Inval


27

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


1
Você poderia postar a sequência completa de uma só vez? Possivelmente com mais algumas amostras? Além disso, o que a entrada pode conter?
DJMcMayhem

1
A falta de separador (por exemplo INVALID0INVALID1INVALID2) é um formato de saída válido?
DLosc

@DLosc Sim, é.
Buffer Over Leia

3
Só para você saber, geralmente é desencorajado a aceitar uma resposta tão rapidamente depois de postar o desafio. Aceitar muito cedo pode desencorajar os usuários a postar novas respostas. Isso não quer dizer que você não consiga manter a resposta aceita, mas eu o encorajo a esperar mais na próxima vez.
DJMcMayhem

@DJMcMayhem Okay!
Buffer Over Leia

Respostas:


5

Geléia , 7 bytes

ḣJṚp⁵Ḷ¤

Experimente online!

Como funciona

ḣJṚp⁵Ḷ¤  Main link. Argument: s (string)

 J       Yield all (1-based) indices of s.
ḣ        Head; for each index k, take the first k characters of s.
  Ṛ      Reverse the result.
      ¤  Combine the two links to the left into a niladic chain.
    ⁵      Yield 10.
     Ḷ     Unlength; yield [0, ..., 9].
   p     Return the Cartesian product of the prefixes and the range.
         (implicit) Print the Cartesian product without separators.

6
7 bytes. Eu só quero saber como alguém teve a ideia de fazer esse código exato funcionar com o código golf.
precisa saber é o seguinte

8

05AB1E , 10 8 bytes

.pžmâ€JR

Explicação

.p        # get prefixes of input
  žmâ     # cartesian product with [9..0]
     €J   # join each
       R  # reverse

Experimente online!

Economizou 2 bytes graças a Adnan


1
.pé equivalente a Œ¹g£:).
Adnan

1
@Adnan: Sério, como eu poderia ter esquecido isso de novo! Obrigado! Parece que eu deveria fazer uma pausa: P
Emigna 03/09/16

8

Javascript (ES6), 53 47 bytes

f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

Guardado 6 bytes graças a Peanut & Neil

Saída: todas as palavras como uma única sequência sem separador.

Exemplo

var f=(s,n=0)=>s&&s+n+f(n-9?s:s.slice(0,-1),++n%10)

document.getElementsByTagName('div')[0].innerHTML = f('INVALID')
<div style="word-wrap:break-word"></div>


Economiza um byte, reduzindo-o para 52 bytes , para não usar separadores (o que é permitido) , não acrescentando um espaço entre os itens no padrão. Experimente aqui!
haykam

Você não pode usar em s&&vez de s?... :''?
Neil

Além disso, você pode reduzi-lo para 49 bytes removendo a +''parte do último código publicado. Experimente aqui!
haykam

Estou usando o Firefox e o texto não é separado por espaços. Não é necessário para a pergunta, mas pensei em avisar.
Buffer Over Leia

1
@TheBitByte - Meu mal. Não há mais separador (como sugerido pelo Peanut), mas esqueci de atualizar minha resposta de acordo. Obrigado por perceber!
Arnauld

7

Perl, 29 bytes

Inclui +1 para -n

Execute com entrada no STDIN:

perl -nE '/^.+(?{map{say$&.$_}0..9})^/' <<< PERL

Apenas o código:

/^.+(?{map{say$&.$_}0..9})^/

Código muito bom. Eu não entendo isso por último ^... Parece que ele faz o mesmo trabalho que (*FAIL), mas não vejo o porquê. Você poderia explicar?
Dada

@ Dadá Sim, forçar uma falha é exatamente o que faz. Desde que combinava pelo menos 1 personagem do início da string não pode ser no início mais para que o ^faz com que o jogo falhar o que obriga o regex antes que voltar atrás
Ton Hospel

Ok obrigado. Eu esperava que funcionasse com qualquer caractere que não esteja na entrada, mas parece funcionar apenas ^... Quero dizer, com seu exemplo, por ,/que não funciona, mas ^/funciona?
Dada

É um detalhe de implementação do otimizador de regex. Se você colocar um caractere específico que não esteja na string, é inteligente o suficiente para saber que o regex nunca pode corresponder e que o real não é iniciado. ^está além do entendimento atual do otimizador. Qualquer um dos dois comportamentos podem mudar no futuro ..
Ton Hospel

Ok, entendi, pensei que era algo assim, mas não tinha certeza. Muito obrigado
Dada

6

Haskell, 47 43 bytes

f""=[]
f x=map((x++).show)[0..9]++f(init x)

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


6

Pitão, 9 bytes

sM*_._QUT

Um programa que recebe a entrada de uma string entre aspas no STDIN e imprime uma lista de strings.

Experimente online

Como funciona

sM*_._QUT  Program. Input: Q
    ._     List of prefixes of Q
   _       Reverse
       UT  Unary range up to 10, yielding [0, 1, 2, ..., 9]
  *        Cartesian product of the above two
sM         Map concatenate over the above
           Implicitly print

5

Pip , 12 11 bytes

Leva a palavra como um argumento cmdline. Saídas sem separadores.

Wa&Oa.,tDQa

Experimente online!

Explicação:

             Implicit: a = 1st cmdline arg, t = 10
Wa           While a (i.e. while it's not the empty string)
   Oa.,t     Concatenate range(10) to a and output
               (Pip concatenates a string to a range itemwise)
  &          The output operation is &-ed to the loop condition to save on curly braces
        DQa  Dequeue from a, removing the final character on each iteration

4

V , 20 bytes

A0òYpó.10/0/e
$hòd

Experimente online!

Como contém caracteres não imprimíveis, eis o formato legível:

A0<esc>òYp<C-a>ó.10/0/e
$hòd

E aqui está um hexdump:

0000000: 4130 1bf2 5970 01f3 2e31 302f 302f 650a  A0..Yp...10/0/e.
0000010: 2468 f264                                $h.d

Explicação:

A0<esc>                 "Append a '0' to the input
       ò                "Recursively:
        Yp              "  Yank this line and paste it
          <C-a>         "  Increment the first number on this line
               ó        "  Substitute:
                .10     "    Any single character followed by '10'
                   /0   "    Replace it with a '0'
                     /e "    Ignore errors if this is not found
$h                      "  Move to the end of the end of this line than back one.
                        "  This makes it so the loop ends once there is only one
                        "  character on this line.
  ò                     "End the loop
   d                    "Delete a line (since we create one too many)  

4

Bash + coreutils, 54 bytes:

for i in `seq ${#1} 1`;{ printf "${1:0:i}%s " {0..9};}

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ção 9vezes com cada número [0,9]anexado a cada uma das 9cópias da palavra. Execute-o dentro de um arquivo e a palavra ou palavras entre aspas, ie bash A.sh "blah blah blah".


4

Floróide - 50 47 31 bytes

f=Ba:aM[a+b KbIhd]+f(a[:-1])H[]

Atualmente, 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

Input: ABC
Output: ['ABC0', 'ABC1', 'ABC2', 'ABC3', 'ABC4', 'ABC5', 'ABC6', 'ABC7', 'ABC8', 'ABC9', 'AB0', 'AB1', 'AB2', 'AB3', 'AB4', 'AB5', 'AB6', 'AB7', 'AB8', 'AB9', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9']

Input: M
Output: ['M0', 'M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9']

3

(lambdabot) Haskell - 49 bytes

f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

Lambdabot é um bot de IRC do #haskell; ele importa automaticamente um monte de módulos, incluindo o Data.Listque é 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:

import Data.List
f q=[x++show n|x<-reverse.tail$inits q,n<-[0..9]]

Você tem certeza que tailsfunciona?
Bergi 5/09/16

@Bergi, esqueci completamente sobre as importações, obrigado por apontar isso :)
Cabeção

Eu não quis dizer a importação, eu quis dizer que ela produz a saída errada:INVALID, NVALID, VALID, ALID, LID, ID, D,
Bergi 05/09

@Bergi, Yikes! Você está certo. 8 bytes a mais para mim, então
BlackCap

3

braingasm , 34 33 31 28 bytes

No 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.bge impressa em stdout.

,[>,]#[48+10[#<[.>]<+]0,<0,]

Explicação:

,[>,]                 lay down the input on the tape
#[                    (length of input - 1) times do
  48+                   add '0' at the end of the tape
  10[                   10 times do
     #<[.>]               move to start of tape, then print the tape
     <+                   increase the number at the end of the tape
  ]                     done printing current word with 0 through 9
  0,                    erase the number by writing 0 onto it
  <0,                   likewise, remove one character
]                     done

editar: Aparentemente, não há problema em ignorar o uso de string vazia como delimitador


2

Python 2, 53 55 bytes

+2 bytes: declarar f é necessário com recursão (como apontado por @Destructible Watermelon)

f=lambda s:s and[s+`n`for n in range(10)]+f(s[:-1])or[]

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, 54 56 bytes

f=lambda s:s and[s+n for n in'0123456789']+f(s[:-1])or[]

Teste em ideone


2
Estou bastante certo de que se o seu lambda inclui uma chamada para si, você precisa ter a f=parte (um pouco como como você não pode assumir variáveis têm valores)
Destrutível Lemon

2

Swift 3, 150 bytes

Não é a solução mais curta, mas não é terrível para a Swift

func a(s: String){var c=s.characters,r="";while(c.count>0){var k = "";for d in c{k+=String(d)};for i in 0...9{r+="\(k)\(i) "};c.removeLast()};print(r);}

Teste isso on-line na IBM Swift Sandbox

Ungolfed

func a(s s: String){
    var c = s.characters, r = ""
    while(c.count > 0){
        var k = ""
        for d in c{
            k+=String(d)
        }
        for i in 0...9{
            r+="\(k)\(i) "
        }
        c.removeLast()
    }
    print(r)
}

2

Ruby, 51

Nenhum separador usado.

->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

Adicione o seguinte i%10para separadores:

,$/para nova linha, ,?|para |(semelhante a qualquer caractere imprimível), ,' 'para espaço.

No programa de teste

f=->s{(10*n=s.size).times{|i|print s[0,n-i/10],i%10}}

f[gets.chomp]

2

PHP, 64 56 bytes

for($i=9;$a=substr($argv[1].a,0,-++$i/10);)echo$a.$i%10;

for(;$a=substr($argv[1].a,$i=0,-++$l);)for(;$i<10;)echo $a.$i++;


Ótima maneira de impedir outro loop for. Você pode salvar um byte, removendo o espaço depois de eco
aross

2

Haskell, 49 46 bytes

f=(>>=(<$>['0'..'9']).snoc).reverse.tail.inits

Você pode salvar um byte infixando o mapa no f=(>>=(mapa ['0'..'9']).snoc).tail.reverse.inits. 3 usando o fmap:f=(>>=(<$>['0'..'9']).snoc).tail.reverse.inits
BlackCap

Ah, e se você faz reverse.tail.inits, em vez de tail.reverse.initsvocê também terá a saída correta;)
Cabeção

@BlackCap: Obrigado, eu realmente me perguntei por que não há um mapa invertido (f) na biblioteca padrão, mas não pensei em seções. No que diz respeito tail, eu acho que eu quis dizer init, mas trocando-o com obras reversíveis quer :-)
Bergi

2

C #, 107 102 bytes

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;}

Ungolfed

string f(string i)
{
   string o = "";
   while(i != "")
   {
      for (int k = 0; k <= 9;)
         o += i + k++;
      i = i.Remove(i.Length - 1);
   }
   return o;
}

1
Você pode jogar um pouco de golfe removendo k++no loop for e adicionando ++após o uso k, 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;}
Kevin Cruijssen

2

Ruby, 90 85 bytes

f=->s{if s=="";return[];end;(0..9).map{|i|s+i.to_s}+f[s.chars.take(s.length-1).join]}

Se 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 chamef com a sequência sem o último caractere.

Guardado 5 bytes graças a @LevelRiverSt


Presumo que você não tenha jogado golfe em Ruby antes. Verifique minha resposta a esta pergunta (ou muitas outras respostas Ruby neste site) para ver a maneira de definir uma função sem incluir as que são desperdiçadas defe end. 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.
Level River St

@LevelRiverSt Usar um lambda é 1 byte mais longo
TuxCrafting 5/16/16

Ok, eu perdi o fato de que você precisa nomeá-lo porque é recursivo. Mas ainda 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.
Level River St

@LevelRiverSt Oh, eu não sabia sobre a ->sintaxe
TuxCrafting

f=->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 ()volta return[]são necessários neste caso.
Level River St

2

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.

$_= ~((~$_,*.chop...^!*)X~ ^10)

Ele usa -ppara 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.


2

PowerShell v2 +, 60 bytes

param($n)$n.length..1|%{$i=$_-1;0..9|%{-join$n[0..$i]+"$_"}}

Loops do comprimento da string de entrada até 1. A cada iteração, defina o auxiliar $iigual ao número atual menos 1. 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 de 0para 9. Cada loop interno divide a string de entrada com $nbase no valor do loop externo, -joinvolta 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.

PS C:\Tools\Scripts\golfing> .\invalid-invali-inval.ps1 'foo'
foo0
foo1
foo2
foo3
foo4
foo5
foo6
foo7
foo8
foo9
fo0
fo1
fo2
fo3
fo4
fo5
fo6
fo7
fo8
fo9
f0
f1
f2
f3
f4
f5
f6
f7
f8
f9

2

Dyalog APL , 14 11 bytes

Retorna a lista de strings.

,⎕D∘.,⍨⌽,\⍞

, 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 texto

TryAPL online!


Fixo. Eu uso um clichê e esqueceu-se de preenchê-lo.
Adám


2

Lote, 85 83 bytes

@for /l %%i in (0,1,9)do @echo %1%%i
@set s=%1
@if not "%s:~,-1%"=="" %0 %s:~,-1%

2

Java 7, 105 98 bytes

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);}

-7 bytes graças a @Poke .

Ungolfed :

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);
  }
}

Código do teste:

Experimente aqui.

class M{
  static 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);}

  public static void main(String[] a){
    c("INVALID");
    System.out.println();
    c("MAYBE");
    System.out.println();
    c("AFTER");
    System.out.println();
    c("WHAT ARE YOU DOING");
  }
}

Saída:

INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALID0INVALID1INVALID2INVALID3INVALID4INVALID5INVALID6INVALID7INVALID8INVALID9INVALI0INVALI1INVALI2INVALI3INVALI4INVALI5INVALI6INVALI7INVALI8INVALI9INVAL0INVAL1INVAL2INVAL3INVAL4INVAL5INVAL6INVAL7INVAL8INVAL9INVA0INVA1INVA2INVA3INVA4INVA5INVA6INVA7INVA8INVA9INV0INV1INV2INV3INV4INV5INV6INV7INV8INV9IN0IN1IN2IN3IN4IN5IN6IN7IN8IN9I0I1I2I3I4I5I6I7I8I9
MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYBE0MAYBE1MAYBE2MAYBE3MAYBE4MAYBE5MAYBE6MAYBE7MAYBE8MAYBE9MAYB0MAYB1MAYB2MAYB3MAYB4MAYB5MAYB6MAYB7MAYB8MAYB9MAY0MAY1MAY2MAY3MAY4MAY5MAY6MAY7MAY8MAY9MA0MA1MA2MA3MA4MA5MA6MA7MA8MA9M0M1M2M3M4M5M6M7M8M9
AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTER0AFTER1AFTER2AFTER3AFTER4AFTER5AFTER6AFTER7AFTER8AFTER9AFTE0AFTE1AFTE2AFTE3AFTE4AFTE5AFTE6AFTE7AFTE8AFTE9AFT0AFT1AFT2AFT3AFT4AFT5AFT6AFT7AFT8AFT9AF0AF1AF2AF3AF4AF5AF6AF7AF8AF9A0A1A2A3A4A5A6A7A8A9
WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOING0WHAT ARE YOU DOING1WHAT ARE YOU DOING2WHAT ARE YOU DOING3WHAT ARE YOU DOING4WHAT ARE YOU DOING5WHAT ARE YOU DOING6WHAT ARE YOU DOING7WHAT ARE YOU DOING8WHAT ARE YOU DOING9WHAT ARE YOU DOIN0WHAT ARE YOU DOIN1WHAT ARE YOU DOIN2WHAT ARE YOU DOIN3WHAT ARE YOU DOIN4WHAT ARE YOU DOIN5WHAT ARE YOU DOIN6WHAT ARE YOU DOIN7WHAT ARE YOU DOIN8WHAT ARE YOU DOIN9WHAT ARE YOU DOI0WHAT ARE YOU DOI1WHAT ARE YOU DOI2WHAT ARE YOU DOI3WHAT ARE YOU DOI4WHAT ARE YOU DOI5WHAT ARE YOU DOI6WHAT ARE YOU DOI7WHAT ARE YOU DOI8WHAT ARE YOU DOI9WHAT ARE YOU DO0WHAT ARE YOU DO1WHAT ARE YOU DO2WHAT ARE YOU DO3WHAT ARE YOU DO4WHAT ARE YOU DO5WHAT ARE YOU DO6WHAT ARE YOU DO7WHAT ARE YOU DO8WHAT ARE YOU DO9WHAT ARE YOU D0WHAT ARE YOU D1WHAT ARE YOU D2WHAT ARE YOU D3WHAT ARE YOU D4WHAT ARE YOU D5WHAT ARE YOU D6WHAT ARE YOU D7WHAT ARE YOU D8WHAT ARE YOU D9WHAT ARE YOU 0WHAT ARE YOU 1WHAT ARE YOU 2WHAT ARE YOU 3WHAT ARE YOU 4WHAT ARE YOU 5WHAT ARE YOU 6WHAT ARE YOU 7WHAT ARE YOU 8WHAT ARE YOU 9WHAT ARE YOU0WHAT ARE YOU1WHAT ARE YOU2WHAT ARE YOU3WHAT ARE YOU4WHAT ARE YOU5WHAT ARE YOU6WHAT ARE YOU7WHAT ARE YOU8WHAT ARE YOU9WHAT ARE YO0WHAT ARE YO1WHAT ARE YO2WHAT ARE YO3WHAT ARE YO4WHAT ARE YO5WHAT ARE YO6WHAT ARE YO7WHAT ARE YO8WHAT ARE YO9WHAT ARE Y0WHAT ARE Y1WHAT ARE Y2WHAT ARE Y3WHAT ARE Y4WHAT ARE Y5WHAT ARE Y6WHAT ARE Y7WHAT ARE Y8WHAT ARE Y9WHAT ARE 0WHAT ARE 1WHAT ARE 2WHAT ARE 3WHAT ARE 4WHAT ARE 5WHAT ARE 6WHAT ARE 7WHAT ARE 8WHAT ARE 9WHAT ARE0WHAT ARE1WHAT ARE2WHAT ARE3WHAT ARE4WHAT ARE5WHAT ARE6WHAT ARE7WHAT ARE8WHAT ARE9WHAT AR0WHAT AR1WHAT AR2WHAT AR3WHAT AR4WHAT AR5WHAT AR6WHAT AR7WHAT AR8WHAT AR9WHAT A0WHAT A1WHAT A2WHAT A3WHAT A4WHAT A5WHAT A6WHAT A7WHAT A8WHAT A9WHAT 0WHAT 1WHAT 2WHAT 3WHAT 4WHAT 5WHAT 6WHAT 7WHAT 8WHAT 9WHAT0WHAT1WHAT2WHAT3WHAT4WHAT5WHAT6WHAT7WHAT8WHAT9WHA0WHA1WHA2WHA3WHA4WHA5WHA6WHA7WHA8WHA9WH0WH1WH2WH3WH4WH5WH6WH7WH8WH9W0W1W2W3W4W5W6W7W8W9

1
Você pode salvar 7 bytes combinando os loops for e executando alguma lógica extra para determinar implicitamente o sufixo e a substring. 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);}
Poke

1

Python 3, 62 bytes

lambda x:[(x+" ")[:~i//10]+str(i%10)for i in range(len(x)*10)]

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,


1

C, 72 , 70 bytes

j;F(char*s,int l){while(l--)for(j=0;j<10;)printf("%.*s%d",l+1,s,j++);}

Toma seqüências como pares de ponteiro / tamanho. Teste principal:

int main() {
  F("INVALID", 7); putchar('\n');
  F("MAYBE", 5); putchar('\n');
  F("AFTER", 5); putchar('\n');
  F("WHAT ARE YOU DOING", 18); putchar('\n');
}

1

Retina , 37 bytes

A contagem de bytes assume a codificação ISO 8859-1.

M&!r`.+
m`$
0
%{`$
¶$%`
T`w`d`.$
G10`

Experimente online!

Explicação

M&!r`.+

Obtenha todos os prefixos da entrada combinando e imprimindo todas as correspondências sobrepostas da direita.

m`$
0

Acrescente a 0a 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).

T`w`d`.$

Incremente o dígito na última linha executando a seguinte substituição de caractere:

from: _0123456789AB...
to:   0123456789

E finalmente:

G10`

Mantenha apenas as 10 primeiras linhas, para remover a linha que adicionamos depois INPUT9.


1

Scala, 73 70 bytes

def g(s:String):String=if(s=="")""else(0 to 9 flatMap(s+_))++g(s.init)

Chame como f("INVALID") . Retorna uma sequência de caracteres.

Explicação

def g(s:String):String= //defines a method g taking a String as a parameter
                        //and returning a String
if(s=="")""             //guard to prevent infinite recursion
else
    (0 to 9             //create a Range from 0 to 9 (inclusive)
    flatMap(            //map:
        s+_                 //append each number to the string
    ))                  //and flatten
    ++ g(s.init)        //concatenate with g applied to everything but the last element of s

Solução alternativa, 73 bytes

(s:String)=>s.scanLeft("")(_+_).tail.reverse.flatMap(x=>(0 to 9)map(x+_))

define uma função anônima. Para chamá-lo, escreva

val f = ...

e chame assim

f("INVALID")

Ele retorna uma sequência de strings, que terá a seguinte aparência quando impressa:

Vector(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)

Explicação

s.scanLeft("")(_+_)    //accumulate letters from left to right -> Vector("", "I", "IN", "INV", "INVA", "INVAL", "INVALI", "INVALID")
.tail                  //drop the first element
.reverse               //reverse it
.flatMap(x =>          //map each element called x
    (0 to 9)           //create a Range from 0 to 9 (inclusive)
    map(x+_)           //append each number to x
)                      //and flatten

Sua solução recursiva é 3 bytes menor que a iterativa
TuxCrafting 4/16/16

Você está certo, eu devo ter otimizado depois de contar.
Corvus_192 4/16

1

CJam, 29 28 bytes

ls_,,:)W%]~{_[X<aA*A,]zo}fX;

Explicação:

ls                              read input as string
  _                             duplicate input
   ,,                           create range of length input
      :)W%]                     add 1 to all elements and reverse
           ~                    dump array on stack
            {            }fX    for loop
             _                  duplicate input string
              [X<aA*            slice input string and multiply by 10
                    A,]         range(10)
                       zo       zip array and print (no separator)
                            ;   clear stack

Experimente online

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.