N'importe qui peut agrandir la sortie d'un programme en ajoutant des caractères, faisons exactement l'inverse.
Ecrivez un programme complet, une fonction interne ou un extrait pour un environnement REPL dans la langue de votre choix qui répond aux critères suivants:
Votre code doit comporter au moins 1 caractère.
L'exécution du code d'origine produit x caractères de sortie vers STDOUT (ou l'alternative la plus proche), où 0 ≤ x <+ ∞ .
La suppression de tout caractère unique arbitraire du code d'origine génère à nouveau un code valide, qui produit au moins x + 1 caractères de la sortie vers STDOUT.
Ni le code original ni les modifications ne peuvent produire d’erreur, que ce soit vers STDOUT, STDERR, syslog ou ailleurs. Les seules exceptions à cette règle sont les avertissements du compilateur.
Votre programme peut ne nécessiter aucun indicateur ou paramètre pour supprimer la sortie d'erreur.
Votre programme ne peut contenir aucune erreur fatale, même s'il ne produit aucune sortie.
Le code original et les modifications doivent être déterministes et finir par aboutir (pas de boucles infinies).
Ni le code original ni les modifications ne peuvent nécessiter une quelconque entrée.
Les fonctions ou les extraits ne peuvent conserver aucun état entre les exécutions.
Considérant que cette tâche est triviale est certaines langues et carrément impossible dans d'autres, c'est un concours de popularité .
Lors du vote, tenez compte de la "brièveté relative" du code, c’est-à-dire qu’une réponse plus courte devrait être considérée comme plus créative qu’une réponse plus longue dans la même langue .
111111111111111111^111111111111111111
(si vous vouliez dire le ratio le plus bas).k
instructions constantes , la sortie de chaque programme est strictement supérieure à la sortie de l'original (car l'autre les programmes feraient une boucle plus rapidement ou produiraient plus chaque boucle). C'était plutôt intéressant. Peut-être que je verrai si je peux quand même le terminer et relever un autre défi.Réponses:
Toute REPL avec opération caret XOR, 5 octets
11^11
est bien sûr 0. Les seules autres possibilités sont1^11
ou11^1
qui sont 10, ou1111
qui se produit.la source
99|99
-10
est plus long que0
.TI-BASIC,
31Lorsque la dernière ligne d'un programme est une expression, la calculatrice affiche cette expression. Sinon, la calculatrice s'affiche
Done
à la fin du programme. L'expression ici est la chaîne vide, mais cela pourrait également fonctionner avec n'importe quel nombre à un chiffre.2 octets:
Idem que ci-dessus mais avec un jeton de 2 octets.
3 octets:
Impressions
1
dues à la multiplication implicite. Peut être prolongé indéfiniment en ajoutant des paires de⁻¹
. Les ci-dessous fonctionnent également.Des solutions plus longues:
Il existe probablement aussi des solutions multi-lignes mais je n'en trouve pas.
la source
Done
jeton; la calculatrice afficheDone
à la fin de l'exécution de tout programme sans expression sur la dernière ligne (y compris le programme vide).CJam, JavaScript, Python, etc., 18 octets
Les sorties dans CJam sont:
JavaScript et Python fonctionnent de manière similaire. JavaScript et Python ne sont pas compétitifs,
mais il n'est pas facile d'en trouver un plus court dans CJam.la source
Octave, 5 octets
(x: y) donne le tableau de nombres entre x et y par incréments de 1, donc entre 10 et 10, le seul élément est 10:
Lorsque le deuxième argument est inférieur au premier, octave affiche la matrice vide et ses dimensions:
Lorsqu'un caractère est supprimé du premier nombre, il y a plus d'éléments dans le tableau:
Lorsque les deux points sont supprimés, le nombre se retourne:
la source
Microscript, 1 octet
Cela ne produit aucune sortie, car cela
h
supprime l'impression implicite de la langue. Supprimer le caractère unique produit un programme dont le résultat est0\n
.Je vais essayer de trouver une meilleure réponse plus tard.ÉDITER LE 17 NOVEMBRE:
Cela fonctionne également dans Microscript II, sauf que, au lieu de produire
0\n
, le programme vide produitnull
.la source
Pyth, 3 octets
G
est pré-initialisé avec les lettres minuscules de l’alphabet.c
est la fonction split.cGG
divise l'alphabet en occurrences de l'alphabet, qui se termine par['', '']
(8 octets).Lorsque le deuxième paramètre est manquant,
c
divise la chaîne en espaces, tabulations ou nouvelles lignes. Comme aucun d’entre eux n’apparaît dansG
, le résultatcG
est is['abcdefghijklmnopqrstuvwxyz']
(30 octets).Et
GG
imprime simplement deux fois l'alphabet sur deux lignes distinctes:abcdefghijklmnopqrstuvwxyz\nabcdefghijklmnopqrstuvwxyz
(53 octets).Essayez-le en ligne: démonstration
la source
Python REPL, 6 octets
Pas le plus court, mais voici une autre réponse abusive en virgule flottante:
Mais...
la source
JavaScript (et beaucoup plus), 5byte
44/44
oula source
CJam, 5
Essayez-le en ligne
la source
Durée , 5 octets
La longueur du programme est 5, ce qui correspond au programme brainf *** qui
,
lit un caractère de fin de saisie et se termine sans sortie.0000
Si vous.
supprimez un caractère, le code ayant une longueur de 4 correspondant au programme brainf *** imprimant un caractère (point de code0
) et se terminant.Le unaire équivalent serait
0000000000000
(13 zéros) parce que vous devez préfixer un chef de file1
à la longueur binaire du code pour101
devient1101
.la source
PHP, 6 octets
Je regarde ce groupe depuis quelques semaines et je suis émerveillé par vos techniques de programmation. Maintenant, je devais me connecter, il y a quelque chose que je peux faire, désolé :-) Cependant, ceci pourrait être mon dernier message ici ...
(notez l'espace après seconde
p
)Ceci produit une chaîne vide. Supprimer n'importe quel caractère génère le texte sans le caractère. Notez qu'il peut produire des erreurs HTML (contenu non rendu par les navigateurs, par exemple
<?ph
).J'ai aussi essayé avec la
echo
balise. c'est à dire. par exemple.:Celui-ci sort
1
. Si=
est omis,<? __LINE__;;
est la sortie. Cependant, la suppression de tout caractère de la constante magique aura pour résultat E_NOTICE : Remarque: Utilisation de la constante non définie LNE - supposée ' LNE ' dans ...Si les avis ne sont pas considérés comme des erreurs (point 4 du règlement), cela s'applique également :-)
la source
<HTML>
étiquette, etc.)php test.php
. Le second code est invalide par ailleurs. La question n'interdit pas les erreurs, mais les sorties d'erreur , signifiant erreurs, avertissements, avis, etc.#!
dans un fichier de script fonctionne également.Python,
10 à8 octetsFonctionne en Python et ses amis. Merci à Jakube d’avoir montré comment réduire la taille de 2 octets.
D'IDLE:
à l'origine j'avais ceci (10 octets):
D'IDLE:
et sur la même note:
fonctionne de manière identique en raison de l'arrondi par Python, dans 17 octets.
la source
56...
,26...
et56...
encore une fois, mais il n'y a qu'un seul moyen d'obtenir 56, il devrait donc être inclus une seule fois, n'est-ce pas?Interprète SWI-Prolog
Remarque: vous ne pouvez pas supprimer la finale
.
. Les interprètes de Prolog rechercheront toujours une dernière période pour exécuter votre requête. Par conséquent, si nous nous en tenons strictement aux règles de ce concours et nous permettons de supprimer la période pendant laquelle elle ne fonctionnera pas, il sautera d’une ligne et attendra d’autres commandes jusqu’à ce qu’une se termine par un point.Les
__A=__A.
résultats de la requête d'originetrue.
.Les
_A=__A.
résultats de la requête_A = '$VAR'('__A')
. Des modifications similaires (en supprimant un_
ou l’un des deuxA
) donneront des résultats similaires.Enfin, la requête
__A__A.
génère dans SWI-Prolog:la source
Sed, 1 octet
Comme cela
sed
nécessite un flux d’entrée, je propose une convention selon laquelle le programme lui-même devrait être fourni en entrée.Un programme alternatif est
x
, mais qui ne change de1
d'2
octets de sortie lorsqu'ils sont supprimés.la source
K, 3 octets
Sorties
0
dans le REPL. Suppression des 2 premières sorties0 1
, suppression des exclamations22
et suppression des 2 derniers résultats en une chaîne qui varie entre les implémentations K, mais(2!)
qui comporte toujours au moins 2 caractères (en oK, c’est ; selon les sorties @Dennis, Kona2!
).la source
*
impressions juste 2. Enlever les 2 impressions(*!)
(une fonction incomplète) dans oK; Je ne connais pas d'autres interprètes (par exemple, Kona, k2, etc.), bien que je pense que Kona imprimerait*[!;]
ou quelque chose de similaire. Je suis allé avec enlever l'étoile parce qu'il semblait le plus sûr.MATLAB,
9 à7 octetsC'est 2 octets de plus que l'autre réponse MATLAB / Octave, mais j'aime bien quand même, car c'est un peu plus complexe.
L'
'
opérateur de Matlab est la transposée conjuguée complexe. En utilisant ceci sur un nombre imaginaire scalaire, vous obtenezi' = -i
. Comme des nombres imaginaires peuvent être écrits simplement comme2i
on peut le faire:Si vous supprimez l'un des caractères, l'un des éléments suivants apparaît:
la source
GolfScript, 2 octets
Cette réponse n’est pas concurrente, mais comme c’est le code qui a inspiré ce défi, j’ai quand même voulu le partager.
Par défaut, tous les programmes GolfScript impriment l'intégralité de la pile, suivie d'un saut de ligne, en s'exécutant
puts
sur l'intégralité de la pile. La fonctionputs
elle-même est implémentée comme{print n print}
dans l'interpréteur, oùprint
est une valeur réellement intégrée etn
une variable qui contient la chaîne"\n"
par défaut.Maintenant, un programme GolfScript pousse toujours l'entrée de STDIN sur la pile. Dans ce cas, puisqu'il n'y a aucune entrée, une chaîne vide est poussée. L'affectation de variable
:n
enregistre cette chaîne viden
, en supprimant le saut de ligne implicite et en rendant la sortie complètement vide.En éliminant
n
, l'assignation de variable incomplète:
(on pourrait penser que c'est une erreur de syntaxe, mais non), donc le saut de ligne implicite est imprimé comme d'habitude.En éliminant
:
, vous vous retrouvez avecn
ce qui pousse un saut de ligne sur la pile, de sorte que le programme imprime deux sauts de ligne.la source
APL, J et éventuellement d’autres variantes, 3 octets
Il sort
1
en APL.-1
sorties¯1
et--
sorties suivantes dans TryAPL :la source
J, 5 octets
Magnitude du nombre complexe
5 + 12i
dans REPL..
J, 9 octets
Basé sur la précision en virgule flottante, l'inverse et l'inverse de la matrice.
Essayez-le en ligne ici.
la source
Mathematica, 3 octets
la source
Dyalog APL , 2 octets
⍴0
retourne une chaîne vide (longueur 0)⍴
retourne⍴
(longueur 1)0
retourne0
(longueur 1)la source
Rapide (et beaucoup plus), 8 octets
sortie (4 caractères):
Lorsque vous supprimez le nième caractère, le résultat est le suivant:
Il y a 78 solutions possibles comme celle-ci dans le format de
a^b<c
.Je pense que l'objectif de ce défi devrait être autant d'octets que possible, car plus il y a d'octets, plus il est possible de supprimer des octets et donc plus difficile.
la source
MathGolf , 2 octets
Essayez-le en ligne!
Explication
Pourquoi ça marche?
La sortie régulière est
9
. Si le(
est supprimé, la sortie est 10. Si le♂
est supprimé, le programme extrait implicitement un 0 de la pile pour alimenter l'(
opérateur qui le génère-1
.la source
Clojure, 11 octets
Au début, je pensais simplement poster une réponse à un seul caractère dans le REPL, comme dans les autres langues, par exemple:
Mais le problème est que si vous supprimez ce caractère, le REPL ne fait rien lorsque vous appuyez sur la touche Entrée. Donc, au lieu de cela, il devait être encapsulé avec une fonction comme le permettaient les règles de la question. Lorsque vous appelez cette fonction, elle retourne 1. Si vous supprimez le seul caractère de la fonction,
la fonction retourne
nil
qui affiche deux octets supplémentaires.la source
1
dans ce cas (1 octet).05AB1E (héritage), 1 octet
N'importe quel octet dans 05AB1E (hérité) fonctionnerait, à l'exception de
[
(boucle infinie).Voyez ici toutes les sorties possibles pour tous les programmes 05AB1E à un octet possibles.
Supprimer ce seul octet pour laisser un programme vide restituera le contenu de info.txt à STDOUT à la place par défaut.
Essayez-le en ligne.
05AB1E , 1 octet
Essayez-le en ligne.
Malheureusement, un programme vide dans la nouvelle version de 05AB1E ne génère par défaut qu'une nouvelle ligne de 1 octet ( Try it online ), de sorte que presque aucun des caractères de 1 octet n'est possible car ils ne doivent rien afficher. Le seul programme possible qui ne génère rien (donc aussi pas la nouvelle ligne implicite) est
?
à ma connaissance.la source
Japt , 2 octets
Essayez-le en ligne!
A
est pré-initialisé à 10,É
soustrait de 1, le résultat est 1 octet:9
.Si vous supprimez É, le programme
A
affiche la valeur de A10
, de sorte que le résultat est 2 octets.De même, supprimer A donne exactement
É
ce qui est interprété en tant que -1 et sorti en tant que-1
, donc le résultat est 2 octets.la source
Enchantements runiques , 6 octets (modifiables)
Essayez-le en ligne!
Runic n'a pas d'environnement REPL et l'écriture d'un programme complet pour satisfaire les contraintes n'est pas facilement réalisable (conduisant à des programmes non valides ou à une absence de sortie). Ainsi, la partie du code
11-{{B
agit comme une fonction interne et seule cette partie peut être modifiée. L'B
instruction est suffisamment proche d'un pointeur de fonction et d'une déclaration de retour indiquant que cette classification devrait être acceptable (car elle place l'adresse IP dans une position du code et pousse un emplacement de retour dans la pile auquel peut accéder ultérieurementB
ou être ignoré). .0
1
s:05
-
:11
{
:Error051
B
:120
La dernière ligne
\
à la fin de la première ligne fournit une limite externe autour de la fonction interne dans le cas où l’instruction de retour est supprimée, de sorte que l’adresse IP ne dérape pas partout bon gré mal gré (et n’imprime aucune sortie).Notez que
Error051
c'est juste une chaîne arbitraire, je pourrais mettre tout ce que je voulais dans cette partie du code et "Error" était un résultat amusant parce que le code qui remontait les coordonnées de retour et les téléports IP vers un emplacement arbitraire.la source