Créez un programme qui imprime tous les nombres entiers inclus entre un intervalle (a, b)
et remplace les multiples de 8 dans la séquence par des caractères ASCII imprimables aléatoires (uniformément répartis, indépendamment des autres caractères), non numériques, ni d'espaces, ni d'espaces.
Supposons que 0 <a <b dans tous les cas.
Si le nombre comporte plus d'un chiffre, assurez-vous que le nombre de caractères du remplacement correspond!
Exemples:
(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
Non-exemples:
(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
C'est le code de golf, donc le code le plus court en octets gagne!
Gagnant actuel:
Le plus populaire:
Réponses:
Pyke,
2221 octetsEssayez-le ici!
Accepte une entrée sous la forme:
higher
,lower
la source
Python 2, 126 octets
Essayez-le en ligne!
Merci beaucoup à Flp.Tkc et EasterlyIrk pour leur aide!
la source
b/a
au lieu dea<=b
et vous n’avez pas besoin du tout;
à la fin.import random,string
Enregistre également quelques octets. tio.run/nexus/…Python 2 , 119 octets
Essayez-le en ligne!
la source
zsh,
10098 octetsLes deux arguments d'entrée sont passés en tant qu'arguments de ligne de commande et les nombres sont affichés sur des lignes séparées.
la source
Mathematica, 96 octets
Explication
Pour les intrants
m
etn
:produire
{m, m + 1, m + 2, ... , n}
Pour tous les nombres divisibles par 8 (appelez-le
a
), appliquez cette règle de remplacement:Obtenez une liste de tous les caractères ASCII imprimables, sauf les chiffres.
Choisissez de manière pseudo-aléatoire des
Floor[Log10[a] + 1]
caractères dans la liste, permettant ainsi les doublons.Rejoignez les personnages.
la source
FromCharacterCode
(r=Range)@##/.a_?(8∣#&):>FromCharacterCode[Join[33~r~47,58~r~127]~RandomChoice~⌊Log10@a+1⌋]<>""&
R, 73 octets
Lit les entrées à partir de stdin et remplace les numéros divisibles par
8
un échantillon choisi de manière uniforme de caractères ascii dans la plage32...47, 58...126
. Pour dessiner l’échantillon aléatoire, nous avons besoin d’un vecteur de caractères. Malheureusement, nous ne renvoyonsintToUtf8()
qu’une chaîne plutôt qu’un vecteur. Nous devons donc aussi le vectoriser sur toute la plage en utilisantsapply
.la source
Python 2, 126 octets
(on ne fait pas simplement sortir le golfe Dennis)
Voyant que j'ai beaucoup travaillé sur la réponse de heather, j'ai pensé poster mes propres solutions également.
C'est une fonction qui prend deux arguments et est imprimée directement sur
STDOUT
.127 octets
Il s'agit d'une fonction anonyme non nommée - à utiliser, attribuer à une variable (telle que
f
), puis appeler avecf(a, b)
. Cela renvoie la sortie sous forme de liste.la source
Pip , 28 octets
Prend les nombres en arguments de ligne de commande et imprime une liste de résultats séparés par une nouvelle ligne. Essayez-le en ligne!
Explication:
la source
JavaScript (ES6), 114 octets
Ces maudits bâtis avec des noms de 23 octets ....
la source
MATL , 26 octets
Essayez-le en ligne!
Explication
la source
Pyth , 24 octets
Essayez-le en ligne!
Explication:
la source
Bash + apg ,
64, 76 octetsEDITS:
Golfé
Tester
la source
crazy8 8 8
qui céderaitPerl 6 , 60 octets
Explication:
{ map { }, $^a .. $^b }
: Un lambda qui prend deux arguments, génère la liste des entiers dans cette plage et la renvoie avec la transformation suivante appliquée à chaque élément:$_ % 8 ?? $_ !!
: Si l'élément n'est pas divisible par 8, transmettez-le inchangé. Autrement...S:g/./{ }/
: ... remplace chaque caractère de sa représentation sous forme de chaîne par la valeur générée par cette expression:grep(/\D/, "!" .. "~").pick
: Génère la plage de caractères entre!
et~
(dans l’ordre Unicode), filtre les chiffres et sélectionne au hasard l’un des caractères restants.la source
PHP, 163 octets
Explication:
$n = range(48,57)
Ce sont les codes ASCII des nombres, qui se trouvent au milieu des caractères spéciaux (32 à 47) et des autres caractères (58 à 126).$c = array_diff(range(32,126), $n)
En utilisant le$n
tableau, excluez les caractères numériques et créez un tableau de caractères ASCII acceptables.foreach(range($a,$b) as $v)
Boucle sur la plage de valeurs allant de$a
à$b
(inclus), sous forme de $ v à l'intérieur de la boucle.if($v % 8 != 0) { echo $v; }
Teste que $ v est divisible par 8 ʻa l'aide de l'opérateur mod%
.else { for($i = 0; $i < strlen($v); $i++) { ... }}
Si ce n’est pas divisible par 8, bouclez suffisamment de fois pour le nombre de chiffres et imprimez les caractères (à l’étape suivante).echo chr($c[array_rand($c)])
Imprimez un seul caractère du tableau acceptable de valeurs ASCII dans$c
.array_rand
renvoie un index dans le tableau, nous devons donc obtenir la valeur réelle à cet index$c[random_key]
.Je pourrais probablement réduire cette taille en créant
$c
différemment, et la boucle pour imprimer les caractères ASCII me semble maladroite, je vais donc continuer à réfléchir à la façon de la raccourcir.la source
postgresql9.6 251 caractères
très long code mais postgresql le fait aussi.
sql formaté est ici:
la source
Perl, 66 octets
Courir avec le
-E
drapeau:C'est assez simple:
-
<>..<>
crée une liste des nombres entre les 2 numéros d'entrées. Et puismap
itère dessus:-
$_%8||...
:...
ils ne sont exécutés que si$_
est un multiple de 8.-
s%.%xxx%ge
: remplace chaque caractère parxxx
.-
do{$_=chr rand 126}until/[!-\/:-~]/
choisissez un caractère aléatoire (des codes 0 à 126) jusqu'à ce que nous obtenions un caractère satisfaisant/[!-\/:-~]/
, c'est-à-dire. un qui est imprimable et n'est pas un chiffre.-
say
: l'imprimer.la source
C (gcc) ,
129119 octetsEssayez-le en ligne!
129 → 119 Utilisez l'
%94+33
astuce de OOBalanceUngolfed:
la source
puts
au lieu deprintf
).C,
157115 octetsEssayez-le en ligne ici . Merci à jxh pour avoir joué au golf 42 octets.
Version non-golfée:
la source
Java 10,
149147 octets (fonction lambda)Essayez-le en ligne.
Java 10,
227225 octets (programme complet)Essayez-le en ligne.
Explication:
la source
t<33|(t>47&t<59)|t>126;
dessus que tout se passe. Fondamentalement, il génère un nombre aléatoire dans la plage[0,127)
, puis vérifie sa validité (donc dans la plage[33..47,59..126]
, tous les caractères ASCII imprimables non numériques). Si c'est le cas, ajoutez-le. Si ce n'est pas le cas: générez à nouveau un nombre aléatoire dans la plage[0,127)
et validez-le jusqu'à ce que nous ayons trouvé un caractère valide.APL (Dyalog Extended) , 32 octets
Essayez-le en ligne!
Un grand merci à Adám et dzaima pour leur aide. Première utilisation de Dyalog Extended!
Explication:
la source
Scala , 198 octets
Une version fonctionnelle améliorée à l'état immuable (03-04-2018)
Essayez-le en ligne!
Une solution de style fonctionnel en Scala (350 octets) pour le plaisir.
Les suggestions d'amélioration sont les bienvenues.
la source
Python 2, 180 octets
MODIFIER:
Merci @ Flp.Tkc d'avoir réalisé que je n'avais pas lu la tâche correctement.
Merci @Caleb pour avoir signalé que je pourrais utiliser quelques-uns pour réduire le nombre d'octets.
Merci à Dennis pour avoir souligné le fait que les chiffres ne peuvent pas être inclus.
EDIT 2:
La version actuelle pourrait probablement être simplifiée plus qu’elle ne l’est.
la source
PowerShell ,
8289 octetsEssayez-le en ligne!
la source
QBIC , 79 octets
Sauter les chiffres est une affaire coûteuse, voici une version qui pourrait également sélectionner au hasard
0-9
20 octets de moins:Exemple de sortie pour
1, 89
Explication:
la source
05AB1E , 17 octets
Prend l'entrée en tant que
highest\nlowest
et génère une liste.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Japt , 20 octets
L'essayer
la source
Forth (gforth) , 128 octets
Essayez-le en ligne!
Explication
Boucle du début à la fin, numéro imprimé si non multiple de 8, sinon, indiquez le nombre de chiffres du nombre et imprimez le nombre de caractères aléatoires suivi d'un espace.
Explication du code
Non Golfé
En général, je ne rejoue pas mes solutions, mais celle-ci est assez longue / assez compliquée pour que je pense que c'est nécessaire.
la source
PHP , 130 octets
Essayez-le en ligne!
Ungolfed:
la source
$x-= $x > 58 ?: 11; // subtract 11, if x is less than 58
- pourriez-vous élaborer?Subtract one from x. If x was less than or equal to 58, subtract a further ten from it.
, non?Kotlin , 136 octets
Essayez-le en ligne!
la source