Hardfuck
Jump to navigation
Jump to search
Hardfuck is a Brainfuck derivative created by User:Zayne (why am I not surprised) and as the name suggests it is supposed to be harder than Brainfuck.
Commands
| Command | Description |
|---|---|
>
|
Move the pointer to the right |
<
|
Move the pointer to the left |
+
|
Increment the memory cell under the pointer |
-
|
Decrement the memory cell under the pointer |
.
|
Get an input, output the input and store it at the pointer's cell |
,
|
Output the cell before the pointer |
[
|
Jumps to the nearest ] if the value of the cell before the pointer is 0
|
]
|
Jump back to the matching [ if the value of the cell after the pointer is nonzero
|
@
|
Stores the answer to the cell under the pointer multiplied by 4 in the cell before the pointer |
/
|
Returns to the first cell |
Everything else is a comment.
Examples
sets the cell to 18 >>>>>>>>>>>>>>>>>> multiplies 18 by 4 which is equal to 72 and stores it in cell 17 @ goes to cell 50 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> multiplies 50 by 4 which is equal to 200 and stores it in cell 49 @ we go to cell 49 < and then do 99 negatives --------------------------------------------------------------------------------------------------- now cell 49 has the e we can go to cell 51 >> now 50 is 204 @ we go back < and then ------------------------------------------------------------------------------------------------ we have our first l > I'm being lazy ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ second l > o +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ now for the space > ++++++++++++++++++++++++++++++++ now to do the W > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ and the o > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ and the r > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ l > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ d > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ now to print it out />>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>,>,>,>,>,>,>,>,
Minified?
>>>>>>>>>>>>>>>>>>@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>@<--------------------------------------------------------------------------------------------------->>@<------------------------------------------------------------------------------------------------>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>,>,>,>,>,>,>,>,
Interpreters
The following Common Lisp code realizes a very simple Hardfuck interpreter:
(defun interpret-hardfuck (code)
"Interprets the Hardfuck CODE and returns ``NIL."
(declare (type string code))
(when (plusp (length code))
(let ((position 0)
(character (char code 0)))
(declare (type fixnum position) (type (or null character) character))
(flet ((to-next-character ()
(if (< position (1- (length code)))
(setf character (char code (incf position)))
(setf character NIL)))
(to-previous-character ()
(if (plusp position)
(setf character (char code (decf position)))
(setf character NIL))))
(let ((memory (make-hash-table :test #'eql))
(pointer 0))
(declare (type hash-table memory) (type integer pointer))
(loop do
(case character
((NIL)
(loop-finish))
(#\>
(incf pointer)
(to-next-character))
(#\<
(decf pointer)
(to-next-character))
(#\+
(incf (gethash pointer memory 0))
(to-next-character))
(#\-
(decf (gethash pointer memory 0))
(to-next-character))
(#\.
(format T "~&Please enter a character: ")
(let ((input (read-char)))
(declare (type character input))
(write-char input)
(setf (gethash pointer memory) (char-code input)))
(to-next-character))
(#\,
(write-char (code-char (gethash (1- pointer) memory 0)))
(to-next-character))
(#\[
(cond
((zerop (gethash (1- pointer) memory 0))
(to-next-character)
(loop with level of-type fixnum = 0 do
(case character
((NIL)
(error "'[' not followed by ']'."))
(#\[
(incf level))
(#\]
(cond
((zerop level)
(loop-finish))
(T
(decf level)
(to-next-character))))
(otherwise
(to-next-character)))))
(T
(to-next-character))))
(#\]
(cond
((zerop (gethash (1+ pointer) memory 0))
(to-next-character))
(T
(to-previous-character)
(loop with level of-type fixnum = 0 do
(case character
((NIL)
(error "']' not preceded by '['."))
(#\]
(incf level))
(#\[
(cond
((zerop level)
(loop-finish))
(T
(decf level)
(to-previous-character))))
(otherwise
(to-previous-character)))))))
(#\@
(setf (gethash (1- pointer) memory 0) (* pointer 4))
(to-next-character))
(#\/
(setf pointer 0)
(to-next-character))
(otherwise
(to-next-character)))))))))
GitHub is dedicated to Common Lisp implementations of Hardfuck.