Wise es un lenguaje simple bit a bit que diseñé hace un tiempo. Se basa en las operaciones bit a bit de Python . Tiene varias operaciones, la mayoría de estas son iguales o muy similares al símbolo equivalente en Python.
:
Duplicar la parte superior de la pila.?
Gire la parte superior de la pila hacia abajo!
Gire la parte inferior de la pila hacia arriba[
]
bucle mientras la parte superior de la pila no es cero~
no la parte superior de la pila (-(n+1)
)-
negar la parte superior de la pila (-n
)>
Desplazar la parte superior de la pila una vez a la derecha (n//2
)<
desplazar la parte superior de la pila una vez a la izquierda (n*2
)^
xo los dos primeros elementos de la pila ( igual que Python )|
o los dos primeros elementos de la pila ( igual que Python )&
y los dos primeros elementos de la pila ( igual que Python )
Hacer un número entero en Wise es bastante simple, puedes hacer cero con él ::^
e incrementarlo ~-
para que puedas hacer cero e incrementarlo varias veces. Sin embargo, si eliminamos las -
cosas se vuelven un poco más interesantes.
Todavía podemos hacer cada número usando las operaciones restantes. Por ejemplo aquí hay 3
~<<~
Esto funciona porque ~
convierte cero, una cadena infinita de 0
bits, en uno negativo, una cadena infinita de 1
bits, cada uno <
agrega un 0
bit al final, cuando terminamos hacemos lo ~
que lo convierte en una cadena de 0
s seguida de dos 1
s , o como la mayoría de la gente lo llama 3.
Tarea
Escriba un programa que cuando se le dé un número entero positivo generará un programa Wise que creará el número n
sin ninguno -
en su fuente (la fuente de la salida, puede usarla -
en su propia fuente). Puede suponer que ya hay un cero en la parte superior de la pila.
Este es el código de golf, no el meta-golf, por lo que debe intentar minimizar el código fuente de generación, no necesariamente la salida.
Salidas de ejemplo
Esta lista no es exhaustiva, simplemente son salidas posibles
1 -> ~<~
2 -> ~<~<
3 -> ~<<~
4 -> ~<~<<
5 -> ~<~:<<|
6 -> ~<<~<
7 -> ~<<<~
8 -> ~<~<<<
9 -> ~<~:<<<|
10 -> ~<~:<<|<
11 -> ~<<~:><<<|
12 -> ~<<~<<
13 -> ~<<~:<<<|>
14 -> ~<<<~<
15 -> ~<<<<~
16 -> ~<~<<<<
fuente
positive integers
:
aplicado en una pila vacía empuja a0
. Creo que esto debería especificarse, ya que no es obvio que duplicar desde una pila vacía debería dar0
Respuestas:
Japt , 10 bytes
Pruébalo en línea!
Idea básica: tomar la representación binaria del número, y asignar
0
a<
y1
para~<~
. Salidas para 1-10:fuente
~~
JavaScript (ES6),
3433 bytesFunciona para cualquier número entero de 32 bits.
fuente
Haskell , 38 bytes
Siento que PPCG realmente está mejorando mi Haskell. Trazos de gato blanco.
f
toma unInt
y devuelve unString
.Pruébalo en línea!
(Me refiero a eso
<$f
por cierto. Salva a un personaje\_->
).Alternativamente, la misma longitud pero menos malvada (
(l!!)
es una función anónima):Pruébalo en línea!
Ambos utilizan la misma representación que la respuesta Japt de @ETHproductions, aunque especialmente la primera puede dar algunas respuestas redundantes.
<
s al principio.El primero calcula todas las combinaciones de
n
"<"
y"~<~"
cadenas, luego los indexa en la lista resultante.El segundo calcula recursivamente una lista infinita formada al comenzar
""
y luego construir nuevos elementos agregando"<"
y"~<~"
cadenas a cada elemento que ya está en la lista (en realidad, fue un poco más corto para permitir que""
se convirtiera"<"
).fuente
<$f
? ¿Alguna extraña instancia de functor?Rubí ,
11811610910710591 bytes¡Guardado 2 bytes gracias a cyoce!
Pruébalo en línea!
Esta es una función que toma el entero como entrada y devuelve la cadena que representa ese entero en Wise. Puedes encontrar una versión sin golf aquí , que prueba este programa en todos los enteros desde 1 en adelante.
La idea básica es registrar un "grupo" de constantes. Luego, con cada "paso", se agregan constantes al grupo para cada función posible. He elegido las funciones
~
,<
y>
, que creo que son suficientes para representar cada número. (Al menos, cada número por debajo de 10,000).fuente
dup
lugar declone
iircdup
?map
no modifica su receptor.Python2,
545251 bytes.¡Gracias a Wheat Wizard por guardar 2 bytes, y Ørjan Johansen por un byte! Esto usa la misma idea que la respuesta Japt de ETHproduction, pero con diferentes cadenas de reemplazo (es decir, usando la representación binaria)
fuente
[
]
alrededor del generador dentro deljoin
.join
puede tomar un generador como argumento.'>~<~'*int(i)
puede ahorrarte un byte.05AB1E , 11 bytes
Pruébalo en línea!
Similar a la respuesta Japt de ETHproductions.
¡Guardado 4 bytes gracias a @Adnan!
fuente
'
). También puede usar la indexación, que debería proporcionarle 11 bytes :).0
al elemento cero y1
al primer elemento (porque se vectoriza automáticamente). Aquí hay un ejemplo más claro de cómo funciona.Python 2 ,
123110bytesPruébalo en línea!
También como un
lambda
Pruébalo en línea!
Podría ser más corto pero aquí está mi solución. Toma la representación binaria y la convierte en el código.
fuente
Japt , 23 bytes
Pruébalo en línea!
fuente
Jalea,
1110 bytesEsta es una versión portada de la respuesta Japt de ETHproductions. Hablando de ETHproductions, ¡me salvaron un byte!
fuente
<
, que en Wise produce 0~<~
para mí