Do AZSPCS :
Suponha que você tenha um baralho contendo n cards. Cada cartão contém um número de 1 a n, e cada número aparece em exatamente um cartão. Você olha para o número no cartão superior - digamos que seja k - e depois inverte a ordem dos k cartões superiores. Você continua esse procedimento - lendo o número superior e depois revertendo o número correspondente de cartões - até que o cartão superior seja 1.
Escreva o programa mais rápido para calcular o número de reversões para um determinado baralho. Observe que, se você estiver participando do concurso, não poderá publicar seu código (e, portanto, ainda não publicarei meu código).
code-challenge
fastest-code
Alexandru
fonte
fonte
Respostas:
Javascript
Você passa pelo baralho, assim:
fonte
Scala: (Este não é um golfe - é?)
Aplicação completa com caixa de teste e cronômetro, incluindo o embaralhamento do baralho:
contagem: 1000 tamanho: 100 duração: 1614 msecs máquina: único Pentium M 2Ghz
fonte
Python, 84 caracteres
Golfe de qualquer maneira ... Estou usando os números de 0 a n-1. Supondo que a matriz esteja armazenada em uma variável x, são necessários 84 caracteres do Python.
No entanto, o desempenho é muito ruim devido ao abuso de memória.
fonte
C
deck
é um ponteiro para uma matriz inteira representando os decks.n
é o número dos cartões. Obviamente, a segurança da memória é tarefa do chamador.Provavelmente, está se aproximando do algoritmo mais rápido em computadores recentes e em uma linguagem de alto nível. Somente com truques de nível ASM, isso poderia ser feito mais rapidamente, mas não muito mesmo com eles.
fonte
Perl 5 , 58 + 2 (-ap) = 60 bytes
Experimente online!
fonte