#include <iostream>
#include <algorithm>
#include <random>
#include <sstream>
#include <cctype>
#include <vector>
namespace Utility
{
bool only_contains_spaces(std::string s)
{
return all_of(s.begin(), s.end(), isspace);
}
int random_number(int min, int max)
{
std::random_device rd;
std::uniform_int_distribution<int> dist(min, max);
return dist(rd);
}
std::string random_string(int length = 10)
{
std::string s = "";
for (int i = 0; i < length; ++i)
s += (char)random_number(32, 126);
return s;
}
};
int main()
{
std::string stsf;
std::getline(std::cin, stsf);
std::cout << "string to search for: " << stsf << std::endl << std::endl;
int index = 0;
std::vector<std::string> words;
std::string cursorline = "";
int column = 0;
for (int i = 1; i <= 100; i++)
{
std::string input = Utility::random_string(20);
std::cout << input << " ";
if (index < stsf.size())
{
auto f = std::find(input.begin(), input.end(), stsf[index]);
if (f != input.end())
{
std::string tilda = std::string((int)(f - input.begin()), '~');
cursorline += tilda + std::string("^") + std::string(20 - (int)(f - input.begin()), ' ') ;
input = std::string(20 - (int)(f - input.begin()), ' ') + input;
column = std::string(20 - (int)(f - input.begin()), ' ').size() + (int)(f - input.begin());
words.push_back(input);
index++;
} else
cursorline += std::string(20, ' ') + std::string(" ");
}
if (i % 3 == 0)
{
std::cout << std::endl;
if (!Utility::only_contains_spaces(cursorline))
{
std::cout << cursorline << std::endl;
}
cursorline = "";
}
}
std::cout << std::endl << std::endl;
std::cout << std::string(column, '-') << std::string("v") << std::endl;
for (const auto& s : words)
std::cout << s << std::endl;
std::cout << std::string(column, '-') << std::string("^") << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPHZlY3Rvcj4KCm5hbWVzcGFjZSBVdGlsaXR5CnsKICAgIAogICAgYm9vbCBvbmx5X2NvbnRhaW5zX3NwYWNlcyhzdGQ6OnN0cmluZyBzKQogICAgewogICAgICAgIHJldHVybiBhbGxfb2Yocy5iZWdpbigpLCBzLmVuZCgpLCBpc3NwYWNlKTsKICAgIH0KICAgIAogICAgaW50IHJhbmRvbV9udW1iZXIoaW50IG1pbiwgaW50IG1heCkKICAgIHsKICAgICAgICBzdGQ6OnJhbmRvbV9kZXZpY2UgcmQ7CiAgICAgICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PiBkaXN0KG1pbiwgbWF4KTsKICAgICAgICByZXR1cm4gZGlzdChyZCk7CiAgICB9CiAgICAKICAgIHN0ZDo6c3RyaW5nIHJhbmRvbV9zdHJpbmcoaW50IGxlbmd0aCA9IDEwKQogICAgewogICAgICAgIHN0ZDo6c3RyaW5nIHMgPSAiIjsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICBzICs9IChjaGFyKXJhbmRvbV9udW1iZXIoMzIsIDEyNik7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHM7CiAgICB9Cgp9OwoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnN0cmluZyBzdHNmOwogICAgc3RkOjpnZXRsaW5lKHN0ZDo6Y2luLCBzdHNmKTsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJzdHJpbmcgdG8gc2VhcmNoIGZvcjogIiA8PCBzdHNmIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIGludCBpbmRleCA9IDA7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gd29yZHM7CiAgICBzdGQ6OnN0cmluZyBjdXJzb3JsaW5lID0gIiI7CiAgICBpbnQgY29sdW1uID0gMDsKICAgIAogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gMTAwOyBpKyspCiAgICB7CiAgICAgICAgc3RkOjpzdHJpbmcgaW5wdXQgPSBVdGlsaXR5OjpyYW5kb21fc3RyaW5nKDIwKTsKICAgIAogICAgICAgIHN0ZDo6Y291dCA8PCBpbnB1dCA8PCAiICI7CiAgICAgICAgCiAgICAgICAgaWYgKGluZGV4IDwgc3RzZi5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgICBhdXRvIGYgPSBzdGQ6OmZpbmQoaW5wdXQuYmVnaW4oKSwgaW5wdXQuZW5kKCksIHN0c2ZbaW5kZXhdKTsKICAgICAgICAgICAgaWYgKGYgIT0gaW5wdXQuZW5kKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRpbGRhID0gc3RkOjpzdHJpbmcoKGludCkoZiAtIGlucHV0LmJlZ2luKCkpLCAnficpOwogICAgICAgICAgICAgICAgY3Vyc29ybGluZSArPSB0aWxkYSArIHN0ZDo6c3RyaW5nKCJeIikgKyBzdGQ6OnN0cmluZygyMCAtIChpbnQpKGYgLSBpbnB1dC5iZWdpbigpKSwgJyAnKSA7CgogICAgICAgICAgICAgICAgaW5wdXQgPSBzdGQ6OnN0cmluZygyMCAtIChpbnQpKGYgLSBpbnB1dC5iZWdpbigpKSwgJyAnKSArIGlucHV0OwogICAgICAgICAgICAgICAgY29sdW1uID0gc3RkOjpzdHJpbmcoMjAgLSAoaW50KShmIC0gaW5wdXQuYmVnaW4oKSksICcgJykuc2l6ZSgpICsgKGludCkoZiAtIGlucHV0LmJlZ2luKCkpOwoKICAgICAgICAgICAgICAgIHdvcmRzLnB1c2hfYmFjayhpbnB1dCk7CiAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgIGN1cnNvcmxpbmUgKz0gc3RkOjpzdHJpbmcoMjAsICcgJykgKyBzdGQ6OnN0cmluZygiICIpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoaSAlIDMgPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIGlmICghVXRpbGl0eTo6b25seV9jb250YWluc19zcGFjZXMoY3Vyc29ybGluZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBjdXJzb3JsaW5lIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJzb3JsaW5lID0gIiI7CiAgICAgICAgfQogICAgfQogICAgCiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgc3RkOjpjb3V0IDw8IHN0ZDo6c3RyaW5nKGNvbHVtbiwgJy0nKSA8PCBzdGQ6OnN0cmluZygidiIpIDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgZm9yIChjb25zdCBhdXRvJiBzIDogd29yZHMpCiAgICAgICAgc3RkOjpjb3V0IDw8IHMgPDwgc3RkOjplbmRsOwogICAgICAgIAogICAgc3RkOjpjb3V0IDw8IHN0ZDo6c3RyaW5nKGNvbHVtbiwgJy0nKSA8PCBzdGQ6OnN0cmluZygiXiIpIDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiAwOwp9
string to search for: Charlie bit me.
%MLB3Xf"P4X~7xlO?t&\ : !?;&D-:JFXh\g=5d.0 $oh[ZuTzQ4n[k&zI+4oO
S@{RL@w6.(AYu!j)p$]\ 1QQkpb>9rl;Rg21|@V@* r.S$~"S08+3ALYsK_umi
Q8z@K!En@Do^s-E%h&f- Z}J!]k9`vm2bLIo=5h"j >d6znBdY#zt$6z1LHz|G
RNTI.TWWPd#\I^*05kZ: ,O8oB1*d)uVf`Ds.#go> [V4rHiB.CDN7MS<K[i%R
~~~~~~~~^
cNMVOFo5b\79@*S6TVp' }02I+LRX=%g*Z7$576QP I=MLiCBLmz%*D^\UMEY3
RmV W#:v<Z3o.CUNn;ZN '@p4tyT2a)B/mn+IQBoB -G`<g)I+^V7ykOI0evu+
W X~&$0fys,))dS6+'DR eLXGAv6tz$R`%Cm!qG}m x";z}0*(~L2$v9dmw+^-
mV^0'T.h+[InozBNFg[h 9dDVUn,$D5bpaF^I`BRG "FNqCP%sj 4oMnz^^=VM
~~~~~~~^ ~~~~~~~~~~~~^
B>aNav;J(PP>_u:Ll?J4 4vIke/i>-Cs~2WNV2C.X ;kS.X\Mnm"8i=mTyp|Lm
QTSYI+ICYh%OXjNSEqR< no9;T2<x6fzg"Sc_/Gc\ PQ=H6g]Lm9<;9r%T/tgg
~~~~~~~~~~~~~^
'!vdxuU8Ms}3NSb8"(fs ,;yg(tIy#ofQYSwnoDD0 R?m6m&Pd;!*8c^P>9tw*
^:u5MVmZ8 =1qKP3X6hy g>`Gha5QNG/2VcUpV:|w 0t+k:?{n7eDH~q"~iq.%
47kTRp89!C|Oki |cKU[ rAZ?FwNu hPF%Ut(!}:u F[P= \}MH'F|z~*(fxE*
igPve&fn{XZNI58[x0) 8lK*i/uPB1?:+0D7%yw{ %MEsGHmTkhCbF%:Z^9|T
~^
b<vtLf)_u?gE|~"-%77; =$H*Pre.f,O1o#b D:DM *RIuRBT? yS$- Kwq3F
N~48XvZMbY*Lj0q@)*<y ?x8`joY]@AmW{h{%n110 WwY@iV.%F.jOG5Ipq;7H
~~~~^
TI:+UUCDTw+DT `cIAq+ MfGG#yR[Sg?b&+8'H'Ed ~y2S=bSM8_w!8u"1m#?.
]}^DUV-qs$N]m$g#= k@ 1s3& 7;pxm(b15{5Ac=v rv&w*f[}T. 'ql;. FKV
P[iI>t/f?u*Lg/*bQ.Uz @;2\)JxP+a{`P`:umChf W(DQ/~{|CJC0d@]3T_`c
o~QC/%L~Z+u{,tRQX:n_ .&MAe`S8~*%v$+QV:aX- +Ly2/mE 49`Z+"EmWm'b
~~~~^ ~~~~~~~^
%>enKdi*tH !\rF6okms Js2g<I^4s-~h'',IX_Yp C:Wt&-?jPbb/*P`ETAm$
~~~~~~~~~^
{3Q-AN< Cx%8-pj{W'YD mL$@M`8Ms&r:zlP^gGel C3@hNF_SY+gsNZ%~oe')
[ILMaNi]ytvE~yEr[0(! S.~IQ=w[-k]@9h2nh5o> Cz2B2DS/^zUDK3.-3.k"
~~~~~~^
|1Q<J7=22<5uik,kFu*b [6.6hj:a1Ept|H]<E(mR 6s0TNT,tY+ w=)/<9dtM
~~~~~~~~~~~^ ~~~~~~~~~~^
-_H[8,2}Nd@!eA4lzQ<I H?~FE7Ps1ThOU(:+@D9y d5^Eu0ZGmbZ%,V<#Ut:2
~~~~~~~~^
(SclZJDU}c}5tkLIF!xH r?g%K$?3`-CWSO<5!(#q `{f^.:?AH*#-g3/0p2i?
8rc-LPKrD?;q.Qn>~cq) ?*Awj3&&*&eP~lE9zuLj 7;B}ty<Cjfk/nL`T'Gfw
~~~~~~~~~~^
t$t>{>zPN$9`<4dsRhsY T5 q]L(?ZFhyg1t0!]`V `s3*g8_jr6g-P'\!@Y$2
t5$&_A&Xt(f]}+/w4<=^ 1BNju5@-ukx5i?:R(xv@ (O-kC,8{}<9!DA\z(@8g
K*Pu-U_A!lO-je1;lV@( >9c5fe>1-54Dg!9%C9'm zgenQw;\.K8y#0M4w ;F
~~~~~~~~^
oHIWoxsUcJk[Z|Q<;hH3 3CZG33x5>3w*nZslNP`1 XyATG9@ o:2B$PZ:<L8]
#`Q(QJ=~2]'V4p# ^so' W.@H/[D*(y6aqK!\&SK9 gAoqyk6mcs^dt5^:EhzL
E7%$M41I}+e/n%s{ v=0 KBQo3._9RqXCu"#yJx]L X`M'='i.Y}qG;(C<.u)u
2\yiMy)i]fj}=WEi'zk@
--------------------v
[V4rHiB.CDN7MS<K[i%R
mV^0'T.h+[InozBNFg[h
9dDVUn,$D5bpaF^I`BRG
PQ=H6g]Lm9<;9r%T/tgg
8lK*i/uPB1?:+0D7%yw{
WwY@iV.%F.jOG5Ipq;7H
.&MAe`S8~*%v$+QV:aX-
+Ly2/mE 49`Z+"EmWm'b
C:Wt&-?jPbb/*P`ETAm$
[ILMaNi]ytvE~yEr[0(!
[6.6hj:a1Ept|H]<E(mR
6s0TNT,tY+ w=)/<9dtM
d5^Eu0ZGmbZ%,V<#Ut:2
?*Awj3&&*&eP~lE9zuLj
zgenQw;\.K8y#0M4w ;F
--------------------^