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 0bits, en uno negativo, una cadena infinita de 1bits, cada uno <agrega un 0bit al final, cuando terminamos hacemos lo ~que lo convierte en una cadena de 0s seguida de dos 1s , 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 nsin 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 dar0Respuestas:
Japt , 10 bytes
Pruébalo en línea!
Idea básica: tomar la representación binaria del número, y asignar
0a<y1para~<~. 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.
ftoma unInty devuelve unString.Pruébalo en línea!
(Me refiero a eso
<$fpor 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
duplugar decloneiircdup?mapno 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.joinpuede 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 :).0al elemento cero y1al 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
lambdaPrué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í