Determine sentence type: Difference between revisions
Thundergnat (talk | contribs) (→{{header|Raku}}: Add a Raku example) |
Thundergnat (talk | contribs) m (→{{header|Raku}}: leave out the implicit) |
||
Line 175:
say join '|', $paragraph.&get_sentences.map: {
given $0 {
when '!' { 'E' };
|
Revision as of 08:31, 7 November 2021
You are encouraged to solve this task according to the task description, using any language you may know.
Use this sentence: "hi there, how are you today? I'd like to present to you the washing machine 9001. You have been nominated to win one of these! Just make sure you don't break it"
- Task
- Search for the last used punctuation in a sentence, and determine its type according to its punctuation
- Output one of these letters
- "E" (Exclamation!), "Q" (Question?), "S" (Serious.), "N" (Neutral)
- Extra
- Make your code able to determine multiple sentences
Don't leave any errors!
- Metrics
- Counting
- Word frequency
- Letter frequency
- Jewels and stones
- I before E except after C
- Bioinformatics/base count
- Count occurrences of a substring
- Count how many vowels and consonants occur in a string
- Remove/replace
- XXXX redacted
- Conjugate a Latin verb
- Remove vowels from a string
- String interpolation (included)
- Strip block comments
- Strip comments from a string
- Strip a set of characters from a string
- Strip whitespace from a string -- top and tail
- Strip control codes and extended characters from a string
- Anagrams/Derangements/shuffling
- Word wheel
- ABC problem
- Sattolo cycle
- Knuth shuffle
- Ordered words
- Superpermutation minimisation
- Textonyms (using a phone text pad)
- Anagrams
- Anagrams/Deranged anagrams
- Permutations/Derangements
- Find/Search/Determine
- ABC words
- Odd words
- Word ladder
- Semordnilap
- Word search
- Wordiff (game)
- String matching
- Tea cup rim text
- Alternade words
- Changeable words
- State name puzzle
- String comparison
- Unique characters
- Unique characters in each string
- Extract file extension
- Levenshtein distance
- Palindrome detection
- Common list elements
- Longest common suffix
- Longest common prefix
- Compare a list of strings
- Longest common substring
- Find common directory path
- Words from neighbour ones
- Change e letters to i in words
- Non-continuous subsequences
- Longest common subsequence
- Longest palindromic substrings
- Longest increasing subsequence
- Words containing "the" substring
- Sum of the digits of n is substring of n
- Determine if a string is numeric
- Determine if a string is collapsible
- Determine if a string is squeezable
- Determine if a string has all unique characters
- Determine if a string has all the same characters
- Longest substrings without repeating characters
- Find words which contains all the vowels
- Find words which contains most consonants
- Find words which contains more than 3 vowels
- Find words which first and last three letters are equals
- Find words which odd letters are consonants and even letters are vowels or vice_versa
- Formatting
- Substring
- Rep-string
- Word wrap
- String case
- Align columns
- Literals/String
- Repeat a string
- Brace expansion
- Brace expansion using ranges
- Reverse a string
- Phrase reversals
- Comma quibbling
- Special characters
- String concatenation
- Substring/Top and tail
- Commatizing numbers
- Reverse words in a string
- Suffixation of decimal numbers
- Long literals, with continuations
- Numerical and alphabetical suffixes
- Abbreviations, easy
- Abbreviations, simple
- Abbreviations, automatic
- Song lyrics/poems/Mad Libs/phrases
- Mad Libs
- Magic 8-ball
- 99 Bottles of Beer
- The Name Game (a song)
- The Old lady swallowed a fly
- The Twelve Days of Christmas
- Tokenize
- Text between
- Tokenize a string
- Word break problem
- Tokenize a string with escaping
- Split a character string based on change of character
- Sequences
ALGOL 68
Classifies an empty string as "". <lang algol68>BEGIN # determuine the type of a sentence by looking at the final punctuation #
CHAR exclamation = "E"; # classification codes... # CHAR question = "Q"; CHAR serious = "S"; CHAR neutral = "N"; # returns the type(s) of the sentence(s) in s - exclamation, question, # # serious or neutral; if there are multiple sentences # # the types are separated by | # PROC classify = ( STRING s )STRING: BEGIN STRING result := ""; BOOL pending neutral := FALSE; FOR s pos FROM LWB s TO UPB s DO IF pending neutral := FALSE; CHAR c = s[ s pos ]; c = "?" THEN result +:= question + "|" ELIF c = "!" THEN result +:= exclamation + "|" ELIF c = "." THEN result +:= serious + "|" ELSE pending neutral := TRUE FI OD; IF pending neutral THEN result +:= neutral + "|" FI; # if s was empty, then return an empty string, otherwise remove the final separator # IF result = "" THEN "" ELSE result[ LWB result : UPB result - 1 ] FI END # classify # ; # task test case # print( ( classify( "hi there, how are you today? I'd like to present to you the washing machine 9001. " + "You have been nominated to win one of these! Just make sure you don't break it" ) , newline ) )
END</lang>
- Output:
Q|S|E|N
AutoHotkey
<lang autohotkey>Sentence := "hi there, how are you today? I'd like to present to you the washing machine 9001. You have been nominated to win one of these! Just make sure you don't break it" Msgbox, % SentenceType(Sentence)
SentenceType(Sentence) { Sentence := Trim(Sentence) Loop, Parse, Sentence, .?! { N := (!E && !Q && !S) , S := (InStr(SubStr(Sentence, InStr(Sentence, A_LoopField)+StrLen(A_LoopField), 3), ".")) , Q := (InStr(SubStr(Sentence, InStr(Sentence, A_LoopField)+StrLen(A_LoopField), 3), "?")) , E := (InStr(SubStr(Sentence, InStr(Sentence, A_LoopField)+StrLen(A_LoopField), 3), "!")) , type .= (E) ? ("E|") : ((Q) ? ("Q|") : ((S) ? ("S|") : "N|")) , D := SubStr(Sentence, InStr(Sentence, A_LoopField)+StrLen(A_LoopField), 3) } return (D = SubStr(Sentence, 1, 3)) ? RTrim(RTrim(type, "|"), "N|") : RTrim(type, "|") }</lang>
- Output:
Q|S|E|N
Factor
This program attempts to prevent common abbreviations from ending sentences early. It also tries to handle parenthesized sentences and implements an additional type for exclamatory questions (EQ).
<lang factor>USING: combinators io kernel regexp sequences sets splitting wrap.strings ;
! courtesy of https://www.infoplease.com/common-abbreviations
CONSTANT: common-abbreviations {
"A.B." "abbr." "Acad." "A.D." "alt." "A.M." "Assn." "at. no." "at. wt." "Aug." "Ave." "b." "B.A." "B.C." "b.p." "B.S." "c." "Capt." "cent." "co." "Col." "Comdr." "Corp." "Cpl." "d." "D.C." "Dec." "dept." "dist." "div." "Dr." "ed." "est." "et al." "Feb." "fl." "gal." "Gen." "Gov." "grad." "Hon." "i.e." "in." "inc." "Inst." "Jan." "Jr." "lat." "Lib." "long." "Lt." "Ltd." "M.D." "Mr." "Mrs." "mt." "mts." "Mus." "no." "Nov." "Oct." "Op." "pl." "pop." "pseud." "pt." "pub." "Rev." "rev." "R.N." "Sept." "Ser." "Sgt." "Sr." "St." "uninc." "Univ." "U.S." "vol." "vs." "wt."
}
- sentence-enders ( str -- newstr )
R/ \)/ "" re-replace " " split harvest unclip-last swap [ common-abbreviations member? ] reject [ last ".!?" member? ] filter swap suffix ;
- serious? ( str -- ? ) last CHAR: . = ;
- neutral? ( str -- ? ) last ".!?" member? not ;
- mixed? ( str -- ? ) "?!" intersect length 2 = ;
- exclamation? ( str -- ? ) last CHAR: ! = ;
- question? ( str -- ? ) last CHAR: ? = ;
- type ( str -- newstr )
{ { [ dup serious? ] [ drop "S" ] } { [ dup neutral? ] [ drop "N" ] } { [ dup mixed? ] [ drop "EQ" ] } { [ dup exclamation? ] [ drop "E" ] } { [ dup question? ] [ drop "Q" ] } [ drop "UNKNOWN" ] } cond ;
- sentences ( str -- newstr )
sentence-enders [ type ] map "|" join ;
- show ( str -- )
dup sentences " -> " glue 60 wrap-string print ;
"Hi there, how are you today? I'd like to present to you the washing machine 9001. You have been nominated to win one of these! Just make sure you don't break it" show nl "(There was nary a mouse stirring.) But the cats were going bonkers!" show nl "\"Why is the car so slow?\" she said." show nl "Hello, Mr. Anderson!" show nl "Are you sure?!?! How can you know?" show</lang>
- Output:
Hi there, how are you today? I'd like to present to you the washing machine 9001. You have been nominated to win one of these! Just make sure you don't break it -> Q|S|E|N (There was nary a mouse stirring.) But the cats were going bonkers! -> S|E "Why is the car so slow?" she said. -> S Hello, Mr. Anderson! -> E Are you sure?!?! How can you know? -> EQ|Q
Raku
<lang perl6>use Lingua::EN::Sentence;
my $paragraph = q:to/PARAGRAPH/; hi there, how are you today? I'd like to present to you the washing machine 9001. You have been nominated to win one of these! Just make sure you don't break it PARAGRAPH
say join '|', $paragraph.&get_sentences.map: {
/(<:punct>)$/; given $0 { when '!' { 'E' }; when '?' { 'Q' }; when '.' { 'S' }; default { 'N' }; }
}</lang>
- Output:
Q|S|E|N