Pour un entier n
satisfaisant n > 0
, écrivez sa valeur sous la forme d'un chemin descendant droit basé sur sa représentation binaire.
Règles
- Le premier bit (le plus significatif) défini est toujours dans le coin supérieur gauche.
- Lorsque le bit suivant est défini (a
1
), dessinez un caractère ("rempli") sur la ligne suivante dans la même colonne que le caractère précédent dessiné. Essayez d'utiliser des espaces ("vides") pour remplir, mais n'importe quel caractère fera aussi longtemps qu'il est toujours le même. - Lorsque le bit suivant n'est pas défini (a
0
), dessinez un caractère ("rempli") sur la même ligne immédiatement à droite du caractère précédent dessiné. - Votre code doit prendre en charge des nombres avec au moins 20 bits significatifs.
- Écrivez un programme complet, une fonction, un lambda, etc. mais pas d'extrait.
- Aucun espace de tête (ou caractère "vide") / lignes autorisées
- N'importe quel nombre d'espaces de fin (ou caractère "vide") / lignes autorisées
- Tout type d'entrée 1D est accepté: nombre, chaîne, tableau de booléens, etc. Gardez cependant l'ordre des bits intact.
- Tout type de sortie visuelle 2D est accepté: sur stdout, une chaîne (avec deux valeurs distinctes représentant "rempli" et "vide"), vous pouvez même sortir une matrice si vous le souhaitez. Une liste de chiffres semble difficile à concilier avec la règle "sans espace de titre", mais je suis ouvert à elle si vous trouvez un moyen de l'utiliser. Remarque: si vous avez choisi d'imprimer ou de renvoyer une chaîne, les caractères utilisés doivent être des caractères ASCII dans la plage de points de code [32-126].
- Les failles standard sont interdites.
- Il s'agit de codegolf, donc le code le plus court l'emporte.
Exemples
Entrée: 1
*
Entrée: 2
**
Entrée: 3
*
*
Entrée: 4
***
Entrée: 5
**
*
Entrée: 6
*
**
Entrée: 7
*
*
*
Entrée: 25
*
***
*
Entrée: 699050
**
**
**
**
**
**
**
**
**
**
Entrée: 1047552
*
*
*
*
*
*
*
*
*
***********
Entrée: 525311
**********
*
*
*
*
*
*
*
*
*
*
[1,0,1]
, oui.9
est que1001
je voudrais mon entrée à0011
. Est-ce que ça va?1
premier fait partie du défi, et (re) déplacer ce bit serait banaliser le défi donc j'ai peur de devoir vous dire non, @TonHospel. Vous pouvez cependant le supprimer de votre entrée dans le programme.Réponses:
Gelée , 8 octets
Un lien monadique acceptant un certain nombre en tant que liste de uns et de zéros (par exemple
13
est[1,1,0,1]
) le renvoi d' une liste de listes de uns et de zéros dans lequel la première liste est la première rangée.Essayez-le en ligne! ou consultez une suite de tests formatée
Comment?
la source
MATL , 14 octets
Produit une sortie graphique sous la forme d'un chemin commençant aux coordonnées (0,0). Essayez-le sur MATL Online! Ou voyez quelques exemples hors ligne ci-dessous:
Entrée
7
:Sortie:
Entrée
699050
:Sortie:
Si vous préférez, vous pouvez voir le chemin sous forme de coordonnées complexes pour 9 octets :
Essayez-le en ligne!
Explication
la source
MATL , 10 octets
Entre un tableau de chiffres binaires. Sort une matrice.
Essayez-le en ligne!
Explication
la source
Python 2 ,
1009981787366 octetsEssayez-le en ligne!
Version récursive:
Python 2 ,
716967 octetsEssayez-le en ligne!
la source
Fusain ,
2220191110 octetsSeulement ma deuxième réponse au charbon jusqu'à présent.
Prend l'entrée en chaîne binaire (c'est-à-dire en
699050
tant que10101010101010101010
).-9 octets grâce à @Neil suggérant de boucler en arrière.
Essayez-le en ligne.
Explication:
Lisez STDIN sous forme de chaîne dans l'ordre inverse:
Faites une boucle sur ses chiffres binaires sous forme de chaînes
ι
:Si le
ι
nombre repoussé à un nombre est 1, imprimez le*
haut, sinon imprimez le*
vers la gauche.la source
{}
s.Base
ne coûte que 1 octet que vous n'avez pas besoinCast
du tout:F⮌↨N²¿ι↑*←*
.-v
, car Charcoal a été conçu comme une langue de golf, et j'ai ajouté le mode verbeux juste pour le rendre plus facile à taper et à comprendre. (Je peux cependant en ajouter un si vous le souhaitez).-a
est l'abréviation de--ast
, je l'ai ajouté (format emprunté à PyTek btw) pour m'aider à comprendre le code succinct avec le moins d'effort possible: P (et cela aide vraiment lorsque vous avez accidentellement gâché l'ordre des arguments). En outre, ce-l
n'est pas une option distincte . (aussi juste-h
pour l'aide sur / descriptions des arguments de ligne de commande)C # (.NET de base) ,
155123120113101 octets32 octets enregistrés grâce à l'entrée pouvant être reçue sous forme de tableau de bits.
7 octets enregistrés grâce à @auhmaan.
10 octets enregistrés grâce à @KevinCruijssen.
Essayez-le en ligne!
la source
+new string(' ',c)+"*"
en+"*".PadLeft(c)
(économise 7 octets)?0
au lieu de*
:if(n[i++]<1){m+="*";c++;}
versif(n[i++]<1)m+=c++%1;
et"*".PadLeft(c);
vers"0".PadLeft(c);
m+=
peut maintenant être un ternaire si:m+=n[i++]<1?c++%1+"":(i>1?"\n":"")+"0".PadLeft(c);
0
de et l'utilisation de l'opérateur ternaire est vraiment intelligente! J'ai également corrigé le cas car699060
, en mettant simplementc
à un au début, j'ai un peu raté cela en vérifiant les cas de test.05AB1E ,
181714 octetsEssayez-le en ligne!
Explication
05AB1E explication de la toile
la source
γ€gć¸s>«1IÔ·ÌΛ
devrait économiser 4 octets.Python 2 , 59 octets
Essayez-le en ligne!
Basé sur la solution de TFeld .
la source
Haskell , 65 octets
Essayez-le en ligne!
Prend l'entrée comme une liste de booléens.
Curry PAKCS, 70 octets
Port de la réponse Haskell, mais parce que
<-
cela ne fonctionne pas dans Curry, nous devons faire une fonction d'assistanceu
. Nous devons également ajouter un espace entref
et.
pour que Curry le traite comme une composition plutôt qu'un point.Cela fonctionne également dans MCC Curry, mais ne fonctionne pas dans Sloth Curry (qui est le seul pris en charge par TIO).
la source
Haskell ,
74706762 octetsEssayez-le en ligne! Prend une liste de zéros et de uns en entrée et renvoie une chaîne séparée par des sauts de ligne.
Inspiré par la réponse de xnor .
la source
Emojicode , 251 octets
Essayez-le en ligne!
Ce n'est certainement pas une solution pour le golf, mais il n'y a pas une personne vivante qui considérerait le code Emoji comme une langue de golf. Cependant, dans le processus de me soumettre aux horreurs qui sont la syntaxe du code emoji dans un effore pour m'apprendre cette monstruosité d'une langue, j'ai été agréablement surpris de voir à quel point il peut être puissant et efficace 😀
Explication:
la source
JavaScript (ES6), 48 octets
Même format d'E / S et même logique que la version récursive ci-dessous.
Essayez-le en ligne!
Ou 42 octets si ce format est acceptable.
Version récursive, 56 octets
Prend l'entrée comme un tableau d'entiers (0 ou 1). Utilise
0
pour rempli et espace pour vide.Essayez-le en ligne!
Commenté
la source
Utilitaires Bash + GNU, 38
Ici
^K
et^H
sont des caractères de contrôle vertical et tabulation verticale littérale. Ceux-ci ne s'affichent pas bien sur les navigateurs, donc ce script peut être recréé comme suit:Exécuter dans un terminal. L'entrée se fait via STDIN.
Cette réponse peut étirer les spécifications trop loin - il n'y a en fait aucun caractère de tête sur chaque ligne de sortie - tout le positionnement se fait avec des caractères de contrôle. Si cela est trop étiré, la sortie peut être dirigée vers
|col -x|tac
11 octets supplémentaires.la source
Lot, 113 octets
Prend une liste de bits comme arguments de ligne de commande. Utilise
+
au lieu de*
car*
a une signification particulière à l'intérieur des%s:...=...%
extensions.la source
Java 10,
100106 octetsPrend un tableau de booléens et retourne une chaîne (
0
s sont vides,1
s sont remplis). Essayez-le en ligne ici .Merci à Olivier Grégoire de m'avoir aidé à jouer au golf un peu plus et de m'avertir du fait que mon format de sortie n'était pas à la hauteur des spécifications.
Version non golfée:
la source
{if(c){s+="\n";for(j=i;j-->0;)s+=0;}else++i;s+=1;}
{if(c)for(s+="\n",j=i;j-->0;)s+=0;else++i;s+=1;}
Java (JDK 10) , 83 octets
Essayez-le en ligne!
int[]
int[][]
la source
Haskell , 126 octets
Saisissez une liste de zéros et de uns. Transforme le nombre en décalage par
x↦[1-x,x]
et calcule les sommes partielles. La sortie finale se fait avec deux compréhensions de listes imbriquées.Essayez-le en ligne!
la source
R , 59 octets
Essayez-le en ligne!
Prend l'entrée comme un tableau de bits.
Renvoie une matrice booléenne
TRUE
etFALSE
représentant un*
et un, respectivement.
Il contient également des éléments dans le pied de page pour imprimer une matrice correspondant aux spécifications ci-dessus, pour faciliter les tests.
la source
APL + WIN, 65 ou 46 octets
Invite à saisir l’entier
ou pour vecteur numérique de la représentation binaire de l'entier
en supposant que j'ai lu correctement les commentaires de certaines réponses et que cette dernière entrée soit autorisée.
la source
Pyth, 23 octets
Essayez-le ici
Explication
la source
Perl 5
-p
,5436 octetsEssayez-le en ligne!
Coupez-le bien après avoir réalisé que l'entrée pouvait être une chaîne de bits.
la source
SmileBASIC,
645957 octetsLe bit le plus élevé (bit de signe) est vérifié et s'il vaut 1, la position X augmente. Si le bit de signe est inférieur à la position X (c'est-à-dire que le bit de signe est 0 et X n'est pas 0) la position Y augmente.
Le premier mouvement sera toujours horizontal, donc le mouvement Y est bloqué jusqu'après le premier mouvement X. Cela garantit que la position Y n'augmente pas pendant les 0 premiers bits.
Ensuite, N est décalé vers la gauche, et cela se répète jusqu'à ce que N atteigne 0.
la source
Rubis , 63 octets
Essayez-le en ligne!
la source
Japt ,
1917 octetsPrend l'entrée comme un tableau de bits, par exemple
[1,0,1]
, les sorties"
au lieu de*
.Rasé de deux octets grâce à Oliver .
Essayez-le en ligne!
la source
SpT
parTî
-î
est similaire àp
, sauf qu'il est par défaut" "
. En outre, il existe un raccourci pourq
:¬
î
, certainement très pratique. Je vérifie souvent les chances d'utiliser les raccourcis, mais certains me manquent toujours, merci beaucoup pour votre aide.Python 2, 113 octets
Je ne sais pas si celui-ci compte (il génère un tableau de chacune des lignes), mais si c'est le cas, je changerai mon nombre d'octets en 103:
la source
TI-Basic (TI-84 Plus CE), 85 octets
Demande une liste booléenne, retourne une matrice de 0 et 1.
Parcourt la liste, incrémente X si le prochain «bit» est 0, modifie Y sinon, puis ajoute un 1 à la matrice à cet endroit et renvoie la matrice à la fin.
TI-Basic est une langue à jeton .
Prompt
,L
* 6, (saut de ligne) * 12,1
* 5,→
* 7,X
* 5,Y
* 5,sum(
,L
* 5,{
,Ans
* 2,,
* 5,-
,+
* 3,dim(
* 3,(
* 4,For(
,I
* 3,2
,not(
,End
= 73 octetsDelvar
,[A]
* 5 = 12 octetsTI-Basic (TI-84 Plus CE), 56 octets
Mêmes processus que ci-dessus, mais en utilisant une sortie graphique (limitée par la taille de l'écran: 10 lignes, 26 colonnes, donc max 10 1 et 25 0) au fur et à mesure, au lieu d'ajouter à une matrice.
la source
Pyth, 30 octets
Essayez-le en ligne!
Utilise
Traduction Python 3:"
au lieu de*
.la source
x86 .COM, 32 octets
la source
APL (Dyalog Classic) , 18 octets
Essayez-le en ligne!
la source