On nous a tous dit à un moment donné de notre vie qu'il était impossible de diviser par 0. Et pour la plupart, cette affirmation est vraie. Mais que faire s'il y avait un moyen d'effectuer l'opération interdite? Bienvenue dans ma dernière création: b
-numéros.
b
-les nombres sont un peu comme des nombres imaginaires: le pronuméral principal impliqué représente une expression qui n'est pas mathématiquement impossible ( i
représente ). Dans ce cas,sera dit représenter l'expression . De là, il est facile de déterminer ce que serait égal à:
La tâche
Étant donné une expression impliquant une division par 0, affichez la valeur simplifiée en termes de . Notez que l'entrée sera sous la forme n/0
où n est n'importe quel nombre rationnel ou n'importe quel b
nombre sous forme décimale. Les 0 au début et les 0 à la fin ne seront pas inclus.
Exemple d'entrée
4/0
1/0
0/0
80/0
-8/0
1.5/0
2.03/0
-1/0
-3.14/0
b/0
3b/0
-b/0
121/0
Exemple de sortie
4b
b
0
80b
-8b
1.5b
2.03b
-b
-3.14b
b
3b
-b
121b
But
C'est le golf de code, donc le moins d'octets gagne. Les failles standard sont interdites.
Classements
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les barrant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
b/0 = b
alors je divise les deux parties d'icib
là1/0 = 1
.c
Ai -je besoin de -nombre pour diviser comme ça?b/b = 0
quand il est normalement (et je suis sûr qu'il est facilement prouvé par tous les différents axiomes) censé être 1 (sinon l'inverse multiplicatif de b ne semble pas être son inverse multiplicatif). Je suis sûr que vous ne pouvez pas échapper à la division par zéro en ajoutantb=1/0
ou quelque chose de similaire.0b
plutôt que0
? Si les deux expressions étaient équivalentes, la question n'aurait pas de prémisse3.1b/0
Réponses:
Malbolge Unshackled (variante de rotation de 20 trits), 3,62e6 octets
La taille de cette réponse dépasse la taille maximale du programme (eh), donc le code se trouve dans mon référentiel GitHub (remarque: ne copiez pas le code en utilisant CTRL + A et CTRL + C, faites un clic droit et cliquez sur "Enregistrer l'élément de destination sous." .. ").
Comment faire ça?
Cela pourrait être une partie délicate, car un interprète naïf de Haskell prendra des âges pour exécuter cela. TIO a un interprète Malbogle Unshackled décent, mais malheureusement je ne pourrai pas l'utiliser (limitations).
Le meilleur que j'ai pu trouver est la variante de largeur de rotation fixe de 20 trits, qui fonctionne très bien, calculant (presque) instantanément .
Pour rendre l'interprète un peu plus rapide, j'ai supprimé toutes les vérifications de l'interpréteur Malbolge Unshackled de Matthias Lutter.
Ça marche!
la source
PHP ,
65646158 octets-1 octet en utilisant un
b
au lieu de''
(chaîne vide). Puisque les "b" sont coupés, ce sera la même chose qu'une chaîne vide dans ce cas spécifique.-3 octets en utilisant
substr
au lieu deexplode
pour obtenir la première partie de l'entrée.-3 octets en utilisant de meilleures méthodes pour détecter
1
et-1
.Essayez-le en ligne!
Tests: Essayez-le en ligne!
Si la première partie de l'entrée avant "/" (nous l'appelons
$n
) est 0, imprime 0.Sinon, il s'imprime
$n
avec tout "b" à la fin et les cas spéciaux de -1 et 1 traités, de sorte que le chiffre "1" n'est pas imprimé. Et à la fin ajoute un seul "b". La partie de coupe est de s'assurer que nous n'obtenons pas un double "b" à la fin comme "3bb".la source
$n==-1
par$n>0
(-2 octets) semble fonctionner. Vous pouvez essayer ça.$n<0
, cela ne fonctionnera pas aussi, car nous avons des entrées comme-8/0
.$n==-1?'-':$n
par$n+1?$n:'-'
pour économiser 2 octets!Gelée , 19 octets
Essayez-le en ligne!
Programme complet.
la source
Gelée , 18 octets
J'ai fini par voler celui d' Erik
ṾṖ$İƑ¡
pour celui-ci (sinon j'en aurais aussi 19) ...Un programme complet qui imprime le résultat.
Essayez-le en ligne! Ou consultez la suite de tests .
Comment?
la source
v
...: DPerl 6 , 32 octets
Essayez-le en ligne!
Quelques expressions rationnelles, un pour vérifier si l'entrée est
0/0
, et l'autre pour remplacer le suivi/0
avec justeb
(et pour enlever le vieuxb
,1
et / ou-1
)Explication (ancienne)
la source
Rétine ,
2824 octetsEssayez-le en ligne!
Essayez d'abord d'utiliser Retina, donc il y a probablement beaucoup de place pour le golf.
la source
\b
fait (je suis que inexpérimenté avec regex), j'étais un peu déçu de constater qu'il ne peut pas être raccourci au backspace unprintable. Quoi qu'il en soit, merci\b
n'est qu'une représentation ASCII du caractère de retour arrière dans les chaînes normales: PPython 3 , 68 octets
Essayez-le en ligne!
la source
import re
le nombre augmente à 64.Keg , 18B
Tout crédit revient à Jono 2906.
Explication
TIO!
la source
Wolfram Language (Mathematica) , 37 octets
Essayez-le en ligne!
Prend une liste de caractères en entrée.
la source
JavaScript (ES6), 45 octets
Essayez-le en ligne!
Commenté
la source
C,
209203137 octets-66 octets grâce au plafond
TIO
la source
naz , 64 octets
Explication (avec
0x
commandes supprimées)la source
Brainfuck, 25 octets
Explication
la source
b/0
attendub
, obtenubb
;0/0
attendu0
, obtenu0b
;-1/0
attendu-b
, obtenu-1b
./0
pourb
et ne tient pas compte des cas pour0b
,1b
,-1b
ou toutes les entrées qui contiennent déjàb