Skip to content

Instantly share code, notes, and snippets.

View vituscze's full-sized avatar

Vít Šefl vituscze

View GitHub Profile
module Main where
import Control.Monad
import Data.List
import Data.Maybe
modifyAt :: Int -> (a -> a) -> [a] -> [a]
modifyAt pos f l = ll ++ case lr of
[] -> []
x:xs -> f x:xs
import Data.List
data Prop
= Const Bool
| Var Char
| Not Prop
| And Prop Prop
| Or Prop Prop
deriving (Show)
import Data.Function
class Queue q where
emptyQueue :: q a
isEmpty :: q a -> Bool
enqueue :: a -> q a -> q a
dequeue :: q a -> (a, q a)
data SQueue a = SQ [a] [a]
data Tree = Nil | Node Tree Int Tree deriving (Eq, Ord, Show)
allBalanced :: Int -> [Tree]
allBalanced = go 1
where
go from to
| from > to = [Nil]
| otherwise = [Node l x r | x <- [h .. h + m], l <- go from (x - 1), r <- go (x + 1) to]
where
(h, m) = (from + to) `divMod` 2
import Data.List
is_equiv :: (a -> a -> Bool) -> [a] -> Bool
is_equiv (~=) set = refl && sym && trans
where
infix 1 ==>
x ==> y = not x || y
every c = all c set
factors_ :: Int -> Int -> [Int]
factors_ p k =
if k * k > p
then [p]
else if p `mod` k == 0
then k:factors_ (p `div` k) k
else factors_ p (k + 1)
factors :: Int -> [Int]
factors p = factors_ p 2
mark_enter(X, enter(X)).
dfs(_, [], Visited, Visited, Time, Time).
dfs(G, [exit(V)|Vs], Visited, FinalVisited, Time, FinalTime) :-
member(V/_/Time, Visited), NewTime is Time + 1,
dfs(G, Vs, Visited, FinalVisited, NewTime, FinalTime).
dfs(G, [enter(V)|Vs], Visited, FinalVisited, Time, FinalTime) :-
( member(V/_/_, Visited) -> dfs(G, Vs, Visited, FinalVisited, Time, FinalTime)
; member(V-Neigh, G), maplist(mark_enter, Neigh, NeighEnter),
NewTime is Time + 1,
maptree(_, nil).
maptree(P, b(L, X, R)) :-
call(P, X), maptree(P, L), maptree(P, R).
size(nil, 0, -1).
size(b(L, _, R), S, H) :-
SP is S - 1, between(0, SP, SL), SR is S - SL - 1,
HP is H - 1, (HL = HP, between(-1, HP, HR); between(-1, HP, HL), HR = HP, HL \= HR),
size(L, SL, HL),
size(R, SR, HR).
cone([o,o,o], 0).
cone(R, 1) :- select(x, R, [o,o]).
cone(R, 2) :- select(o, R, [x,x]).
cone([x,x,x], 3).
match([_,_], []).
match([A,B,C|R], [M|RM]) :- cone([A,B,C],M), match([B,C|R], RM).
miny(Pocty, Miny) :- same_length(Pocty, Miny), append([[o],Miny,[o]], MinyLong), match(MinyLong, Pocty).
sublist(L, M) :-
M = [_|_],
append(_, Suffix, L),
append(M, _, Suffix).
subseq([], []).
subseq([X|L], [X|M]) :- subseq(L, M).
subseq([_|L], M) :- subseq(L, M).
disjoint([], [], []).