: s, ( c-addr u -- )
HERE SWAP DUP ALLOT MOVE ;
: <s-table ( "ccc<eol" -- a-addr u )
SOURCE >IN @ /STRING
DUP ALLOCATE ABORT" LASHPED KUPI ESCHO PAMYATI"
SWAP 2DUP 2>R MOVE
0 0
BEGIN
REFILL 0= ABORT" UNEXPECTED END OF FILE"
SOURCE 2R@ COMPARE
WHILE
HERE SOURCE TUCK s,
REPEAT
SOURCE NIP >IN !
2R> DROP FREE ABORT" SOMETHING WENT WRNOG"
HERE >R
0 >R
BEGIN
OVER
WHILE
R> 1+ >R
, ,
REPEAT
2DROP
R> R> SWAP ;
<s-table EOT
зачемзачем
малост
мног
питух
макак
гост
гуест
борманд
инканус
сём
рустер
кококок
кудкудах
сертор
нидлесс
столл
ворец
кобен
генерат
рандом
анскилл
EOT
2CONSTANT prefixes
<s-table EOT
ин
ов
ев
идзе
ян
ман
ых
EOT
2CONSTANT suffixes
: generate ( n1 n2 -- c-addr u )
prefixes DROP SWAP 2 CELLS * + 2@ >R PAD R@ MOVE
suffixes DROP SWAP 2 CELLS * + 2@ PAD R@ + SWAP DUP R> + >R MOVE
PAD R> ;
: run
prefixes NIP 0
?DO
suffixes NIP 0
?DO
I J generate TYPE CR
LOOP
LOOP ;
run
BYE
OiBzLCAgKCBjLWFkZHIgdSAtLSApCiAgICBIRVJFIFNXQVAgRFVQIEFMTE9UIE1PVkUgOwoKOiA8cy10YWJsZSAgKCAiY2NjPGVvbCIgLS0gYS1hZGRyIHUgKQogICAgU09VUkNFID5JTiBAIC9TVFJJTkcKICAgIERVUCBBTExPQ0FURSBBQk9SVCIgTEFTSFBFRCBLVVBJIEVTQ0hPIFBBTVlBVEkiCiAgICBTV0FQIDJEVVAgMj5SIE1PVkUKICAgIDAgMAogICAgQkVHSU4KICAgICAgICBSRUZJTEwgMD0gQUJPUlQiIFVORVhQRUNURUQgRU5EIE9GIEZJTEUiCiAgICAgICAgU09VUkNFIDJSQCBDT01QQVJFCiAgICBXSElMRQogICAgICAgIEhFUkUgU09VUkNFIFRVQ0sgcywKICAgIFJFUEVBVAogICAgU09VUkNFIE5JUCA+SU4gIQogICAgMlI+IERST1AgRlJFRSBBQk9SVCIgU09NRVRISU5HIFdFTlQgV1JOT0ciCiAgICBIRVJFID5SCiAgICAwID5SCiAgICBCRUdJTgogICAgICAgIE9WRVIKICAgIFdISUxFCiAgICAgICAgUj4gMSsgPlIKICAgICAgICAsICwKICAgIFJFUEVBVAogICAgMkRST1AKICAgIFI+IFI+IFNXQVAgOwoKPHMtdGFibGUgRU9UCtC30LDRh9C10LzQt9Cw0YfQtdC8CtC80LDQu9C+0YHRggrQvNC90L7QswrQv9C40YLRg9GFCtC80LDQutCw0LoK0LPQvtGB0YIK0LPRg9C10YHRggrQsdC+0YDQvNCw0L3QtArQuNC90LrQsNC90YPRgQrRgdGR0LwK0YDRg9GB0YLQtdGACtC60L7QutC+0LrQvtC6CtC60YPQtNC60YPQtNCw0YUK0YHQtdGA0YLQvtGACtC90LjQtNC70LXRgdGBCtGB0YLQvtC70LsK0LLQvtGA0LXRhgrQutC+0LHQtdC9CtCz0LXQvdC10YDQsNGCCtGA0LDQvdC00L7QvArQsNC90YHQutC40LvQuwpFT1QKMkNPTlNUQU5UIHByZWZpeGVzCgo8cy10YWJsZSBFT1QK0LjQvQrQvtCyCtC10LIK0LjQtNC30LUK0Y/QvQrQvNCw0L0K0YvRhQpFT1QKMkNPTlNUQU5UIHN1ZmZpeGVzCgo6IGdlbmVyYXRlICAoIG4xIG4yIC0tIGMtYWRkciB1ICkKICAgIHByZWZpeGVzIERST1AgU1dBUCAyIENFTExTICogKyAyQCA+UiBQQUQgUkAgTU9WRQogICAgc3VmZml4ZXMgRFJPUCBTV0FQIDIgQ0VMTFMgKiArIDJAIFBBRCBSQCArIFNXQVAgRFVQIFI+ICsgPlIgTU9WRQogICAgUEFEIFI+IDsKCjogcnVuCiAgICBwcmVmaXhlcyBOSVAgMAogICAgP0RPCiAgICAgICAgc3VmZml4ZXMgTklQIDAKICAgICAgICA/RE8KICAgICAgICAgICAgSSBKIGdlbmVyYXRlIFRZUEUgQ1IKICAgICAgICBMT09QCiAgICBMT09QIDsKCnJ1bgpCWUUK