Cree un programa que imprima todos los números enteros inclusive entre un intervalo (a, b)
y reemplace múltiplos de 8 en la secuencia con caracteres ASCII aleatorios (distribuidos uniformemente, independientes de otros caracteres), no numéricos, sin espacios en blanco e imprimibles.
Suponga 0 <a <b en todos los casos.
Si el número tiene más de 1 dígito, ¡asegúrese de que la cantidad de caracteres en el reemplazo coincida!
Ejemplos:
(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
No ejemplos:
(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
Este es el código de golf, por lo que gana el código más corto en bytes.
Ganador actual:
Más popular:
Respuestas:
Pyke,
2221 bytesPruébalo aquí!
Toma de entrada en la forma:
higher
,lower
fuente
Python 2, 126 bytes
Pruébalo en línea!
¡Muchas gracias a Flp.Tkc y EasterlyIrk por toda su ayuda!
fuente
b/a
lugar dea<=b
y no necesita el;
al final. Tambiénimport random,string
guarda algunos bytes. tio.run/nexus/…Python 2 , 119 bytes
Pruébalo en línea!
fuente
zsh,
10098 bytesLos dos argumentos de entrada se pasan como argumentos de línea de comando, y los números salen en líneas separadas.
fuente
Mathematica, 96 bytes
Explicación
Para entradas
m
yn
:Generar
{m, m + 1, m + 2, ... , n}
Para todos los números que son divisibles por 8 (llame a eso
a
), aplique esta regla de reemplazo:Obtenga una lista de todos los caracteres ASCII imprimibles, excepto los dígitos.
Elija pseudoaleatoriamente
Floor[Log10[a] + 1]
personajes de la lista, permitiendo duplicados.Únete a los personajes.
fuente
FromCharacterCode
(r=Range)@##/.a_?(8∣#&):>FromCharacterCode[Join[33~r~47,58~r~127]~RandomChoice~⌊Log10@a+1⌋]<>""&
R, 73 bytes
Lee la entrada de stdin y reemplaza reemplaza los números divisibles por
8
una muestra elegida uniformemente de caracteres ascii en el rango32...47, 58...126
. Para dibujar la muestra aleatoria necesitamos un vector de caracteres, desafortunadamenteintToUtf8()
devuelve una cadena en lugar de un vector, por lo que también tenemos que vectorizarla en el rango usandosapply
.fuente
Python 2, 126 bytes
(uno no simplemente supera a Dennis)
Al ver que trabajaba mucho en la respuesta de Heather, pensé en publicar mis propias soluciones también.
Esta es una función que toma dos argumentos e imprime directamente en
STDOUT
.127 bytes
Esta es una función anónima sin nombre: para usar, asignar a una variable (como
f
) y luego llamar conf(a, b)
. Esto devuelve la salida como una lista.fuente
Pip , 28 bytes
Toma los números como argumentos de línea de comandos e imprime una lista de resultados separada por una nueva línea. Pruébalo en línea!
Explicación:
fuente
JavaScript (ES6), 114 bytes
Esos malditos complementos con nombres de 23 bytes ...
fuente
MATL , 26 bytes
Pruébalo en línea!
Explicación
fuente
Pyth , 24 bytes
Pruébalo en línea!
Explicación:
fuente
Bash + apg ,
6476 bytesEDICIONES:
Golfed
Prueba
fuente
crazy8 8 8
produciríaPerl 6 , 60 bytes
Explicación:
{ map { }, $^a .. $^b }
: Una lambda que toma dos argumentos, genera la lista de enteros en ese rango y la devuelve con la siguiente transformación aplicada a cada elemento:$_ % 8 ?? $_ !!
: Si el elemento no es divisible por 8, pásalo sin cambios. De otra manera...S:g/./{ }/
: ... reemplaza cada carácter de su representación de cadena con el valor generado por esta expresión:grep(/\D/, "!" .. "~").pick
: Genere el rango de caracteres entre!
y~
(en orden Unicode), filtre los dígitos y elija aleatoriamente uno de los caracteres restantes.fuente
PHP, 163 bytes
Explicación:
$n = range(48,57)
Estos son los códigos ASCII para números, que están en el medio de caracteres especiales (32-47) y otros caracteres (58-126).$c = array_diff(range(32,126), $n)
Utilizando la$n
matriz, excluya caracteres numéricos y cree una matriz de caracteres ASCII aceptables.foreach(range($a,$b) as $v)
Recorra el rango de valores desde$a
hasta$b
(inclusive), como $ v dentro del bucle.if($v % 8 != 0) { echo $v; }
Pruebe que $ v sea divisible por 8 con el operador mod%
.else { for($i = 0; $i < strlen($v); $i++) { ... }}
Si no es divisible por 8, haga un bucle suficientes veces para el número de dígitos en el número e imprima los caracteres (en el siguiente paso).echo chr($c[array_rand($c)])
Imprima un solo carácter de la matriz aceptable de valores ASCII en$c
.array_rand
devuelve un índice en la matriz, por lo que debemos obtener el valor real en ese índice usando$c[random_key]
.Probablemente podría hacer esto más pequeño creando de manera
$c
diferente, y el ciclo para imprimir los caracteres ASCII se siente torpe, así que continuaré reflexionando sobre cómo acortar eso.fuente
postgresql9.6 251 caracteres
código muy largo pero postgresql también lo hace.
sql formateado está aquí:
fuente
Perl, 66 bytes
Corre con
-E
bandera:Esto es bastante sencillo:
-
<>..<>
crea una lista de los números entre el número de 2 entradas. Y luegomap
itera sobre él:-
$_%8||...
:...
se ejecutan solo si$_
es un múltiplo de 8.-
s%.%xxx%ge
: reemplaza cada carácter conxxx
.-
do{$_=chr rand 126}until/[!-\/:-~]/
Elija un carácter aleatorio (de los códigos 0 a 126) hasta obtener uno que satisfaga/[!-\/:-~]/
, es decir. uno que se puede imprimir y no es un dígito.-
say
: imprimirlo.fuente
C (gcc) ,
129119 bytesPruébalo en línea!
129 → 119 Usa el
%94+33
truco de OOBalanceSin golf:
fuente
puts
lugar deprintf
).C,
157115bytesPruébelo en línea aquí . Gracias a jxh por jugar al golf 42 bytes.
Versión sin golf:
fuente
Java 10,
149147 bytes (función lambda)Pruébalo en línea.
Java 10,
227225 bytes (programa completo)Pruébalo en línea.
Explicación:
fuente
t<33|(t>47&t<59)|t>126;
está por encima. Básicamente generó un número aleatorio en el rango[0,127)
, luego verifica si es válido (por lo tanto, en el rango[33..47,59..126]
, todos los caracteres ASCII sin dígitos imprimibles). Si es: bueno, añádelo. Si no es así: genere un número aleatorio en el rango[0,127)
nuevamente y valídelo nuevamente hasta que hayamos encontrado un carácter válido.APL (Dyalog Extended) , 32 bytes
Pruébalo en línea!
Muchas gracias a Adám y dzaima por su ayuda. Primera vez que usa Dyalog Extended!
Explicación:
fuente
Scala , 198 bytes
Una versión funcional mejorada con estado inmutable (03-04-2018)
Pruébalo en línea!
Una solución de estilo funcional en Scala (350 bytes) por diversión.
Sugerencias para mejoras son bienvenidas.
fuente
Python 2, 180 bytes
EDITAR:
Gracias @ Flp.Tkc por darte cuenta de que no había leído la tarea correctamente.
Gracias @Caleb por señalar que podría usar algunos para reducir el recuento de bytes.
Gracias @Dennis por señalar que no se pueden incluir números.
EDITAR 2:
La versión actual probablemente podría simplificarse más de lo que es.
fuente
PowerShell ,
8289 bytesPruébalo en línea!
fuente
QBIC , 79 bytes
Saltarse los números es un asunto costoso, aquí hay una versión que también puede seleccionar aleatoriamente
0-9
por 20 bytes menos:Salida de muestra para
1, 89
Explicación:
fuente
05AB1E , 17 bytes
Toma la entrada como
highest\nlowest
y genera una lista.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Japt , 20 bytes
Intentalo
fuente
Adelante (gforth) , 128 bytes
Pruébalo en línea!
Explicación
Recorra de principio a fin, imprima el número si no es múltiplo de 8, de lo contrario obtenga el número de dígitos en el número e imprima tantos caracteres aleatorios seguidos de un espacio
Explicación del código
Sin golf
No suelo desentrañar mis soluciones, pero esta es tan larga / complicada que creo que es necesaria
fuente
PHP , 130 bytes
Pruébalo en línea!
Sin golf:
fuente
$x-= $x > 58 ?: 11; // subtract 11, if x is less than 58
- ¿podría elaborar?Subtract one from x. If x was less than or equal to 58, subtract a further ten from it.
, ¿no?Kotlin , 136 bytes
Pruébalo en línea!
fuente