Considérons la séquence numérique suivante:
Il énumère toutes les fractions binaires dans l'intervalle unitaire .
(Pour faciliter ce défi, le premier élément est optionnel: vous pouvez le sauter et considérer que la séquence commence par 1/2.)
Tâche
Ecrivez un programme (programme complet ou une fonction) qui ...
Choisissez l'un de ces comportements:
- Entrée n, sortie nième élément de la séquence (indexé 0 ou indexé 1);
- Entrer n, sortir n premiers éléments de la séquence;
- N'entrez rien, indiquez la suite de nombres infinis que vous pouvez prendre l'un après l'autre;
Règle
- Votre programme doit au moins prendre en charge les 1000 premiers éléments.
- Vous pouvez choisir de produire des décimales ou des fractions (paire intégrée, paire entière, chaînes) à votre guise;
- Les entrées / sorties sous forme de chiffres binaires ne sont pas autorisées dans cette question;
- C'est le code-golf , les codes les plus courts gagnent;
- Lacunes standard interdites.
Testcases
input output
1 1/2 0.5
2 1/4 0.25
3 3/4 0.75
4 1/8 0.125
10 5/16 0.3125
100 73/128 0.5703125
511 511/512 0.998046875
512 1/1024 0.0009765625
Ces exemples sont basés sur une séquence indexée par 0, le 0 initial étant inclus. Vous auriez besoin d'ajuster l'entrée pour adapter votre solution.
Lire la suite
- OEIS A006257
- Problème de Josèphe: . (Anciennement M2216)
- 0, 1, 1, 3, 1, 3, 5, 7, 1, 3, 5, 7, 9, 11, 13, 15, 1, 3, 5, ...
- OEIS A062383
- : pour , ou .
- 1, 2, 4, 4, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 32, ...
A006257 (n) / A062383 (n) = (0, 0,1, 0,01, 0,11, 0,001, ...) énumère toutes les fractions binaires de l'intervalle unitaire [0, 1). - Fredrik Johansson, 14 août 2006
"1/2" "1/4" "1/8"...
take
n éléments plus tard.int
s, nidouble
dans un langage / une implémentationdouble
utilisant le format binaire64 IEEE ? J'espère que vous ne voulez pas dire qu'il faut analyser une chaîne ASCII si on veut prendre une entrée entière? Les types entiers normaux sont binaires dans des langages tels que C. Ou voulez-vous dire que l'entrée / sortie ne peut pas être un tableau ou une chaîne d'entier ou des zéros / uns ASCII?Réponses:
Haskell , 25 octets
Essayez-le en ligne!
Sorties décimales, index unique sans le terme zéro initial.
Ajoute 0,5 à l'entrée, puis divise par deux jusqu'à ce que le résultat soit inférieur à 2, puis soustrait 1. L'utilisation d'une expression sans points permet de gagner 1 octet sur
la source
Java 10,
6864 octetsEssayez d'abord le code golf!
Option 1: trouver le n- ième élément (indexé 1)
-4 octets grâce à @ Kevin Cruijssen
Il s'agit d'une méthode anonyme qui trouve le n- ième terme en supprimant le bit le plus significatif de n , en le doublant et en en ajoutant un, puis en le divisant par la puissance immédiatement supérieure de 2.
Essayez-le en ligne!
Procédure pas à pas du code:
Va modifier s'il est nécessaire d'imprimer la valeur finale au lieu de la renvoyer.
la source
{}
boucle après la boucle peut être un;
remplacement; vous pouvez supprimer l'espace après lereturn
;2.0
peut être2.
; Et changer lan>>x!=1;x++
,1<<x
et1<<x+1
àn>>x++!=1;
,1<<x-1
,1<<x
respectivement enregistre également un octet. Essayez-le en ligne: 64 octets . Profitez de votre séjour!MathGolf ,
54 octetsEssayez-le en ligne!
A quoi ça ressemblerait si l'opérateur travaillait correctement
Essayez-le en ligne!
Explication
Je me suis inspiré de cette question pour résoudre le problème, ma "propre" solution se situant autour de 10 à 12 octets, je pense.
J'avais eu l'intention de renvoyer le numéro à la puissance 2 la plus proche, s'il s'agissait d'un nombre de deux, mais en raison d'une erreur, il arrondit à la puissance suivante de deux (par exemple 4 -> 8 au lieu de 4 -> 4 ). Cela devra être corrigé plus tard, mais maintenant cela me sauve un octet.
la source
]
ne sert à rien de formater la sortie, je dirais que vous n’avez pas besoin de l’inclure dans votre nombre d’octets.Java 10,
8985706968 octetsPort de la réponse 05AB1E de @Emigma , affiche également les nombres décimaux indéfiniment.
-15 octets grâce à @Arnauld .
Essayez-le en ligne.
Explication:
la source
Perl 6 , 19 octets
Essayez-le en ligne!
la source
Python 3 , 33 octets
Essayez-le en ligne!
Sorties décimales, index unique sans le terme zéro initial.
la source
Java (JDK 10) , 30 octets
Essayez-le en ligne!
Renvoie le n ième élément de la séquence.
Cette réponse est à l'origine une succession de parcours de la réponse Java de TCFP . À la fin, les golfs ne ressemblaient plus à la réponse initiale (bien que les calculs fussent les mêmes), alors j'ai décidé de les publier séparément, au lieu de simplement commenter la réponse du PFCT. Donc, si vous aimez cette réponse, augmentez la réponse de TCFP également! ;-)
Les golfs intermédiaires étaient:
la source
05AB1E ,
118 octets3 octets sauvés grâce à Kevin Cruijssen .
Essayez-le en ligne!
Explication
la source
∞
(liste infinie commençant à 1):∞oεDÅÉs/}˜
[1,2,4,4,8,8,8,8,16,16,...,2**n]
préfixes indexés suivis d'un/
… mais cela ne fonctionnait pas si bien. Bien, mais pas8-bytes
bien. Quelque chose comme9LoDÅP)ζ
.Gelée , 9 octets
Essayez-le en ligne!
la source
PowerShell , 40 octets
Essayez-le en ligne!
Affiche la séquence infinie sous forme de valeurs décimales. Compte tenu des limitations linguistiques, rencontrera éventuellement des problèmes de précision, mais gère facilement les 1000 premières entrées.
Commence par régler
$i=2
, puis entre dans unefor
boucle. À chaque itération, nous construisons une plage1..$i
et extrayons les valeurs impaires avec|?{$_%2}
. Ceux-ci sont introduits dans leur propre boucle interne, où nous divisons chacun pour obtenir la décimale|%{$_/$i}
. Ceux-ci sont laissés sur le pipeline et sortent lorsque le pipeline est vidé après chaquefor
itération. Chaque itération nous incrémenter simplement$i
par$i*=2
pour obtenir le prochain go-round.la source
Haskell,
3532 octetsEdit: -3 octets grâce à @ Delfad0r.
C'est une liste infinie de paires d'entiers.
Essayez-le en ligne!
la source
Haskell , 40 octets
Essayez-le en ligne!
Séquence infinie sous forme de paires d'entiers (à partir de
(1,2)
).Un peu plus long que la réponse de @ nimi , mais l'approche est complètement différente, j'ai donc décidé de le poster quand même.
Cette solution est basée sur l'observation suivante.
Remarquez comment vous revenez à la séquence avec laquelle vous avez commencé!
La solution exploite ce fait (avec la paresse de Haskell) pour calculer la séquence
s
.la source
Python 2 -
6866 octets-2 octets grâce à Kevin
Essayez-le en ligne!
la source
return 2*(n-a)
pourreturn(n-a)*2
. Et vous pouvez enregistrer un octet supplémentaire en utilisant Python 2 au lieu de 3, donc vousreturn
pouvez le faireprint
(avec des parenthèses).len
etbin
au lieu delog
.Python 3 ,
5351 octetsn
.Essayez-le en ligne!
la source
def f(m=2,n=1):n<m and print(n/m)&f(m,n+2)or f(m+m)
R , 42 octets
Essayez-le en ligne!
Denominator,Numerator
la source
Raquette ,
92 à91 octetsEssayez-le en ligne!
la source
MATL , 8 octets
Essayez-le en ligne!
Renvoie Numérateur, puis Dénominateur. Utilise la même méthode que ma réponse R , bien que ce soit un peu plus efficace.
Explication, avec entrée
5
:la source
Langage de programmation Shakespeare , 426 octets
Essayez-le en ligne!
Affiche la séquence indéfiniment sous la forme de deux nombres séparés par un espace, chaque élément étant séparé par une nouvelle ligne.
la source
You be twice the sum of a cat
Python 2 , 44 octets
Essayez-le en ligne!
La fonction retourne un tuple de (numérateur, dénominateur). Une entrée de 0 n'est pas gérée (c'était optionnel).
la source
return 2*n-m+1,m
peut êtreprint-~n+n-m,m
de sauver 2 octets.Excel
4828 octetsÉconomisé 20 octets (!) Grâce à tsh
= MOD (A1 + 0,5,2 ^ (INT (LOG (A1,2))))) / 2 ^ INT (LOG (A1,2))Suppose la valeur en A1, la sortie est en décimal. Si vous souhaitez que la sortie soit sous forme de fraction, vous pouvez créer un format personnalisé pour la cellule de sortie sous la forme "0 / ### 0" et l'afficher sous forme de fraction.
Explication: Difficile à expliquer car il existe un raccourci pour accéder à cette formule. Fondamentalement, le numérateur est un décalage de bit à gauche de l'entrée et le dénominateur est la puissance suivante de 2 supérieure au nombre d'entrée.
J'ai initialement commencé avec les fonctions intégrées d'Excel pour BITLSHIFT et BITRSHIFT, mais elles déplacent les 48 bits entiers, ce qui n'est pas ce que vous voulez. Les fonctions DEC2BIN (et BIN2DEC) ont une limite de -512 à 511 (10 bits), donc cela ne fonctionnerait pas. Au lieu de cela, je devais reconstruire le nombre avec un module du nombre original, puis deux fois, puis ajouter 1 (puisque le chiffre de gauche serait toujours 1 avant un décalage).
Exemples:
la source
=(A1+0.5)/2^INT(LOG(A1,2))-1
?C ++,
977571 octets-26 octets grâce à tsh, ceilingcat, Zacharý
Code de test:
la source
if(!i)return 0;
puisque 0 n'est pas requis dans le défi.while
mais essayezfor
.for(;exp;)
est la même chose que,while(exp)
mais vous pouvez y écrire deux autres déclarations. Préférer?:
au lieu deif else
, qui serait plus court dans la plupart des cas.(...)
tourd-n-1
.C (gcc) , 63 octets
Aucune entrée, imprime une séquence infinie:
Essayez-le en ligne!
la source
JavaScript (ES6), 44 octets
Renvoie len - terme, indexé 1.
Essayez-le en ligne!
la source
Ruby , 42 octets
Essayez-le en ligne!
Imprime les paires entières indéfiniment, à partir de 1/2.
la source
JavaScript (Node.js) , 30 octets
Essayez-le en ligne! 0 indexé. Commencé comme port de ma réponse par lot, mais j’ai pu calculer en multiples de12 qui a sauvé plusieurs octets.
la source
Ruby , 31 octets
Essayez-le en ligne!
la source
> <> ,
1918 octetsEn utilisant l’idée de xnor , fixée par Jo King, -1 octet en faisant un meilleur usage des miroirs et un autre -2 octets par Jo King car elle
!
était superflue et;
n’est pas requise.Essayez-le en ligne!
la source
-0.25
. Correction pour la même quantité d'octetsWolfram Language (Mathematica) , 22 octets
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 15 octets
Essayez-le en ligne!
Préfixe anonyme lambda.
Merci à Adám pour 4 octets et à Cows Quack pour 2 octets.
Comment:
la source
C # (.NET Core) , 69 octets
Essayez-le en ligne!
Ungolfed:
la source