// package whatever; // don't place package name!
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.Map ;
import java.util.stream.Collectors ;
/*
Write a program that parses a sentence and replaces each word with the following:
1) The first letter of the word
2) The number of distinct characters between first and last character
3) The last letter of the word.
For example, Smooth would become S3h.
Words are separated by spaces or non-alphabetic characters and these separators should be maintained in their original form and location in the answer.
A few of the things we will be looking at is accuracy, efficiency, solution completeness.
*/
class MyCode {
char [ ] characters = input.toCharArray ( ) ;
StringBuilder sentence = new StringBuilder( ) ;
List< Character> current = new ArrayList<> ( ) ;
for ( char character : characters) {
sentence.append ( converterWord( current) ) .append ( character) ;
current = new ArrayList<> ( ) ;
} else {
current.add ( character) ;
}
}
return current.isEmpty ( ) ? sentence.toString ( ) : sentence.append ( converterWord( current) ) .toString ( ) ;
}
private static String converterWord
( List
< Character
> word
) { if ( word.size ( ) <= 2 ) {
return word.
stream ( ) .
map ( String :: valueOf
) .
collect ( Collectors.
joining ( ) ) ; } else {
Map
< Character , Character
> characters
= new HashMap
<> ( ) ; for ( int i= 1 ; i< word.size ( ) - 1 ; i++ ) {
characters.put ( word.get ( i) , word.get ( i) ) ;
}
return String .
valueOf ( word.
get ( 0 ) ) + characters.
size ( ) + word.
get ( word.
size ( ) - 1 ) ; }
}
public static void main
( String [ ] args
) { String output
= wordParser
( "Creativity is thinking-up new things. Innovation is doing new things!" ) ; // expected: C6y is t4g-up n1w t4s. I6n is d3g n1w t4s!
String output2
= wordParser
( "Smooth" ) ; }
}
Ly8gcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lIQoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLk1hcDsKaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKCi8qCldyaXRlIGEgcHJvZ3JhbSB0aGF0IHBhcnNlcyBhIHNlbnRlbmNlIGFuZCByZXBsYWNlcyBlYWNoIHdvcmQgd2l0aCB0aGUgZm9sbG93aW5nOiAKMSkgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgd29yZAoyKSBUaGUgbnVtYmVyIG9mIGRpc3RpbmN0IGNoYXJhY3RlcnMgYmV0d2VlbiBmaXJzdCBhbmQgbGFzdCBjaGFyYWN0ZXIKMykgVGhlIGxhc3QgbGV0dGVyIG9mIHRoZSB3b3JkLiAKRm9yIGV4YW1wbGUsIFNtb290aCB3b3VsZCBiZWNvbWUgUzNoLiAKV29yZHMgYXJlIHNlcGFyYXRlZCBieSBzcGFjZXMgb3Igbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBhbmQgdGhlc2Ugc2VwYXJhdG9ycyBzaG91bGQgYmUgbWFpbnRhaW5lZCBpbiB0aGVpciBvcmlnaW5hbCBmb3JtIGFuZCBsb2NhdGlvbiBpbiB0aGUgYW5zd2VyLiAKQSBmZXcgb2YgdGhlIHRoaW5ncyB3ZSB3aWxsIGJlIGxvb2tpbmcgYXQgaXMgYWNjdXJhY3ksIGVmZmljaWVuY3ksIHNvbHV0aW9uIGNvbXBsZXRlbmVzcy4gCiovCmNsYXNzIE15Q29kZSB7CiAgcHVibGljIHN0YXRpYyBTdHJpbmcgd29yZFBhcnNlcihTdHJpbmcgaW5wdXQpIHsKICAgIGNoYXJbXSBjaGFyYWN0ZXJzID0gaW5wdXQudG9DaGFyQXJyYXkoKTsKICAgIFN0cmluZ0J1aWxkZXIgc2VudGVuY2UgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgTGlzdDxDaGFyYWN0ZXI+IGN1cnJlbnQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgIGZvciAoY2hhciBjaGFyYWN0ZXIgOiBjaGFyYWN0ZXJzKSB7CiAgICAgIGlmKCFDaGFyYWN0ZXIuaXNBbHBoYWJldGljKGNoYXJhY3RlcikpewogICAgICAgIHNlbnRlbmNlLmFwcGVuZChjb252ZXJ0ZXJXb3JkKGN1cnJlbnQpKS5hcHBlbmQoY2hhcmFjdGVyKTsKICAgICAgICBjdXJyZW50ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgIH1lbHNlewogICAgICAgIGN1cnJlbnQuYWRkKGNoYXJhY3Rlcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjdXJyZW50LmlzRW1wdHkoKSA/IHNlbnRlbmNlLnRvU3RyaW5nKCk6IHNlbnRlbmNlLmFwcGVuZChjb252ZXJ0ZXJXb3JkKGN1cnJlbnQpKS50b1N0cmluZygpOwogIH0KICAKICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29udmVydGVyV29yZChMaXN0PENoYXJhY3Rlcj4gd29yZCl7CiAgICBpZiAod29yZC5zaXplKCkgPD0gMil7CiAgICAgIHJldHVybiB3b3JkLnN0cmVhbSgpLm1hcChTdHJpbmc6OnZhbHVlT2YpLmNvbGxlY3QoQ29sbGVjdG9ycy5qb2luaW5nKCkpOwogICAgfSBlbHNlIHsKICAgICAgTWFwPENoYXJhY3RlciwgQ2hhcmFjdGVyPiBjaGFyYWN0ZXJzID0gbmV3IEhhc2hNYXA8PigpOwogICAgICBmb3IoaW50IGk9MTsgaTx3b3JkLnNpemUoKSAtIDE7IGkrKyl7CiAgICAgICAgY2hhcmFjdGVycy5wdXQod29yZC5nZXQoaSksIHdvcmQuZ2V0KGkpKTsKICAgICAgfQogICAgICByZXR1cm4gU3RyaW5nLnZhbHVlT2Yod29yZC5nZXQoMCkpICsgY2hhcmFjdGVycy5zaXplKCkgKyB3b3JkLmdldCh3b3JkLnNpemUoKSAtIDEpOwogICAgfQogIH0KICAKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICBTdHJpbmcgb3V0cHV0ID0gd29yZFBhcnNlcigiQ3JlYXRpdml0eSBpcyB0aGlua2luZy11cCBuZXcgdGhpbmdzLiBJbm5vdmF0aW9uIGlzIGRvaW5nIG5ldyB0aGluZ3MhIik7CgkJU3lzdGVtLm91dC5wcmludGxuKG91dHB1dCk7CiAgICAvLyBleHBlY3RlZDogQzZ5IGlzIHQ0Zy11cCBuMXcgdDRzLiBJNm4gaXMgZDNnIG4xdyB0NHMhCiAgICBTdHJpbmcgb3V0cHV0MiA9IHdvcmRQYXJzZXIoIlNtb290aCIpOwogICAgU3lzdGVtLm91dC5wcmludGxuKG91dHB1dDIpOwoJfQp9