more string functions, need a break
This commit is contained in:
parent
804da2a23c
commit
a55a66f456
@ -4,6 +4,9 @@ import State
|
||||
import Instructions.GenericInstructions
|
||||
import Data.List.Split
|
||||
|
||||
absNum :: Integral a => a -> [b] -> Int
|
||||
absNum rawNum lst = abs (fromIntegral rawNum) `mod` length lst
|
||||
|
||||
combineString :: String -> (String, String) -> String
|
||||
combineString toInsert (front, back) = front <> toInsert <> back
|
||||
|
||||
@ -29,11 +32,7 @@ instructionStringFromLastChar state@(State {_string = s1 : ss}) =
|
||||
instructionStringFromLastChar state = state
|
||||
|
||||
instructionStringFromNthChar :: State -> State
|
||||
instructionStringFromNthChar state@(State {_string = s1 : ss, _int = i1 : is}) =
|
||||
let
|
||||
index = abs i1 `mod` length s1
|
||||
in
|
||||
state{_string = [s1 !! index] : ss, _int = is}
|
||||
instructionStringFromNthChar state@(State {_string = s1 : ss, _int = i1 : is}) = state{_string = [s1 !! absNum i1 s1] : ss, _int = is}
|
||||
instructionStringFromNthChar state = state
|
||||
|
||||
-- instructionStringContainsString :: State -> State
|
||||
@ -81,5 +80,95 @@ instructionStringOccurrencesOfString state@(State {_string = s1 : s2 : ss, _int
|
||||
instructionStringOccurrencesOfString state = state
|
||||
|
||||
instructionStringInsertChar :: State -> State
|
||||
instructionStringInsertChar state@(State {_string = s1 : ss, _char = c1 : cs, _int = i1 : is}) = state {_string = combineString [c1] (splitAt i1 s1) : ss, _char = cs, _int = is}
|
||||
instructionStringInsertChar state@(State {_string = s1 : ss, _char = c1 : cs, _int = i1 : is}) = state{_string = combineString [c1] (splitAt i1 s1) : ss, _char = cs, _int = is}
|
||||
instructionStringInsertChar state = state
|
||||
|
||||
instructionStringContainsChar :: State -> State
|
||||
instructionStringContainsChar state@(State {_string = s1 : ss, _char = c1 : cs, _bool = bs}) = state{_string = ss, _char = cs, _bool = (findSubA s1 [c1] /= -1) : bs}
|
||||
instructionStringContainsChar state = state
|
||||
|
||||
instructionStringIndexOfChar :: State -> State
|
||||
instructionStringIndexOfChar state@(State {_string = s1 : ss, _char = c1 : cs, _int = is}) = state{_string = ss, _char = cs, _int = findSubA s1 [c1] : is}
|
||||
instructionStringIndexOfChar state = state
|
||||
|
||||
instructionStringSplitOnChar :: State -> State
|
||||
instructionStringSplitOnChar state@(State {_string = s1 : ss, _char = c1 : cs}) = state {_string = reverse $ splitOn [c1] s1 <> ss, _char = cs}
|
||||
instructionStringSplitOnChar state = state
|
||||
|
||||
instructionStringReplaceFirstChar :: State -> State
|
||||
instructionStringReplaceFirstChar state@(State {_string = s1 : ss, _char = c1 : c2 : cs}) = state {_string = replace s1 [c1] [c2] (Just 1) : ss, _char = cs}
|
||||
instructionStringReplaceFirstChar state = state
|
||||
|
||||
instructionStringReplaceNChar :: State -> State
|
||||
instructionStringReplaceNChar state@(State {_string = s1 : ss, _char = c1 : c2 : cs, _int = i1 : is}) = state{_string = replace s1 [c1] [c2] (Just i1) : ss, _char = cs, _int = is}
|
||||
instructionStringReplaceNChar state = state
|
||||
|
||||
instructionStringReplaceAllChar :: State -> State
|
||||
instructionStringReplaceAllChar state@(State {_string = s1 : ss, _char = c1 : c2 : cs}) = state{_string = replace s1 [c1] [c2] Nothing : ss, _char = cs}
|
||||
instructionStringReplaceAllChar state = state
|
||||
|
||||
instructionStringRemoveFirstChar :: State -> State
|
||||
instructionStringRemoveFirstChar state@(State {_string = s1 : ss, _char = c1 : cs}) = state {_string = replace s1 [c1] "" (Just 1) : ss, _char = cs}
|
||||
instructionStringRemoveFirstChar state = state
|
||||
|
||||
instructionStringRemoveNChar :: State -> State
|
||||
instructionStringRemoveNChar state@(State {_string = s1 : ss, _char = c1 : cs, _int = i1 : is}) = state{_string = replace s1 [c1] "" (Just i1) : ss, _char = cs, _int = is}
|
||||
instructionStringRemoveNChar state = state
|
||||
|
||||
instructionStringRemoveAllChar :: State -> State
|
||||
instructionStringRemoveAllChar state@(State {_string = s1 : ss, _char = c1 : cs}) = state{_string = replace s1 [c1] "" Nothing : ss, _char = cs}
|
||||
instructionStringRemoveAllChar state = state
|
||||
|
||||
instructionStringOccurrencesOfChar :: State -> State
|
||||
instructionStringOccurrencesOfChar state@(State {_string = s1 : ss, _char = c1 : cs, _int = is}) = state{_string = ss, _char = cs, _int = amtOccurences s1 [c1] : is}
|
||||
instructionStringOccurrencesOfChar state = state
|
||||
|
||||
instructionStringReverse :: State -> State
|
||||
instructionStringReverse state@(State {_string = s1 : ss}) = state{_string = reverse s1 : ss}
|
||||
instructionStringReverse state = state
|
||||
|
||||
instructionStringHead :: State -> State
|
||||
instructionStringHead state@(State {_string = s1 : ss, _int = i1 : is}) = state{_string = take (absNum i1 s1) s1 : ss, _int = is}
|
||||
instructionStringHead state = state
|
||||
|
||||
instructionStringTail :: State -> State
|
||||
instructionStringTail state@(State {_string = s1 : ss, _int = i1 : is}) = state{_string = takeR (absNum i1 s1) s1 : ss, _int = is}
|
||||
instructionStringTail state = state
|
||||
|
||||
instructionStringAppendChar :: State -> State
|
||||
instructionStringAppendChar state@(State {_string = s1 : ss, _char = c1 : cs}) = state{_string = (c1 : s1) : ss, _char = cs}
|
||||
instructionStringAppendChar state = state
|
||||
|
||||
instructionStringRest :: State -> State
|
||||
instructionStringRest state@(State {_string = s1 : ss}) = state{_string = drop 1 s1 : ss}
|
||||
instructionStringRest state = state
|
||||
|
||||
instructionStringButLast :: State -> State
|
||||
instructionStringButLast state@(State {_string = s1 : ss}) =
|
||||
if not $ null s1
|
||||
then state{_string = init s1 : ss}
|
||||
else state
|
||||
instructionStringButLast state = state
|
||||
|
||||
instructionStringDrop :: State -> State
|
||||
instructionStringDrop state@(State {_string = s1 : ss, _int = i1 : is}) = state{_string = drop (absNum i1 s1) s1 : ss, _int = is}
|
||||
instructionStringDrop state = state
|
||||
|
||||
instructionStringButLastN :: State -> State
|
||||
instructionStringButLastN state@(State {_string = s1 : ss, _int = i1 : is}) = state{_string = dropR (absNum i1 s1) s1 : ss, _int = is}
|
||||
instructionStringButLastN state = state
|
||||
|
||||
instructionStringLength :: State -> State
|
||||
instructionStringLength state@(State {_string = s1 : ss, _int = is}) = state{_string = ss, _int = length s1 : is}
|
||||
instructionStringLength state = state
|
||||
|
||||
instructionStringMakeEmpty :: State -> State
|
||||
instructionStringMakeEmpty state@(State {_string = ss}) = state{_string = "" : ss}
|
||||
|
||||
instructionStringIsEmptyString :: State -> State
|
||||
instructionStringIsEmptyString state@(State {_string = s1 : ss, _bool = bs}) = state{_string = ss, _bool = null s1 : bs}
|
||||
instructionStringIsEmptyString state = state
|
||||
|
||||
instructionStringRemoveNth :: State -> State
|
||||
instructionStringRemoveNth state@(State {_string = s1 : ss, _int = i1 : is}) = state{_string = deleteAt (absNum i1 s1) s1 : ss, _int = is}
|
||||
instructionStringRemoveNth state = state
|
||||
|
Loading…
x
Reference in New Issue
Block a user