emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* evaluate cpp snippet in org babel with default includes and customized entry point
@ 2017-09-16  7:50 Amos Bird
  2017-09-16  8:33 ` Thierry Banel
  2017-09-16  8:46 ` Thierry Banel
  0 siblings, 2 replies; 10+ messages in thread
From: Amos Bird @ 2017-09-16  7:50 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 731 bytes --]

#+OPTIONS: latex:t toc:nil H:3

Hi

I'd like to write a blog about leetcode solutions in c++. How can I evaluate those c++ code snippet using org babel?

* Array

** Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].


#+BEGIN_SRC cpp
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {

    }
};
#+END_SRC

#+RESULTS:


I need to add default headers and pass arguments to the entry class.

--
Amos Bird
amosbird@gmail.com

[-- Attachment #2.1: Type: text/html, Size: 2212 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  7:50 evaluate cpp snippet in org babel with default includes and customized entry point Amos Bird
@ 2017-09-16  8:33 ` Thierry Banel
  2017-09-16  8:37   ` Amos Bird
  2017-09-16  8:46 ` Thierry Banel
  1 sibling, 1 reply; 10+ messages in thread
From: Thierry Banel @ 2017-09-16  8:33 UTC (permalink / raw)
  To: emacs-orgmode

A starting point could be as follows.
Type C-c C-c to evaluate.
Type C-c C-v v to expand the source.

#+BEGIN_SRC C++ :flags -std=c++11

#include <vector>
#include <iostream>
using namespace std;

class Solution {
public:
     vector<int> twoSum(vector<int>& nums, int target) {
       vector<int> result;
       result.push_back(0);
       result.push_back(1);
       return result;
     }
};

vector<int> nums = {2, 7, 11, 15};
int target = 9;

int main()
{
   Solution solution;
   for (int x : solution.twoSum(nums,target))
     cout<<x<<"\n";
}

#+END_SRC

#+RESULTS:
| 0 |
| 1 |



On 16/09/2017 09:50, Amos Bird wrote:
>
> Hi
>
> I'd like to write a blog about leetcode solutions in c++. How can I 
> evaluate those c++ code snippet using org babel?
>
>
>     1 Array
>
>
>       1.1 Two Sum
>
> Given an array of integers, return indices of the two numbers such 
> that they add up to a specific target.
>
> You may assume that each input would have exactly one solution, and 
> you may not use the same element twice.
>
> Example:
> Given nums = [2, 7, 11, 15], target = 9,
>
> Because nums[0] + nums[1] = 2 + 7 = 9,
> return [0, 1].
>
> |class  Solution  {
> public:
>      vector<int>  twoSum(vector<int>&nums,int  target)  {
>
>      }
> };
> |
>
> I need to add default headers and pass arguments to the entry class.
>
> –
> Amos Bird
> amosbird@gmail.com
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  8:33 ` Thierry Banel
@ 2017-09-16  8:37   ` Amos Bird
  2017-09-16  8:54     ` Thierry Banel
  0 siblings, 1 reply; 10+ messages in thread
From: Amos Bird @ 2017-09-16  8:37 UTC (permalink / raw)
  To: Thierry Banel; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1691 bytes --]

#+OPTIONS: latex:t toc:nil H:3

Thanks Thierry,

But I'd like to hide all those includes and the main function. I'm not sure if it's possible.

Thierry Banel <tbanelwebmin@free.fr> writes:

> A starting point could be as follows.
> Type C-c C-c to evaluate.
> Type C-c C-v v to expand the source.
>
> #+BEGIN_SRC C++ :flags -std=c++11
>
> #include <vector>
> #include <iostream>
> using namespace std;
>
> class Solution {
> public:
>     vector<int> twoSum(vector<int>& nums, int target) {
>       vector<int> result;
>       result.push_back(0);
>       result.push_back(1);
>       return result;
>     }
> };
>
> vector<int> nums = {2, 7, 11, 15};
> int target = 9;
>
> int main()
> {
>   Solution solution;
>   for (int x : solution.twoSum(nums,target))
>     cout<<x<<"\n";
> }
>
> #+END_SRC
>
> #+RESULTS:
> | 0 |
> | 1 |
>
>
>
> On 16/09/2017 09:50, Amos Bird wrote:
>>
>> Hi
>>
>> I'd like to write a blog about leetcode solutions in c++. How can I evaluate
>> those c++ code snippet using org babel?
>>
>>
>>     1 Array
>>
>>
>>       1.1 Two Sum
>>
>> Given an array of integers, return indices of the two numbers such that they
>> add up to a specific target.
>>
>> You may assume that each input would have exactly one solution, and you may
>> not use the same element twice.
>>
>> Example:
>> Given nums = [2, 7, 11, 15], target = 9,
>>
>> Because nums[0] + nums[1] = 2 + 7 = 9,
>> return [0, 1].
>>
>> |class  Solution  {
>> public:
>>      vector<int>  twoSum(vector<int>&nums,int  target)  {
>>
>>      }
>> };
>> |
>>
>> I need to add default headers and pass arguments to the entry class.
>>
>> –
>> Amos Bird
>> amosbird@gmail.com
>>


--
Amos Bird
amosbird@gmail.com

[-- Attachment #2.1: Type: text/html, Size: 2665 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  7:50 evaluate cpp snippet in org babel with default includes and customized entry point Amos Bird
  2017-09-16  8:33 ` Thierry Banel
@ 2017-09-16  8:46 ` Thierry Banel
  1 sibling, 0 replies; 10+ messages in thread
From: Thierry Banel @ 2017-09-16  8:46 UTC (permalink / raw)
  To: emacs-orgmode

Another starting point without hard-coding inputs:

#+name: NUMS
|  2 |
|  7 |
| 11 |
| 15 |

#+BEGIN_SRC C++ :flags -std=c++11 :var target=9 :var inputnums=NUMS

#include <vector>
#include <iostream>
using namespace std;

class Solution {
public:
     vector<int> twoSum(vector<int>& nums, int target) {
       vector<int> result;
       result.push_back(0);
       result.push_back(1);
       return result;
     }
};

int main()
{
   Solution solution;
   vector<int> nums;
   for (int* in : inputnums)
     nums.push_back(*in);
   for (int x : solution.twoSum(nums,target))
     cout<<x<<"\n";
}

#+END_SRC

#+RESULTS:
| 0 |
| 1 |


On 16/09/2017 09:50, Amos Bird wrote:
>
> Hi
>
> I'd like to write a blog about leetcode solutions in c++. How can I 
> evaluate those c++ code snippet using org babel?
>
>
>     1 Array
>
>
>       1.1 Two Sum
>
> Given an array of integers, return indices of the two numbers such 
> that they add up to a specific target.
>
> You may assume that each input would have exactly one solution, and 
> you may not use the same element twice.
>
> Example:
> Given nums = [2, 7, 11, 15], target = 9,
>
> Because nums[0] + nums[1] = 2 + 7 = 9,
> return [0, 1].
>
> |class  Solution  {
> public:
>      vector<int>  twoSum(vector<int>&nums,int  target)  {
>
>      }
> };
> |
>
> I need to add default headers and pass arguments to the entry class.
>
> –
> Amos Bird
> amosbird@gmail.com
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  8:37   ` Amos Bird
@ 2017-09-16  8:54     ` Thierry Banel
  2017-09-16  8:58       ` Amos Bird
  2017-09-16  9:05       ` Thierry Banel
  0 siblings, 2 replies; 10+ messages in thread
From: Thierry Banel @ 2017-09-16  8:54 UTC (permalink / raw)
  To: Amos Bird; +Cc: emacs-orgmode

You may use the :includes header parameter.

Also, you may omit the main() function. In this case, all your code will 
become the body of a default main function. Type C-c C-v v on the 
following example to understand what is happening.


#+BEGIN_SRC C++ :includes <iostream>
   std::cout<<"hello";
#+END_SRC

#+RESULTS:
: hello


On 16/09/2017 10:37, Amos Bird wrote:
>
> Thanks Thierry,
>
> But I'd like to hide all those includes and the main function. I'm not 
> sure if it's possible.
>
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  8:54     ` Thierry Banel
@ 2017-09-16  8:58       ` Amos Bird
  2017-09-16  9:11         ` Thierry Banel
  2017-09-16  9:05       ` Thierry Banel
  1 sibling, 1 reply; 10+ messages in thread
From: Amos Bird @ 2017-09-16  8:58 UTC (permalink / raw)
  To: Thierry Banel; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 914 bytes --]

#+OPTIONS: latex:t toc:nil H:3

Ok, i get the idea. So how can I customized the default code expansion so that it can directly evaluate this

    #+BEGIN_SRC cpp
      class Solution {
      public:
        vector<int> twoSum(vector<int>& nums, int target) {

        }
      };
    #+END_SRC

    #+RESULTS:


Thierry Banel <tbanelwebmin@free.fr> writes:

> You may use the :includes header parameter.
>
> Also, you may omit the main() function. In this case, all your code will become
> the body of a default main function. Type C-c C-v v on the following example to
> understand what is happening.
>
>
> #+BEGIN_SRC C++ :includes <iostream>
>   std::cout<<"hello";
> #+END_SRC
>
> #+RESULTS:
> : hello
>
>
> On 16/09/2017 10:37, Amos Bird wrote:
>>
>> Thanks Thierry,
>>
>> But I'd like to hide all those includes and the main function. I'm not sure if
>> it's possible.
>>
>>


--
Amos Bird
amosbird@gmail.com

[-- Attachment #2.1: Type: text/html, Size: 2188 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  8:54     ` Thierry Banel
  2017-09-16  8:58       ` Amos Bird
@ 2017-09-16  9:05       ` Thierry Banel
  1 sibling, 0 replies; 10+ messages in thread
From: Thierry Banel @ 2017-09-16  9:05 UTC (permalink / raw)
  To: emacs-orgmode

You may further hide the includes with a property drawer. An additional 
benefit is that those includes are shared among all babels under the 
same section.

* Example
   :PROPERTIES:
   :includes: <iostream> <vector>
   :END:

#+BEGIN_SRC C++
   std::cout<<"hello";
#+END_SRC

#+RESULTS:
: hello



On 16/09/2017 10:54, Thierry Banel wrote:
> You may use the :includes header parameter.
>
> Also, you may omit the main() function. In this case, all your code 
> will become the body of a default main function. Type C-c C-v v on the 
> following example to understand what is happening.
>
>
> #+BEGIN_SRC C++ :includes <iostream>
>   std::cout<<"hello";
> #+END_SRC
>
> #+RESULTS:
> : hello
>
>
> On 16/09/2017 10:37, Amos Bird wrote:
>>
>> Thanks Thierry,
>>
>> But I'd like to hide all those includes and the main function. I'm 
>> not sure if it's possible.
>>
>>
>
>
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  8:58       ` Amos Bird
@ 2017-09-16  9:11         ` Thierry Banel
  2017-09-16  9:14           ` Amos Bird
  0 siblings, 1 reply; 10+ messages in thread
From: Thierry Banel @ 2017-09-16  9:11 UTC (permalink / raw)
  To: emacs-orgmode@gnu.org >> Org Mode

[-- Attachment #1: Type: text/html, Size: 1829 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  9:11         ` Thierry Banel
@ 2017-09-16  9:14           ` Amos Bird
  2017-09-16  9:36             ` Thierry Banel
  0 siblings, 1 reply; 10+ messages in thread
From: Amos Bird @ 2017-09-16  9:14 UTC (permalink / raw)
  To: Thierry Banel; +Cc: emacs-orgmode@gnu.org >> Org Mode

[-- Attachment #1: Type: text/plain, Size: 603 bytes --]

#+OPTIONS: latex:t toc:nil H:3

Hmm, is it possible to customize babel's c++ backend to achieve this? I may also want a evaluation that submits the code to online judge and returns the result.

Thierry Banel <tbanelwebmin@free.fr> writes:

> You still need to explicitly call twoSum(), and that cannot be hidden.
>
> On 16/09/2017 10:58, Amos Bird wrote:
>
>  Ok, i get the idea. So how can I customized the default code expansion so that it can directly evaluate this
>
> class Solution {
> public:
>   vector<int> twoSum(vector<int>& nums, int target) {
>
>   }
> };


--
Amos Bird
amosbird@gmail.com

[-- Attachment #2.1: Type: text/html, Size: 773 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: evaluate cpp snippet in org babel with default includes and customized entry point
  2017-09-16  9:14           ` Amos Bird
@ 2017-09-16  9:36             ` Thierry Banel
  0 siblings, 0 replies; 10+ messages in thread
From: Thierry Banel @ 2017-09-16  9:36 UTC (permalink / raw)
  To: emacs-orgmode

On 16/09/2017 11:14, Amos Bird wrote:
>
> Hmm, is it possible to customize babel's c++ backend to achieve this?
>
You mean, hiding the call to twoSum() somewhere? I am not aware of any 
basic way to achieve that.


> I may also want a evaluation that submits the code to online judge and 
> returns the result.
>
This seems to be another topic. One that Babel is not concerned about. 
Are you trying to set up a work-flow where students submit their 
solutions to a teacher who is the "judge"? Isn't email between students 
and teacher just the simple and straightforward work-flow?

> Thierry Banel <tbanelwebmin@free.fr> writes:
>
> > You still need to explicitly call twoSum(), and that cannot be hidden.
> >
> > On 16/09/2017 10:58, Amos Bird wrote:
> >
> > Ok, i get the idea. So how can I customized the default code 
> expansion so that it can directly evaluate this
> >
> > class Solution {
> > public:
> > vector<int> twoSum(vector<int>& nums, int target) {
> >
> > }
> > };
>
> –
> Amos Bird
> amosbird@gmail.com
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-09-16  9:37 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-16  7:50 evaluate cpp snippet in org babel with default includes and customized entry point Amos Bird
2017-09-16  8:33 ` Thierry Banel
2017-09-16  8:37   ` Amos Bird
2017-09-16  8:54     ` Thierry Banel
2017-09-16  8:58       ` Amos Bird
2017-09-16  9:11         ` Thierry Banel
2017-09-16  9:14           ` Amos Bird
2017-09-16  9:36             ` Thierry Banel
2017-09-16  9:05       ` Thierry Banel
2017-09-16  8:46 ` Thierry Banel

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).