rule all:
    input: "results/final.txt"

rule source:
    output: "results/source.txt"
    resources: mem_mb=1024, runtime=2
    threads: 1
    shell: "echo source on $(hostname) at $(date) > {output} && sleep 2"

rule A1:
    input: "results/source.txt"
    output: "results/A1.txt"
    resources: mem_mb=4096, runtime=3
    threads: 4
    shell: "echo A1 on $(hostname) > {output} && sleep 3"

rule B1:
    input: "results/source.txt"
    output: "results/B1.txt"
    resources: mem_mb=2048, runtime=3
    threads: 2
    shell: "echo B1 on $(hostname) > {output} && sleep 2"

rule C1:
    input: "results/source.txt"
    output: "results/C1.txt"
    resources: mem_mb=1024, runtime=3
    threads: 1
    shell: "echo C1 on $(hostname) > {output} && sleep 2"

rule merge:
    input: "results/A1.txt", "results/B1.txt", "results/C1.txt"
    output: "results/merge.txt"
    resources: mem_mb=4096, runtime=3
    threads: 2
    shell: "cat {input} > {output} && echo merge on $(hostname) >> {output} && sleep 2"

rule final:
    input: "results/merge.txt"
    output: "results/final.txt"
    resources: mem_mb=2048, runtime=2
    threads: 1
    shell: "cp {input} {output} && echo final on $(hostname) >> {output}"
