Difference between revisions of "H-99: Ninety-Nine Haskell Problems"

From HaskellWiki
Jump to navigation Jump to search
(added chessguy from #haskell's solution to problem 2)
m (fixed link for ocaml's exercise list)
 
(82 intermediate revisions by 23 users not shown)
Line 1: Line 1:
  +
__NOTOC__
These are Haskell translations of [http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html Ninety Nine Lisp Problems].
 
   
 
These are Haskell translations of [http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html Ninety-Nine Lisp Problems],
== Problem 1 ==
 
  +
which are themselves translations of [https://web.archive.org/web/20170324220754/https://sites.google.com/site/prologsite/prolog-problems Ninety-Nine Prolog Problems].
   
  +
If you want to work on one of these, put your name in the block so we know someone's working on it. Then, change n in your block to the appropriate problem number, and fill in the <Problem description>,<example in Haskell>,<solution in haskell> and <description of implementation> fields. Then be sure to update the status on this page to indicate that we have a solution!
<pre>
 
(*) Find the last box of a list.
 
Example:
 
* (my-last '(a b c d))
 
(D)
 
</pre>
 
   
  +
== The problems ==
This is "last" in Prelude, which is defined as:
 
   
  +
These problems have been split into 11 parts, for ease of access.
<haskell>
 
last :: [a] -> a
 
last [x] = x
 
last (_:xs) = last xs
 
</haskell>
 
   
  +
* [[99_questions/1_to_10|Questions 1 to 10]]: Lists
== Problem 2 ==
 
  +
* [[99_questions/11_to_20|Questions 11 to 20]]: Lists, continued
  +
* [[99_questions/21_to_28|Questions 21 to 28]]: Lists again
  +
* [[99_questions/31_to_41|Questions 31 to 41]]: Arithmetic
  +
* [[99_questions/46_to_50|Questions 46 to 50]]: Logic and codes
  +
* [[99_questions/54A_to_60|Questions 54A to 60]]: Binary trees
  +
* [[99_questions/61_to_69|Questions 61 to 69]]: Binary trees, continued
  +
* [[99_questions/70B_to_73|Questions 70B to 73]]: Multiway trees
  +
* [[99_questions/80_to_89|Questions 80 to 89]]: Graphs
  +
* [[99_questions/90_to_94|Questions 90 to 94]]: Miscellaneous problems
  +
* [[99_questions/95_to_99|Questions 95 to 99]]: Miscellaneous problems, continued
   
  +
(Though the problems number from 1 to 99, there are some gaps and some additions marked with letters. There are actually only 88 problems.)
<pre>
 
(*) Find the last but one box of a list.
 
Example:
 
* (my-but-last '(a b c d))
 
(C D)
 
</pre>
 
   
  +
== Solutions ==
This can be done by dropping all but the last two elements of a list:
 
   
  +
Known solutions are listed at [[99 questions/Solutions]]. Some of those we have could do with cleaning up or additional solutions.
<haskell>
 
  +
myButLast :: [a] -> [a]
 
  +
== References ==
myButLast list = drop ((length list) - 2) list
 
  +
</haskell>
 
  +
* [https://web.archive.org/web/20170324220754/https://sites.google.com/site/prologsite/prolog-problems P-99: Ninety-Nine Prolog Problems] (Wayback Machine; original link now dead) contains Prolog solutions to all the problems.
  +
* [http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html L-99: Ninety-Nine Lisp Problems] contains Lisp solutions to problems 1-11, 14, 15, 17 and 20-28.
  +
* [https://www.perlmonks.org/?node_id=590113 99 Problems in Perl 6] has an increasing number of Perl 6 solutions.
  +
* [https://www.ocaml.org/exercises 99 Problems in OCaml] contains Ocaml solutions to many problems.
   
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]
  +
[[Category:Code]]

Latest revision as of 19:49, 4 January 2024


These are Haskell translations of Ninety-Nine Lisp Problems, which are themselves translations of Ninety-Nine Prolog Problems.

If you want to work on one of these, put your name in the block so we know someone's working on it. Then, change n in your block to the appropriate problem number, and fill in the <Problem description>,<example in Haskell>,<solution in haskell> and <description of implementation> fields. Then be sure to update the status on this page to indicate that we have a solution!

The problems

These problems have been split into 11 parts, for ease of access.

(Though the problems number from 1 to 99, there are some gaps and some additions marked with letters. There are actually only 88 problems.)

Solutions

Known solutions are listed at 99 questions/Solutions. Some of those we have could do with cleaning up or additional solutions.

References