Su tarea es tomar una cadena de entrada de caracteres ascii y generar la cadena como una serie de palabras verticales separadas por espacios. A continuación se muestra un ejemplo:
Dada la cadena:
Hello, World! My name is Foo.
la salida debe ser:
H W M n i F
e o y a s o
l r m o
l l e .
o d
, !
Se otorgarán 10 puntos de bonificación si su programa maneja correctamente las cadenas que necesitan envolver la terminal, que estableceremos en 80 caracteres.
¡50 puntos si su programa también puede hacer lo contrario!
code-golf
string
printable-ascii
Foo Barrigno
fuente
fuente
Respuestas:
J, 15
Uso:
fuente
Javascript -
228172145126Mi primer código de golf :)
fuente
"Input ?"
afecta realmente el comportamiento del programa, elimínelo también.length
lugar de pedirla dos veces, algunas llaves sin sentido, algunos puntos y coma innecesarios.A=prompt().split(" "),B="";for(y=0;y<(l=A.length);y++){for(i=0;i<l;i++)if(A[i][y])B+=A[i][y];else B+="_";B+="\n"}alert(B)
. (En las Normas de JavaScript para IO pregunta meta la opinión sobre todo acordado fue que depender de salida implícita de REPL no debe considerarse correcta.)if(A[i][y]){B+=A[i][y];}else{B+=" ";}
=>B+=(x=A[i][y])?x:" "
APL, 22
Explicación
Ejemplo
fuente
Ruby,
9187¡Hurra, vencí a Perl! :RE
Rubí, 150 - 50 bonus = 100
Simplemente detecta nuevas líneas y aplica un manejo especial si se detectan.
Ejecútalo como
fuente
Javascript
184149123Con la cadena de ejemplo definida:
Puede copiar la segunda declaración en la consola de su navegador.
No minificado:
Enlace JsFiddle: http://jsfiddle.net/FzMvK/
Mi primer post de código de golf: P
fuente
float:right
marcha atrás?Perl - 92
97Hace el trabajo de una manera bastante directa.
fuente
while
como se usa aquí, también se modifica la instrucción.do{}while()
bucle?do
no tiene nada más, solo un bloque. Elwhile
es una cosa separada.K, 33
Ejemplo de entrada y salida:
fuente
"
supone que están allí?{-1@" "/:',:''x@'/:!max@#:'x:" "\:x;}
(37 caracteres), lo que produciría la salida sin"
Pitón:
Una línea de código para procesar la picadura:
fuente
Python 2.7,
108103Estoy seguro de que esto se puede jugar más, pero aquí hay una solución inicial en Python.
Mejoras:
fuente
i=m
ciclo y baja a 0, puede afeitar otros 3 caracteres para obtener incluso 100.F #, 187
fuente
Rubí, 63
El algoritmo es muy sencillo; solo golf. El código tiene una longitud de 61 bytes, más 2 bytes para las
-na
opciones que necesita para funcionar. Deruby -h
:Ejecución de muestra:
fuente
Python 2.7 -
137112 bytesAlguien más ya lo ha hecho mejor, pero bien podría tirar esto. Agrega espacios a cada palabra en la entrada hasta que tenga la misma longitud que la más larga (para evitar errores de índice en la siguiente parte), luego imprime lac
letra de cada palabra mientrasc
va de 0 a la longitud de cada cadena.Se me ocurrió una forma mucho mejor de hacer esto y recorté 25 bytes. En lugar de rellenar cadenas con espacios para evitar el error de índice, ¡manejo el error directamente! Siempre que no hay nada para impresión, se imprime un solo espacio en su lugar con
try:print w[c],
,except:print' ',
. También recordé que no necesito un espacio entre una declaración de impresión y un literal de cadena, que guardó un byte.Tenga en cuenta que Python 2 le permite mezclar pestañas y espacios y los considera niveles separados de sangría. El intérprete Markdown de SE reemplaza un carácter de tabulación con cuatro espacios, pero cada línea de este programa, excepto la primera, tiene exactamente un byte de sangría.
El formateo fue bastante fácil, ya que
print 'something',
imprime'something '
más que'something\n'
. Hice eso para cada personaje, y usé unaprint
declaración vacía para obtener la nueva línea donde la necesitaba.fuente
C,
1111109590 bytesEsta solución utiliza códigos de control VT-100 para mover el cursor en el terminal.
la
^[
secuencia es un marcador de posición para el único carácter ASCII ESC, que no se puede mostrar aquí.^[7
guarda la posición actual del puntero^[8
restaura la posición del cursor a la posición guardada^[[2C
se mueve 2 pasos a la derecha^[[B
se mueve 1 paso hacia abajoedición 1: el
^[[D
código VT-100 (1 paso hacia la izquierda) ha sido reemplazado por un retroceso (mostrado como^H
aquí, pero es solo un carácter ASCII); También olvidé la instrucción "separados por espacios", ahora corregidaeditar 2:
7 caracteres guardados usando un
for
bucle en lugar dewhile
, y en32
lugar de' '
:8 caracteres más guardados llamando a uno menos
printf
: el?:
operador ternario ahora se usa en losprintf
parámetroseditar 3:
Se deshizo de la variable local
s
, trabajando directamente conargv
akav
. Esto es totalmente horrible. Pero salvó 4 caracteres. También reemplazado==
con^
y por lo tanto cambiado los?:
operandos, para salvar a 1 carácter más.Uso
Versión sin golf (primera versión)
Versión sin golf (última versión)
fuente
Me respondieron a esta pregunta hace mucho tiempo. Fue una de mis primeras contribuciones al sitio, en realidad. Hace poco me encontré de nuevo y estaba un poco avergonzado. ¿112 bytes? Inaceptable. Entonces le di otra oportunidad:
Python 3 - 92 bytes
En los 109 días desde que publiqué esa primera respuesta, me gusta pensar que he recorrido un largo camino. Incluso algo como usar Python 3 sobre 2.7 1 no se me habría ocurrido. Con este código reducido a menos de 100 bytes, mi alma finalmente puede descansar y puedo proceder a la otra vida.
Explicación
Esto obtiene una línea
stdin
y crea una lista dividiéndola en espacios en blanco. El único espacio en blanco que probablemente esté en la entrada es espacios, por lo que esta línea obtiene una lista de palabras.Tomemos la segunda línea de adentro hacia afuera:
map
toma una función y un iterable como argumentos. Aplica la función a cada elemento del iterable y devuelve un nuevo iterable de los resultados. Aquí, creo un iterable con las longitudes de cada palabra de entrada.max
obtiene el valor máximo de un iterable. Esto nos da la palabra más larga en la entrada.Una lista de comprensión es similar a
map
. Hace algo a cada elemento de un iterable, y devuelve una lista de los resultados. Por cada palabra en la entrada, hagothat_word.ljust(
un código)
.ljust
es la abreviatura de "justificar a la izquierda". Toma un entero como argumento y agrega espacios a la cadena hasta que sea tan largo.Este es un buen truco. En este contexto,
*
significa "descomprimir este iterable como argumentos múltiples". De esta manera,zip
se puede utilizar para transponer una matriz (por ejemplo,zip(*[(1,2),(3,4)])
->[(1,3),(2,4)]
). La única restricción es que todas las filas de la matriz deben tener la misma longitud, o elementos de todas las filas, pero las más cortas se cortan para que coincidan.Ya sabemos lo que
map
hace. Lo único nuevo aquí esjoin
, que toma un iterativo de cadenas y lo convierte en una sola cadena usando el delimitador al que está unido. Por ejemplo,'a'.join(['I', 'can', 'play', 'the', 'saxophone'])
2 se convierteIacanaplayatheasaxophone
.Esto
join
toma un montón de cadenas y las separa por nuevas líneas. ¡Todo lo que queda esprint
hacerlostdout
y listo!Todos juntos ahora:
Encuentre la longitud de la palabra más larga desde la entrada, agregue espacios a cada palabra hasta que tengan la misma longitud, transponga con el truco
zip(*
3 , usejoin
para separar cada carácter en una fila con espacios,join
nuevamente para separar cada fila con una nueva línea, e imprimir! No está mal para la única línea que no maneja entradas en un programa de 92 bytes.1. Los
print()
4 caracteres extraídos deraw_input()
-> superan los caracteres adicionales gastados en paréntesisinput()
.2. No puedo tocar el saxofón.
3
)
.. De nada.fuente
print("\n".join(...))
a*map(print,...),
. Pruébalo en línea!05AB1E , la puntuación de
8-20-21 (3029 bytes - 50 de bonificación):Pruébelo en línea (entrada regular de una sola línea).
Pruébelo en línea (entrada inversa de varias líneas).
Explicación:
Respuesta original de 8 bytes:
Pruébalo en línea.
Explicación:
fuente
Mathematica 49
Claramente, Mathematica no es el mejor para este:
fuente
Javascript, 141
Muestra
fuente
GolfScript [41 bytes]
Cómo funciona:
Puede ver la demostración en línea aquí .
PD: Este es mi primer código GolfScript, así que no me juzgues estrictamente;)
fuente
R, 116
fuente
Bash + coreutils, 54
Salida:
fuente
$()
construcción es ahora el método común para la sustitución de comandos.APL: 18
Explicación:
a ← '', ponga un espacio delante de la cadena y asigne a un
'' = buscar espacios, produce un booleano
1 ↓ ¨a⊂⍨ crea subcadenas que comienzan donde el booleano tiene 1 y suelta el primer elemento de cada una (entonces el espacio)
↑ ↑ Haga una matriz con las subcadenas resultantes e inviértala a lo largo de la diagonal
fuente
R , 81 bytes
Guarde un byte almacenando una nueva línea como
e
, que se puede usar en ambasscan
llamadas, la llamada de comparación ycat
.Pruébalo en línea!
fuente
K (oK) , 26 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
Python 2.7 -
119106Tome 1 - 166. La inversión de las listas era necesaria para que el pop funcionara en el orden que quería, pero esto parecía un desperdicio. Y cuando traté de combinar una sola comprensión para divertirme, el pop arruinó las cosas.
Tome 2 - 119. Así que cambié a una simple indexación de listas. Sin embargo, todavía parece torpe, especialmente el relleno de espacios y nuevas líneas.
Toma 3 - gracias a @grc
fuente
[len(l)for l in w]
se puede acortar amap(len,w)
,.split(' ')
a.split()
y.join([...])
a.join(...)
.v.pop(0)
para hacer estallar el primer elemento en lugar del ¿el último?Pitón 3, 124
fuente
Haskell, 112
Golfizado:
Explicado:
Ejemplo:
fuente
JavaScript, 139 (156 con salida de console.log)
Creo que esto es lo más golfizado posible. Simplemente me divido, encuentro la palabra más grande y la transpongo en consecuencia, agregando espacios si el carácter no existe en las palabras más cortas. ¿Más que la respuesta JavaScript enviada anteriormente, pero esa respuesta no parece funcionar?
fuente
Japt
-R
, 5 bytesIntentalo
Explicación
fuente
Pyth, 8 bytes
Pruébalo en línea!
Muy claro. Toma la entrada entre comillas, es decir
"Hello World"
fuente
C
se trunca a la longitud de la entrada más corta, por lo que esto no funciona . Aquí hay una solución rápida que también es de 8 bytes.APL (NARS), 79 caracteres, 158 bytes
prueba:
La función anterior tiene salida no perfecta:
fuente