XXXX redacted: Difference between revisions
Content deleted Content added
Added Ada solution |
Initial FutureBasic task solution added |
||
Line 777: | Line 777: | ||
[p|s|o] Tom? Toms XXXXXX XXXXXX is in his XXXXXXX while playing the "XXXXXXX" brand XXXXXXXX. That's so XXX |
[p|s|o] Tom? Toms XXXXXX XXXXXX is in his XXXXXXX while playing the "XXXXXXX" brand XXXXXXXX. That's so XXX |
||
[p|i|o] XXX? XXXX XXXXXX XXXXXX is in his XXXXXXX while playing the "XXXXXXX" brand XXXXXXXX. That's so XXX</pre> |
[p|i|o] XXX? XXXX XXXXXX XXXXXX is in his XXXXXXX while playing the "XXXXXXX" brand XXXXXXXX. That's so XXX</pre> |
||
=={{header|FutureBasic}}== |
|||
<syntaxhighlight lang="futurebasic"> |
|||
include "NSLog.incl" |
|||
local fn Redact( string as CFStringRef, target as CFStringRef, whole as BOOL, icase as BOOL, over as BOOL ) as CFStringRef |
|||
ErrorRef err = NULL |
|||
CFStringRef w = @"p", i = @"s", o = @"n", result = NULL |
|||
NSRegularExpressionOptions options = 0 |
|||
CFStringRef pattern = fn RegularExpressionEscapedPattern( target ) |
|||
if whole == YES |
|||
pattern = fn StringWithFormat( @"%@%@%@", @"(?<![-[^[:punct:]\\s]])", pattern, @"(?![-[^[:punct:]\\s]])" ) |
|||
w = @"w" |
|||
end if |
|||
if over == YES |
|||
pattern = fn StringWithFormat( @"%@%@%@", @"[-[^[:punct:]\\s]]*", pattern, @"[-[^[:punct:]\\s]]*+" ) |
|||
o = @"o" |
|||
end if |
|||
if icase == YES Then options = NSRegularExpressionCaseInsensitive : i = @"i" |
|||
RegularExpressionRef regex = fn RegularExpressionWithPattern( pattern, options, @err ) |
|||
if err then NSLog( @"%@", fn ErrorLocalizedDescription( err ) ) |
|||
CFMutableStringRef mutStr = fn MutableStringWithString( string ) |
|||
CFArrayRef matches = fn RegularExpressionMatches( regex, mutStr, 0, fn CFRangeMake( 0, len( mutStr ) ) ) |
|||
long x, count = len(matches) |
|||
for x = 0 to count - 1 |
|||
CFRange matchRange = fn ValueRange( fn ObjectValueForKey( matches[x], @"range" ) ) |
|||
MutableStringReplaceOccurrencesOfString( mutStr, @".(?:\\u200d.)*+", @"X", NSRegularExpressionSearch, matchRange ) |
|||
next |
|||
result = fn StringWithFormat( @"[%@|%@|%@] %@", w, i, o, mutStr ) |
|||
end fn = result |
|||
CFStringRef tomTest |
|||
tomTest = @"Tom? Toms bottom tomato is in his stomach while playing the \"Tom-tom\" brand tom-toms. That's so tom." |
|||
NSLog( @"Test string:\n%@\n\nRedact 'Tom':", tomTest ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"Tom", YES, NO, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"Tom", YES, YES, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"Tom", NO, NO, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"Tom", NO, YES, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"Tom", NO, NO, YES ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"Tom", NO, YES, YES ) ) |
|||
NSLog( @"\nRedact 'tom':" ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"tom", YES, NO, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"tom", YES, YES, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"tom", NO, NO, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"tom", NO, YES, NO ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"tom", NO, NO, YES ) ) |
|||
NSLog( @"%@", fn Redact( tomTest, @"tom", NO, YES, YES ) ) |
|||
NSLogSetFont( fn FontWithName( @"Menlo", 18.0 ) ) |
|||
NSLog( @"\n 🧑 👨 🧔 👨👩👦" ) |
|||
NSLog( @"Redact '👨': %@", fn Redact( @"🧑 👨 🧔 👨👩👦", @"👨", YES, YES, YES ) ) |
|||
NSLog( @"Redact '👨👩👦': %@", fn Redact( @"🧑 👨 🧔 👨👩👦", @"👨👩👦", YES, YES, YES ) ) |
|||
HandleEvents |
|||
</syntaxhighlight> |
|||
{{output}} |
|||
<pre> |
|||
Test string: |
|||
Tom? Toms bottom tomato is in his stomach while playing the "Tom-tom" brand tom-toms. That's so tom. |
|||
Redact 'Tom': |
|||
[w|s|n] XXX? Toms bottom tomato is in his stomach while playing the "Tom-tom" brand tom-toms. That's so tom. |
|||
[w|i|n] XXX? Toms bottom tomato is in his stomach while playing the "Tom-tom" brand tom-toms. That's so XXX. |
|||
[p|s|n] XXX? XXXs bottom tomato is in his stomach while playing the "XXX-tom" brand tom-toms. That's so tom. |
|||
[p|i|n] XXX? XXXs botXXX XXXato is in his sXXXach while playing the "XXX-XXX" brand XXX-XXXs. That's so XXX. |
|||
[p|s|o] XXX? XXXX bottom tomato is in his stomach while playing the "XXXXXXX" brand tom-toms. That's so tom. |
|||
[p|i|o] XXX? XXXX XXXXXX XXXXXX is in his XXXXXXX while playing the "XXXXXXX" brand XXXXXXXX. That's so XXX. |
|||
Redact 'tom': |
|||
[w|s|n] Tom? Toms bottom tomato is in his stomach while playing the "Tom-tom" brand tom-toms. That's so XXX. |
|||
[w|i|n] XXX? Toms bottom tomato is in his stomach while playing the "Tom-tom" brand tom-toms. That's so XXX. |
|||
[p|s|n] Tom? Toms botXXX XXXato is in his sXXXach while playing the "Tom-XXX" brand XXX-XXXs. That's so XXX. |
|||
[p|i|n] XXX? XXXs botXXX XXXato is in his sXXXach while playing the "XXX-XXX" brand XXX-XXXs. That's so XXX. |
|||
[p|s|o] Tom? Toms XXXXXX XXXXXX is in his XXXXXXX while playing the "XXXXXXX" brand XXXXXXXX. That's so XXX. |
|||
[p|i|o] XXX? XXXX XXXXXX XXXXXX is in his XXXXXXX while playing the "XXXXXXX" brand XXXXXXXX. That's so XXX. |
|||
🧑 👨 🧔 👨👩👦 |
|||
Redact '👨': [w|i|o] 🧑 X 🧔 👨👩👦 |
|||
Redact '👨👩👦': [w|i|o] 🧑 👨 🧔 X |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |