Pensei em uma nova maneira de gerar minhas senhas e, embora provavelmente não seja muito inteligente a longo prazo, ainda pode ser um código-golfe divertido.
Usando uma sequência de palavras, a senha é gerada assim:
- Escolha o enésimo caractere na enésima palavra
- Se n for maior que a palavra, continue contando para trás
Exemplo:
This is a fun task!
T s a u !
T é o primeiro caractere
s é o segundo
a é o primeiro, mas indo e voltando também é o terceiro
u é o segundo, mas devido à contagem regressiva também é o quarto
'!' é o quinto caractere em 'tarefa!' e, portanto, será incluído na senha final,Tsau!
Regras
- Entrada será uma string
- Separe a sequência nos espaços, todos os outros caracteres devem ser incluídos
- Letras maiúsculas devem permanecer em maiúsculas, mesmo com letras minúsculas
- Você executa n etapas em cada palavra, onde n é o número de palavras que vieram antes mais uma
- Se n for maior que a palavra, você deve retroceder na palavra; se você pressionar o início, seguirá em frente novamente até que você tenha pisado n vezes
- O primeiro e o último caractere são pisados apenas uma vez, então 'diversão' na sétima posição, como um exemplo, vai 'funufun' e termina em n, não 'funnuff' e termina em f
- A saída deve ser uma sequência
Exemplos:
Input Output
Once Upon A Time OpAe
There was a man Taaa
Who made a task Waak
That was neat! Taa
This is a long string to display how the generator is supposed to work Tsagnoyotoipto
O código mais curto em bytes vence!
to
é a palavra 12 (0 indexado) na corda longa e, portanto, a letra código deve sert
, nãoo
.Tsau!
é chinês paraFuck!
Respostas:
Python 2 , 72 bytes
Experimente online!
fonte
05AB1E , 11 bytes
Experimente online!
Explicação
fonte
Gelatina , 12 bytes
Experimente online!
fonte
Java 10,
148117114110 bytes-31 bytes graças a @SamYonnou , criando uma porta da resposta JavaScript de @ user71546 .
-4 bytes graças a @SamYonnou novamente, otimizando o algoritmo para Java.
Experimente online.
Explicação:
fonte
s->{int i=-1,j;for(var a:s.split(" ")){System.out.print(a.charAt(++i>(j=a.length()-1)?j>0?i/j%2==0?i%j:j-i%j:0:i));}}
==0
para<1
.++i>(j=a.length()-1)
condição uma vez que a matemática funciona da mesma maneira, independentemente do resultado dessa condição:s->{int i=-1,j;for(var a:s.split(" "))System.out.print(a.charAt(0<(j=a.length()+i-++i)?i/j%2<1?i%j:j-i%j:0));}
0<(j=a.length()+i-++i)?
para,(j=a.length()-1)>0*i++?
para que a explicação fosse um pouco mais fácil de digitar (sem bytes salvos ao fazê-lo).Carvão , 16 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Não costumo usar o último parâmetro do Slice.
fonte
JavaScript (Node.js) ,
78706968 bytes-1 byte @Arnauld
Experimente online!
Explicação
fonte
Vermelho , 135 bytes
Experimente online!
Legível:
fonte
Perl 5 , 76 bytes
Experimente online!
fonte
k ,
313028 bytesExperimente online!
fonte
|-1_
->1_|
Pitão , 12 bytes
Experimente online
fonte
Japonês
-P
, 11 bytesTente
Tente
Explicações
fonte
C (gcc) , 148 bytes (versão em cadeia), 114 bytes (versão em impressão)
Se eu precisar retornar uma string (versão longa):
Experimente online!
Caso contrário, apenas imprimo e não me preocupo com um buffer (versão curta):
Experimente online!
fonte
-(j>1)-1
pode ser substituído por+~(j>1)
1 byte a menos, eu acho.putchar( t[ j=strlen(t)-1, k = i++ % (j ? j*2 : 1), k<j ? k : j+j-k ]);
Experimente online!*u++
porc[i]
e remova u.AWK, 79 bytes
Principalmente porque estou curioso para encontrar melhores soluções para awk ou bash!
Experimente online!
fonte
C # (.NET Core) , 111 bytes
Experimente online!
fonte
Haskell,
656261 bytesExperimente online!
Requer a versão mais recente da
Prelude
qual possui a<>
função.Edit: -3 bytes graças a @ user28667, -1 byte graças a @B. Mehta
fonte
zipWith(\i w->(cycle$id<>reverse.drop 1.init$w)!!i)[0..].words
também funciona.\i->(!!i).cycle.(id<>reverse.drop 1.init)
factoring a explícitaw
menção (TIO)Stax , 9 bytes
Execute e depure
Descompactado, não jogado e comentado, parece com isso.
Execute este
fonte
PHP , 77 bytes
Experimente online!
fonte
foreach(...){$c=...;echo$c[...];}
paraforeach(...)echo($c=...)[...];
. Experimente on-line: 87 bytes.=
salva dois bytes:while(ord($w=$argv[++$i]))echo($w.=strrev(substr($w,1,-1)))[~-$i%strlen($w)];
experimentá-lo on-linePowershell
208186170 bytesUngolfed:
Casos de teste abaixo ou experimente online
fonte
""|%{
com$args|%{
, mas eu acho que você pode golfe-lo de forma mais eficaz também;)J, 43 bytes
destroçado
<;._1 ' '&,
dividir em espaços(, }.@}:)&.>
para cada palavra, mate o primeiro e o último olmo e acrescente à palavra#@> | i.@#
pegue o restante do comprimento de cada palavra dividido em seu índice> {~"_1
pegue esse resultado e retire-o de cada palavra.Experimente online!
fonte