Contribution:
Nous prenons deux entrées:
- Une entrée
b
avec deux valeurs distinctes:Left
etRight
. † - Et un entier positif
n
.
Production:
Sur la base de l'entrée gauche / droite, nous générons l'une des deux séquences suivantes dans la plage de 1-n
(dans les séquences ci-dessous, les 125 premiers éléments sont affichés):
Left:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966, 967, 1016, 1017, 1022, 1023, 31744, 31745, 31750, 31751, 31800, 31801, 31806, 31807, 32704, 32705, 32710, 32711, 32760, 32761, 32766, 32767, 2064384, 2064385, 2064390, 2064391, 2064440, 2064441, 2064446, 2064447, 2065344, 2065345, 2065350, 2065351, 2065400, 2065401, 2065406, 2065407, 2096128, 2096129, 2096134, 2096135, 2096184, 2096185, 2096190, 2096191, 2097088, 2097089, 2097094, 2097095, 2097144, 2097145, 2097150, 2097151, 266338304, 266338305, 266338310, 266338311, 266338360, 266338361, 266338366, 266338367, 266339264, 266339265, 266339270, 266339271, 266339320, 266339321, 266339326, 266339327, 266370048, 266370049, 266370054, 266370055, 266370104, 266370105, 266370110, 266370111, 266371008, 266371009, 266371014, 266371015, 266371064, 266371065, 266371070, 266371071, 268402688, 268402689, 268402694, 268402695, 268402744, 268402745, 268402750, 268402751, 268403648, 268403649, 268403654, 268403655, 268403704, 268403705, 268403710, 268403711, 268434432, 268434433, 268434438, 268434439, 268434488, 268434489, 268434494, 268434495, 268435392, 268435393, 268435398, 268435399, 268435448, 268435449
Right:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624, 639, 896, 911, 1008, 1023, 16384, 16415, 16864, 16895, 19968, 19999, 20448, 20479, 28672, 28703, 29152, 29183, 32256, 32287, 32736, 32767, 1048576, 1048639, 1050560, 1050623, 1079296, 1079359, 1081280, 1081343, 1277952, 1278015, 1279936, 1279999, 1308672, 1308735, 1310656, 1310719, 1835008, 1835071, 1836992, 1837055, 1865728, 1865791, 1867712, 1867775, 2064384, 2064447, 2066368, 2066431, 2095104, 2095167, 2097088, 2097151, 134217728, 134217855, 134225792, 134225919, 134471680, 134471807, 134479744, 134479871, 138149888, 138150015, 138157952, 138158079, 138403840, 138403967, 138411904, 138412031, 163577856, 163577983, 163585920, 163586047, 163831808, 163831935, 163839872, 163839999, 167510016, 167510143, 167518080, 167518207, 167763968, 167764095, 167772032, 167772159, 234881024, 234881151, 234889088, 234889215, 235134976, 235135103, 235143040, 235143167, 238813184, 238813311, 238821248, 238821375, 239067136, 239067263, 239075200, 239075327, 264241152, 264241279, 264249216, 264249343, 264495104, 264495231, 264503168, 264503295, 268173312, 268173439, 268181376, 268181503, 268427264, 268427391
Comment ces séquences sont-elles générées, demandez-vous?
Une séquence par défaut de 1 à n=10
serait:
As integer:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
As binary:
1 10 11 100 101 110 111 1000 1001 1010
Lorsque nous nous étendons à gauche, le binaire deviendra ceci:
1, 110, 111, 111000, 111001, 111110, 111111, 1111000000, 1111000001, 1111000110
Pourquoi? Le dernier bit est utilisé une fois; le dernier est utilisé deux fois; l'avant-dernier est utilisé trois fois; etc.
So `1010` will become (spaces added as clarification): `1111 000 11 0`
Et ces nouvelles chaînes binaires étirées à gauche sont reconverties en entiers:
1, 6, 7, 56, 57, 62, 63, 960, 961, 966
Quant à l'étiré à droite, le premier bit est utilisé une fois; deuxième deux fois; troisième trois fois; etc. Comme ceci:
As binary:
1, 100, 111, 100000, 100111, 111000, 111111, 1000000000, 1000001111, 1001110000
As integer:
1, 4, 7, 32, 39, 56, 63, 512, 527, 624
Règles du défi:
- † Vous pouvez prendre deux valeurs distinctes, mais indiquez celle que vous utilisez. Il peut donc être
1/0
,true/false
,null/undefined
,"left"/"right"
, etc. n
est toujours supérieur à 0.- Vous devez prendre en charge une sortie maximale d'au moins l'entier par défaut de votre langue (qui est de 32 bits pour la plupart des langues).
- Le format de sortie est flexible. Peut être imprimé ou retourné sous forme de tableau / liste. Peut être avec un espace, une virgule, un tuyau et similaire comme délimiteur. Ton appel. (Encore une fois, veuillez indiquer ce que vous avez utilisé.)
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
n < 128
, afin que les résultats tiennent dans des entiers 32 bits?Réponses:
Gelée , 9 octets
Essayez-le en ligne!
-1
pour gauche,1
pour droite.la source
Python 2 ,
10296 octets-1 pour gauche, 1 pour droite
Essayez-le en ligne!
la source
05AB1E ,
1413 octets1 octet enregistré grâce à Erik l'Outgolfer
1
pour gauche.0
(ou toute autre chose) pour raison.Essayez-le en ligne!
Explication
la source
ε
pour -1:LbεIiRƶRëƶ}JC
ë
. Contourne la question deif
dans une application dans ce cas :)Husk , 13 octets
Ça fait beaucoup de lettres en pointillés ...
Prend d'abord
b
(0
pour gauche et1
pour droite), puisn
. Essayez-le en ligne!Explication
la source
b
directement ḣ ou ṫ, vous économisant ainsi trois octets :)b
et que ma solution soit justeI
...Japt ,
191817 octets0
pour "gauche",1
pour "droite". (Cela peut en fait prendre n'importe quelle valeur de falsey ou de vérité à la place de ces 2.)Essaye-le
Explication
Saisie implicite d'entiers
U
&V
.Créez un tableau d'entiers de 1 à
U
inclus.Passez chacun par une fonction.
Convertir l'entier courant en une chaîne binaire
Mappez sur la chaîne, en passant chaque caractère dans une fonction, où
E
est l'index actuel etF
la chaîne complète.Répéter le caractère actuel
©
est un ET logique (&&
) et unª
OU logique||
, donc ici nousV
vérifions si est véridique (non nul) ou non.Si
V
est véridique, celaX
se répèteY+1
.Si
V
is falsey est alorsX
répétéY
soustrait de (n
) la longueur (l
) deZ
fois.Revenez à un entier de base 10.
Sortie implicite du tableau résultant.
la source
Gaia , 15 octets
Utilise
-1
pour gauche et1
pour droite.Essayez-le en ligne!
Explication
la source
Proton , 79 octets
0
est à gauche, à1
droite.Essayez-le en ligne!
Non golfé
la source
C # (.NET Core) ,
192187 + 23 octets-5 octets grâce à TheLethalCoder
Le nombre d'octets comprend également:
Essayez-le en ligne!
Entrée:
left
esttrue
,right
estfalse
Explication:
la source
using System.Linq;
plus court quenamespace System.Linq{}
, ou est-ce que je manque quelque chose ici? Il y a longtemps j'ai programmé en .NET tbh ..Math
et lesConvert
deux sont dans l'System
espace de noms, donc aller pournamespace System.Linq
est le plus court - il permet d'utiliser les deuxSystem
et lesSystem.Linq
classes.Dyalog APL, 23 octets
left is
1
right is0
(passé comme argument gauche de la fonction)⍳
est générateur d'index{
...}¨
appliquer la fonction entre accolades à chaque élément à droiteb←2⊥⍣¯1⊢⍵
b est ⍵ codé en binaire (en utilisant l'inverse de décoder pour obtenir le nombre minimum de bits requis pour représenter⍵
dans la base 2)⍳≢b
générer des index pour le vecteur b (≢b
est la longueur de b)⌽⍣⍺
⍺
temps inverse (utilisé conditionnellement ici pour l'étirement gauche ou droit)b/⍨
b répliqué par (réplique les bits selon l'index (inverse))2⊥
décoder à partir de la base 2TryAPL en ligne
la source
JavaScript (ES6), 131 octets
C'est beaucoup plus long que la réponse de Shaggy , mais je voulais essayer une approche purement au niveau du bit.
En raison de la limite 32 bits des opérations JS au niveau du bit, cela ne fonctionne que pour n <128 .
Prend une entrée dans la syntaxe de curry
(n)(r)
, où r est faux pour gauche / vrai pour droite.Formaté et commenté
Démo
Afficher l'extrait de code
la source
JavaScript (ES6), 113 octets
Oh, c'est beaucoup trop long! C'est ce qui se passe lorsque vous passez la journée à écrire du "vrai" JavaScript, des enfants; vous oubliez comment jouer au golf correctement!
Utilise toutes les valeurs véridiques ou falsey pour
b
, avecfalse
être "gauche" ettrue
être "droite".Essayez-le
la source
Gelée , 11 octets
Essayez-le en ligne!
Argument # 1:
n
Argument # 2:
1
pour la gauche,0
pour la droite.la source
Rétine , 111 octets
Essayez-le en ligne! Prend le nombre et soit
L
ouR
comme suffixe (ou sur une ligne distincte). Explication:Convertissez de décimal en unaire et comptez de 1 à
n
.Conversion d'unaire en binaire.
Enveloppez chaque bit
R
et lesL
caractères en fonction de sa position dans la ligne.Remplacez le
R
ou lesL
caractères appropriés par le chiffre adjacent approprié.Supprimez les caractères restants et convertissez du binaire en décimal.
la source
1
àn
. Pas seulement len
'e nombre.JavaScript (ES6),
130127 octets3 octets, merci Kevin
Je ne connais pas assez ES6 pour ce site, mais j'ai essayé! Parcourez chaque nombre et parcourez chaque représentation binaire pour ce nombre, en répétant chaque caractère autant de fois que nécessaire.
la source
d=>n=>
), comme l'ont fait les deux autres réponses JS ES6. En outre, je pense que vous pouvez enregistrer 2 autres octets en changeantk=-1,l=b.length;while(++k<l)s+=b[k].repeat(d?k+1:l-k);
enk=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l+~k);
(commençant à lak=0
place de-1
, et cel-k-1
qui est alors requis est raccourci enl+~k
). De plus, les parenthèses sont-elles(i).toString(2)
nécessaires?+~k
semble que cela devrait fonctionner, mais je ne peux pas le comprendre, continue de devenir fou. Merci pour les autres conseils!l+~k
c'est incorrect, car ce n'est pas le casl-k-1
maisl-k+1
.. Mon mauvais. Vous pouvez encore le golf un octet en commençantk
à zéro si:k=0,l=b.length;while(k<l)s+=b[k++].repeat(d?k:l-k+1);
.Rubis, 98 octets
la source
a{r ?a:a.reverse}
nécessaire??
,r?
auraient été interprétées comme un nom de méthode.Java 8, 136 octets
Lambda (curry) de
Boolean
à un consommateur deInteger
. Le paramètre booléen indique s'il faut étirer à gauche (valeurstrue
,false
). La sortie est imprimée en sortie standard, séparée par des retours à la ligne, avec un retour à la ligne de fin.Lambda non golfé
Essayez-le en ligne
Limites
Parce qu'elles sont accumulées en
int
s, les sorties sont limitées à 31 bits. Par conséquent, les entrées sont limitées à 7 bits, donc l'entrée maximale prise en charge par le programme est 127.Explication
Cette solution crée chaque nombre étiré à l'aide d'opérations au niveau du bit. La boucle extérieure parcourt
i
les nombres à étirer, de 1 à n , et imprime la valeur étirée après chaque itération.La
while
boucle interne incrémentes
le nombre de bits dansi
et lesfor
itérations suivantesc
sur chaque position de bit. Dans cette boucle,d
compte jusqu'au nombre de fois pour répéter le bit actuel, qui dépend de l'entréel
. À chaque étape,o
est décalé vers la gauche et le bit appropriéi
est masqué et OU inséré.la source