Dans ce défi, vous devez prendre comme source l'art ASCII multiligne, tel que:
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OO OOOOOOO
OO OO OO OO OO OO OO OO OO OO OO
OO OO OO OO OO OOOOO OO OOO OO OO OO OOOOO
OO OO OO OO OO OO OO OO OO OO OO OO
OOOOOO OOOOOO OOOOOO OOOOOOO OOOOOO OOOOOO OOOOOOO OO
Et vous allez aussi prendre un entier en entrée. Vous devez générer l’art ASCII agrandi du montant spécifié avec l’entier. Par exemple, si vous utilisiez un deuxième argument de 3
, le résultat serait:
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOO OOOOOOOOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO OOOOOO OOOOOOOOO OOOOOO OOOOOO OOOOOO OOOOOOOOOOOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOO OOOOOOOOOOOOOOOOOOOOO OOOOOO
Plus précisément, chaque caractère doit se transformer en une boîte n
by n
de ce caractère, où n
est l'argument entier. Par exemple, une entrée de
ab
cd
et 3 entraîneront
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
C'est le code-golf , donc le code le plus court en octets gagne.
Réponses:
APL, 7 caractères / octets *
Fonction qui prend le nombre et la chaîne d'entrée en tant que paramètres et renvoie le résultat:
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL peut être écrit dans son propre jeu de caractères codé sur un octet (existant) qui mappe les symboles APL sur les valeurs supérieures à 128 octets. Par conséquent, aux fins de la notation, un programme de N caractères qui utilise uniquement des caractères ASCII et des symboles APL peut être considéré comme ayant une longueur de N octets.
la source
/
fonction (à ne pas confondre avec l'/
opérateur… oui, même symbole ) duplique et / ou supprime les colonnes d’une matrice selon l’argument de gauche. S'il s'agit d'un scalaire (nombre simple), il est répliqué pour toutes les colonnes en entrée. Par conséquent,2/m
est une matrice avec toutes les colonnes doublées. La⌿
variante fait la même chose, mais pour les lignes (ou les plans du premier axe dans le cas général).GolfScript, 20 caractères
Prend toutes les entrées de STDIN, la première ligne est le facteur de mise à l'échelle, le reste, l'entrée multiligne. Vous pouvez essayer l'exemple en ligne .
Contribution
Sortie
Code
la source
1/
. J'ai aussi besoin d'utiliservalue function +
plus.golfscript.rb
ne soit pas marqué comme exécutable, ou que la première ligne ait le mauvais chemin vers l'interprète Ruby pour votre système. Oh, et celaecho
devrait être probablementcat
. Essayezcat inputFile | ruby golfscript.rb scriptFile
(ou justeruby golfscript.rb scriptFile < inputFile
) et voyez si cela fonctionne.J,
2017 caractèresDéfinit un verbe
f
qui fait ce qui est requis. Usage:où
a
est la chaîne d'entrée.Sous Windows, un caractère supplémentaire est requis pour supprimer
\r
:Explication :
];._2
coupe la chaîne d'entrée en morceaux en fonction du dernier caractère de la chaîne, qui dans ce cas sera un\n
. Windows a\r\n
donc nous devons utiliser}:
pour couper un caractère supplémentaire de:}:;._2
. Couper la documentation du verbeLe reste du code (à l'exception de l'affectation
f=.
) est un fork .Il se décompose comme ceci:
[ #&.|: #
Si
a
est notre chaîne d'entrée le calcul sera3 # a
(nous appellerons ce résultatx
), alors3 [ a
(nous appellerons ce résultaty
) alorsy #&.|: x
.3 # a
fait juste trois copies de chaque membre dea
. Copier la documentation du verbeCe tourne
dans
3 [ a
retourne juste 3. Documentation du verbe gaucheEnfin
y #&.|: x
esty
copie sous Transposex
. Le#
fonctionne comme avant, mais le&.|:
dit à J de transposer l’entrée d’abord puis de la transposer une fois terminée. Sous documentation de transposition , transposez la documentation du verbe .La transposition tourne
dans
alors la copie le change en
et en le transposant vous donne
la source
[##"1
je ne suis pas sûr non plus des règles non écrites du golf en J, mais je dirais que le dédoublement des chaînes et l'assignation pourraient être omis, étant donné les exigences peu claires de la question. Je l'ai certainement fait dans ma réponse APL. Exemple:2 ([##"1) 'abcde',:'fghij'
Haskell, 49 octets
La fonction agrandir est
e
, qui prend un compte et une chaîne, et retourne une chaîne:la source
APL, 11 caractères
@Gareth a essentiellement fait la même chose en premier, en J, donc cette inscription APL est juste pour une exposition, pas pour une compétition - il est le vainqueur.
Utilisation: grossissement dans l'argument de gauche (), art sous la forme d'une matrice de caractères 2d dans l'arg de droite ().
⍺ / ⍵ répliquera les éléments sur chaque ligne d'un vecteur ou d'une matrice (2 / 'OO' devient 'OO OO').
⍉⍺ / ⍉ transposera cela, répliquera les éléments, transposera cela.
(Si nous visions la clarté au lieu de la longueur du programme, le code aurait pu être E ← {⍺ / [1] / ⍵})
la source
Script Bash / sed, 48 caractères
Enregistrez en tant que script
chmod +x
et exécutez:Comment ça marche?
La viande en est dans la
sed
commande. Par exemple, si n = 3, la commande sed est étendue à quelque chose comme:Cette
sed
commande composée peut être divisée en:s/./&&&/g
- cette commande de substitution correspond à chaque caractère et le remplace par le caractère répété 3 foisp
Commandes 3x - ceci imprime simplement 3 fois tout l'espace du motif (c'est-à-dire la ligne courante)Nous passons
-n
à sed pour lui dire de ne rien imprimer sauf indication explicite, nous avons donc le contrôle total sur ce qui est imprimé et combien de fois.Je ne pouvais pas trouver un moyen rapide de générer des chaînes de répétition de longueur arbitraire directement dans
sed
, donc j'ai utilisé quelquesbash
astuces à la place:Ceci imprime une chaîne (non spécifiée, c'est-à-dire vide), avec 3 espaces de début, et affecte le résultat à la
bash
variabler
.Nous utilisons ensuite le
bash
paramètre expansion pour transformer cette chaîne d'espaces en éléments à substituer dans l'sed
expression:J'ai réussi à supprimer les guillemets autour du
printf
spécificateur de format et de l'sed
expression, car aucun des caractères qu'il contient ne doit s'échapper dans lebash
shell.Nombre de caractères:
la source
$1
et de supprimern=3;
, vous enregistrez même 4 caractères et peut-être aussi{}
le printf.printf
des arguments de ne sont pas nécessaires, ce qui réduit à 52 caractères:r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
.PERL,
41 39 2522 caractèresPERL, simple et efficace - créé pour la tâche. Lorsqu'il est appelé avec
-pi3
, où3
est le paramètren
:Solution classique (39 caractères):
La solution classique a besoin de
n
est spécifiée dans la première ligne, par exempleMerci @ Manatwork pour le
$&
truc.la source
s/./$&x$n/ge
.Ruby:
6449 caractèresToutes les données reçues sur STDIN: première ligne le facteur de mise à l'échelle, puis l'art ASCII.
Échantillon échantillon:
Ruby:
4441 caractèresEn supposant que chaque ligne d’entrée se termine par un séparateur de ligne. Merci à @Ventero.
Échantillon échantillon:
la source
n
:$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n
(malheureusement, l'espace après le côlon est nécessaire, sinon l'analyseur devient confus). Courez avecruby -n
.Python 3 - 84
Pas la plus courte mais une réponse différente néanmoins. Un one-liner intéressant.
Ajoutez d'abord un nombre, puis l'art ASCII sous forme de liste Python, par exemple:
la source
GolfScript, 29 caractères
Ceci définit un bloc
f
qui, lorsqu'il est appelé, produira la sortie souhaitée. Cela suppose que les arguments sont sur la pile (car c'est essentiellement ainsi que les arguments sont passés dans GolfScript).Ungolfed (cela a-t-il même un sens?: P):
la source
Golfscript, 23 caractères
J'ai décidé d'écrire un programme entier parce qu'il comporte moins de temps système que même une fonction anonyme:
~(:i;
- évaluez l'entrée, décrémentez le multiplicateur, enregistrez-le sousi
et supprimez-le.n/{...}%n*
- scinder par nouvelles lignes, mapper chaque ligne, joindre par nouvelles lignes{...}:c%c
, - prenez un bloc, appliquez-le sur chaque élément de la carte, puis appliquez-le à toute la ligne.{.}i*
- dupliquer cet élémenti
foisDémo en direct: http://golfscript.apphb.com/?c=OyciYWjjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06yyVjfSVuKg%3D%3D
Exemple d'utilisation:
la source
Python 3 -
10910793D'abord, entrez le numéro, puis la chaîne. Devrait être explicite ...
Merci à Waleed Khan d’avoir suggéré de supprimer le[]
Merci à Volatility pour avoir suggéré d’
a
être une liste.la source
a
une liste, faitesa+=[''.join(c*n for c in s)]*n
, puis faitesprint('\n'.join(a))
à la fin. Cela devrait fonctionner.Java - 217
Essayez d'abord de jouer au golf. On dirait que Java n'est pas le langage pour le faire.
Sous Windows, vous devez remplacer "\ n" par "\ r \ n".
la source
aaabbb
et 3 lignescccddd
dans votre exemple de sortie ci-dessus).for
; 8 caractères en utilisant a au lieu de x (a=a[1].split("\n")
, et changez tous les x avec a).main
prend plus d'octets que de programmes entiers dans d'autres langues, les candidats vont se faire bogeys.enum M{;public static void main(String[]a){int f=Integer.valueOf(a[0]),i=-1,j,k;a=a[1].split("\n");for(;++i<a.length*f;System.out.println())for(j=0;j<a[i/f].length();j++)for(k=0;k++<f;)System.out.print(a[i/f].charAt(j));}}
Integer.valueOf(a[0])
->new Integer(a[0])
(Edit: cette solution est maintenant invalide car la sémantique de l'
銻
instruction a changé. Je ne savais pas que je l'avais déjà utilisée lorsque je l'avais modifiée. Vous pouvez toutefois corriger ce programme en le changeant simplement en la nouvelle instruction壹
.)Sclipting , 19 caractèresAttend que l'entrée soit séparée par
\n
(non\r
) et que la première ligne contienne le facteur de multiplication.Explication
A la fin, la pile ressemblera à ceci:
Tout ce qui se trouve au-dessus de la marque est automatiquement concaténé et sorti, le reste est jeté.la source
i
est prononcée [iː], pas [ɑi]; comment l'écririez-vous en chinois maintenant?J, 7 caractères
Exactement la même chose que dans la réponse APL de @ Tobia, mais en caractères ascii.
la source
Powershell (96)
Je pensais que je donnerais un coup de feu dans PS. En utilisant la tuyauterie dans de foreach (le%) pour le garder court ici, mais
function
etToCharArray
sont en fait prendre un coup , il brièveté.Pour l'utiliser, appelez-le depuis la ligne de commande comme suit:
Voici la version non minimisée:
la source
function m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}
pour 63 octetsJulia, 74 caractères / octets
7 moins si je retourne juste la chaîne.
julia>
est l'invite interactive.la source
Toile , 2 octets
Essayez-le ici!
la source
Powershell, 54 octets
Script de test:
Explication:
$s-replace'.',('$0'*$n)
répète chaque symbole sauf la nouvelle ligne.-split'``n'
divise la chaîne large par une nouvelle ligne|%{,$_*$n}
répète chaque ligne en tant qu'élément de tableau et retourne un tableauLe résultat est un tableau de chaînes larges et répétées.
la source
R , 83/72 octets
Approche alternative utilisant les expressions rationnelles
Si nous sommes autorisés à utiliser une nouvelle ligne de fin, 72 octets:
Essayez-le en ligne!
Sinon, 83 octets:
Essayez-le en ligne!
la source
K, 20
.....
la source
BrainFuck étendu : 158
Cela devient:
Brainfuck: 185
Il nécessite un interprète qui a 0 ou pas de changement en tant que marqueur EOF.
beef
, disponible chez Ubuntu Repo, fonctionne de plus en plus:Code EBF non-golé:
la source
Rebol -
8779Version joliment formatée:
Exemple d'utilisation:
NB Ce code ne fonctionne que dans Rebol 2 pour le moment (la fonction INPUT utilisée n’est pas encore totalement implémentée dans Rebol 3).
la source
R , 125 octets
Essayez-le en ligne!
Convertit la chaîne en UTF8, la place dans une matrice dont les colonnes sont des lignes de texte (suppression des nouvelles lignes), puis répète chaque caractère et les lignes générées avant impression séparées par des nouvelles lignes.
la source
R - 89
la source
cat
à l'imprimer en tant que stdout? De plus, chaque élément de la chaîne ne doit pas simplement être répété n fois, il doit être répété également en largeur.<-
jouer un peu plus à votre fonction: vous pouvez=
, vouspaste0
pouvez remplacer ici parpaste
puisque vous utilisez de toute façon l'argument collapse et que l'argumenteach
peut être raccourcie
. Voir ici pour quelques idées de base sur le golf avec R.stringr
MATLAB: 20 caractères
Cette solution suppose que l’image est stockée dans un fichier appelé
startup.m
et qu’il est autorisé à indiquer le nombre de réplications à matlab lorsqu’on l’appelle. Cette opération peut être effectuée au moyen de:!matlab -r "n=3"&
MATLAB, appel sans argument: 23 caractères
Contrairement à la première solution, les deux dernières supposent que le nombre de réplications ne peut pas être attendu dans l'appel. Pour ces solutions, la chaîne et le nombre d'origine sont attendus dans un fichier appelé
matlab.mat
dans votre répertoire actuel.MATLAB, alternative mathématique: 27 caractères
la source
C # (177)
Attend la chaîne d'entrée "i" contenant les nouvelles lignes "\ n" en tant que délimiteur.
Formaté
la source
CJam, 14 octets
CJam est plus récent que ce défi (et la principale fonctionnalité que j'utilise est en fait très récente), donc cette réponse ne pourrait pas être acceptée - mais elle ne bat pas l'APL de toute façon, alors ...
Testez-le ici.
Explication
Avec le nouveau
e*
qui répète chaque caractère dans une chaîne, ceci est vraiment simple:la source
{N/1$fe*e*N*}
RProgN 100 octets (Windows) non concurrents
RProgN n'a pas d'échappements de caractères au moment de l'écriture, ce qui oblige toute manipulation de nouvelles lignes à nécessiter une nouvelle ligne physique. En tant que telle, cette réponse (et toute entrée) doit utiliser des CRLF, au lieu de simplement des LF. :(
De plus, la fonction 'rep' n'a été ajoutée qu'après la publication de ce défi. Elle n'est donc pas en concurrence.
la source
Vim, 39 frappes au clavier (entrée non comprise, pas en compétition)
le gotcha et la raison pour laquelle cela n’est pas concurrent, c’est que l’entrée doit être entrée deux fois. Remplacez les deux
2
par votre propre entrée.Explication
qayl2phxl@aquu
enregistre une macro qui tire un caractère, le colle et passe au suivant, puis se rediffuse. Ensuite, il annule les modifications. Parce que nous voulons que la boucle ne soit pas infinie, nous ne supprimons pas le caractère, ce qui signifie que nous devons supprimer la boucle superflue tout en terminant par un mouvement qui échoue sur le dernier caractère.:%norm @a<cr>
exécute la macro sur chaque lignegg0
revient au tout débutqbyy2P2jkddj@bq@b
utilise la même technique que@a
pour copier chaque ligne, mais avec une macro récursive.Je sais que cela peut être joué davantage, par exemple en effectuant un retour en arrière pour la duplication de ligne, mais en raison de l'exigence d'entrée multiple, je vais m'arrêter là et marquer cette réponse comme non compétitive.
Réponse précédente (32 frappes, seulement les doubles)
Explication
qaylpl@aqu
enregistre une macro qui extrait un caractère, le colle et passe au suivant, puis se rejoue. Annuler le changement.:%norm @a<cr>
exécute la macro sur chaque ligne:%s/.*/&\r&<cr>
double chaque ligneJe voulais créer une macro imbriquée, mais la première (caractères) arrête la première (lignes) ... Je dois donc exécuter deux commandes, ce qui ajoute quelques touches à une solution par ailleurs simple.
la source