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 Instructions.GenericInstructions
|
||||||
import Data.List.Split
|
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 :: String -> (String, String) -> String
|
||||||
combineString toInsert (front, back) = front <> toInsert <> back
|
combineString toInsert (front, back) = front <> toInsert <> back
|
||||||
|
|
||||||
@ -29,11 +32,7 @@ instructionStringFromLastChar state@(State {_string = s1 : ss}) =
|
|||||||
instructionStringFromLastChar state = state
|
instructionStringFromLastChar state = state
|
||||||
|
|
||||||
instructionStringFromNthChar :: State -> State
|
instructionStringFromNthChar :: State -> State
|
||||||
instructionStringFromNthChar state@(State {_string = s1 : ss, _int = i1 : is}) =
|
instructionStringFromNthChar state@(State {_string = s1 : ss, _int = i1 : is}) = state{_string = [s1 !! absNum i1 s1] : ss, _int = is}
|
||||||
let
|
|
||||||
index = abs i1 `mod` length s1
|
|
||||||
in
|
|
||||||
state{_string = [s1 !! index] : ss, _int = is}
|
|
||||||
instructionStringFromNthChar state = state
|
instructionStringFromNthChar state = state
|
||||||
|
|
||||||
-- instructionStringContainsString :: State -> State
|
-- instructionStringContainsString :: State -> State
|
||||||
@ -81,5 +80,95 @@ instructionStringOccurrencesOfString state@(State {_string = s1 : s2 : ss, _int
|
|||||||
instructionStringOccurrencesOfString state = state
|
instructionStringOccurrencesOfString state = state
|
||||||
|
|
||||||
instructionStringInsertChar :: 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
|
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