Étant donné un tableau d’entiers positifs en base 10, où n > 0
, sortent leur représentation d’un mur binaire.
Comment cela marche-t-il?
- Convertissez chaque nombre en sa représentation binaire.
- Complétez la représentation avec les zéros au début du plus long, c'est
1, 2
-à- dire ->1, 10
->01, 10
. - Créer un mur où les
1
s sont des briques et0
s sont des briques manquantes.
Un mur est un bloc de caractères où tout caractère imprimable représente une brique et un espace ( 32
) représente une brique manquante. Vous pouvez choisir n’importe quel personnage pour la brique, elle n’a pas besoin d’être distincte sur le mur tant qu’il ne s’agit pas d’un espace. Le caractère de brique manquant doit être un espace. Pour l'exemple ci-dessous, j'ai utilisé *
pour les briques.
Exemple
Contribution:
[ 15, 7, 13, 11 ]
[ 1111, 111, 1101, 1011 ]
[ 1111, 0111, 1101, 1011 ]
Sortie:
**** *** ** * * **
Règles
- Les entrées doivent être prises en base 10, si votre langue accepte d'autres bases, vous ne pouvez pas les utiliser.
- Les nouvelles lignes de début et de fin sont autorisées.
- Les entrées peuvent être considérées comme une liste d’entiers, d’arguments séparés ou n’importe quel format raisonnable.
- La sortie peut être dans n'importe quel format raisonnable: chaîne séparée par une nouvelle ligne, tableau de lignes, tableau 2d, etc.
- Les failles standard sont interdites.
Cas de test
Notez que dans le premier cas de test, toutes les couches ont une brique vide à la fin.
[ 14, 4, 6, 2 ]
***
*
**
*
[ 1, 2, 4, 8, 16 ]
*
*
*
*
*
[ 15, 11, 15, 15 ]
****
* **
****
****
[ 11, 10, 9, 8 ]
* **
* *
* *
*
C'est le code de golf si le code le plus court gagne!
[[1, " ", 1, " "], ...]
Réponses:
MATL , 5 octets
Essayez-le en ligne!
Explication
la source
42*
quoi que ce soit ...100
ou un autre numéro?J , 8 octets
Essayez-le en ligne!
Explication
la source
#:
pourquoi ça bat Jelly.Gelée , 9 octets
Essayez-le en ligne!
EDIT: COMMENT J BEAT JELLY DAT IMPOSSIBLE> _ <
la source
Octave, 22 octets
Essayez-le en ligne
Explication:
Sauvé quelques octets grâce à Luis Mendo! De plus, je n'ai pas remarqué que je pouvais choisir le personnage avec lequel construire le mur, pas seulement
*
.Ou avec
de2bi
:Explication:
Ce qui suit fonctionne sur TIO, pour 7 octets de plus:
Essayez-le ici
la source
Python 3 ,
88 84 71 7472 octetsUn lambda qui renvoie une liste de chaînes, représentant chaque ligne.
Essayez-le en ligne! (lien vers la version séparée par une nouvelle ligne)
Explication
lambda n:
- Crée un lambda (anonyme), avec un paramètren
. Retourne implicitement.[...]
- Crée une compréhension de liste.bin(x)[2:]
- Obtient les représentations binaires des nombres..replace(*'0 ')
- Remplace toutes les occurrences de0
par un espace..rjust(len(bin(max(n)))-2)
- Pad les représentations binaires à la longueur de la plus longue.for x in n
- Itère à traversn
, avec la variablex
.Changelog
-
1- 3 octets grâce à @Rod,-(...)+2
=2-(...)
, utilisation derjust()
Ajout d'une version avec à labin()
place, qui était invalide car elle ne fonctionnait pas pour1
et2
.Correction du bug ci-dessus en utilisantformat()
.Changement du type de retour en liste de chaînes, car il était autorisé par l'OP.
Correction d' un autre bogue à l' aide
rjust()
et la commutation de retour àbin()
, repéré et fixé par @Rod.la source
JavaScript (ES6),
81 à79 octetsSauvegardé 2 octets en utilisant des nombres au lieu de caractères pour les briques, comme suggéré par Rick Hitchcock
Retourne un tableau 2D avec 1 pour les briques.
Cas de test
Afficher l'extrait de code
la source
Haskell ,
767574 octetsEssayez-le en ligne!
la source
05AB1E , 9 octets
Essayez-le en ligne!
la source
b0ð:í.Bí»
pour 9 octets.Ruby,
6359 octets-4 octets avec l'aide d'Alexis Andersen
Essayez-le en ligne!
la source
n.max.to_s(2).size
par('%b'%n.max).size
et vous n'avez pas réellement besoin de le remplacer1
par*
R , 87
88octetsBlocs de mur représentés par un
8
, parce que, bien beaucoup de huit.Essayez-le en ligne!
La liste d'entiers en entrée est convertie en un tableau de bits qui sont supprimés des bits de fin 0 et inversés.
Le tableau réduit est ensuite généré en utilisant
write
une largeur de colonne qui a été déterminée lors de la suppression du tableau.ifelse()
est la seule option SI qui fonctionne malheureusement sur les vecteurs.la source
1
plutôt que""
pour le fichier de sortie danswrite
.Python 2 , 77 octets
Essayez-le en ligne!
la source
APL (Dyalog) ,
30222014 octets6 octets sauvés grâce à @ Adám
Essayez-le en ligne!
(suppose
⎕IO←0
qu'il s'agit par défaut sur de nombreuses machines)Cela prend l’entrée sous forme de tableau et retourne une matrice avec
*
s ets.
Explication
la source
' *'[⍉2⊥⍣¯1⊢⎕]
¨
.T-SQL, 290 octets
Les usages
1
de la brique, en supposant que les données proviennent du tableau@
Ungolfed, avec une explication
la source
Mathematica, 40 octets
Les briques sont des 1
Mathematica, 48 octets
Les briques sont #
la source
//.
. (/.
signifie "remplacer une fois",//.
"continuer à remplacer jusqu'à ce que la chose cesse de changer".)C # (.NET Core) ,
112 + 18 = 13086 + 41 = 127 octetsEssayez-le en ligne!
Le nombre d'octets comprend 41 octets de
using System.Linq;using C=System.Convert;
. Utilise1
comme personnage pour le mur. Néanmoins, c'est beaucoup trop long, même pour C # ...la source
namespace System.Linq{}
pour enregistrer quelques octets. Est-a.Max()
ce que la vérité est garantie (je suis sûr que je ne suis tout simplement pas le plus intelligent avec binaire: P)? Est-ce queclass Convert{}
sauver des octets?using System.Linq;using C=System.Convert;
d’octets, car ces deuxusing
directives sont indispensables à la compilation du code.Retina , 63 octets
Essayez-le en ligne! Explication:
Convertir en unaire et suffixe a
<
.Convertir en binaire.
Une fois que tous les
<
s ont atteint la gauche, supprimez-les tous.Insérer un espace avant tout
<
s ayant déjà atteint la gauche.Déplacez tous les
<
s à gauche d'un pas. Rincer et répéter.la source
PowerShell , 100 octets
Essayez-le en ligne!
Ugh,
convert
passer au binaire dans PowerShell est tellement douloureux. Plus.length
y appelle-replace
les0
espaces avec, plus une longue.padLeft()
appel à les faire tout de même.length
, tout ajoute à une longue présentation.Les suggestions de golf pour obtenir au-dessous de 100 sont les bienvenues.
la source
PHP, 84 octets
Heureusement, l'opération de bit envoie le
log
résultat à int. float ne fonctionnerait pas ici.Essayez-le en ligne .
la source
Clojure, 185 octets
Version non-golfée:
Fonction anonyme qui prend l'argument sous forme de liste. Renvoie les lignes sous forme de liste.
En lisant les autres réponses, je parie que cela pourrait être plus petit.
clojure.string/replace
prend une quantité obscène de caractères pour écrire ..la source
Japt ,
3330 octetsEssayez-le en ligne!
3 octets sauvés grâce à @Justin Mariner
Explication
la source
-R
indicateur (non ajouté au nombre d'octets) pour afficher la sortie jointe à la nouvelle ligne: ici .Python 3 ,
9290 octetsEssayez-le en ligne!
Retourne une liste de lignes. Les empiler indique qu'ils s'alignent bien.
La panne
Convertit essentiellement le tableau en binaire, puis remplace tous les 0 par des espaces.
N
nombre d'espaces sont ajoutés à l'avant de chaque ligne oùN = [length of longest line] - [length of line]
.-1 bytes
Merci à M. XoderEssayez-le en ligne!
la source
'0',' '
par*'0 '
.Japt , 11 octets
Essayez-le en ligne!
Explication
la source
z3 z
. Vous ne savez pas pourquoiy y
ça ne marche pas là-bas, j'examinerai plus tard ...Java 7,
13010888 octets22 sauvés grâce à @TheLethalCoder 20 sauvés grâce à @Xanderhall
Ungolfed:
la source
i
àb[i]
pour sauvegarder un octet. Vous pouvez conserver la sortie avec1
donc pas besoin de.replace('1','*')
. Utilisez plutôt Java 8 et compilez-le en un lambda pour sauvegarder des octets. Si vous ne voulez pas faire celaint[]b
enregistre un octet.i++
évaluei
puis incrémente (alors que++i
fait le contraire) afin que vous puissiez déplacer lei++
hors de lafor
boucle et utiliser à lab[i++]
place. Oh, et tant que nous y sommes, vous n'avez qu'une seule ligne dans votre boucle, vous n'avez donc pas besoin d'accolades.for(int x:i)
En outre, vous pouvez utiliser à laLong.toBinaryString
place de la version Integer pour enregistrer 3 octets.Python 2, 217 octets
Après 2 heures de codage, j’ai décidé que ce n’était pas une bonne idée pour numpy
Utilisation dans Ubuntu
Installer numpy
Créer un fichier nommé
i
avec une entrée au format14 4 6 2
Courir
la source
8ème ,
232254250 octetsCode
Version non-golfée avec commentaires
Ces mots doivent être appelés en séquence (voir exemple)
Usage et exemples
Ou plus clairement
la source
Pyth, 16 octets
Essayez ici. Attention à l'espace de fuite.
la source
Excel VBA,
170161 octetsGolfé
Fonction de fenêtre immédiate VBE anonyme qui prend en entrée le format
1 2 3 .. n
de la plage[A1]
et transmet le mur binaire correspondant à la fenêtre VBE Immediate via la plage[B1,C1,2:2]
Formaté:
Ungolfed
Sub
Routine complète qui prend en entrée le formatArray(1, 2, 3...)
et sort la paroi binaire correspondante dans la fenêtre VBE Immediate via la plage[A1,B1,2:2]
la source
Charbon de bois , 20 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Fonctionne en convertissant manuellement chaque numéro d'entrée en fichier binaire, mais en l'imprimant dans un ordre allant de droite à gauche. Je prends l’entrée comme une chaîne terminée par une nouvelle ligne, car Charcoal n’a pas un bon moyen de saisir des listes, sinon j’écrirais quelque chose comme ceci qui malheureusement prend actuellement 21 octets:
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Cette version est vectorisée sur le tableau en entrée, bien que sa sortie soit codée en dur en
-
s, ce qui enregistre un octet.la source