Dans mon défi de code précédent , je vous ai demandé d'écrire une fonction qui vous indique laquelle de ses lignes a été supprimée.
Les instructions étaient les suivantes:
Écrivez une fonction qui contient cinq lignes.
Si vous exécutez la fonction telle quelle, elle doit retourner 0.
Si vous supprimez l'une des cinq lignes et exécutez la fonction, elle devrait vous indiquer laquelle des lignes a été supprimée (par exemple, si vous supprimez la dernière ligne, elle devrait renvoyer 5).
Maintenant, essayons quelque chose d'un peu plus difficile.
Suivez les mêmes règles que ci-dessus, mais cette fois, la fonction devrait retourner un tableau vous indiquant quelles DEUX lignes ont été supprimées.
Ainsi, par exemple, si je supprime les lignes 1 et 5, la valeur de retour doit être [1,5], et si je supprime les lignes 3 et 4, la valeur de retour doit être [3,4].
Encore une fois, si aucune ligne n'est supprimée, la fonction doit retourner 0. Des points bonus si vous pouvez également gérer le cas supprimé d'une ligne, mais il n'est pas strictement nécessaire de le faire.
Pouvez-vous utiliser des fonctions d'assistance? Oui, mais seulement si c'est nécessaire. Une seule fonction autonome qui permet de retirer cela est l'idéal.
Comme pour le dernier défi, la solution la mieux notée gagne. Je choisirai le gagnant dans une semaine, ou plus tôt si aucune nouvelle soumission n'a été reçue dans les 24 heures.
la source
Réponses:
Perl
Cela fonctionne réellement pour n'importe quel nombre de lignes supprimées (tant que ce ne sont pas toutes les lignes, c'est-à-dire), et peut être étendu de manière triviale à plus de 5 lignes. Aucune fonction d'assistance n'est utilisée et elle n'utilise même qu'une seule instruction par ligne. Elle repose sur le fait qu'en l'absence d'une
return
instruction explicite , la valeur de retour d'une fonction Perl est la valeur de la dernière instruction qu'elle contient.Notez que (dans le contexte de la liste), ce code renvoie une liste vide plutôt que le numéro 0 si aucune ligne n'a été supprimée. Cela pourrait être corrigé (par exemple en ajoutant "
@a ? @a : 0;
" à la dernière ligne), mais rendrait le code plus laid. Dans tous les cas, dans scalaire contexte , il ne retourne le nombre de lignes supprimées, qui sera 0 si aucune ligne ont été supprimés. ;-)la source
Rubis
Similaire à la version Perl, mais en Ruby. Je retourne 0 si aucune ligne n'est supprimée comme demandé, mais je suis d'accord que cela rend le code plus laid et n'a pas vraiment de sens comme valeur de retour.
Si un tableau vide est acceptable comme valeur de retour lorsqu'aucune ligne n'est supprimée, le code ressemble à ceci:
Les deux méthodes fonctionnent pour n'importe quel nombre de lignes supprimées entre 0 et 5.
la source
JavaScript, 152 caractères golfés
Golfé:
Autonome (mais moche):
Exploite essentiellement la fonction
toString
en numérotant chaque ligne. Notez que vous devez supprimer la ligne pour cette raison (la commenter ne fonctionnera pas).Cela fonctionne réellement pour n'importe quel nombre de lignes supprimées ! Il retournera un tableau des lignes supprimées, ou un tableau vide si aucun n'a été supprimé. (Je pourrais facilement changer cela pour retourner zéro (en le remplaçant
return ra
parreturn ra || 0
), mais j'aime la solution de tableau vide car elle serait plus utile dans le monde réel.)Par exemple, la suppression de la première ligne renvoie
[1]
et tout supprimer sauf la première ligne[2,3,4,5]
. (Bien sûr, cela ne fonctionne pas si vous supprimez toutes les lignes;-)
)la source
Rubis
Comment cela fonctionne: mon idée était: créer un tableau, et sur chaque ligne, supprimer une valeur spécifique. Donc, sur la première ligne, j'ai en fait le tableau
[ 1, 2, 3, 4, 5]
, avec l'élément1
supprimé. À la deuxième ligne, s'ila
est déjà défini, supprimez l'élément2
. Sinon, créez un nouveau tableau avec l'élément2
supprimé. Faites de même pour la ligne 3. À la ligne 4, vous pouvez être sûr qu'il y a déjà un tableau créé, donc supprimez simplement l'élément4
. À la ligne 5, supprimez d'abord l'élément5
, et sia
est alors un tableau vide, retournez0
. Sinon, reveneza
.la source
Python
Renvoie 0 si aucune ligne n'est supprimée, sinon renvoie les lignes supprimées. Vous pouvez supprimer 1 à 5 lignes, à l'exception des 0e et 6e lignes ;-).
la source
JavaScript, autonome, fonctionne pour 0, 1, 2 lignes enlevées (
607315186 caractères)→ démo en direct ←
Abus de levage variable JS et fuite globale, comme dans l'autre défi :)
à appeler avec le tableau [1,2,3,4,5] comme paramètre.
315 caractères
à appeler avec un tableau vide comme paramètre.
version non golfée
(fonctionne également pour 3 et 4 lignes supprimées):
à appeler avec un tableau vide comme paramètre.
la source
JavaScript:
violon
la source
Javascript
Appelez ça comme vous voulez, mais je pense que c'est joli .
Vous permet de savoir quelles lignes ont été supprimées (1 ou plus) ou 0 si aucune ligne n'est supprimée. Les 5 lignes peuvent être supprimées.
ÉDITER:
Parce qu'il a été porté à mon attention que mon code pourrait en fait être composé de 6 lignes et qu'il est en violation des règles, je l'ai ajusté comme suit:
La même chose s'applique - il renverra un tableau de lignes supprimées allant de 1 à Tous ou 0 si aucun.
la source
function(){
et}
(et toutes les fonctions d'assistance). Comptez le nombre de lignes.Lisp commun
Cela fonctionne pour la suppression de 1-4 lignes. Si vous supprimez toutes les lignes, le résultat sera le même que si vous n'en supprimez aucune.
NB: Avoir des parenthèses se terminant sur sa propre ligne est considéré comme un mauvais style, mais comme d'autres langues l'ont fait
end
et}
je suppose que c'est autorisé.la source
Python
Cela fonctionne pour toutes les lignes - mais seulement si deux sont supprimées. Si une seule ligne est supprimée, elle imprimera la ligne supprimée et la ligne 5. Si trop de lignes sont supprimées, elle n'imprimera rien.
Cela utilise une fonction d'assistance car le mot clé del ne peut pas être utilisé dans une ligne avec un; (pour autant que je sache)
Fondamentalement, chaque ligne se supprime dans le tableau qui est déclaré dans le constructeur, puis si suffisamment de lignes ont été supprimées, le tableau est imprimé.
Cette fonction manque la spécification de deux manières:
print
etreturn
sont interchangeablesla source
print ''
ne générera pas un caractère de nouvelle ligne supplémentaire?Déjà vu
Fonctionne pour supprimer n'importe quel nombre de lignes (tant que vous laissez au moins une ligne)
la source
R
J'ai une autre version en R qui je pense est meilleure (mais utilise une fonction d'assistance):
Ou on peut éviter d'utiliser la fonction d'assistance en la définissant comme argument par défaut (fonctionne de manière identique mais est moins lisible - cependant, il n'utilise pas de fonction d'assistance "définie séparément"):
Les deux
reportRemovedLines()
etfunnyVersion()
fonctionnent avec n'importe quel nombre de lignes supprimées - sauf si vous supprimez toutes les lignes (dans ce cas, elles reviendrontNULL
). Ils renvoient en fait les numéros de ligne, pas seulement les impriment - comme dans R, la valeur de la dernière expression évaluée dans une fonction sera automatiquement retournée.Comment ça marche? L'astuce réside dans la
trick
fonction qui prend tous les objets de son "environnement parent" (c'est-à-dire l'environnement de la fonction qui l'appelle), rassemble leurs valeurs dans un vecteur et renvoie, les valeurs de 1 à 5 non représentées.la source
JavaScript (136/166 caractères)
Une version plus petite avec quelques valeurs déclarées au début:
Une version autonome (vous n'avez pas besoin de passer quoi que ce soit - l'argument b est là pour que je puisse vérifier si b est défini avec
||
)Oui, les deux ont des
return
déclarations, mais ce n'est juste que si je suis en concurrence avec des langues avec retour implicite.la source
R
Une version simple (pas infaillible car vous obtiendrez une erreur si vous supprimez la ligne 5):
Et une version infaillible:
Il fonctionne avec n'importe quel nombre de lignes supprimées (sauf si vous supprimez toutes les lignes) et peut facilement être étendu à plus de 5 lignes. L'exécuter "tel quel" reviendra
integer(0)
ce qui est conceptuellement similaire au retour juste0
. Renvoyer un 0 réel le rendrait plus laid et plus long mais ne serait pas compliqué.Enfin, une version utilisant la magie:
Fonction d'assistance:
La fonction réelle:
la source
C ++
Comment utiliser: appelez la fonction avec i et utilisez func2 pour comprendre quelle fonction est révélatrice.
Si vous changez la ligne int arr [] = {0,0} en int arr [] = {0,0,0,0,0} cela fonctionnera également pour les cinq lignes, il s'agit également d'une ligne manuelle pour supprimer le scénario de test automatiquement, ce que je fais est simplement d'utiliser des bits d'une variable comme indicateur pour chaque ligne ....
la source
function
six lignes, pas cinq?