2015-04-21 4 views
11

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

I HAS A STRINGY 
GIMMEH STRINGY 

Это захватывает всю линию от stdin и сохраняет его в строковый-эр, простите, ПРЯЖА -called STRINGY.

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

+5

Если вы отрицаете мой вопрос, не могли бы вы представить конструктивный комментарий? Несмотря на глупость LOLCODE, эзотерические языки - это сложный способ практиковать методы кодирования. – dpwilson

+1

Я обновил ответ, получив upvotes, я проверил его снова, и в нем есть ошибка - ему пришлось использовать 'DIFFRINT' вместо' BOTH SAEM' для проверки необходимости добавления символа. – Pimgd

ответ

15

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

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

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

Как нет YARN функции манипулирования и нет возможности бросить 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 символа.

+3

Ничего себе, очень подробный ответ, спасибо! – dpwilson