Crie um programa que imprima todos os números inteiros inclusive entre um intervalo (a, b)
e substitua múltiplos de 8 na sequência por caracteres ASCII imprimíveis aleatórios (distribuídos uniformemente, independentemente de outros caracteres), não numéricos, sem espaço em branco.
Assuma 0 <a <b em todos os casos.
Se o número tiver mais de um dígito, verifique se a quantidade de caracteres na substituição corresponde!
Exemplos:
(1, 16) -> 1 2 3 4 5 6 7 $ 9 10 11 12 13 14 15 n@
(115, 123) -> 115, 116, 117, 118, 119, :F<, 121, 122, 123
(1, 3) -> 1 2 3
Não exemplos:
(1, 16) -> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(115, 123) -> 115 116 117 118 119 $ 121 122 123
Isso é código de golfe, então o código mais curto em bytes vence!
Vencedor atual:
Mais popular:
Respostas:
Pyke,
2221 bytesExperimente aqui!
Toma de entrada sob a forma:
higher
,lower
fonte
Python 2, 126 bytes
Experimente online!
Muito obrigado a Flp.Tkc e EasterlyIrk por toda a ajuda!
fonte
b/a
vez dea<=b
e não precisa;
do final. Tambémimport random,string
salva alguns bytes. tio.run/nexus/…Python 2 , 119 bytes
Experimente online!
fonte
zsh,
10098 bytesOs dois argumentos de entrada são passados como argumentos de linha de comando e os números são emitidos em linhas separadas.
fonte
Mathematica, 96 bytes
Explicação
Para entradas
m
en
:Gerar
{m, m + 1, m + 2, ... , n}
Para todos os números divisíveis por 8 (chame isso
a
), aplique esta regra de substituição:Obtenha uma lista de todos os caracteres ASCII imprimíveis, exceto dígitos.
Escolha pseudo-aleatoriamente
Floor[Log10[a] + 1]
caracteres da lista, permitindo duplicatas.Junte-se aos personagens.
fonte
FromCharacterCode
(r=Range)@##/.a_?(8∣#&):>FromCharacterCode[Join[33~r~47,58~r~127]~RandomChoice~⌊Log10@a+1⌋]<>""&
R, 73 bytes
Lê a entrada de stdin e substitui substitui os números divisíveis por
8
uma amostra uniformemente escolhida de caracteres ascii no intervalo32...47, 58...126
. Para desenhar a amostra aleatória, precisamos de um vetor de caracteres, infelizmente,intToUtf8()
retorna uma string em vez de um vetor, então também precisamos vetorizá-la no intervalo usandosapply
.fonte
Python 2, 126 bytes
(não se supera simplesmente Dennis)
Vendo como eu trabalhei muito na resposta de heather, pensei em publicar minhas próprias soluções também.
Esta é uma função que recebe dois argumentos e imprime diretamente em
STDOUT
.127 bytes
Esta é uma função anônima sem nome - para usar, atribuir a uma variável (como
f
) e, em seguida, chamar comf(a, b)
. Isso retorna a saída como uma lista.fonte
Pip , 28 bytes
Toma os números como argumentos da linha de comando e imprime uma lista de resultados separada por nova linha. Experimente online!
Explicação:
fonte
JavaScript (ES6), 114 bytes
Esses malditos embutidos com nomes de 23 bytes ...
fonte
MATL , 26 bytes
Experimente online!
Explicação
fonte
Pitão , 24 bytes
Experimente online!
Explicação:
fonte
Bash + apg ,
64, 76 bytesEDITAS:
Golfe
Teste
fonte
crazy8 8 8
renderiaPerl 6 , 60 bytes
Explicação:
{ map { }, $^a .. $^b }
: Um lambda que recebe dois argumentos, gera a lista de números inteiros nesse intervalo e a retorna com a seguinte transformação aplicada a cada elemento:$_ % 8 ?? $_ !!
: Se o elemento não for divisível por 8, passe-o inalterado. De outra forma...S:g/./{ }/
: ... substitua cada caractere de sua representação de sequência pelo valor gerado por esta expressão:grep(/\D/, "!" .. "~").pick
: Gere o intervalo de caracteres entre!
e~
(na ordem Unicode), filtre os dígitos e escolha aleatoriamente um dos caracteres restantes.fonte
PHP, 163 bytes
Explicação:
$n = range(48,57)
Esses são os códigos ASCII para números, que estão no meio de caracteres especiais (32-47) e outros caracteres (58-126).$c = array_diff(range(32,126), $n)
Usando a$n
matriz, exclua caracteres numéricos e crie uma matriz de caracteres ASCII aceitáveis.foreach(range($a,$b) as $v)
Laço ao longo da gama de valores a partir$a
de$b
(inclusive), tal como $ v dentro do ciclo.if($v % 8 != 0) { echo $v; }
Teste se $ v é divisível igualmente por 8 usando o operador mod%
.else { for($i = 0; $i < strlen($v); $i++) { ... }}
Se não for divisível igualmente por 8, faça um loop vezes suficientes para o número de dígitos no número e imprima os caracteres (na próxima etapa).echo chr($c[array_rand($c)])
Imprima um único caractere da matriz aceitável de valores ASCII em$c
.array_rand
retorna um índice na matriz, portanto, precisamos obter o valor real nesse índice usando$c[random_key]
.Provavelmente, eu poderia diminuir esse tamanho criando
$c
diferente, e o loop para imprimir os caracteres ASCII parece desajeitado, então continuarei pensando em como reduzi-lo.fonte
postgresql9.6 251 caracteres
código muito longo, mas o postgresql também o faz.
sql formatado está aqui:
fonte
Perl, 66 bytes
Corra com a
-E
bandeira:Isso é bem direto:
-
<>..<>
cria uma lista dos números entre o número de 2 entradas. E entãomap
itera sobre ele:-
$_%8||...
: o...
são executados apenas se$_
for um múltiplo de 8.-
s%.%xxx%ge
: substitua cada caractere porxxx
.-
do{$_=chr rand 126}until/[!-\/:-~]/
escolha um caractere aleatório (dos códigos 0 a 126) até obtermos um que satisfaça/[!-\/:-~]/
, ie. um que é imprimível e não é um dígito.-
say
: imprima.fonte
C (gcc) ,
129119 bytesExperimente online!
129 → 119 Use o
%94+33
truque de OOBalanceUngolfed:
fonte
puts
vez deprintf
).C,
157115 bytesExperimente online aqui . Agradecimentos a jxh por jogar 42 bytes.
Versão não destruída:
fonte
Java 10,
149147 bytes (função lambda)Experimente online.
Java 10,
227225 bytes (programa completo)Experimente online.
Explicação:
fonte
t<33|(t>47&t<59)|t>126;
está acima. Basicamente, ele gerou um número aleatório no intervalo e[0,127)
, em seguida, verifica se é válido (no intervalo[33..47,59..126]
, todos os caracteres ASCII sem dígito imprimíveis). Se for: bom, anexe-o. Caso contrário: gere um número aleatório no intervalo[0,127)
novamente e valide-o novamente até encontrarmos um caractere válido.APL (Dyalog Extended) , 32 bytes
Experimente online!
Muito obrigado a Adám e dzaima por sua ajuda. Primeira vez usando o Dyalog Extended!
Explicação:
fonte
Scala , 198 bytes
Uma versão funcional aprimorada com estado imutável (03-04-2018)
Experimente online!
Uma solução de estilo funcional em Scala (350 bytes) para a diversão.
Sugestões para melhorias são bem-vindas.
fonte
Python 2, 180 bytes
EDITAR:
Obrigado @ Flp.Tkc por perceber que não tinha lido a tarefa corretamente.
Obrigado @Caleb por apontar que eu poderia usar alguns para reduzir a contagem de bytes.
Obrigado @Dennis por apontar o fato de que os números não podem ser incluídos.
EDIT 2:
A versão atual provavelmente poderia ser mais simplificada do que é.
fonte
PowerShell ,
8289 bytesExperimente online!
fonte
QBIC , 79 bytes
Ignorar os números é um assunto caro, aqui está uma versão que também pode selecionar aleatoriamente
0-9
por 20 bytes a menos:Saída de amostra para
1, 89
Explicação:
fonte
05AB1E , 17 bytes
Pega a entrada como
highest\nlowest
e gera uma lista.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Japonês , 20 bytes
Tente
fonte
Quarto (gforth) , 128 bytes
Experimente online!
Explicação
Faça um loop do início ao fim, imprima o número, se não for múltiplo de 8, caso contrário, obtenha o número de dígitos no número e imprima muitos caracteres aleatórios seguidos por um espaço
Código Explicação
UnGolfed
Normalmente, não desacredito minhas soluções, mas essa é longa / complicada o suficiente para ser necessária
fonte
PHP , 130 bytes
Experimente online!
Ungolfed:
fonte
$x-= $x > 58 ?: 11; // subtract 11, if x is less than 58
- você poderia elaborar?Subtract one from x. If x was less than or equal to 58, subtract a further ten from it.
, não?Kotlin , 136 bytes
Experimente online!
fonte