Tarea:
Hay muchas respuestas en este sitio que están organizadas en arte ascii, como esta . Por lo general, el arreglo se realiza manualmente, pero ¿no ayudaría un programa con eso? :)
Su programa tomará 3 entradas:
- El código, como una sola línea.
- El número de líneas en el patrón (puede omitirse si no es necesario)
- El patrón en sí, como
*
s u otro carácter
Reglas:
- Tienes que escribir un programa (no una función) que lea desde stdin
- El texto se coloca de izquierda a derecha por línea.
- Si no hay suficiente texto para llenar el patrón, coloque
.
s en los espacios restantes - Si hay demasiado texto para llenar el patrón, imprímalo después de la salida
- code-golf , entonces el código más corto, en bytes, gana
Ejecuciones de muestra:
Entrada (prueba de ajuste exacto) :
qwertyuiopasdfghjklzxcvbnm
4
***** * ***
* * * *
* * * *
***** * ***
Salida :
qwert y uio
p a s d
f g h j
klzxc v bnm
Entrada (prueba de caracteres adicionales) :
qwertyuiopasdfghjklzxcvbnm12345
4
***** * ***
* * * *
* * * *
***** * ***
Salida :
qwert y uio
p a s d
f g h j
klzxc v bnm
12345
Entrada (prueba de caracteres insuficientes) :
qwertyuiopasdfg
4
***** * ***
* * * *
* * * *
***** * ***
Salida :
qwert y uio
p a s d
f g . .
..... . ...
X
es programa para trabajar?Respuestas:
GolfScript, 30 caracteres
Corre en línea .
Ejemplos:
fuente
Perl 6:
60 caracteresEDITAR : 38 puntos (ver abajo)Si no aprecia mis terribles habilidades artísticas, aquí está el golf:
Este hace cosas raras con los tiempos de evaluación.
Primero el
BEGIN
palabra clave obliga[get.comb, "." xx *]
a ser evaluada primero, colocando en una matriz la lista de caracteres que componen "el código", seguido de una cantidad infinita de"."
s.A continuación,
get
se evalúa al final, obteniendo el número de líneas de la plantilla de arte ASCII. Elxx
operador repite la primera parte del programa tantas veces. Esto tiene más sentido cuando te das cuenta de quecode() xx count()
básicamente es azúcar paracode() for 1..count()
:count()
debe evaluarse primero.Finalmente, el
get
comienzo del programa se obtiene una línea de la plantilla de arte ASCII y se sustituye cada"*"
una con un valor desplazado del comienzo de la matriz que hicimos antes que todo lo demás ({shift BEGIN …}
).EDITAR:
Bajó a 37 caracteres, más uno para el cambio de línea de comando:
Este es el mismo concepto que el original, el
-p
interruptor itera sobre cada línea (después deBEGIN
haber leído "el código") y sustituye todas las*
s con la siguiente letra de "el código" antes de imprimirlo. El formato de entrada para esto no debe incluir el número de líneas del formato.fuente
Ruby 2.0
5352 caracteresSegún la especificación, no utiliza el parámetro 'número de líneas'.
Ejemplo de ejecución:
Salida:
fuente
./ascii.rb: line 2: syntax error near unexpected token `(' ./ascii.rb: line 2: `puts gets($n).gsub(?*){c.slice!(0)||?.},c'
puts
con$><<
y cambiando el,
al final a un+
PowerShell ,
63868382 bytes+20 bytes gracias @Veskah
Pruébalo en línea!
Menos golfizado:
fuente
Japt , 18 bytes
Intentalo
fuente
sVl)iVr-@t°J1 ª'.
funciona para 17T-SQL, 142 bytes
Pruébalo en línea
fuente
Perl 5
-plF
, 51 bytesPruébalo en línea!
fuente
JavaScript - 199
Emite caracteres adicionales en la entrada de texto si no se usa en el patrón, usa ". si no hay suficiente
EDITAR: modificado para ser una función que acepta texto y patrón
fuente
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) -
9687Nota: Según lo sugerido por el OP , estoy usando una función. Pero si se requiere tener un programa, aquí hay una solución de 93 caracteres .
EDITAR1: Cambio importante, no sé por qué no me di cuenta de esto por primera vez: P Guardado 40 caracteres.
Uso :
Entrada de prueba : (sin número opcional innecesario según la especificación)
Salida :
Código sin golf :
Sería muy bueno escuchar cualquier sugerencia de los usuarios :)
fuente
Perl, 70 caracteres.
O, sin verificación de límites, 56 caracteres
Tenga en cuenta que este código no usa la segunda línea como se especifica y puede acortarse en tres caracteres
<>;
fuente
Golpetazo,
166 156 111106Lee desde la entrada estándar, no toma un recuento de líneas. La primera línea de entrada es el código que desea poner en el arte ascii, todas las líneas siguientes son el arte ascii, que consiste en el
@
carácter. La entrada tiene una longitud máxima de 999 caracteres y no puede contener barras diagonales . (Elegí no usar*
o#
porque tienen significados especiales en Bash).ADVERTENCIA: Este programa usa un archivo llamado
p
. Después de ejecutar el programa, eliminep
; confundirá el programa la segunda vez que lo ejecute.La mayor parte del trabajo aquí es realizado por
La primera línea sustituye la primera
@
en la técnica con el primer carácter del código. La segunda línea elimina el primer carácter del código.Si no hay suficiente código para llenar la forma, se imprime una nueva línea después de la salida principal de arte ascii por
echo $i
.fuente
C,
98, 91 caracteresAquí una solución C bastante sencilla en menos de 100 caracteres. Esto no usa la entrada de conteo de línea. (De lo contrario, se necesitaría un segundo gets () innecesario).
sin golf:
fuente
puts(s)
lugar deprintf("%s",s)
guardar 7 bytes.\n
es un problema.Python 2.7,
165155150138119 caracteresDe acuerdo, más o menos, pero supongo que es la forma más pequeña de hacerlo con Python.
Editar: nueva versión funcional 1.0.1 con incluso menos bytes utilizados:
Edit2: en
map(r,['']*input())
lugar de[r()for _ in[1]*input()]
y eliminado la importación no utilizadaEdit3: en
'>'*input()
lugar de['']*input()
guardar un carácter y agregar un carácter de solicitud para el patrón :)fuente
(['.']+l).pop(0)
lugar de(len(l)and l.pop(0)or'.')
guardar 9 bytes. Y eninput()
lugar deint(r())
guardar 1 byte.input
! Lamentablemente, su primer consejo no funciona porque genera puntos siempre que la longitud de la cadena> 0.(l+['.']).pop(0)
lugar, pero si eso tampoco funciona, aún puede guardar 4 bytes utilizando enl and
lugar delen(l)and
.(l+['.']).pop(0)
no elimina elementos del
modo que sólo primer carácter se imprime, perol
la condición funciona :)C # (compilador interactivo de Visual C #) , 122 bytes
Pruébalo en línea!
fuente
"\n"+
05AB1E ,
181715 bytesToma el código como primera entrada, el patrón como segundo (con en
0
lugar de#
).Pruébalo en línea o verifique todos los casos de prueba .
18 añosAlternativa 15 bytes tomando las entradas en orden inverso:Pruébalo en línea .
Explicación:
fuente