Introducción
Estás jugando un juego de combinación, en el que las monedas se insertan en la parte superior y caen al fondo (sobre la moneda superior) debido a la gravedad.
Así que esto
O <- inserting this coin
OO O
OOOOO
se convertirá en esto
O
OO O
OOOOO
Ahora imagine que alguien gira el tablero en el sentido de las agujas del reloj. Lo siguiente sucederá:
1. El tablero gira
OOO
OO
O
OO
O
2. Las monedas caen debido a la gravedad
O
O
OO
OO
OOO
Tu tarea
Su tarea es simular la rotación de la pizarra escribiendo un programa o una función. En aras de la simplicidad, solo estamos tratando con un tipo de moneda (no es un juego de combinación demasiado emocionante, ¿verdad ...?). Puede suponer que la gravedad se aplica solo después de que se completa la rotación. El tablero se gira en sentido horario.
Entrada
La entrada va a ser una cadena, que contiene 3 tipos de caracteres:
- O (capital o) O 0 (cero): una moneda (usted decide cuál es su solución)
- (espacio) - un campo vacío
- \ n (nueva línea) - fin de fila
La entrada representa el estado de la placa. Puede suponer que la entrada está bien formada y contiene un estado válido del tablero (no hay monedas flotantes). La entrada puede ser un parámetro de función, o puede leerse desde la entrada estándar o desde un archivo.
Salida
La salida es el nuevo estado de la placa después de la rotación. La salida contiene los mismos 3 tipos de caracteres que la entrada. La salida se puede devolver desde su función o se puede escribir en la salida estándar o en un archivo.
Muestra
Entrada1:
O
OO O
OOOOO
Salida1:
O
O
OO
OO
OOO
Entrada2:
O O
O O
Salida2:
OO
OO
Puede usar cualquier idioma y la biblioteca estándar del idioma elegido. El programa más corto en bytes gana.
fuente
Respuestas:
GolfScript,
1412 caracteresLa entrada debe darse en STDIN, el carácter para las monedas puede ser cualquier carácter que no sea un espacio en blanco. Tratar aquí . Gracias a Peter por señalar una reducción de dos caracteres.
fuente
transpose
Ruby que puede manejar matrices con diferentes longitudes ...([nil]*a.map(&:size).max).zip(*a)
. Aunque no es bueno para jugar al golf.-1%
con$
." "
.Javascript (E6) 103
Primer intento, solo operaciones matriciales. Cada fila en la cadena de entrada debe ser rellenada.
Bastante prolijo.
Pseudocódigo
fuente
[...x]
antes. Como se llamaspread
[ developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Ruby 2.0, 59 caracteres
Entrada a través de stdin, supone que todas las líneas tienen la misma longitud Esto es probablemente mucho más largo de lo necesario. Pero al menos es legible ...
fuente
$<.map
en su lugar.1..-1
), solo selecciono 50 filas comenzando con la segunda (1,50
).J -
493124 bytesCreo que puede haber rotaciones innecesarias allí, pero de lo contrario funciona bien. Es una función que toma la entrada como se especifica, las monedas son
O
. No se requiere espacio en blanco final en la entrada.Nueva versión, inspirada en la respuesta Javascript de edc65 :
Explicación:
Versión antigua:
Explicación:
Ejemplos (tenga en cuenta que las cadenas multilínea comienzan con
0 : 0
y terminan con un paréntesis):fuente
Haskell - 86
Solo estoy aprendiendo, así que estoy seguro de que esto se puede mejorar.
Entrada de muestra:
Salida de muestra:
fuente
Pitón 2 (69)
(79)Toma entradas rellenadas con espacios para que todas las líneas tengan la misma longitud. El
split
crea un arrat de cada línea. Elzip
transpone efectivamente el array. Luego,sorted
ordena las tuplas en orden lexicográfico, haciendo que todas las monedas caigan al fondo. Finalmente, imprimimos cada línea, convirtiéndola nuevamente en una cadena, aunque primero debemos invertirla. Hacerprint'O'*c.count('O')
es equivalente y usa el mismo número de caracteres.Ejemplo de ejecución:
fuente
C,
167119 bytesEsta versión más corta es (¿desafortunadamente?) Mucho más clara que la original también.
fuente
Raqueta: 130
Requiere que rellenes con espacios para que las líneas tengan la misma longitud.
fuente
C # -
209174 bytesBien, tengo que probar este código de golf en algún momento, creo. Creó una función (r) que rota el tablero y lo imprime. Supongo que estoy haciendo trampa un poco cuando imprimo mi matriz de caracteres, pero si no puedes entender por qué no deberías estar enojado :)
Gracias a ProgramFOX por los consejos :)
Engañar
fuente
char[]
yy
reducirá el recuento de caracteres a 192 caracteres. Además, no es realmente necesario proporcionar la palabra clavestatic
al publicar una respuesta aquí. Eliminarlo reducirá el número de personajes a 185 caracteres.