Tâche:
Il y a beaucoup de réponses sur ce site qui sont organisées en art ascii, comme celle-ci . Habituellement, l'arrangement est fait manuellement, mais un programme ne vous aiderait-il pas? :)
Votre programme prendra 3 entrées:
- Le code, en une seule ligne
- Le nombre de lignes dans le motif (peut être omis si ce n'est pas nécessaire)
- Le motif lui-même, comme
*
s ou un autre caractère
Règles:
- Vous devez écrire un programme (pas une fonction) qui lit depuis stdin
- Le texte est placé de gauche à droite par ligne
- S'il n'y a pas assez de texte pour remplir le motif, mettez
.
s dans les espaces restants - S'il y a trop de texte pour remplir le motif, imprimez-le après la sortie
- code-golf , donc le code le plus court, en octets, gagne
Exemples de cycles:
Entrée (test d'ajustement exact) :
qwertyuiopasdfghjklzxcvbnm
4
***** * ***
* * * *
* * * *
***** * ***
Sortie :
qwert y uio
p a s d
f g h j
klzxc v bnm
Saisie (test de caractères supplémentaires) :
qwertyuiopasdfghjklzxcvbnm12345
4
***** * ***
* * * *
* * * *
***** * ***
Sortie :
qwert y uio
p a s d
f g h j
klzxc v bnm
12345
Entrée (test de caractères insuffisants) :
qwertyuiopasdfg
4
***** * ***
* * * *
* * * *
***** * ***
Sortie :
qwert y uio
p a s d
f g . .
..... . ...
X
es pour notre programme pour travailler?Réponses:
GolfScript, 30 caractères
Exécutez en ligne .
Exemples:
la source
Perl 6:
60 caractèresEDIT : 38 points (voir en bas)Si vous n'appréciez pas mes terribles compétences artistiques, voici le golf:
Celui-ci fait des choses étranges avec les temps d'évaluation.
Premièrement, le
BEGIN
mot - clé force[get.comb, "." xx *]
à être évalué en premier, en mettant dans un tableau la liste des caractères qui composent "le code", suivi d'une quantité infinie de"."
s.Ensuite, le
get
à la fin est évalué, obtenant le nombre de lignes du modèle d'art ASCII. L'xx
opérateur répète la première partie du programme autant de fois. Cela a plus de sens lorsque vous réalisez quecode() xx count()
c'est essentiellement du sucre pourcode() for 1..count()
:count()
doit être évalué en premier.Enfin, le
get
début du programme obtient une ligne du modèle d'art ASCII et remplace chacun"*"
par une valeur décalée par rapport au début du tableau que nous avons créé avant tout le reste ({shift BEGIN …}
).ÉDITER:
Golfé jusqu'à 37 caractères, plus un pour le commutateur de ligne de commande:
Il s'agit du même concept que l'original, le
-p
commutateur itérant sur chaque ligne (après que leBEGIN
a lu dans "le code"), et en remplaçant tous les*
s par la lettre suivante du "code" avant de l'imprimer. Le format d'entrée pour cela ne doit pas inclure le nombre de lignes du format.la source
Ruby 2.0,
5352 caractèresSelon la spécification, n'utilise pas le paramètre "nombre de lignes".
Exemple d'exécution:
Production:
la source
./ascii.rb: line 2: syntax error near unexpected token `(' ./ascii.rb: line 2: `puts gets($n).gsub(?*){c.slice!(0)||?.},c'
puts
par$><<
et en changeant le,
à la fin en un+
PowerShell ,
63868382 octets+20 octets merci @Veskah
Essayez-le en ligne!
Moins golfé:
la source
Japt , 18 octets
Essayez-le
la source
sVl)iVr-@t°J1 ª'.
fonctionne pour 17T-SQL, 142 octets
Essayez-le en ligne
la source
Perl 5
-plF
, 51 octetsEssayez-le en ligne!
la source
JavaScript - 199
Produit des caractères supplémentaires dans la saisie de texte s'ils ne sont pas utilisés dans le modèle, utilise un "." s'il n'y en a pas assez.
EDIT: modifié pour être une fonction acceptant du texte et un motif
la source
function p(a,c){x=c.split(s='*').length-1;for(i=x-a.length;i--;)a+='.';for(;i++<x;)c=c.replace(s,a[i]);console.log(c+'\n'+a.substring(x))}
JavaScript (ES6) -
9687Remarque: Comme suggéré par l'OP , j'utilise une fonction. Mais s'il est nécessaire d'avoir un programme, voici une solution à 93 caractères .
EDIT1: Changement majeur, je ne sais pas pourquoi je ne l'ai pas réalisé pour la première fois: P Enregistré 40 caractères.
Utilisation :
Entrée de test : (sans numéro optionnel inutile selon les spécifications)
Sortie :
Code non golfé :
Ce serait très agréable d'entendre des suggestions des utilisateurs :)
la source
Perl, 70 caractères
Ou, sans vérification des limites, 56 caractères
Remarque, ce code n'utilise pas la deuxième ligne comme dans la spécification et peut être raccourci de trois caractères
<>;
la source
Frapper,
166 156 111106Lit à partir de l'entrée standard, ne prend pas de nombre de lignes. La première ligne d'entrée est le code que vous voulez mettre dans l'art ascii, toutes les lignes suivantes sont l'art ascii, composé du
@
caractère. L'entrée a une longueur maximale de 999 caractères et n'est pas autorisée à contenir des barres obliques . (J'ai choisi de ne pas utiliser*
ou#
parce qu'ils ont des significations spéciales dans Bash).AVERTISSEMENT: ce programme utilise un fichier appelé
p
. Après avoir exécuté le programme, supprimezp
- cela confondra le programme la deuxième fois que vous l'exécuterez.La plupart du travail ici est effectué par
La première ligne remplace la première
@
de la technique par le premier caractère du code. La deuxième ligne supprime le premier caractère du code.S'il n'y a pas assez de code pour remplir la forme, une nouvelle ligne est imprimée après la sortie de l'art ascii principal par
echo $i
.la source
C,
98, 91 caractèresVoici une solution C assez simple en moins de 100 caractères. Cela n'utilise pas l'entrée de comptage de lignes. (Sinon, un second get () inutile serait nécessaire).
non golfé:
la source
puts(s)
au lieu deprintf("%s",s)
pour enregistrer 7 octets.\n
est un problème.Python 2.7,
165155150138119 caractèresD'accord, à peu près, mais je suppose que c'est la plus petite façon de le faire avec Python.
Edit: nouvelle version fonctionnelle 1.0.1 avec encore moins d'octets utilisés:
Edit2:
map(r,['']*input())
au lieu de[r()for _ in[1]*input()]
et a supprimé l'importation inutiliséeEdit3:
'>'*input()
au lieu d'['']*input()
enregistrer un caractère et d'ajouter un caractère d'invite pour le modèle :)la source
(['.']+l).pop(0)
au lieu de(len(l)and l.pop(0)or'.')
pour enregistrer 9 octets. Etinput()
au lieu d'int(r())
enregistrer 1 octet.input
! Malheureusement, votre premier conseil ne fonctionne pas car il génère des points tant que la longueur de la chaîne est> 0.(l+['.']).pop(0)
place, mais si cela ne fonctionne pas non plus, vous pouvez toujours enregistrer 4 octets en utilisantl and
au lieu delen(l)and
.(l+['.']).pop(0)
ne supprime pas les élémentsl
donc seul le premier caractère est imprimé mais lal
condition fonctionne :)C # (Visual C # Interactive Compiler) , 122 octets
Essayez-le en ligne!
la source
"\n"+
pour ajouter les caractères supplémentaires à la même ligne05AB1E ,
181715 octetsPrend le code comme première entrée, le motif comme deuxième (avec
0
au lieu de#
).Essayez-le en ligne ou vérifiez tous les cas de test .
1815 octets alternatifs en prenant les entrées dans l'ordre inverse:Essayez-le en ligne .
Explication:
la source