2015-04-21 16 views
11

Supponiamo di avere una stringa che assume il formato "## ##" in stdin che voglio leggere, ad es. "15 16". Questo è abbastanza semplice:LOLCODE Parsing

I HAS A STRINGY 
GIMMEH STRINGY 

che afferra tutta la linea da stdin e lo memorizza nella stringa-er, mi scusi, FILATO -definito STRINGY.

Come fare per estrarre i due numeri interi nella stringa? Voglio essere in grado di memorizzare 15 e 16 ciascuno come un numero intero (LULZ I MEANS NUMBR).

+5

Se si rispetta la mia domanda, è possibile fornire un commento costruttivo? Nonostante la stupidità di LOLCODE, i linguaggi esoterici sono un modo stimolante per esercitarsi con le tecniche di codifica. – dpwilson

+1

Ho aggiornato la risposta, dopo aver ricevuto i voti positivi ho controllato di nuovo e c'è un bug in esso - ho dovuto usare 'DIFFRINT' invece di' BOTH SAEM' per verificare se è necessario aggiungere un carattere. – Pimgd

risposta

15

Risposta breve:

Non si può fare questo in LOLCODE 1.2.

Risposta lunga:

Poiché non vi sono YARN funzioni di manipolazione e non c'è modo per lanciare un YARN a qualcosa come un BUKKIT nella proposta specifica 1.3 (dopo di che potremmo simulare una stringa come un BUKKIT di caratteri), non è possibile estrarre numeri da una stringa del genere.

Utilizzando solo il 1,2 specifiche, possiamo ancora fare questo lavoro, immagino ...

Dal concatenazione di stringhe esiste già in 1.2 come SMOOSH ... MKAY, si potrebbe, in teoria, le variabili di riserva str01 attraverso str99, e poi ...

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 

successivo, ottenendo i 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 

E, infine, che cosa mai si volevo fare con loro.

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

Per ..., compilare i restanti dichiarazioni che fanno uso delle variabili str##.

Se si utilizza questo, si consiglia di utilizzare qualcosa per generare il LOLCODE per te, la scrittura a mano non è fattibile. Soprattutto se devi supportare linee di input più lunghe come 255 o 1024 caratteri.

+3

Wow, risposta molto dettagliata, grazie! – dpwilson