Wise est un langage simple au niveau du bit que j'ai conçu il y a quelque temps. Il est basé sur les opérations bit à bit de Python . Il a plusieurs opérations dont la plupart sont identiques ou très similaires au symbole équivalent en Python.
:
Dupliquez le haut de la pile?
Faire pivoter le haut de la pile vers le bas!
Faire pivoter le bas de la pile vers le haut[
]
boucle alors que le haut de la pile n'est pas nul~
pas le haut de la pile (-(n+1)
)-
annuler le haut de la pile (-n
)>
décalage du bit une fois vers la droite en haut de la pile (n//2
)<
décaler le haut de la pile une fois vers la gauche (n*2
)^
xou les deux premiers éléments de la pile ( Identique à Python )|
ou les deux premiers éléments de la pile ( comme Python )&
et les deux premiers éléments de la pile ( identiques à Python )
Faire un entier dans Wise est assez simple, vous pouvez faire zéro avec ::^
et l'incrémenter avec ~-
donc vous faites zéro et l'incrémentez un tas de fois. Cependant, si nous supprimons les -
choses, cela devient un peu plus intéressant.
Nous pouvons toujours faire chaque numéro en utilisant les opérations restantes. Par exemple, voici 3
~<<~
Cela fonctionne parce que ~
transforme zéro, une chaîne infinie de 0
bits, en négatif, une chaîne infinie de 1
bits, chacun <
ajoute un 0
bit à la fin, lorsque nous avons terminé, nous faisons ~
ce qui le transforme en une chaîne de 0
s suivie de deux 1
s , ou comme la plupart des gens l'appellent 3.
Tâche
Écrivez un programme qui, lorsqu'il reçoit un entier positif, produira un programme Wise qui créera le nombre n
sans aucun -
dans sa source (la source de la sortie, vous pouvez l'utiliser -
dans votre propre source). Vous pouvez supposer qu'il y a déjà un zéro en haut de la pile.
Il s'agit de code-golf et non de méta-golf , vous devez donc viser à minimiser le code source généré, pas nécessairement la sortie.
Exemples de sorties
Cette liste n'est pas exhaustive ce sont simplement des sorties possibles
1 -> ~<~
2 -> ~<~<
3 -> ~<<~
4 -> ~<~<<
5 -> ~<~:<<|
6 -> ~<<~<
7 -> ~<<<~
8 -> ~<~<<<
9 -> ~<~:<<<|
10 -> ~<~:<<|<
11 -> ~<<~:><<<|
12 -> ~<<~<<
13 -> ~<<~:<<<|>
14 -> ~<<<~<
15 -> ~<<<<~
16 -> ~<~<<<<
la source
positive integers
:
appliqué sur une pile vide pousse a0
. Je pense que cela devrait être spécifié, car il n'est pas évident que la duplication à partir d'une pile vide devrait donner0
Réponses:
Japt , 10 octets
Essayez-le en ligne!
Idée de base: prendre la représentation binaire du nombre et mapper
0
vers<
et1
vers~<~
. Sorties pour 1-10:la source
~~
JavaScript (ES6),
3433 octetsFonctionne pour n'importe quel entier 32 bits.
la source
Haskell , 38 octets
J'ai l'impression que PPCG améliore vraiment mon Haskell. Caresse le chat blanc.
f
prend unInt
et retourne unString
.Essayez-le en ligne!
(Je fais allusion à cela
<$f
en passant. Cela sauve un personnage\_->
.)Alternativement, même longueur mais moins mal (
(l!!)
est une fonction anonyme):Essayez-le en ligne!
Les deux utilisent la même représentation que la réponse Japt de @ETHproductions, bien que surtout la première puisse donner quelques
<
s redondants au début.Le premier calcule toutes les combinaisons de
n
"<"
et"~<~"
chaînes, puis indexe dans la liste résultante.Le second calcule récursivement une liste infinie formée en commençant par
""
puis en construisant de nouveaux éléments en ajoutant"<"
et en"~<~"
chaîne à chaque élément déjà dans la liste (en fait, il était légèrement plus court pour laisser le""
devenir se transformer en"<"
.)la source
<$f
marche? Une instance de foncteur bizarre?Ruby ,
11811610910710591 bytesEnregistré 2 octets grâce à cyoce!
Essayez-le en ligne!
Il s'agit d'une fonction qui prend l'entier en entrée et renvoie la chaîne qui représente cet entier dans Wise. Vous pouvez trouver une version non golfée ici , qui teste ce programme sur tous les entiers à partir de 1.
L'idée de base est d'enregistrer un "pool" de constantes. Ensuite, à chaque "étape", des constantes sont ajoutées au pool pour chaque fonction possible. J'ai choisi les fonctions
~
,<
et>
que je crois suffisent pour représenter chaque nombre. (Au moins, chaque nombre inférieur à 10 000.)la source
dup
place declone
iircdup
?map
ne modifie pas son récepteur.Python2,
545251 octets.Merci à Wheat Wizard pour avoir sauvé 2 octets, et Ørjan Johansen pour un octet! Cela utilise la même idée que la réponse Japt d'ETHproduction, mais avec des chaînes de remplacement différentes (c'est-à-dire en utilisant la représentation binaire)
la source
[
]
autour du générateur à l'intérieur dujoin
.join
peut prendre un générateur comme argument.'>~<~'*int(i)
peut vous faire économiser un octet.05AB1E , 11 octets
Essayez-le en ligne!
Similaire à la réponse Japt d'ETHproductions.
4 octets enregistrés grâce à @Adnan!
la source
'
). Vous pouvez également utiliser l'indexation, qui devrait vous donner 11 octets :).0
à l'élément zéro et1
au premier élément (car il vectorise automatiquement). Voici un exemple plus clair de son fonctionnement.Python 2 ,
123110 octetsEssayez-le en ligne!
Aussi en tant que
lambda
Essayez-le en ligne!
Pourrait être plus court mais voici ma solution. Il prend la représentation binaire et la transforme en code.
la source
Japt , 23 octets
Essayez-le en ligne!
la source
Gelée,
1110 octetsIl s'agit d'une version portée de la réponse Japt d'ETHproductions. En parlant de productions ETH, ils m'ont sauvé un octet!
la source
<
, qui à Wise produit 0~<~
me donne