Introdução
Você está jogando um jogo de correspondência, no qual as moedas são inseridas no topo e caem no fundo (na moeda de cima) devido à gravidade.
Então, é isso
O <- inserting this coin
OO O
OOOOO
vai se tornar isso
O
OO O
OOOOO
Agora imagine alguém girando o quadro no sentido horário. O seguinte acontecerá:
1. A placa é girada
OOO
OO
O
OO
O
2. Moedas caem devido à gravidade
O
O
OO
OO
OOO
Sua tarefa
Sua tarefa é simular a rotação do quadro escrevendo um programa ou uma função. Por uma questão de simplicidade, estamos lidando apenas com um tipo de moeda (não é um jogo de correspondência muito emocionante, é…). Você pode assumir que a gravidade é aplicada somente depois que a rotação estiver concluída. A placa é girada no sentido horário.
Entrada
A entrada será uma string, que contém 3 tipos de caracteres:
- O (capital o) OR 0 (zero) - uma moeda (você decide qual delas sua solução suporta)
- (espaço) - um campo vazio
- \ n (nova linha) - fim de linha
A entrada representa o estado do quadro. Você pode assumir que a entrada está bem formada e contém um estado válido do tabuleiro (nenhuma moeda está flutuando). A entrada pode ser um parâmetro de função ou pode ser lida a partir da entrada padrão ou de um arquivo.
Resultado
A saída é o novo estado da placa após a rotação. A saída contém os mesmos 3 tipos de caracteres que a entrada. A saída pode ser retornada da sua função ou pode ser gravada na saída padrão ou em um arquivo.
Amostra
Entrada1:
O
OO O
OOOOO
Saída1:
O
O
OO
OO
OOO
Entrada2:
O O
O O
Saída2:
OO
OO
Você pode usar qualquer idioma e a biblioteca padrão do idioma escolhido. O programa mais curto em bytes vence.
fonte
Respostas:
GolfScript,
1412 caracteresA entrada deve ser fornecida no STDIN; o caractere para moedas pode ser qualquer caractere que não seja um espaço em branco. Tente aqui . Agradecemos a Peter por apontar uma redução de dois caracteres.
fonte
transpose
em Ruby que pode lidar com matrizes com diferentes comprimentos ...([nil]*a.map(&:size).max).zip(*a)
. Não é bom para jogar golfe.-1%
por$
." "
.Javascript (E6) 103
Primeira tentativa, apenas operações de matriz. Cada linha na sequência de entrada precisa ser preenchida.
Bastante prolixo.
Pseudo-código
fonte
[...x]
antes. Como isso é chamado?spread
[ developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…Ruby 2.0, 59 caracteres
Entrada via stdin, assume que todas as linhas têm o mesmo comprimento. Provavelmente é muito mais tempo do que o necessário. Mas pelo menos é legível ...
fonte
$<.map
lugar.1..-1
), apenas seleciono 50 linhas começando com a segunda (1,50
).J -
493124 bytesAcho que pode haver rotações desnecessárias, mas, caso contrário, funciona bem. É uma função que recebe a entrada conforme especificado, sendo as moedas
O
. Nenhum espaço em branco à direita é necessário na entrada.Nova versão, inspirada na resposta Javascript de edc65 :
Explicação:
Versão antiga:
Explicação:
Exemplos (observe que cadeias de
0 : 0
linhas múltiplas começam com e terminam com um colchete):fonte
Haskell - 86
Apenas aprendendo, então tenho certeza que isso pode ser melhorado.
Entrada de amostra:
Saída de amostra:
fonte
Python 2 (69)
(79)Aceita entrada preenchida com espaços para que todas as linhas tenham o mesmo comprimento. O
split
cria uma arrat de cada linha. Ozip
transpõe eficazmente a matriz. Em seguida,sorted
classifica as tuplas em ordem lexicográfica, fazendo com que todas as moedas caiam no fundo. Finalmente, imprimimos cada linha, transformando-a novamente em uma string, embora devamos revertê-la primeiro. Fazerprint'O'*c.count('O')
é equivalente e usa o mesmo número de caracteres.Exemplo de execução:
fonte
C,
167119 bytesEsta versão mais curta é (infelizmente?) Muito mais clara que a original também.
fonte
Raquete: 130
Requer que você preencha com espaços para que as linhas sejam iguais.
fonte
C # -
209174 bytesCerto, eu tenho que tentar este código de golfe em algum momento, eu acho. Criou uma função (r) que gira o quadro e o imprime. Acho que estou trapaceando um pouco quando estou imprimindo minha matriz de caracteres, mas se você não consegue entender por que não deveria ficar bravo :)
Obrigado ao ProgramFOX pelas dicas :)
Enganação
fonte
char[]
ey
reduzirá a contagem de caracteres para 192 caracteres. Além disso, não é realmente necessário fornecer a palavra-chavestatic
ao postar uma resposta aqui. Removê-lo reduzirá a contagem de caracteres para 185 caracteres.