Este desafio é inspirado por esta resposta muito boa do TidB.
Na resposta do TidB, cada oito caracteres está na ordem correta: gnilwoB edoC
( Code Bowling
para trás). As outras strings, porém, estão em uma ordem estranha e aleatória.
Seu desafio é consertar isso.
Pegue uma string (não vazia) e um número inteiro positivo n
como entrada. A sequência conterá caracteres ASCII no intervalo: 32-126 (espaço para til).
Você deve classificar a sequência em ordem crescente (vista da esquerda, com base no valor do código ASCII), mas pule cada n
caractere, começando no final da sequência. Como exemplo, vamos pegar a string abcdABC123
como entrada e n=4
, em seguida, obteremos:
abcdABC123 <- Input string. (n=4)
_b___B___3 <- These will not be sorted (every 4th starting from the end)
1_2AC_acd_ <- The remaining characters, sorted
1b2ACBacd3 <- The final string (the output)
Outro exemplo:
9876543210 <- Input string (n=2)
_8_6_4_2_0 <- These will not be sorted
1_3_5_7_9_ <- The remaining characters, sorted
1836547290 <- The final string (the output)
A sequência de entrada pode ser obtida em um formato opcional (sequência, lista de caracteres, lista de sequências de caracteres únicas ...). O número inteiro de entrada também pode ser obtido em um formato opcional.
Casos de teste:
O formato será n=__
, seguido pela sequência de entrada na próxima linha. A saída está na linha abaixo.
n=1 (All elements will stay in place)
nafgaksa1252#"%#
nafgaksa1252#"%#
n=214 (The last character will stay in place. All other are sorted.
&/lpfAVD
&/AVflpD
n=8
g7L9T E^n I{><#ki XSj!uhl y= N+|wA}Y~Gm&o?'cZPD2Ba,RFJs% V5U.W;1e 0_zM/d$bH`@vKoQ 43Oq*C
g n !#$%&'i*+,./01l234579;w<=>?@ADoEFGHIJKBLMNOPQR STUVWXYeZ^_`abcdhjkmqsuovyz{|}~C
PHP, 101 bytes
índices de string negativos (PHP 7.1) economizam 21 bytes - e possivelmente o dia:
Corra com
php -nr '<code>' '<string>' <N>
.demolir
fonte
$i-=1
e não$i--
?$i--
não funciona se$i
estiverNULL
.--$i
, o que eu precisaria também não. ;)Oitava ,
6554 bytesExperimente online!
Usa indexação lógica para criar uma matriz de caracteres 'fixos' e 'classificados'. Explicação:
A maneira como eu criei
l
exige ques
seja diferente de zero, o que eu acho que é um requisito razoável, já que muitos idiomas usam\0
como delimitador de fim de cadeia.fonte
l
e usar um vetor de números de índice diretamentePython 2, 191 bytes
Sim, tenho certeza que esta é uma solução terrível.
Experimente online
Não vou me incomodar em explicar isso. Tudo bem até eu perceber que ele precisa ser indexado a partir do final. Agora é um monstro. Neste ponto, estou feliz que funcione.
fonte
JavaScript (ES6),
10093 bytesRecebe entrada na sintaxe de currying
(s)(n)
.Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte
Perl 5 , 94 bytes
88 bytes de código +
-F -pl
sinalizadores.Experimente online!
Na minha opinião, é muito longo, mas já não é tão feio ... Ainda estou tentando jogar golfe de qualquer maneira.
fonte
Geléia ,
1413 bytesPrograma completo que imprime a string para saída STD *.
Experimente online!
Quão?
Não posso deixar de pensar queexiste uma maneira de usar o fato deḢ
modificar sua entrada* para uma função com a qual se deseja achatar a saída em uma única lista
F
.Por exemplo, uma entrada de
"abcdABC123"
,4
produz: em[[['1'],['b']],[['2','A','C'],['B']],[['a','c',',d'],['3']]]
vez de:
['1','b','2','A','C','B','a','c',',d','3']
fonte
Python + NumPy ,
115114 bytesPega uma lista regular de Python como entrada (não tinha certeza se pegar uma matriz seria considerado kosher); retorna uma matriz NumPy contendo o resultado.
Funciona ocultando os índices relevantes e classificando o restante.
fonte
Python 2,
119113 bytesCria uma lista de todos os caracteres a serem classificados, os classifica e os mescla para impressão, evitando parte da reversão por meio de indexação negativa.
fonte
print"".join(sorted(l[~a]for a in i if a%n)[-a+a/n]if a%n else l[~a]for a in i)[::-1]
salva 5 bytesRuby, 64 bytes
Usa regex para capturar todos os caracteres irrelevantes, tanto para substituição quanto para classificação.
Experimente online
fonte