Advertisement
RedouaneRed1

Generateur de tables de verité

Oct 28th, 2016
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.39 KB | None | 0 0
  1. =begin
  2. ENLEVEZ les delimiteurs du commentaire si vous voulez avoir les operateurs nand, nor
  3. class TrueClass
  4.     def & y
  5.         !(self && y); # nand
  6.     end
  7.     def | y
  8.         !(self || y); # nor
  9.     end
  10. end
  11. class FalseClass
  12.     def & y
  13.         !(self && y); # nand
  14.     end
  15.     def | y
  16.         !(self || y); # nor
  17.     end
  18. end
  19. # JUSTE POUR EVITER 1 ^ boolean
  20. class Fixnum
  21.     def ^ y
  22.         (self == 1) ^ y;
  23.     end
  24.     def & y
  25.         (self == 1) & y;
  26.     end
  27.     def | y
  28.         (self == 1) | y;
  29.     end
  30. end
  31. =end
  32. begin
  33. puts 'Fait par Redouane ([email protected])'
  34. puts 'Entrez la fonction logique (variables a,b,c,d...)';
  35. signes = { '+' => '||','.'=>'&&'};
  36. inp = gets.downcase;
  37. expr = inp.gsub(/[+\.]/, signes);
  38. n = expr.scan(/[a-z]/).sort.last.ord - 96;
  39. names = (?a .. ?z).first(n);
  40. rows = [ "F = #{inp}"];
  41. rows << " #{names.join(' | ')} | F ";
  42. rows << ('-'*(4*n+3));
  43. f = -> t {
  44.     t = t.map{|x| x == 1};
  45.     eval(expr.gsub(/[a-z]/){|c| "t[#{c.ord-97}]"}.gsub(/[^\[1-9]0|^0/,'false')) ? 1 : 0;
  46. }
  47.  
  48. (2**n).times{|i|
  49.     s = i.to_s(2).rjust(n,?0);
  50.     args = s.chars.map(&:to_i);
  51.     rows << " #{args.join(' | ')} | #{f.(args)} ";
  52. };
  53. new_index = Dir.entries(?.).map{|v| v[/^TV (\d+)\.txt$/, 1].to_i}.max + 1;
  54. $filename = "TV #{new_index}.txt";
  55. txt = rows.join(?\n);
  56. puts txt;
  57. File.open($filename, ?w) do|f|
  58.     f.write(txt);
  59. end;
  60. puts "\nFini, le fichier #{$filename} vient d'etre cree";
  61. rescue Exception => e
  62.     p e.message;
  63.     p e.backtrace;
  64. ensure
  65.     gets;
  66. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement