O Wise é uma linguagem bit a bit simples que projetei há um tempo. É baseado nas operações bit a bit do Python . Possui várias operações, a maioria delas é igual ou muito semelhante ao símbolo equivalente no Python.
:
Duplique a parte superior da pilha?
Gire a parte superior da pilha para baixo!
Gire a parte inferior da pilha para o topo[
]
enquanto o topo da pilha não é zero~
não é o topo da pilha (-(n+1)
)-
negar o topo da pilha (-n
)>
mova a parte superior da pilha uma vez para a direita (n//2
)<
deslocar o topo da pilha uma vez para a esquerda (n*2
)^
xou os dois principais itens da pilha (o mesmo que Python )|
ou os dois principais itens da pilha (o mesmo que Python )&
e os dois principais itens da pilha (o mesmo que Python )
Criar um número inteiro no Wise é bastante simples: você pode zerar ::^
e incrementá-lo ~-
para que você faça zero e aumente várias vezes. No entanto, se removermos as -
coisas se tornam um pouco mais interessantes.
Ainda podemos fazer todos os números usando as operações restantes. Por exemplo, aqui está 3
~<<~
Isso funciona porque ~
transforma zero, uma sequência infinita de 0
bits, em negativo, uma sequência infinita de 1
bits, cada <
um acrescenta um 0
pouco ao final; quando terminamos, o que faz com ~
que cada um seja uma sequência de 0
s seguida por dois 1
s ou como a maioria das pessoas chama 3
Tarefa
Escreva um programa que, quando determinado um número inteiro positivo, produzirá um programa Wise que criará o número n
sem nenhum -
em sua fonte (a fonte da saída, você pode usar -
em sua própria fonte). Você pode assumir que já existe um zero no topo da pilha.
Como código-golfe e não meta-golfe , você deve tentar minimizar o código-fonte de geração e não necessariamente a saída.
Saídas de exemplo
Esta lista não é exaustiva, são simplesmente saídas possíveis
1 -> ~<~
2 -> ~<~<
3 -> ~<<~
4 -> ~<~<<
5 -> ~<~:<<|
6 -> ~<<~<
7 -> ~<<<~
8 -> ~<~<<<
9 -> ~<~:<<<|
10 -> ~<~:<<|<
11 -> ~<<~:><<<|
12 -> ~<<~<<
13 -> ~<<~:<<<|>
14 -> ~<<<~<
15 -> ~<<<<~
16 -> ~<~<<<<
fonte
positive integers
:
aplicado em uma pilha vazia, empurra a0
. Eu acho que isso deve ser especificado, já que não é óbvio que a duplicação de uma pilha vazia deve dar0
Respostas:
Japonês , 10 bytes
Experimente online!
Ideia básica: pegue a representação binária do número e mapeie
0
para<
e1
para~<~
. Saídas para 1-10:fonte
~~
JavaScript (ES6),
3433 bytesFunciona para qualquer número inteiro de 32 bits.
fonte
Haskell , 38 bytes
Eu sinto que o PPCG está realmente melhorando meu Haskell. Acaricia o gato branco.
f
pega umInt
e retorna umString
.Experimente online!
(A
<$f
propósito, estou me referindo a isso . Ele salva um personagem\_->
.)Como alternativa, o mesmo comprimento, mas menos maligno (
(l!!)
é uma função anônima):Experimente online!
Ambos usam a mesma representação que a resposta Japt da @ETHproductions, embora especialmente o primeiro possa fornecer algumas redundantes
<
s no início.O primeiro calcula todas as combinações de
n
"<"
e"~<~"
strings e depois indexa a lista resultante.O segundo calcula recursivamente uma lista infinita formada iniciando
""
e construindo novos elementos anexando"<"
e"~<~"
strings a cada elemento que já está na lista (na verdade, era um pouco menor para permitir que as coisas""
se transformassem"<"
).fonte
<$f
funciona? Alguma instância estranha do functor?Ruby ,
11811610910710591 bytesGuardado 2 bytes graças a cyoce!
Experimente online!
Esta é uma função que recebe o número inteiro como entrada e retorna a string que representa esse número inteiro no Wise. Você pode encontrar uma versão não destruída aqui , que testa este programa em todos os números inteiros de 1 em diante.
A idéia básica é registrar um "conjunto" de constantes. Em seguida, com cada "etapa", as constantes são adicionadas ao pool para cada função possível. Eu escolhi as funções
~
,<
e>
, que, creio, são suficientes para representar cada número. (Pelo menos, todo número abaixo de 10.000.)fonte
dup
em vez declone
IIRCdup
?map
não modifica seu receptor.Python2,
545251 bytes.Agradecimentos ao Assistente de Trigo por salvar 2 bytes e Ørjan Johansen por um byte! Isso usa a mesma idéia que a resposta Japt da ETHproduction, mas com cadeias de substituição diferentes (ou seja, usando a representação binária)
fonte
[
]
do gerador dentro dojoin
.join
pode usar um gerador como argumento.'>~<~'*int(i)
que você pode economizar um byte.05AB1E , 11 bytes
Experimente online!
Semelhante à resposta japonesa da ETHproductions.
Guardado 4 bytes graças a @Adnan!
fonte
'
). Você também pode usar a indexação, que deve fornecer 11 bytes :).0
para o elemento zeroth e1
para o primeiro elemento (porque vetoriza automaticamente). Aqui está um exemplo mais claro de como funciona.Python 2 ,
123110 bytesExperimente online!
Também como
lambda
Experimente online!
Poderia ser mais curto, mas aqui está a minha solução. Ele pega a representação binária e a transforma no código.
fonte
Japonês , 23 bytes
Experimente online!
fonte
Geléia,
1110 bytesEsta é uma versão portada da resposta Japt da ETHproductions. Por falar em produtos ETH, eles me salvaram um byte!
fonte
<
, que em Wise produz 0~<~
para mim