L'art de façonner les mots
Étant donné une matrice binaire et une chaîne de lettres, remplacez tous les 1 de la matrice de gauche à droite par les lettres de la chaîne. Une fois que les lettres ont pris la forme de la matrice, imprimez la matrice en remplaçant les 0 par des espaces. Il est probablement plus facile de donner simplement un exemple ou deux.
Cas: Cas de base ...
Entrée un:
[0,0,1,0,0]
[0,1,0,1,0]
[1,0,0,0,1]
[0,1,0,1,0]
[0,0,1,0,0]
"PPCGPPCG"
Sortie un:
P
P C
G P
P C
G
Cas: Si la chaîne d'entrée est plus longue que le nombre de celles ...
Entrée deux:
[1,0,0]
[0,1,0]
[1,0,1]
lambda
Sortie deux:
l
a
m b
Cas: Si la chaîne d'entrée est plus courte que le nombre de celles ...
Entrée trois:
[1,1,1]
[1,0,1]
[1,1,1]
PPCG
Sortie trois:
PPC
G P
PCG
Hypothèses disponibles
- Vous pouvez supposer que la chaîne d'entrée n'est jamais vide.
- Vous pouvez supposer que la matrice ne sera jamais vide.
- Vous ne pouvez pas supposer que la matrice binaire ne sera jamais entièrement composée de zéros.
Règles
- Si la chaîne est plus courte que le nombre de uns, répétez la chaîne; tous doivent être remplacés.
- Si la chaîne est plus longue que le nombre de chaînes, utilisez uniquement ce qui est nécessaire.
- Vous pouvez utiliser True / False à la place d'entiers / bits pour l'entrée.
- Les espaces de fuite SONT REQUIS, tous les zéros doivent être remplacés par des espaces.
- Une seule nouvelle ligne de fin est acceptable.
- Il s'agit du code-golf, le nombre d'octets le plus bas gagne.
Réponses:
MATL , 11 octets
Les entrées sont une matrice numérique (avec
;
comme séparateur de ligne) et une chaîne.Essayez-le en ligne! Ou vérifiez les cas de test: 1 , 2 , 3 .
la source
Vim,
4442 octetsSauvegardé 2 octets grâce à @DjMcMoylex !
Ici, le
^M
est une nouvelle ligne littérale, et le^V
estCTRL-VPrend l'entrée dans ce format:
Avertissement: Si la chaîne est plus longue que ~ 40 caractères, votre ordinateur peut manquer de RAM.
Explication:
Voici un gif de moi "exécutant" le "programme":
la source
{
pour remplacergg
un couple.Rétine ,
4133 octetsEssayez-le en ligne!
La chaîne d'entrée est indiquée sur la première ligne de l'entrée, suivie de la matrice. Étant donné que Retina n'a aucun concept de listes (ou vraiment quoi que ce soit, sauf des chaînes), il n'y a pas de séparateurs dans la matrice binaire, sauf pour les sauts de ligne pour séparer les lignes.
Explication
Transforme les zéros en espaces.
Remplacez à plusieurs reprises le premier
1
par le premier caractère de la chaîne d'entrée tout en faisant pivoter ce caractère jusqu'à la fin de la chaîne d'entrée. Cela prend en charge les cas où il y a plus de1
s que de caractères dans la chaîne d'entrée.Ignorez la première ligne, c'est-à-dire la chaîne d'entrée.
la source
(.)(.*)
- Teehee ...JavaScript ES6,
67535049 octetsEnregistré 3 octets grâce à @ETHproductions Enregistré 1 de plus grâce à @Neil
Ancien code avant que je sache que les matrices de chaînes sont un format d'entrée valide:
Afficher l'extrait de code
la source
c=>' '[c]||b[i++%b.length]
, mais malheureusement, c'est un octet de plus ...(a,b,i)=>a.replace(/\d/g,c=>+c?b[++i]||b[i=0]:' ')
i
c'estundefined
, donc++i
revientNaN
. Depuisb
n'a pas laNaN
propriété, leb[++i]
rendementundefined
et l'||
opérateur exécute son argument côté droit, la misei
à0
et retourner le premier caractère enb
.\d
? Sûrement.
suffisant, car il suffit de gérer les0
s et les1
s (.
ne correspond pas aux nouvelles lignes).Perl, 40 octets
36 octets de code +
-i -p
drapeaux.(notez l'espace final et le manque de nouvelle ligne finale).
Pour l'exécuter, écrivez la chaîne d'entrée après l'
-i
indicateur et fournissez la matrice dans l'entrée:Si votre Perl est un peu vieux, vous devrez peut-être ajouter un point-virgule final (après l'espace).
la source
Python 2,
11471 octetsIl s'avère que je réinventais la roue, un simple double remplacement sur une chaîne multiligne fonctionne assez bien. La chaîne a l'avantage supplémentaire de pouvoir compter les zéros directement plutôt que d'avoir à faire le très laid
s*len(L)*len(L[0])
pour une liste imbriquéeAncienne solution:
D'abord, nous convertissons tout + 32 avec
chr
(tous les zéros deviennent des espaces), puis nous remplaçons tous les!
avec{}
pour permettre d'utiliser leformat
fonction.SiSi je décide de tricher et d'utiliser à laNULL
peut être compté comme un espaceNULL
place de l'espace, je peux ignorer l'ajout de 32 pour économiser 12 octets. (print
s'affiche'\x00'
comme un espace)la source
.replace('\x00',' ')
APL, 18 octets
Il s'agit d'une fonction qui prend une matrice booléenne comme argument de gauche et une chaîne comme argument de droite.
Explication:
APL a un intégré qui fait quelque chose comme ça,
\
(développer). Cependant, il ne fonctionne que sur les vecteurs et nécessite que chaque caractère soit réellement utilisé.X←,⍺
: aplatissez la matrice et stockez le résultat dans X.⍵⍴⍨+/X
: remodeler le vecteur de caractères pour qu'il ait la quantité d'éléments requise (cela prend également soin d'allonger la chaîne en répétant les caractères si nécessaire).X\
: prendre un des personnages pour chacun1
et un espace pour chacun0
dansX
.(⍴⍺)⍴
: remodeler le résultat pour lui donner la forme de la matrice d'origine.la source
PHP,
11091978882818075 octetssauvé 6 octets grâce à @ user59178
Courez avec
-r
. Attend la matrice comme chaîne multiligne dans le premier argument, chaîne dans le deuxième argument.la source
foreach(str_split($argv[1])as$c)echo$c<1?$c?:" ":($s=$argv[2])[$k++%strlen($s)];
j'ai échangé l'ordre des deux ternaires et j'ai donc supprimé les crochets de la seconde en utilisant<1
plutôt que>0
for(;""!=$c=$argv[1][$i++];)
au lieu deforeach(...)
PowerShell v2 +, 70 octets
Prend le mot d'entrée as
$a
et la matrice comme un tableau de tableaux as$b
(voir les exemples ci-dessous). Boucle à travers$b
, puis boucle à travers les éléments de chaque ligne$_|%{...}
. La boucle interne est une conditionif
/else
, où nous émettons$a[$n++]
et prenons mod-égal à la longueur de la chaîne, ou émettons un espace' '
. Ceux-ci sont-join
rassemblés dans une chaîne. Chacune des chaînes est laissée sur le pipeline, et la sortie implicite avec des sauts de ligne entre se produit viaWrite-Output
à la fin du programme.la source
Groovy, 63
la source
Python 3, 104 (ou 83) octets
Il existe une option plus courte (83 octets), mais elle échouera si la chaîne est plus de 999 fois plus courte que nécessaire:
la source
next
sur une liste. Si vous le faitess=iter(list(s)*999)
(89 octets)s.pop(0)
. Semble que j'ai copié la mauvaise version, corrigé cela.s[i++%s.length()]
est une bonne méthodologie, même si je ne connais pas le python.i++
PythonPyth, 12 octets
Essayez-le en ligne: Démonstration
Explication:
la source
ES6, 78 octets
j'ai essayé
la source
Lisp commun, 152 octets
Usage:
Cette fonction parcourt chaque élément de chaque ligne de la grille. La
format
chaîne de contrôle imprime un espace si l'élément est un 0 ou consomme l'argument caractère si l'élément est 1. Une nouvelle ligne est imprimée après chaque ligne de la grille. Si la chaîne est trop courte, elle se répète depuis le début; s'il est trop long, seule la partie appropriée est sortie.la source
Pépin , 18 octets
17 octets de code, +1 pour l'
-l
indicateur.Prend le tableau comme premier argument de ligne de commande comme ceci:
100 010 101
(doit être cité entre des shells) et la chaîne comme deuxième argument de ligne de commande.Essayez-le en ligne!Explication
la source
Java,
237233 octetsEdit: économisé 4 octets grâce à Mukul Kumar
Golfé:
Non golfé:
Essai:
la source
Pyke, 12 octets
Essayez-le ici!
Produit une matrice de caractères
Ou 9 octets, non compétitifs.
Essayez-le ici!
Encore plus non compétitif, 8 octets
Essayez-le ici!
print_grid
aligne désormais correctement les chaînes videsdeep_for
fait maintenant des devinettes sur des faux d'un type différent des véritésLa
la source
Java, 122 octets
la source
Mathematica, 76 octets
Fonction sans nom de deux arguments, dont le premier (
#
) est un tableau deTrue
s etFalse
s, et le second (s
) est une liste de caractères. La fonction d'assistanceest défini, ce qui place les mouvements du premier caractère de
s
à la fin, puis renvoie ce caractère qui vient d'être déplacé. Appelerf
plusieurs fois renverra cycliquement les caractères des
dans l'ordre.La fonction principale est
qui appelle
f
chaqueTrue
valeur du tableau d'entrée et renvoie un espace sur chaque fausse entrée. (Le{2}
raconteMap
de travailler sur les éléments des listes de composants du tableau, plutôt que sur ces listes elles-mêmes.)Ces 60 octets renvoient un tableau de caractères
s
et d'espaces. L'emballagemet des nouvelles lignes entre chacune des listes de ce tableau, puis concatène tout.
la source
C ++, 61 octets
la source