Sep 30, 2022

Um pequeno puzzle sobre o C# 10

Lire cet post en Français.

Read this post in English.

Você desenvolve em C# no seu dia a dia? Tem acompanhado os últimos avanços desta linguagem, mais especificamente na versão 10? Gosta de desafios de programação ? 

Caso a resposta a uma ou mais das perguntas acima seja sim, você conseguiria, mudando apenas o tipo do parâmetro msg do método Foo(), fazer com que a saída do programa contenha apenas as linhas com números pares?

ou seja, fazer com que a saída do programa seja:

ao invés de:

As regras são:

  1. A única modificação válida no método Foo() é alterar o tipo do parâmetro msg.
  2. Você não pode modificar o corpo do programa, principalmente o laço for.
  3. Você não pode utilizar nenhuma técnica de IL post-processing.
  4. Qualquer outra alteração no código fonte é válida.

Seguem algumas considerações:

  1. A solução para o problema proposto envolve um recurso que foi aprimorado na versão 10 da linguagem.
  2. Observe bem o código acima; procure por elementos não essenciais; estes elementos contém pistas que podem ajudar.

Nos próximos posts eu vou apresentar e discutir a minha solução.

Divirta-se.

Adriano

Une petit casse-têtes C# 10

Leia este post em português.

Read this post in English.

Êtes-tu une développeur/développeuse utilisant C# au quotidien? Suives-tu les derniers C# 10 développements? Êtes-tu intéressé par les casse-têtes? 

Si tu as répondu oui a des questions ci-dessus, étant donné le programme suivant, pouvez-vous, en changeant uniquement le type du paramètre msg dans la méthode Foo(), modifier la sortie du programme pour n'imprimer que les lignes contenant des nombres pairs?

c'est-à-dire, changer la sortie du programme par :

au lieu de:

Bref, les réglés sont:

  1. C'est interdit de changer l’implémentation de la méthode  Foo(), sauf changer le type du paramétrer msg.
  2. C'est interdit de changer le loop for, n'importe en quelle manière.
  3. C'est interdit de utiliser IL post-processing
  4. Tous les autres types de changement das le source code sont valides.

Suivant tu peux trouver quelque conseils dans le cas tu ne savais pas déjà le réponse:

  1. La solution (au moins laquelle que je suis intéresse) dépend dans une fonctionnalité qui s'était amélioré sur la version 10 de la langage.
  2. Regarde le programme attentivement en cherchent pour les pièces non essentielles;  elles contiennent quelques indices importantes pour trouver la solution.

Dans le prochain post je montrerai et discuterai ma solution.

Amuse-toi.

Adriano

A small C# 10 programming puzzle.

Leia este post em português

Lire cet post en Français.

Are you a developer using C# in a day to day basis? Are you following the latest development, mainly in the C# 10 version? Are you interested in puzzles? 

If so, given the following program, can you, changing only the  type of the parameter msg in Foo() method,  change the output of the program to print only the lines containing even numbers?

I.e printing:

instead of:

Summarizing, the rules are:

  1. You cannot change Foo's  implementation in any way other than changing its msg parameter type.
  2. You cannot change the implementation of the for loop in any ways.
  3. You cannot rely on IL post-processing in any way (but it would be a nice exercise 😃)
  4. Any other changes to the source are acceptable

Some tips, in case you don't know the answer yet:

  1. The solution for the proposed challenge (at least the one I am interested) depends on a C# feature that has been improved in version 10
  2. Inspect the source with attention and look for suspicious code, they do contain some clues on how to achieve your goal.

In the next posts I'll show, and discuss, my solution to that. I am curious to see what other solutions exists.

Have fun!

Adriano