acron.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <stdio.h>
  2. #define N 6
  3. char *w[] = {"Vertalerbouw", "Ertalerbouw", "Practicum", "Optimization", "Peephole", "Eephole"};
  4. char acron[N*2], command[100];
  5. int done[N], pindex[N+1];
  6. int is_vowel(char c)
  7. {
  8. return (c==65 || c==69 || c==73 || c==79 || c==85 || c==89)? 1 : 0;
  9. }
  10. void do_perm(int n, int done[], int index, int size)
  11. {
  12. int j, i, nrv = 0, k;
  13. if (index == 1 && (!is_vowel(w[pindex[0]][0]) && !is_vowel(w[n][0])))
  14. return;
  15. if (index > 1) {
  16. nrv = is_vowel(w[pindex[index-2]][0]) +
  17. is_vowel(w[pindex[index-1]][0]) +
  18. is_vowel(w[n][0]);
  19. if (nrv == 0 || nrv == 3)
  20. return;
  21. }
  22. pindex[index++] = n;
  23. if (index < N && --size) {
  24. for (j = 0; j<N; j++) {
  25. if (done[j] == 0) {
  26. done[j] = 1;
  27. do_perm(j, done, index, size);
  28. done[j] = 0;
  29. }
  30. }
  31. } else {
  32. k = 0;
  33. for (i=0; i < index; i++) {
  34. int t = 0;
  35. while (isupper(w[pindex[i]][t]))
  36. acron[k++] = w[pindex[i]][t++];
  37. }
  38. acron[k] = 0;
  39. printf("%s", acron);
  40. for (i=0; i < index; i++)
  41. printf(" %s", w[pindex[i]]);
  42. printf("\n");
  43. /* fflush(stdout); */
  44. }
  45. }
  46. int main()
  47. {
  48. int i, j;
  49. for (j = 4; j <= N; j++) {
  50. for (i = 0; i < N; i++) {
  51. done[i] = 1;
  52. do_perm(i, done, 0, j);
  53. done[i] = 0;
  54. }
  55. }
  56. }