En este desafío, debe tomar el arte ASCII multilínea como entrada, como:
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
Y también tomará un entero como entrada. Debe generar el arte ASCII ampliado en la cantidad especificada con el entero. Por ejemplo, si utilizó un segundo argumento de 3
, la salida sería
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
Específicamente, cada carácter debe convertirse en un cuadro n
por n
de ese carácter, donde n
está el argumento entero. Por ejemplo, una entrada de
ab
cd
y 3 dará como resultado
aaabbb
aaabbb
aaabbb
cccddd
cccddd
cccddd
Este es el código de golf , por lo que gana el código más corto en bytes.
Respuestas:
APL, 7 caracteres / bytes *
Función que toma el número y la cadena de entrada como parámetros y devuelve el resultado:
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ *: APL puede escribirse en su propio juego de
caracteres de un solo byte (heredado) que asigna símbolos APL a los valores superiores de 128 bytes. Por lo tanto, para fines de puntuación, un programa de N caracteres que solo usa caracteres ASCII y símbolos APL puede considerarse que tiene una longitud de N bytes.
fuente
/
función (no debe confundirse con el/
operador ... sí, el mismo símbolo ) duplica y / o elimina columnas de una matriz de acuerdo con el argumento del lado izquierdo. Si es un escalar (número simple), se replica para todas las columnas de entrada. Por2/m
lo tanto, es una matriz con todas las columnas duplicadas. La⌿
variante hace lo mismo, pero para filas (o planos del primer eje en el caso general).GolfScript, 20 caracteres
Toma todas las entradas de STDIN, la primera línea es el factor de escala, el resto la entrada de líneas múltiples. Puedes probar el ejemplo en línea .
Entrada
Salida
Código
fuente
1/
. También necesito usarvalue function +
más.golfscript.rb
no esté marcado como ejecutable o que la primera línea tenga el camino equivocado hacia el intérprete de Ruby para su sistema Ah, y esoecho
debería sercat
. Pruebecat inputFile | ruby golfscript.rb scriptFile
(o simplementeruby golfscript.rb scriptFile < inputFile
) y vea si eso funciona.J,
2017 caracteresDefine un verbo
f
que hace lo que se requiere. Uso:donde
a
está la cadena de entradaEn Windows se requiere un carácter adicional para eliminar
\r
:Explicacion :
];._2
corta la cadena de entrada en trozos según el último carácter de la cadena, que en este caso será a\n
. Windows ha\r\n
así que tenemos que utilizar}:
para cortar un carácter adicional de descanso:}:;._2
. Cortar la documentación verbalEl resto del código (con la excepción de la asignación
f=.
) es una bifurcación .Se descompone así:
[ #&.|: #
Si
a
es nuestra cadena de entrada, el cálculo será3 # a
(llamaremos a este resultadox
), entonces3 [ a
(llamaremos a este resultadoy
) entoncesy #&.|: x
.3 # a
solo hace tres copias de cada miembro dea
. Copiar la documentación del verboEsto gira
dentro
3 [ a
solo devuelve 3. Documentación del verbo izquierdoFinalmente
y #&.|: x
sey
copia bajo transposiciónx
. Los#
trabajos que antes, pero el&.|:
dice J para la transposición de la entrada primero y luego la transposición de nuevo cuando esté terminado. Bajo documentación de conjunción , transponer documentación verbal .La transposición gira
dentro
entonces la copia lo cambia a
y transponerlo de vuelta te da
fuente
[##"1
además, no estoy seguro acerca de las reglas no escritas del golf en J, pero diría que la división de la cuerda y la asignación podrían omitirse, dados los requisitos sueltos de la pregunta. Ciertamente lo hice en mi respuesta APL. Ejemplo:2 ([##"1) 'abcde',:'fghij'
Haskell, 49 bytes
La función de ampliación es
e
, que toma un recuento y una cadena, y devuelve una cadena:fuente
APL, 11 caracteres
@Gareth hizo esencialmente lo mismo primero, en J, por lo que esta entrada de APL es solo para exhibición, no para competencia: es el ganador.
Uso: ampliación en arg izquierda (⍺), arte en forma de matriz de caracteres 2D en arg derecha (⍵).
⍺ / ⍵ replicará elementos en cada fila de un vector o matriz (2 / 'OO' se convierte en 'OO OO').
⍉⍺ / ⍉ lo transpondrá, replicará los elementos, lo transpondrá.
(Si buscáramos claridad en lugar de la duración del programa, el código podría haber sido E ← {⍺ / [1] ⍺ / ⍵})
fuente
Bash / sed script, 48 caracteres
Guardar como un script
chmod +x
y ejecutar:¿Como funciona?
La carne de esto está en el
sed
comando. Por ejemplo, si n = 3, entonces el comando sed se expande a algo como:Este
sed
comando compuesto se puede dividir en:s/./&&&/g
- este comando sustituto coincide con cada carácter y lo reemplaza con el carácter repetido 3 vecesp
comandos: esto solo imprime todo el espacio del patrón (es decir, la línea actual) 3 vecesPasamos
-n
a sed para decirle que no imprima nada a menos que se le indique explícitamente, por lo que tenemos control total de lo que se imprime y cuántas veces.No pude encontrar una forma rápida de generar cadenas repetitivas de longitud arbitraria directamente
sed
, así que utilicé algunosbash
trucos en su lugar:Esto imprime una cadena (no especificada, es decir, vacía), con 3 espacios iniciales, y asigna el resultado a la
bash
variabler
.Luego usamos la
bash
expansión de parámetros para transformar esta cadena de espacios a lo que necesitamos sustituir en lased
expresión:Pude evitar eliminar las comillas alrededor del
printf
especificador de formato y lased
expresión, ya que ninguno de los caracteres necesita escapar en elbash
shell.Número de letras:
fuente
$1
y eliminen=3;
, incluso guardará 4 caracteres y quizás también{}
en el printf.printf
de argumentos 's no son necesarios, reduciéndolo a 52 caracteres:r=`printf %$1s`;sed -n "s/./${r// /&}/g${r// /;//p}"
.PERL,
41 39 2522 caracteresPERL, simple y efectivo: creado correctamente para la tarea. Cuando se invoca con
-pi3
, ¿dónde3
está el parámetron
:Solución clásica (39 caracteres):
La solución clásica necesita que
n
se especifique en la primera línea de entrada, p. Ej.Gracias @manatwork por el
$&
truco.fuente
s/./$&x$n/ge
.Rubí:
6449 caracteresTodos los datos recibidos en STDIN: primero la línea del factor de escala, luego el art. ASCII.
Ejecución de muestra:
Ruby:
4441 caracteresAsumiendo que cada línea de entrada termina con un separador de línea. Gracias a @Ventero.
Ejecución de muestra:
fuente
n
:$.<2?n=$_.to_i: $><<$_.gsub(/./){$&*n}*n
(lamentablemente, el espacio después del colon es necesario, de lo contrario el analizador se confunde). Corre conruby -n
.Python 3 - 84
No es la más corta, pero una respuesta diferente. Una frase interesante.
Primero ingrese un número, luego el arte ASCII como una lista de Python, por ejemplo:
fuente
GolfScript, 29 caracteres
Esto define un bloque
f
, que cuando se llama producirá la salida deseada. Se supone que los argumentos están en la pila (porque así es básicamente como se pasan los argumentos en GolfScript).Sin golf (¿eso tiene sentido?: P):
fuente
Golfscript, 23 caracteres
He decidido escribir un programa completo porque tiene menos sobrecarga que incluso una función anónima:
~(:i;
- evalúe la entrada, luego disminuya el multiplicador, almacénelo comoi
y descarte.n/{...}%n*
- dividir por nuevas líneas, mapear cada línea, unirse por nuevas líneas{...}:c%c
, - tome un bloque, aplíquelo en el mapa de cada elemento, luego aplíquelo a toda la línea.{.}i*
- duplicar este elementoi
vecesDemostración en vivo: http://golfscript.apphb.com/?c=OyciYWJjCmRlZiIzJwp%2BKDppO24ve3t7Ln1pKn06YyVjfSVuKg%3D%3D
Ejemplo de uso:
fuente
Python 3 -
10910793Primero, ingrese el número, luego la cadena. Debe explicarse por sí mismo ...
Gracias a Waleed Khan por sugerir eliminar el[]
Gracias a Volatility por sugerir tener
a
una lista.fuente
a
una lista, hagaa+=[''.join(c*n for c in s)]*n
, luego hagaprint('\n'.join(a))
al final. Eso debería funcionar.Java - 217
Primero intente jugar al golf. Parece que Java no es el lenguaje para hacerlo.
En Windows necesita reemplazar "\ n" con "\ r \ n".
fuente
aaabbb
y 3 líneascccddd
en el ejemplo de salida anterior).for
; 8 caracteres usando a en lugar de x (a=a[1].split("\n")
, y cambie todo x con a).main
toma más bytes que programas completos en otros idiomas, los concursantes recibirán fantasmas.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])
(Editar: esta solución ahora no es válida porque la semántica de la
銻
instrucción ha cambiado. No me di cuenta de que ya había hecho uso de la instrucción cuando la cambié. Sin embargo, puede arreglar este programa simplemente cambiándolo a la nueva instrucción壹
)Sclipting , 19 caracteresEspera que la entrada esté separada por
\n
(no\r
) y que la primera línea contenga el factor multiplicador.Explicación
Al final, la pila se verá así:
Todo lo que está por encima de la marca se concatena automáticamente y se emite, el resto se descarta.fuente
i
se pronuncia [iː], no [ɑi]; ¿Cómo lo escribirías en chino ahora?J, 7 caracteres
Exactamente lo mismo que en la respuesta APL de @ Tobia, pero en caracteres ascii.
fuente
Powershell (96)
Pensé darle una oportunidad a esto en PS. Usando tubería en foreach (%) para mantenerlo corto aquí, pero el
function
yToCharArray
están haciendo que sea breve.Para usarlo, lo llama desde la línea de comando de esta manera:
Aquí está la versión no minimizada:
fuente
function m($n,$s){-split$s|%{,(-join($_-split''|%{$_*$n}))*$n}}
por 63 bytesJulia, 74 caracteres / bytes
7 menos si solo devuelvo la cadena.
julia>
es el mensaje interactivofuente
Lienzo , 2 bytes.
Pruébalo aquí!
fuente
Powershell, 54 bytes
Script de prueba:
Explicación:
$s-replace'.',('$0'*$n)
repite cada símbolo excepto una nueva línea.-split'``n'
divide la cadena ancha por una nueva línea|%{,$_*$n}
repite cada línea como un elemento de matriz y devuelve la matrizEl resultado es una serie de cadenas anchas y repetidas.
fuente
R , 83/72 bytes
Enfoque alternativo utilizando expresiones regulares
Si se nos permite una nueva línea final, 72 bytes:
Pruébalo en línea!
De lo contrario, 83 bytes:
Pruébalo en línea!
fuente
K, 20
.....
fuente
BrainFuck extendido : 158
Se convierte en:
Brainfuck: 185
Requiere un intérprete que tenga 0 o ningún cambio como marcador EOF.
beef
, disponible en repositorios de Ubuntu, funciona bien:Código EBF sin golf:
fuente
Rebol -
8779Versión bien formateada:
Ejemplo de uso:
NÓTESE BIEN. Este código solo funciona en Rebol 2 en este momento (la función INPUT utilizada aún no está completamente implementada en Rebol 3).
fuente
R , 125 bytes
Pruébalo en línea!
Convierte una cadena a UTF8, la coloca en una matriz cuyas columnas son líneas de texto (eliminando nuevas líneas) y luego repite cada carácter y las líneas generadas antes de imprimir separadamente por nuevas líneas.
fuente
R - 89
fuente
cat
para imprimirlo como stdout? Además, cada elemento de la cadena no solo debe repetirse n veces sino también repetirse en amplitud.<-
puede ser=
,paste0
puede reemplazarse aquípaste
ya que de todos modos está utilizando el argumento de colapso y el argumentoeach
puede acortarsee
. Vea aquí algunas ideas básicas sobre golf con R.stringr
MATLAB: 20 caracteres
Esta solución supone que la imagen se almacena en un archivo llamado
startup.m
y que se le permite dar la cantidad de réplicas a matlab cuando se llama, esto se puede hacer por medio de:!matlab -r "n=3"&
MATLAB, llamada sin argumento: 23 caracteres
A diferencia de la primera solución, las dos últimas suponen que la cantidad de repeticiones puede no esperarse en la llamada. Para estas soluciones, la cadena y el número originales se esperan en un archivo llamado
matlab.mat
en su directorio actual.MATLAB, alternativa matemática: 27 caracteres.
fuente
C # (177)
Espera la cadena de entrada "i" que contiene nuevas líneas "\ n" como delimitador.
Formateado
fuente
CJam, 14 bytes
CJam es más nuevo que este desafío (y la característica principal que estoy usando es realmente muy reciente), por lo que esta respuesta no sería elegible para ser aceptada, pero de todos modos no está superando a APL, así que ...
Pruébalo aquí.
Explicación
Con el nuevo
e*
que repite cada carácter en una cadena, esto es realmente sencillo:fuente
{N/1$fe*e*N*}
RProgN 100 Bytes (Windows) No compite
RProgN no tiene escapes de caracteres al momento de la escritura, lo que hace que cualquier manejo de nuevas líneas requiera una nueva línea física. Como tal, esta respuesta (y cualquier entrada) tiene que usar CRLF, en lugar de solo LF. :(
Además, la función 'rep' solo se agregó después de que se emitió este desafío, por lo que no es competitiva.
fuente
Vim, 39 pulsaciones de teclas (excluyendo entrada, no compitiendo)
El problema y la razón por la que esto no compite es porque la entrada debe ingresarse dos veces. Reemplace ambos
2
con su propia entrada.Explicación
qayl2phxl@aquu
graba una macro que tira de un personaje, lo pega y pasa al siguiente, luego se reproduce a sí mismo. Luego deshace los cambios. Como queremos que el bucle no sea infinito, no eliminamos el carácter, lo que significa que tenemos que eliminar el extraño, pero aún así terminamos con un movimiento que falla en el último carácter.:%norm @a<cr>
ejecuta la macro en cada líneagg0
vuelve al principioqbyy2P2jkddj@bq@b
usa la misma técnica que@a
para copiar cada línea, pero con una macro recursiva.Sé que esto se puede jugar más, por ejemplo, atravesando hacia atrás para la duplicación de líneas, pero debido al requisito de entrada de entrada múltiple, me detendré allí y marcaré esta respuesta como no competitiva.
Respuesta anterior (32 pulsaciones de teclas, solo dobles)
Explicación
qaylpl@aqu
graba una macro que tira de un personaje, lo pega y pasa al siguiente, luego se reproduce a sí mismo. Deshacer el cambio.:%norm @a<cr>
ejecuta la macro en cada línea:%s/.*/&\r&<cr>
duplica cada líneaQuería hacer una macro anidada, pero la interna (caracteres) detiene la externa (líneas) ... Así que tengo que ejecutar dos comandos, agregando bastantes pulsaciones de teclas a una solución simple.
fuente