Percebi que o odômetro do meu carro estava em 101101 quando cheguei ao trabalho hoje. O que é um número interessante porque é binário (e um palíndromo, mas isso não é importante). Agora, quero saber quando da próxima vez vou ter uma leitura de odômetro binário. Não consigo ler o odômetro enquanto estou dirigindo, porque isso seria perigoso, portanto, terá que ser binário quando chegar ao trabalho ou chegar em casa.
Há um tráfego muito ruim no caminho de e para o meu escritório, por isso tenho que seguir uma rota diferente a cada dia.
Para os propósitos deste desafio, um dia é uma viagem de ida e volta e começa com meu trajeto para o trabalho.
Você precisará fazer a leitura inicial do odômetro e uma sequência de 10 elementos representando a quantidade de milhas em cada sentido. Essa sequência deve ser repetida até você chegar a uma leitura de odômetro binário. Você deve então imprimir o número de dias que leva até chegarmos a uma leitura binária.
Tanto a milhagem para a rota quanto a leitura do odômetro serão números inteiros positivos. A contagem de dias será x
ou x.5
, portanto, a contagem da saída do dia precisará suportar ponto flutuante por meio dia. Se a contagem de dias for um número inteiro, você não precisará gerar o .0
. O odômetro sempre chegará a um estado binário.
Qualquer forma de entrada / saída é aceitável e as brechas padrão não são permitidas.
Casos de teste:
101101, [27, 27, 27, 27, 27, 27, 27, 27, 27, 27] == 165.0
1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100] == 22.5
2, [2, 3, 1, 2, 7, 6, 10, 92, 3, 7] == 2.0
Respostas:
Geléia,
221716 bytesExperimente online!
Como funciona
fonte
Javascript,
6863616052 bytes5 bytes de desconto, graças à @ETHproductions .
2311 !! bytes desativados, graças a @NotthatCharles .Teste aqui.
fonte
(i+=a[++m%10])
?r
ou om
que quer que seja (eles devem usar como padrão nulo, ou seja, 0)m=0
no inicializador e incrementando após modulo (m++%10
) ... nesse ponto, você pode simplesmente eliminarr
completamente. Todo o método está nos 50 e poucos anosMATL ,
292625 bytesO formato de entrada é
EDIT (10 de junho de 2016): O link a seguir substitui
v
por&v
( 26 bytes ) para se adaptar às alterações no idiomaExperimente online!
fonte
Lua, 108 bytes
Primeira vez usando o loop repeat..until em um codegolf!
Ungolfed
Após o primeiro loop,
o
terá uma parte decimal por causa detonumber
, tive que removê-lo ... E para adicioná-lo no primeiro caso, é por isso que concatená-lo com a"."
.fonte
Java, 112
milhasbytesfonte
05AB1E , 31 bytes
Código:
De alguma forma, o código não para de ser executado (e não consigo entender o porquê). Aparentemente, eu esqueci que existem três loops em vez de 2. Portanto, ele ainda entraria em um loop infinito ...Experimente online!
fonte
PowerShell,
8473675957 bytesRecebe informações
$a
e$b
, esperando$b
ser uma matriz explícita de milhagens (por exemplo,.\binary-car.ps1 1 @(13,25,3,4,10,8,92,3,3,100)
). Em seguida, inserimos um loopdo
/until
. A cada iteração, incrementamos$a
com a milhagem na$b
posição, de$i++ % 10
forma a percorrer continuamente a matriz. Isso começará em zero, uma vez que, para o primeiro loop, o$i
item não é inicializado e, portanto, é avaliado como$null
, o que equivale a0
esse contexto, e é somente após essa avaliação que++
ocorre.Em seguida, as
until
demonstrações verifica se o nosso número é apenas0
e1
pela primeira-replace
ing tudo1
com nada, lançando isso de volta como um inteiro com+
, e, em seguida, tomar o booleano, não com!
. Se avaliar verdadeiro, terminaremos o loop, output$i / 2
e encerraremos o programa.Explicação para o loop condicional - No PowerShell, qualquer número inteiro diferente de zero é
$true
e também qualquer sequência não vazia$true
. Por exemplo,231145
(um número inteiro) mudará para"2345"
(uma sequência) após o-replace
, que será convertido como2345
um número inteiro,!
cujo número é$false
. No entanto,101101
(um número inteiro) irá alterar a"00"
(uma cadeia) que vai expressos como0
(um número inteiro), o!
de que é$true
. Se não tivéssemos o+
, a"00"
vontade!
de,$false
uma vez que é uma string não vazia.Edit - salvas 11 bytes trocando igualdade-on-comprimento para estritamente de zero
Editar 2 - Salvo outras 6 bytes por perceber que
$b.count
sempre será10
...Editar 3 - Salvo outras 8 bytes usando do / até que, em vez de para
editar 4 - Se o objeto sendo
-replace
d for um valor inteiro, não precisa de aspas, economizando outros 2 bytesfonte
Ruby, 58
Nada especial. Apenas um ciclo ...
fonte
->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
ou ...f=->s,a,i=0{a.cycle{|e|i+=0.5;break i if/[2-9]/!~'%d'%s+=e}}; f[1, [13, 25, 3, 4, 10, 8, 92, 3, 3, 100]]
Mathematica, 92 bytes
Sim. Entrada é o odômetro e uma lista de horários. Saída é a contagem de dias.
fonte
PHP,
10298Versão Ungolfed
Os avisos do PHP podem ser removidos com um custo extra de 4 caracteres
$d = 0;
na versão golf.Exemplo
fonte
if
, remover o 00.5
e remover|
entre 1 e 0 no seu regex economiza 4 bytes.function f($i,$s){while(1)foreach($s as$v){$d+=.5;$i+=$v;if(preg_match('/^[01]+$/',$i))return$d;}}
Pitão,
363230 bytesExperimente aqui!
Explicação
fonte
C Sharp, 180.
Caro senhor, C # é longo.
fonte