Advertisement
Guest User

Untitled

a guest
Jul 31st, 2016
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Eiffel 5.89 KB | None | 0 0
  1. note
  2.     description: "Summary description for {JOTTO}."
  3.     author: ""
  4.     date: "$Date$"
  5.     revision: "$Revision$"
  6.  
  7. class
  8.     JOTTO
  9. create
  10.     make
  11. feature
  12.     secretSet : LINKED_SET[CHARACTER]
  13.     eliminateDigits: LINKED_SET[CHARACTER]
  14.     correctDigits: LINKED_SET[CHARACTER]
  15. feature{ANY}
  16.  
  17.     make
  18.     do
  19.         create secretSet.make
  20.         create eliminateDigits.make
  21.         create correctDigits.make
  22.  
  23.     end
  24.  
  25.  
  26.     toCharArray(n: STRING): ARRAY[CHARACTER]
  27.     local
  28.         out_array:ARRAY[CHARACTER]
  29.         i:INTEGER
  30.     do
  31.         create out_array.make_filled ('0', 0, n.count - 1)
  32.         from
  33.             i := 1
  34.         until
  35.             i > n.count
  36.         loop
  37.             out_array[i-1] := n.at (i)
  38.             i:= i + 1
  39.         end
  40.         result := out_array
  41.     end
  42.  
  43.     commonCount(a:STRING; b:STRING):INTEGER
  44.     local
  45.         count,i,j:INTEGER
  46.         aletters: ARRAY[CHARACTER]
  47.         bletters: ARRAY[CHARACTER]
  48.     do
  49.         --change string to array
  50.         aletters := toCharArray(a)
  51.         bletters := toCharArray(b)
  52.         count := 0
  53.         --loop and find if any of the letters from a and b match
  54.         from
  55.             i := 0
  56.         until
  57.             i >= aletters.capacity
  58.         loop
  59.             from
  60.                 j := 0
  61.             until
  62.                 j >= bletters.capacity
  63.             loop
  64.                 if(aletters[i] ~ bletters[j])
  65.                 then
  66.                     count := count + 1
  67.  
  68.                 end
  69.             end
  70.  
  71.         end
  72.  
  73.  
  74.  
  75.     end
  76.     differentDigit(a: STRING ; b: STRING): LINKED_LIST[CHARACTER]
  77.     local
  78.         i,j:INTEGER
  79.         found,exit: BOOLEAN
  80.         differentDigits:LINKED_LIST[CHARACTER]
  81.         aletters: ARRAY[CHARACTER]
  82.         bletters: ARRAY[CHARACTER]
  83.     do
  84.         --change string to array
  85.         create differentDigits.make
  86.         aletters := toCharArray(a)
  87.         bletters := toCharArray(b)
  88.         from
  89.             i := 0
  90.         until
  91.             i >= aletters.capacity or exit
  92.         loop
  93.             from
  94.                 j := 0
  95.             until
  96.                 j >= bletters.capacity
  97.             loop
  98.                 if(aletters[i] ~ bletters[j])
  99.                 then
  100.                     found := true
  101.                     exit := true
  102.                 end
  103.             end
  104.             if(not found)
  105.             then
  106.                 differentDigits.extend(aletters[i])
  107.             end
  108.  
  109.         end
  110.  
  111.         result := differentDigits
  112.  
  113.     end
  114.  
  115.     getSafeDigits(a: STRING;  elimDig: LINKED_SET[CHARACTER]; correctDig: LINKED_SET[CHARACTER]): LINKED_SET[CHARACTER]
  116.     local
  117.         aletters: ARRAY[CHARACTER]
  118.         safeDigits: LINKED_SET[CHARACTER]
  119.         i:INTEGER
  120.     do
  121.         create safeDigits.make
  122.         aletters := toCharArray(a)
  123.  
  124.         from
  125.             i := 0
  126.         until
  127.             i >= aletters.capacity
  128.         loop
  129.             if(not elimDig.has (aletters[i]) and not correctDig.has (aletters[i]))
  130.             then
  131.                 safeDigits.extend(aletters[i])
  132.             end
  133.         end
  134.         result := safeDigits
  135.  
  136.     end
  137.  
  138.  
  139.     inCommonWithSet(a: STRING; set: LINKED_SET[CHARACTER]): LINKED_SET[CHARACTER]
  140.     local
  141.         aletters: ARRAY[CHARACTER]
  142.         inCommon: LINKED_SET[CHARACTER]
  143.         i:INTEGER
  144.     do
  145.         create inCommon.make
  146.         aletters := toCharArray(a)
  147.  
  148.         from
  149.             i := 0
  150.         until
  151.             i >= aletters.capacity
  152.         loop
  153.             if(set.has (aletters[i]))
  154.             then
  155.                 inCommon.extend(aletters[i])
  156.             end
  157.         end
  158.         result := inCommon
  159.  
  160.     end
  161.  
  162.     notInCommonWithSet(a: STRING; set: LINKED_SET[CHARACTER]): LINKED_SET[CHARACTER]
  163.     local
  164.         aletters: ARRAY[CHARACTER]
  165.         notInCommon: LINKED_SET[CHARACTER]
  166.         i:INTEGER
  167.     do
  168.         create notInCommon.make
  169.         aletters := toCharArray(a)
  170.  
  171.         from
  172.             i := 0
  173.         until
  174.             i >= aletters.capacity
  175.         loop
  176.             if(not set.has (aletters[i]))
  177.             then
  178.                 notInCommon.extend(aletters[i])
  179.             end
  180.         end
  181.         result := notInCommon
  182.  
  183.     end
  184.  
  185.     numberOfCorrectAndElim(a: STRING ; correct: LINKED_SET[CHARACTER]; elim: LINKED_SET[CHARACTER]): INTEGER
  186.     local
  187.         i,count:INTEGER
  188.         aletters: ARRAY[CHARACTER]
  189.     do
  190.         count :=0
  191.         aletters := toCharArray(a)
  192.         from
  193.             i := 0
  194.         until
  195.             i >= aletters.capacity
  196.         loop
  197.             if(correct.has (aletters[i]) and elim.has (aletters[i]))
  198.             then
  199.                 count := count + 1
  200.             end
  201.         end
  202.         result := count
  203.  
  204.     end
  205.  
  206.     next_line:STRING
  207.     local
  208.     input: STRING
  209.     do
  210.         io.read_line
  211.         input := io.last_string
  212.         result := input
  213.  
  214.     end
  215.  
  216.     correctOrder(userGuessArray: ARRAY[CHARACTER]):BOOLEAN
  217.     local
  218.         count,j:INTEGER
  219.         output:BOOLEAN
  220.     do
  221.  
  222.         from
  223.             j:=0
  224.         until
  225.             j >= userGuessArray.capacity
  226.         loop
  227.             correctDigits.extend (userGuessArray[j])
  228.  
  229.         end
  230.         from
  231.             j:= 1
  232.         until
  233.             j > secretSet.count
  234.         loop
  235.             if(secretSet.i_th (j) ~ userGuessArray[j - 1])
  236.             then
  237.                 count := count + 1
  238.             end
  239.         end
  240.         if count ~ 3
  241.         then
  242.             output := true
  243.         end
  244.         result := output
  245.     end
  246.  
  247.  
  248.     main
  249.     local
  250.  
  251.         input,key: STRING
  252.         length,i, numCorrectDig,previousHint: INTEGER
  253.         win: BOOLEAN
  254.         secret: STRING--ARRAY[CHARACTER]
  255.         userGuessArray: ARRAY[CHARACTER]
  256.         userGuesses : MY_MAP[STRING, INTEGER]
  257.         userGuesses_iter:MAP_ITERATOR[STRING, INTEGER]
  258.         prevNotCurrent:LINKED_LIST[CHARACTER]
  259.         currentNotPrev:LINKED_LIST[CHARACTER]
  260.         --userGuesses_iter:MAP_ITERATOR[STRING, INTEGER]
  261.     do
  262.         create prevNotCurrent.make
  263.         create currentNotPrev.make
  264.         create userGuesses.make
  265.         numCorrectDig := 0
  266.         --secret := toCharArray("365")
  267.         secret := "365"
  268.         from
  269.             i := 0
  270.         until
  271.             i >= secret.capacity
  272.         loop
  273.             secretSet.extend (secret[i])
  274.             i := i + 1
  275.         end
  276.  
  277.         print("What's your guess?%N")
  278.         --io.read_line
  279.         --input := io.last_string
  280.         --guess := toCharArray(input)
  281.         --print("guess is : "+ guess[0].out + guess[1].out + guess[2].out+"%N")
  282.  
  283.         input := next_line
  284.         from
  285.  
  286.         until
  287.              input ~ "OK" and win
  288.         loop
  289.             userGuessArray := toCharArray (input)
  290.             numCorrectDig := commonCount(input, secret)
  291.             if( numCorrectDig ~ 3)
  292.             then
  293.                 win := correctOrder(userGuessArray)
  294.                 if win
  295.                 then
  296.                     print("YOU WIN! The secret number is: " + input.out + "%N");
  297.  
  298.                 end
  299.  
  300.             end
  301.             if(not win)
  302.             then
  303.                 if(numCorrectDig ~ 0)
  304.                 then
  305.                     from
  306.                         i := 0
  307.                     until
  308.                         i >= userGuessArray.capacity
  309.                     loop
  310.                         eliminateDigits.extend (userGuessArray[i])
  311.                     end
  312.                 end
  313.  
  314.                 userGuesses_iter := userGuesses.iterator
  315.                 from
  316.                 until
  317.                     userGuesses_iter.all_done
  318.                 loop
  319.                     key:= userGuesses_iter.next
  320.                     previousHint := userGuesses.get (key)
  321.                     if(numCorrectDig ~ previousHint + 1)
  322.                     then
  323.                         prevNotCurrent
  324.                     end
  325.                 end
  326.  
  327.             end
  328.  
  329.  
  330.  
  331.         end
  332.     end
  333.  
  334. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement