"Comment identifier les futurs programmeurs qui ne peuvent pas écrire de code" (Wikipedia % 95% 8F% E9% A1% 8C))), mais quand vous voyez ces problèmes, il est courant de penser à quel point vous pouvez écrire dans différentes langues (biais), donc encore une fois. J'y ai pensé moi-même.
Si vous l'écrivez honnêtement, cela ressemble à ceci. Vérifiez auprès de Gauche.
fizzbuzz1.scm
(define FizzBuzz
(lambda (n)
(let loop ((x 1) (r '()))
(cond ((> x n) (reverse r))
((and (zero? (modulo x 3)) (zero? (modulo x 5)))
(loop (+ x 1) (cons 'FizzBuzz r)))
((zero? (modulo x 3))
(loop (+ x 1) (cons 'Fizz r)))
((zero? (modulo x 5))
(loop (+ x 1) (cons 'Buzz r)))
(else
(loop (+ x 1) (cons x r)))))))
(display (FizzBuzz 100))
Non, c'est trop simple, alors je l'ai réécrit.
fizzbuzz2.scm
(define (ch x)
(define (p? n) (zero? (modulo x n)))
(cond ((p? 15) 'FizzBuzz) ((p? 3) 'Fizz) ((p? 5) 'Buzz) (else x)))
(display (map ch (cdr (iota 101))))
Était-ce trop vif cette fois?
Tout d'abord, honnêtement.
fizzbuzz1.py
def FizzBuzz(n):
for x in range(1, n+1):
if x % 3 == 0 and x % 5 == 0:
print('FizzBuzz')
elif x % 3 == 0:
print('Fizz')
elif x % 5 == 0:
print('Buzz')
else:
print(x)
FizzBuzz(100)
Réécrivons cela avec la colle dans le cas de Scheme.
fizzbuzz2.py
def ch(x):
def p(n):
return (x % n == 0)
return ('FizzBuzz' if p(15) else 'Fizz' if p(3) else 'Buzz' if p(5) else x)
print(list(map(ch, range(1,101))))
Bien. Si vous pensez, Si vous utilisez la notation d'inclusion de liste, vous n'avez besoin que d'une seule ligne?
Vérifiez avec SWI-Prolog et GNU Prolog. Je me demande si la combinaison entre et échec est une mauvaise idée.
fizzbuzz.pl
fb(X,'FizzBuzz') :- X mod 15 =:= 0, !.
fb(X,'Fizz') :- X mod 3 =:= 0, !.
fb(X,'Buzz') :- X mod 5 =:= 0, !.
fb(X,X).
fizzbuzz(N) :- between(1,N,X), fb(X,R), write(R), write(' '), fail.
% ?- fizzbuzz(100).
Une version simple pour le moment.
fizzbuzz1.c
#include <stdio.h>
int main(void)
{
for (int n = 1; n <= 100; n++)
if (n % 3 == 0 && n % 5 == 0) printf("FizzBuzz ");
else if (n % 3 == 0) printf("Fizz ");
else if (n % 5 == 0) printf("Buzz ");
else printf("%d ", n);
return (0);
}
Réécrit à l'aide de l'opérateur ternaire. Ce n'est pas utilisé comme opérateur, mais c'est un peu plus court.
fizzbuzz2.c
#include <stdio.h>
int main(void)
{
for (int n = 1; n <= 100; n++)
n % 3 == 0 && n % 5 == 0 ? printf("FizzBuzz ") :
n % 3 == 0 ? printf("Fizz ") :
n % 5 == 0 ? printf("Buzz ") :
printf("%d ", n);
return (0);
}
Si vous générez une séquence de nombres de 1 à 100 et appliquez un traitement à chaque élément, ou si vous pouvez écrire plusieurs expressions de jugement sur une seule ligne, il semble que vous puissiez créer un code court et simple.