Para practicar golf, he estado haciendo las tareas en la clase de Introducción a Python de mi novia. Descubrí que para esta tarea, había múltiples estrategias que se acercaban mucho en el recuento de personajes, y estoy seguro de que las personas aquí pueden encontrar formas aún mejores. Aunque estoy más interesado en las formas de hacer esto en Python, me gustaría saber lo más golfizado que puede obtener este programa, por lo tanto, este es el código de golf y gana la respuesta más corta.
Las normas:
La tarea se describe a continuación. Se le debe pedir al usuario que ingrese dos veces, aunque las indicaciones no tienen que decir nada, y pueden estar en un orden diferente.
Se aplican lagunas estándar.
Tarea 3: Flechas
Escriba un programa que solicite al usuario una cantidad de columnas e imprima el patrón como se ve a continuación. Puede suponer que el usuario proporcionará números positivos. Su programa debe manejar las flechas izquierda y derecha. Aquí hay algunos ejemplos de ejecuciones:
How many columns? 3
Direction? (l)eft or (r)ight: r
*
*
*
*
*
How many columns? 5
Direction? (l)eft or (r)ight: l
*
*
*
*
*
*
*
*
*
Respuestas:
Pyth, 23 bytes
Puede o no ser válido, según la respuesta a este comentario . De todos modos, encontré esto ordenado y, si no es válido, las otras respuestas de Pyth también son inválidas. ;)Bueno, es válido , porque aparentemente eché de menos lo obvio. : /EDITAR: ¡GANÉ! ¡¡¡YESSS !!!! ¡Primera vez en la historia! :RE
Demo en vivo.
fuente
m+*\ d\*Q
en lugar de eso enumerar cosita. Guarda 2 bytes.Pyth, 27
Pruébalo en línea
La idea básica aquí es construir una cadena que, por ejemplo, 5, se vea así:
Y luego voltéalo al revés si obtenemos
l
nuestra entrada. Luego tomamos todas lasinput-1
líneas excepto esta última y las imprimimos.fuente
Python 2,
8179 bytesTodavía podría ser golfable, pero ya veremos :)
fuente
l
yr
. No me había dado cuenta de que la entrada seeval
edita en el mismo entorno que el código.Pyth,
302827 bytesPruébalo en línea.
Al parecer, actualmente estoy atado con FryAmTheEggman con un enfoque completamente diferente. (Creo que ese es ingenioso).
Ejemplo
Explicación
fuente
PowerShell,
9185102 Bytes$c
. Restamos uno porque cada columna también tiene un*
y solo nos interesa cuántos espacios se requieren.1
, imprimir*
y salir, el resto del script no hace la diferencia.+-eq
normall
, luego crea una matriz basada en la indexación en una matriz de matrices generadas dinámicamente en función del valor de$c
. Mágico. Esencialmente, esta es la cantidad de espacios por línea que necesitamos.5 r
esta colección se mantendría(0,1,2,3,4,3,2,1,0)
.%
bucle Foreach-Object , donde sacamos una cadena de X número de espacios, luego el*
Ejemplo de uso:
Editar: variable eliminada
$e
canalizando la colección directamenteEditar2: representa correctamente 1 columna, ahora
+ Si todavía es obligatorio tomar la entrada para la dirección de las flechas de 1 columna (afirmo que no lo es), podemos intercambiar el posicionamiento de
Read-Host
y perder un par de bytes más reintroduciendo la$d
variable, para 106 :fuente
TI-BASIC,
756557545047 BytesGracias a @ThomasKwa por el cálculo correcto de bytes y el golf de 10 bytes .
Probado en mi TI-84 + Silver Edition.
Primera presentación de TI-BASIC, sugerencias de golf bienvenidas (todavía no conozco muchos trucos). Si el nombre juega un factor en la memoria que se muestra, este tiene 3 caracteres en lugar de 1 (miré el recuento de bytes en mi calculadora). Este programa está limitado por las
output
restricciones de la función (creo que con flechas de longitud 4), pero probablemente podría cambiar atext
, que se muestra gráficamente si es una longitud demasiado baja.Tenga en cuenta que esto tampoco borra la pantalla ni la detiene.
Realmente siento que la ecuación que estoy usando se puede jugar más. También se siente tan mal excluir las comillas finales.
fuente
Ans
es gratis, porque no lo usas como entrada yOutput(
no lo modificaAns
. Úselo y elimine la variableA
. Puedes asignar usando-2(Str1="R
; No hay necesidad de un condicional.-2
. Solo hazloStr1="R
por la segunda línea. Eso hace la cuarta líneaOutput(I,(1-2Ans)abs(I-L)+AL+1,"*
, que le da 4 bytes más. Pero espere, hay un modismo para(1-2Ans)
... ¡cos(πAns)
eso es , que ahorra un byte, más uno más porque obtenemos el paréntesis abierto gratis!Python 2, 89 bytes
Funciona casi de manera idéntica a mi respuesta de Pyth, solo calculando el número correcto de espacios sobre la marcha.
fuente
PowerShell,
104 10297 bytesNÓTESE BIEN. si desea ejecutarlo nuevamente, abra un nuevo PowerShell o
rv o
restablezca el estado variable.En comparación con lo tersos que son los demás, esto duele. [Duele menos en 97 que en 122]. Dos partes, ninguna de ellas muy sorprendente; lee varias columnas, utiliza un sustituto de operador de índice de matriz para obtener un desplazamiento y ejecuta una función de onda que comienza en el desplazamiento (y un ajuste para que no se caiga
mod 0
).(Y qué pasa, pasé años en esa función de onda, incapaz de detectar mi malentendido y escribiendo todos los parentes honestos, no es LISP).
fuente
Python 2,
9889 bytesUn poco más largo.
Uso
fuente
NameError: name 'l' is not defined
,NameError: name 'd' is not defined
.i
yd
en absoluto, simplemente usandorange(P())
yif P()=='l'
...)f=[...][::2*('r'>input())-1]
Perl, 85 bytes
Uso:
fuente
simplearrows2.pl
no parece tan bueno! : PPHP, 156 bytes
Crea dos matrices, así:
luego usa la unión de matriz
$s+$t
o$t+$s
para combinarlos yarray_splice
eliminar el elemento en el medio. Finalmente salida usando<?=join()
fuente
Pitón 2,
111109104 bytesSolución bastante simple. Estoy seguro de que se puede jugar más al golf. Para los que no saben
~x+n
es lo mismo quen-1-x
.Pruébalo en línea
Editar : Esto se convirtió en golf en la última línea:
fuente
Matlab,
10910596 bytesGracias a @beaker por salvarme 9 bytes .
fuente
x=x*10+32;
Ruby, 118 bytes
2.times{
- dos veces, por supuesto ...l,d=gets.split;
- obtener la entradal=l.to_i;
- cambiar la longitud a un enteroa=(d=="r"?(0..l-1):(l-1).downto(0)).to_a;
- crear una matriz desde el rango de 0 a la longitud(a+a[0..-2].reverse).each{|x| puts "#{' '*x}*"}
- iterar, convertir en las cuerdas para hacer las flechasNo es exactamente el mejor golf de la historia, pero bueno.
fuente
PowerShell,
9894 BytesSi pudiera encontrar una manera de poner el Host de lectura para la dirección dentro del bucle foreach-object pero solo solicitarlo una vez, podría guardar algunos bytes.
Editar: 94 bytes. En lugar de probar a la izquierda, pruebe a la derecha (simplifica el bucle).
98 bytes originales:
fuente
$_
variable - Hobbit engañoso. Muy inteligente, y aprendí algo hoy.> <> , 60 bytes
2 bytes desperdiciados en la línea de fondo, ¡qué irritante!
Debido a cómo funciona la entrada en> <>, no es posible 'esperar' la entrada: el
i
comando verifica si un carácter de entrada está disponible en STDIN. Si lo hay, empuja el valor ASCII de ese carácter y empuja -1 si no.Esto significa que, para usar este programa, el número y la dirección ya deben estar listos en STDIN, p. Ej.
3r
para una flecha de tamaño 3 que apunta hacia la derecha. No estoy seguro de si eso descalifica esta entrada, hágame saber sus pensamientos: o)También escribiré una descripción si alguien quiere una.
fuente
:
10?)PHP, 154 bytes
Parece realmente repetitivo, pero hace lo deseado:
Se ejecuta desde la línea de comandos como:
fuente
Python, 88 bytes
Editado
fuente