Forneceu uma entrada como um número inteiro não assinado:
13457
Sua função / sub-rotina deve retornar:
75431
Como este é um concurso de popularidade, seja criativo. Soluções criativas usam técnicas incomuns ou inteligentes para realizar determinada tarefa.
Restrições:
- Você não pode usar matrizes.
- Você não pode usar strings.
- Nenhuma substituição de RTL (
‮
)
Brownie aponta para o uso de aritmética criativa.
Como este é um concurso de popularidade, sugiro não usar o %
operador modulo ( ) no seu código.
Sobre zeros à esquerda:
Se a entrada for:
12340
Então a saída:
4321
seria aceitável.
popularity-contest
duci9y
fonte
fonte
1230
for a entrada? Estamos autorizados a produzir321
? (Caso contrário, Strings são necessárias).Respostas:
Mathematica, sem módulo!
Vamos dividir.
Primeiro, usamos algumas "aritméticas criativas" para descobrir quantos dígitos existem no número:
length = Ceiling[Log[10, n]];
Em seguida, rasterizamos o número para uma boa imagem grande:
Agora, consultamos a caixa delimitadora dessa imagem e preenchemos a largura e a altura (na verdade, usando o deslocamento da linha de base em vez da altura da imagem, porque o MM adiciona algum espaço em branco abaixo da linha de base na imagem).
Em seguida, o NestList subtrai recursivamente a largura da imagem dividida pelo comprimento da string para permitir que o ImageTake retire os caracteres do final da imagem, um por um, e esses são remontados pelo ImageAssemble para esta imagem:
Em seguida, passamos isso para a função TextRecognize para reconhecimento óptico de caracteres, que com esse tamanho de imagem e qualidade de rasterização é capaz de reconhecer impecavelmente a saída final e fornecer o número inteiro:
Logaritmos e OCR - É como chocolate e manteiga de amendoim!
Novo e melhorado
Esta versão preenche o número para lidar com o comportamento obstinado do TextRecognize com números pequenos e, em seguida, subtrai o preenchimento no final. Isso funciona mesmo para números de um dígito!
No entanto, por que você executaria uma rotina reversa em um único número é um mistério para mim. Mas, apenas por uma questão de completude, eu até o fiz funcionar para entradas de zero e uma, que normalmente quebrariam porque o log pavimentado não retorna 1 para elas.
fonte
TextRegognize
não está funcionando para números pequenos. E você digitou um erroheight = b[[3]];
. Verifique também a minha resposta também, por favor! :)TextRecognize
é que ele retorna uma String, o que não é permitido e você também precisa convertê-lo novamente em número.Perl / LuaTeX / Tesseract
O seguinte script Perl lê o número como argumento de linha de comando, por exemplo:
1234567890
O seguinte script Perl imprime o número via LuaTeX. Uma fonte virtual é criada em tempo real que espelha os dígitos horizontalmente.
Em seguida, o número inteiro é novamente espelhado horizontalmente:
A imagem final é relida via OCR (tesseract):
0987654321
fonte
Brainfuck
Basicamente, é apenas um programa de reversão de entrada.
UPD: Como Sylwester apontou nos comentários, nos intérpretes / compiladores clássicos de Brainfuck (sem possibilidade de sair do ponto zero na matriz de memória) este programa não funcionaria na ausência de '>' no início, portanto, mais estável version is:
fonte
>
no início para criar uma célula zero antes dos dados, isso não funcionará em muitos intérpretes / compiladores.[.<]
não tem célula zero para parar por causa disso e falhará. Erro debf -n rev1.bf
éError: Out of range! Youwanted to '<' below the first cell.
. Se você compilar, recebe umsegfault
talvez.,[.,]
Haskell
Sem matrizes, strings ou módulos.
Além disso, eu sei que não devemos usar listas ou strings, mas adoro o quão curto é quando você faz isso:
fonte
C ++
fonte
?:
Suponho que alguém tem que ser o causador da festa.
Bater
As limitações de tamanho dependem do seu shell, mas você ficará bem dentro do razoável.
fonte
declare -i
. Comparefoo=089
edeclare -i foo=089
(número octal inválido).Javascript
EDIT : Como há uma sugestão para não usar o
%
operador, eu uso um pequeno truque agora.Eu sei que isso não é um código de golfe, mas não há razão para prolongá-lo.
r(13457)
retorna75431
Além disso, é muito mais rápido que o método string (
n.toString().split('').reverse().join('')
):==> Relatório JSPerf <==
fonte
~~
vez deMath.floor
?~~
, em vez deMath.floor
(a mudança sugerida por @Victor)Python
Não tenho certeza se esta implementação se qualifica para matemática criativa
Também o operador% não foi usado per se, embora se possa argumentar que o divmod faz o mesmo, mas a pergunta precisa ser reformulada :-)
Implementação
demonstração
Como funciona?
Esta é uma solução divmod recursiva * Essa solução determina o dígito menos significativo e o envia para o final do número. *
Mais uma implementação em Python
Como funciona?
Esta é uma solução recursiva que troca os dígitos extremos do número
Exemplo de execução
fonte
Apenas para ser contrário, um uso excessivo do operador do módulo:
Observe que isso sempre inverte 5 dígitos e números inteiros de 32 bits serão excedidos para valores de entrada maiores que 39045.
fonte
C #
Aqui está uma maneira de fazer isso sem o
%
operador Modulus ( ) e a aritmética simples.fonte
%
operador. :) Entendo o que você quer dizer, meu texto foi um pouco enganador.Bater
fonte
C
Sem strings, matrizes, módulo ou divisão. Em vez disso, divida por subtração repetida.
fonte
Mathematica
Fazendo uma imagem fora do número, refletindo-a, particionando-a nos dígitos. Depois, há duas alternativas:
Compare cada imagem de um dígito refletido com as imagens anteriores preparadas, substitua-o pelo dígito correspondente e construa o número a partir disso.
Reflita cada dígito separadamente, construa uma nova imagem e passe-a para a função de reconhecimento de imagem.
Eu fiz os dois
EDIT : Adicionado preenchimento de três zeros, porque
TextRecognise
funciona corretamente apenas com números inteiros> 999.fonte
Lua
Nenhuma matriz ou string usada. O número é dividido em dígitos e remontado usando a lista de argumentos.
fonte
%
! : PPython2
Assume que "número inteiro não assinado" é de 32 bits
Quando recebida
1230
, ela gera0321
.fonte
"Since this is a popularity contest, I suggest not using the modulus (%) operator in your code."
Postscript
Sem matrizes, sem strings, sem variáveis.
O mesmo sem
mod
(que é apenas um atalho, portanto, não há grande diferença):fonte
C #
Isso não usa seqüências de caracteres ou matrizes, mas usa o
Stack<T>
tipo .NET (EDIT: operador de módulo usado originalmente; agora removido)fonte
C
Na medida em que a solução óbvia é representada em algumas outras línguas, é possível publicá-la em C.
Golfe:
Ungolfed:
EDIT: Acabei de ver o módulo editar.
Golfe (sem módulo):
Ungolfed (sem módulo):
fonte
Java
Isto é o que eu inventei, sem strings, sem matrizes ... nem mesmo variáveis (em Java, eu lembro):
EDIT Uma versão mais legível
fonte
PowerShell
Uma solução rápida no PowerShell. Nenhuma matriz ou string usada, implícita ou explicitamente.
Teste:
fonte
python (feito facilmente em montagem)
Inverte os bits de um byte. Pontos por não fazer exatamente a mesma coisa que todos os outros fizeram?
exemplo
fonte
C ++
SAÍDA
Três execuções de amostra
Teste com zeros
Também inverte números flutuantes !!!
Se você deseja executar esse código , execute-o no seu computador, pois ele cria um arquivo temporário durante o tempo de execução e não tenho certeza se os compiladores online criariam um arquivo temporário no seu computador.
fonte
ECMAScript 6
Então:
reverse(12345)
saídas54321
reverse(3240)
saídas423
reverse(6342975)
saídas5792436
fonte
Fissão
Este programa reverte a entrada.
fonte
ADIANTE
Eu acho que isso é o oposto do popular ... mas usar o Forth é sempre criativo ...Vamos criar uma nova palavra
Aqui, ele usa a palavra U / que retorna o restante e o quociente, o restante é enviado para a saída como número dentro de um caractere do campo 1, até o dividendo ser zero. Nenhuma string é usada, pelo menos até que algo seja enviado ao vídeo. Eu não uso um operador de módulo, em vez disso, uso a divisão inteira com o restante e o quociente. Vamos tentar
fonte
Código da máquina de Turing
Usando a sintaxe daqui.
Experimente online!
fonte
Python
fonte
rev(1230)
dá321
. Suponho que realmente deveria dar0321
?C
fonte
Lote
Perdeu a parte de não usar cordas - tudo bem.
fonte
Python 2
fonte