LOLCODE String Parsing

Предположим, что у меня есть строка, которая принимает форму "## ##" в stdin, которую я хочу прочитать, например. "15 16". Это достаточно просто:

I HAS A STRINGY
GIMMEH STRINGY

Это захватывает всю строку из stdin и сохраняет ее в строке-er, извините, YARN-называется STRINGY.

Как я могу извлечь два целых числа в строке? Я хочу иметь возможность хранить 15 и 16 в качестве целого числа (LULZ я MEANS NUMBR).

Ответ 1

Короткий ответ:

Вы не можете сделать это в LOLCODE 1.2.

Длинный ответ:

Поскольку нет функций YARN манипуляции и нет способа сделать a YARN чем-то вроде BUKKIT в предлагаемой спецификации 1.3 (после чего мы могли бы моделировать строку как символ BUKKIT), невозможно извлечь номера из такой строки.

Используя только спецификацию 1.2, мы все равно можем сделать эту работу, я думаю...

Так как конкатенация строк уже существует в 1.2 как SMOOSH ... MKAY, теоретически вы могли бы зарезервировать переменные str01 через str99, а затем...

IM IN YR readloop UPPIN YR throwawayvariable WILE BOTH OF NOT broken AN DIFFRINT currentyarn AN STRINGY
    str01, WTF?
        OMG "Z"
            str99 R str98
            str98 R str97
            str97 R str96
            ...
            str02 R str01
            str01 R ""
            GTFO
        OMG "Y"
            str01 R "Z";
            GTFO
        OMG "X"
            str01 R "Y";
            GTFO
        ...
        OMG "0"
            str01 R "1";
            GTFO
        OMG ""
            str01 R "0"
            GTFO
        OMGWTF
            I HAS A ERRORMSG
            ERRORMSG R SMOOSH "I DUNNO WAT U SAY, illegal character", str01 MKAY
            VISIBLE ERRORMSG
            broken R WIN
            GTFO
    OIC
    currentyarn R SMOOSH str01, str02, str03, str04, ..., str98, str99 MKAY
IM OUTTA YR readloop

Затем, получив NUMBRs...

NOT broken, O RLY? YA RLY
    yarnnumber R ""
    done R FAIL
    IM IN YR parseloop UPPIN YR otherthrowaway WILE NOT done
        EITHER OF BOTH SAEM str01 AN " " AN BOTH SAEM str01 AN "", O RLY? YA RLY
            number1 R 0
            DIFFRINT yarnnumber AN "", O RLY? YA RLY
                number1 R MAEK yarnnumber A NUMBR
            OIC
            done R WIN
        MEBBE DIFFRINT str01 AN ""
            yarnnumber R SMOOSH yarnnumber, str01 MKAY
        OIC
        str01 R str02
        str02 R str03
        str03 R str04
        ...
        str98 R str99
        str99 R ""
    IM OUTTA YR parseloop

    yarnnumber R ""
    done R FAIL
    IM IN YR parseloop2 UPPIN YR otherthrowaway2 WILE NOT done
        EITHER OF BOTH SAEM str01 AN " " AN BOTH SAEM str01 AN "", O RLY? YA RLY
            number2 R 0
            DIFFRINT yarnnumber AN "", O RLY? YA RLY
                number2 R MAEK yarnnumber A NUMBR
            OIC
            done R WIN
        MEBBE DIFFRINT str01 AN ""
            yarnnumber R SMOOSH yarnnumber, str01 MKAY
        OIC
        str01 R str02
        str02 R str03
        str03 R str04
        ...
        str98 R str99
        str99 R ""
    IM OUTTA YR parseloop2
OIC

И, наконец, что вы хотели с ними делать.

I HAZ A result
result R SUM OF number1 AN number2
VISIBLE result

Для ... заполните остальные инструкции, которые используют переменные str##.

Если вы собираетесь использовать это, я рекомендую использовать что-то для создания LOLCODE для вас, писать это вручную просто невозможно. Особенно, если вам нужно поддерживать более длинные строки ввода, например, 255 или 1024 символа.