Bioinformatics/base count: Difference between revisions

m
(add PicoLisp)
 
(41 intermediate revisions by 21 users not shown)
Line 23:
{{Template:Strings}}
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">F basecount(dna)
DefaultDict[Char, Int] d
L(c) dna
Line 59 ⟶ 58:
TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC\
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"
seq_pp(sequence)</langsyntaxhighlight>
 
{{out}}
Line 82 ⟶ 81:
TOT= 500
</pre>
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits <br> or android 64 bits with application Termux }}
<syntaxhighlight lang AArch64 Assembly>
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program cptAdn64.s */
 
/************************************/
/* Constantes */
/************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
.equ LIMIT, 30
.equ SHIFT, 8
 
//.include "../../ficmacros64.inc" // use for debugging
/************************************/
/* Initialized data */
/************************************/
.data
szMessResult: .asciz "Result: "
szDNA1: .ascii "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG"
.ascii "CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG"
.ascii "AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT"
.ascii "GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT"
.ascii "CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG"
.ascii "TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA"
.ascii "TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT"
.ascii "CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG"
.ascii "TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC"
.asciz "GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"
 
szCarriageReturn: .asciz "\n"
szMessStart: .asciz "Program 64 bits start.\n"
szMessCounterA: .asciz "Base A : "
szMessCounterC: .asciz "Base C : "
szMessCounterG: .asciz "Base G : "
szMessCounterT: .asciz "Base T : "
szMessTotal: .asciz "Total : "
sPrintLine: .fill LIMIT + SHIFT + 2,1,' ' // init line with spaces
/************************************/
/* UnInitialized data */
/************************************/
.bss
sZoneConv: .skip 24
/************************************/
/* code section */
/************************************/
.text
.global main
main: // entry of program
ldr x0,qAdrszMessStart
bl affichageMess
 
ldr x0,qAdrszDNA1
bl printDNA
ldr x0,qAdrszDNA1
bl countBase
 
100: // standard end of the program
mov x0, #0 // return code
mov x8, #EXIT // request to exit program
svc 0 // perform the system call
qAdrszDNA1: .quad szDNA1
qAdrsZoneConv: .quad sZoneConv
qAdrszMessResult: .quad szMessResult
qAdrszCarriageReturn: .quad szCarriageReturn
qAdrszMessStart: .quad szMessStart
/***************************************************/
/* count dna line and print */
/***************************************************/
/* x0 contains dna string address */
printDNA:
stp x1,lr,[sp,-16]!
stp x2,x3,[sp,-16]!
stp x4,x5,[sp,-16]!
stp x6,x7,[sp,-16]!
stp x8,x9,[sp,-16]!
mov x8,x0 // save address
mov x4,#0 // counter
mov x3,#0 // index string
mov x4,#0 // byte line counter
mov x5,#1 // start line value
ldr x7,qAdrsPrintLine
ldr x9,qAdrsZoneConv
1:
ldrb w6,[x8,x3] // load byte of dna
cmp x6,#0 // end string ?
beq 4f // yes -> end
add x1,x7,#SHIFT
strb w6,[x1,x4] // store byte in display line
add x4,x4,#1 // increment index line
cmp x4,#LIMIT // end line ?
blt 3f
mov x0,x5 // convert decimal counter base
mov x1,x9
bl conversion10
mov x2,xzr
2: // copy decimal conversion in display line
ldrb w6,[x9,x2]
strb w6,[x7,x2]
add x2,x2,1
cmp x2,x0
blt 2b
 
mov x0,#0 // Zero final
add x1,x7,#LIMIT
add x1,x1,#SHIFT + 1
strb w0,[x1]
mov x0,x7 // line display
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
add x5,x5,#LIMIT // add line size to counter
mov x4,#0 // and init line index
3:
add x3,x3,#1 // increment index string
b 1b // and loop
4: // display end line if line contains base
cmp x4,#0
beq 100f
mov x0,x5
mov x1,x9
bl conversion10
mov x2,xzr
5: // copy decimal conversion in display line
ldrb w6,[x9,x2]
strb w6,[x7,x2]
add x2,x2,1
cmp x2,x0
blt 5b
 
mov x0,#0 // Zero final
add x1,x7,x4
add x1,x1,#SHIFT
strb w0,[x1]
mov x0,x7 // last line display
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
100:
ldp x8,x9,[sp],16
ldp x6,x7,[sp],16
ldp x4,x5,[sp],16
ldp x2,x3,[sp],16
ldp x1,lr,[sp],16
ret
qAdrsPrintLine: .quad sPrintLine
/***************************************************/
/* count bases */
/***************************************************/
/* x0 contains dna string address */
countBase:
stp x1,lr,[sp,-16]!
stp x2,x3,[sp,-16]!
stp x4,x5,[sp,-16]!
stp x6,x7,[sp,-16]!
mov x2,#0 // string index
mov x3,#0 // A counter
mov x4,#0 // C counter
mov x5,#0 // G counter
mov x6,#0 // T counter
1:
ldrb w1,[x0,x2] // load byte of dna
cmp x1,#0 // end string ?
beq 2f
cmp x1,#'A'
cinc x3,x3,eq
cmp x1,#'C'
cinc x4,x4,eq
cmp x1,#'G'
cinc x5,x5,eq
cmp x1,#'T'
cinc x6,x6,eq
add x2,x2,#1
b 1b
2:
mov x0,x3 // convert decimal counter A
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrszMessCounterA
bl affichageMess
ldr x0,qAdrsZoneConv
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
mov x0,x4 // convert decimal counter C
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrszMessCounterC
bl affichageMess
ldr x0,qAdrsZoneConv
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
mov x0,x5 // convert decimal counter G
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrszMessCounterG
bl affichageMess
ldr x0,qAdrsZoneConv
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
mov x0,x6 // convert decimal counter T
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrszMessCounterT
bl affichageMess
ldr x0,qAdrsZoneConv
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
add x0,x3,x4 // convert decimal total
add x0,x0,x5
add x0,x0,x6
ldr x1,qAdrsZoneConv
bl conversion10
ldr x0,qAdrszMessTotal
bl affichageMess
ldr x0,qAdrsZoneConv
bl affichageMess
ldr x0,qAdrszCarriageReturn
bl affichageMess
100:
ldp x6,x7,[sp],16
ldp x4,x5,[sp],16
ldp x2,x3,[sp],16
ldp x1,lr,[sp],16 // TODO: retaur à completer
ret
qAdrszMessCounterA: .quad szMessCounterA
qAdrszMessCounterC: .quad szMessCounterC
qAdrszMessCounterG: .quad szMessCounterG
qAdrszMessCounterT: .quad szMessCounterT
qAdrszMessTotal: .quad szMessTotal
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeARM64.inc"
</syntaxhighlight>
{{Out}}
<pre>
Program 64 bits start.
1 CGTAAAAAATTACAACGTCCTTTGGCTATC
31 TCTTAAACTCCTGCTAAATGCTCGTGCTTT
61 CCAATTATGTAAGCGTTCCGAGACGGGGTG
91 GTCGATTCTGAGGACAAAGGTCAAGATGGA
121 GCGCATCGAACGCAATAAGGATCATTTGAT
151 GGGACGTTTCGTCGACAAAGTCTTGTTTCG
181 AGAGTAACGGCTACCGTCTTCGATTCTGCT
211 TATAACACTATGTTCTTATGAAATGGATGT
241 TCTGAGTTGGTCAGTCCCAATGTGCGGGGT
271 TTCTTTTAGTACGTCGGGAGTGGTATTATA
301 TTTAATTTTTCTATATAGCGATCTGTATTT
331 AAGCAATTCATTTAGGTTATCGCCGCGATG
361 CTCGGTTCGGACCGCCAAGCATCTGGCTCC
391 ACTGCTAGTGTCCTAAATTTGAATGGCAAA
421 CACAAATAAGATTTAGCAATTCGTGTAGAC
451 GACCGGGGACTTGCATGATGGGAGCAGCTT
481 TGTTAAACTACGAACGTAAT
Base A : 129
Base C : 97
Base G : 119
Base T : 155
Total : 500
 
</pre>
=={{header|Action!}}==
I the solution the number of nucleotides per row is equal 30 to fit the screen on Atari 8-bit computer.
<langsyntaxhighlight Actionlang="action!">DEFINE PTR="CARD"
 
PROC PrettyPrint(PTR ARRAY data INT count,gsize,gcount)
Line 151 ⟶ 419:
 
LMARGIN=oldLMARGIN ;restore left margin on the screen
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Bioinformatics_base_count.png Screenshot from Atari 8-bit computer]
Line 177 ⟶ 445:
Total: 500
</pre>
 
=={{header|Ada}}==
<langsyntaxhighlight Adalang="ada">with Ada.Text_Io;
 
procedure Base_Count is
Line 242 ⟶ 509:
Put (Test);
Count (Test);
end Base_Count;</langsyntaxhighlight>
{{out}}
<pre> 1.. 70 CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGT
Line 257 ⟶ 524:
T: 155
Total: 500</pre>
 
=={{header|ALGOL 68}}==
Includes a count for non-bases if they are present in the sequence, as this would presumably indicate an error.
<langsyntaxhighlight lang="algol68">BEGIN # count DNA bases in a sequence #
# returns an array of counts of the characters in s that are in c #
# an extra final element holds the count of characters not in c #
Line 369 ⟶ 635:
# totals #
print( ( newline, "Total: ", whole( total, - width ), newline ) )
END</langsyntaxhighlight>
{{out}}
<pre>
Line 394 ⟶ 660:
Total: 500
</pre>
=={{header|APL}}==
{{works with|Dyalog APL}}
<syntaxhighlight lang="apl"> bases←'CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGTAAGCGTTCC',
'GAGACGGGGTGGTCGATTCTGAGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGATGG',
'GACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTTCGATTCTGCTTATAACACTATGTTC',
'TTATGAAATGGATGTTCTGAGTTGGTCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTA',
'TATTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTATCGCCGCGATGCTCGGTTCGGA',
'CCGCCAAGCATCTGGCTCCACTGCTAGTGTCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGT',
'GTAGACGACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT'
50 {w←⍺⋄s←⍵⋄{(w×1-⍨⍵),((w÷⍨≢s) w ⍴s)[⍵;]} ⍳(≢s)÷⍺} bases
{⍵,':',+/bases=⍵}¨∪bases[⍋∪bases]
'Total:',≢bases</syntaxhighlight>
 
{{Out}}
<pre> 0 CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50 CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
100 AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
150 GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
200 CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
250 TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
300 TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
350 CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
400 TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
450 GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
A: 129 C: 97 G: 119 T: 155
 
Total: 500</pre>
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi <br> or android 32 bits with application Termux}}
<syntaxhighlight lang ARM Assembly>
/* ARM assembly Raspberry PI */
/* program cptAdn.s */
 
/************************************/
/* Constantes */
/************************************/
/* for this file see task include a file in language ARM assembly*/
.include "../constantes.inc"
.equ LIMIT, 50
.equ SHIFT, 11
 
/************************************/
/* Initialized data */
/************************************/
.data
szMessResult: .asciz "Result: "
szDNA1: .ascii "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG"
.ascii "CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG"
.ascii "AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT"
.ascii "GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT"
.ascii "CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG"
.ascii "TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA"
.ascii "TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT"
.ascii "CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG"
.ascii "TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC"
.asciz "GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"
 
szCarriageReturn: .asciz "\n"
szMessStart: .asciz "Program 32 bits start.\n"
szMessCounterA: .asciz "Base A : "
szMessCounterC: .asciz "Base C : "
szMessCounterG: .asciz "Base G : "
szMessCounterT: .asciz "Base T : "
szMessTotal: .asciz "Total : "
/************************************/
/* UnInitialized data */
/************************************/
.bss
sZoneConv: .skip 24
sPrintLine: .skip LIMIT + SHIFT + 2
/************************************/
/* code section */
/************************************/
.text
.global main
main: @ entry of program
ldr r0,iAdrszMessStart
bl affichageMess
 
ldr r0,iAdrszDNA1
bl printDNA
ldr r0,iAdrszDNA1
bl countBase
 
100: @ standard end of the program
mov r0, #0 @ return code
mov r7, #EXIT @ request to exit program
svc 0 @ perform the system call
iAdrszDNA1: .int szDNA1
iAdrsZoneConv: .int sZoneConv
iAdrszMessResult: .int szMessResult
iAdrszCarriageReturn: .int szCarriageReturn
iAdrszMessStart: .int szMessStart
/***************************************************/
/* count dna line and print */
/***************************************************/
/* r0 contains dna string address */
printDNA:
push {r1-r8,lr} @ save registers
mov r8,r0 @ save address
mov r4,#0 @ counter
mov r3,#0 @ index stone
mov r4,#0
mov r5,#1
ldr r7,iAdrsPrintLine
1:
ldrb r6,[r8,r3] @ load byte of dna
cmp r6,#0 @ end string ?
beq 4f
add r1,r7,#SHIFT
strb r6,[r1,r4] @ store byte in display line
add r4,r4,#1 @ increment index line
cmp r4,#LIMIT @ end line ?
blt 3f
mov r0,r5 @ convert decimal counter base
mov r1,r7
bl conversion10
mov r0,#0 @ Zero final
add r1,r7,#LIMIT
add r1,r1,#SHIFT + 1
strb r0,[r1]
mov r0,r7 @ line display
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
add r5,r5,#LIMIT @ add line size to counter
mov r4,#0 @ and init line index
3:
add r3,r3,#1 @ increment index string
b 1b @ and loop
4: @ display end line if line contains base
cmp r4,#0
beq 100f
mov r0,r5
mov r1,r7
bl conversion10
mov r0,#0 @ Zero final
add r1,r7,r4
add r1,r1,#SHIFT
strb r0,[r1]
mov r0,r7 @ last line display
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
100:
pop {r1-r8,pc}
iAdrsPrintLine: .int sPrintLine
/***************************************************/
/* count bases */
/***************************************************/
/* r0 contains dna string address */
countBase:
push {r1-r6,lr} @ save registers
mov r2,#0 @ string index
mov r3,#0 @ A counter
mov r4,#0 @ C counter
mov r5,#0 @ G counter
mov r6,#0 @ T counter
1:
ldrb r1,[r0,r2] @ load byte of dna
cmp r1,#0 @ end string ?
beq 2f
cmp r1,#'A'
addeq r3,r3,#1
cmp r1,#'C'
addeq r4,r4,#1
cmp r1,#'G'
addeq r5,r5,#1
cmp r1,#'T'
addeq r6,r6,#1
add r2,r2,#1
b 1b
2:
mov r0,r3 @ convert decimal counter A
ldr r1,iAdrsZoneConv
bl conversion10
ldr r0,iAdrszMessCounterA
bl affichageMess
ldr r0,iAdrsZoneConv
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
mov r0,r4 @ convert decimal counter C
ldr r1,iAdrsZoneConv
bl conversion10
ldr r0,iAdrszMessCounterC
bl affichageMess
ldr r0,iAdrsZoneConv
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
mov r0,r5 @ convert decimal counter G
ldr r1,iAdrsZoneConv
bl conversion10
ldr r0,iAdrszMessCounterG
bl affichageMess
ldr r0,iAdrsZoneConv
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
mov r0,r6 @ convert decimal counter T
ldr r1,iAdrsZoneConv
bl conversion10
ldr r0,iAdrszMessCounterT
bl affichageMess
ldr r0,iAdrsZoneConv
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
add r0,r3,r4 @ convert decimal total
add r0,r0,r5
add r0,r0,r6
ldr r1,iAdrsZoneConv
bl conversion10
ldr r0,iAdrszMessTotal
bl affichageMess
ldr r0,iAdrsZoneConv
bl affichageMess
ldr r0,iAdrszCarriageReturn
bl affichageMess
100:
pop {r1-r6,pc}
iAdrszMessCounterA: .int szMessCounterA
iAdrszMessCounterC: .int szMessCounterC
iAdrszMessCounterG: .int szMessCounterG
iAdrszMessCounterT: .int szMessCounterT
iAdrszMessTotal: .int szMessTotal
/***************************************************/
/* ROUTINES INCLUDE */
/***************************************************/
/* for this file see task include a file in language ARM assembly*/
.include "../affichage.inc"
 
</syntaxhighlight>
{{Out}}
<pre>
Program 32 bits start.
1 CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
51 CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
101 AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
151 GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
201 CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
251 TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
301 TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
351 CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
401 TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
451 GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
Base A : 129
Base C : 97
Base G : 119
Base T : 155
Total : 500
 
</pre>
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">dna: {
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
Line 429 ⟶ 952:
]
 
prettyPrint dna</langsyntaxhighlight>
 
{{out}}
Line 444 ⟶ 967:
450 : GACCGGGGAC TTGCATGATG GGAGCAGCTT TGTTAAACTA CGAACGTAAT
Total count => A: 129 T: 155 G: 119 C: 97</pre>
 
=={{Header|AutoHotkey}}==
<syntaxhighlight lang="autohotkey">
test := "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTGAGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGATGGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTTCGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGGTCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATATTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTATCGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTGTCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGACGACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"
tek := 1, bases := " "
loop,parse,test
{
if (A_LoopField = "A")
countA += 1
else if (A_LoopField = "C")
countC += 1
else if (A_LoopField = "G")
countG += 1
else if (A_LoopField = "T")
countT += 1
if (mod(a_index,50) = 0)
{
bases .= a_index . " -> " . substr(test,tek,50) . "`n"
tek += 50
}
}
MsgBox % bases "`nA: " countA "`nC: " countC "`nG: " countG "`nT: " countT "`nTotal = " countA+countC+countG+countT
ExitApp
</syntaxhighlight>
{{Output}}
<pre>
50 -> CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
100 -> CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
150 -> AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
200 -> GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
250 -> CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
300 -> TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
350 -> TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
400 -> CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
450 -> TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
500 -> GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
 
A: 129
C: 97
G: 119
T: 155
Total = 500
</pre>
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f BIOINFORMATICS_BASE_COUNT.AWK
# converted from FreeBASIC
Line 488 ⟶ 1,055:
exit(0)
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 509 ⟶ 1,076:
500 total
</pre>
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<syntaxhighlight lang="bbcbasic"> DNA$="CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG" +\
\ "CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG" +\
\ "AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT" +\
\ "GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT" +\
\ "CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG" +\
\ "TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA" +\
\ "TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT" +\
\ "CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG" +\
\ "TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC" +\
\ "GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT" + CHR$0
 
@%=3 : REM Width of the print zone
P%=!^DNA$ : REM Address of string in memory
WHILE ?P%
IF I% MOD 50 == 0 PRINT 'I% ": ";
VDU ?P% : REM Output ASCII value at address P%
CASE ?P% OF
WHEN ASC"A" A+=1
WHEN ASC"C" C+=1
WHEN ASC"G" G+=1
WHEN ASC"T" T+=1
ENDCASE
I%+=1
P%+=1
ENDWHILE
PRINT '' "A: " A ' "C: " C ' "G: " G ' "T: " T
PRINT "Total: " A + C + G + T
</syntaxhighlight>
{{Out}}
<pre>
0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50: CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
100: AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
150: GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
200: CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
250: TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
300: TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
350: CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
400: TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
450: GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
 
A: 129
C: 97
G: 119
T: 155
Total: 500</pre>
=={{header|C}}==
Reads genome from a file, determines string length to ensure optimal formatting
<syntaxhighlight lang="c">
<lang C>
#include<string.h>
#include<stdlib.h>
Line 628 ⟶ 1,242:
return 0;
}
</syntaxhighlight>
</lang>
Run and output :
<pre>
Line 655 ⟶ 1,269:
Total: 500
</pre>
 
=={{header|C++}}==
Creates a class DnaBase which either uses a provided string or the default DNA sequence.
<langsyntaxhighlight lang="cpp">#include <map>
#include <string>
#include <iostream>
Line 720 ⟶ 1,333:
delete d;
return 0;
}</langsyntaxhighlight>
{{out}}
<pre>Sequence:
Line 748 ⟶ 1,361:
{{libheader| Generics.Collections}}
{{libheader| System.Console}}
<syntaxhighlight lang="delphi">
<lang Delphi>
program base_count;
 
Line 837 ⟶ 1,450:
 
readln;
end.</langsyntaxhighlight>
Color [https://ibb.co/VH5pR29]
{{out}}
Line 860 ⟶ 1,473:
Σ: 500
======</pre>
=={{header|EasyLang}}==
<syntaxhighlight lang="easylang">
len d[] 26
pos = 1
numfmt 0 4
repeat
s$ = input
until s$ = ""
for c$ in strchars s$
if pos mod 40 = 1
write pos & ":"
.
if pos mod 4 = 1
write " "
.
write c$
if pos mod 40 = 0
print ""
.
pos += 1
c = strcode c$
d[c - 64] += 1
.
.
print ""
for i in [ 1 3 7 20 ]
write strchar (64 + i) & ": "
print d[i]
.
print "Total: " & d[1] + d[3] + d[7] + d[20]
input_data
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
</syntaxhighlight>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: assocs formatting grouping io kernel literals math
math.statistics prettyprint qw sequences sorting ;
 
Line 890 ⟶ 1,545:
[ "TOTAL: " write [ second ] [ + ] map-reduce . ] bi ;
 
dna [ 50 .dna nl ] [ show-counts ] bi</langsyntaxhighlight>
{{out}}
<pre>
Line 914 ⟶ 1,569:
 
=={{header|Forth}}==
<syntaxhighlight lang="forth">
<lang Forth>
( Gforth 0.7.3 )
 
Line 950 ⟶ 1,605:
 
dnacode basecount
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 974 ⟶ 1,629:
==========
</pre>
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">#define SCW 36
#define GRP 3
 
Line 1,024 ⟶ 1,678:
print " T: " + str(bases(3))
print
print " total: " + str(bases(0)+bases(1)+bases(2)+bases(3))</langsyntaxhighlight>
{{out}}
<pre> 1-- 36: CGT AAA AAA TTA CAA CGT CCT TTG GCT ATC TCT TAA
Line 1,049 ⟶ 1,703:
 
total: 500</pre>
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
window 1, @"Bioinformatics/base count"
 
local fn SubstringCount( string as CFStringRef, substring as CFStringRef ) as long
CFStringRef tempString = fn StringByReplacingOccurrencesOfString( string, substring, @"" )
end fn = len(string) - len(tempString)
 
void local fn DoIt
CFArrayRef sequence
CFStringRef string
long index = 0
long a = 0, c = 0, g = 0, t = 0
sequence = @[@"CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG",
@"CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG",
@"AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT",
@"GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT",
@"CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG",
@"TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA",
@"TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT",
@"CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG",
@"TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC",
@"GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"]
for string in sequence
printf @"%3ld: %@",index,string
index += len(string)
a += fn SubstringCount( string, @"A" )
c += fn SubstringCount( string, @"C" )
g += fn SubstringCount( string, @"G" )
t += fn SubstringCount( string, @"T" )
next
print
printf @"A:\t\t%3ld",a
printf @"C:\t\t%3ld",c
printf @"G:\t\t%3ld",g
printf @"T:\t\t%3ld",t
printf @"\t\t---"
printf @"Total:\t%ld",a+c+g+t
end fn
 
fn DoIt
 
HandleEvents
</syntaxhighlight>
{{out}}
<pre>
0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50: CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
100: AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
150: GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
200: CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
250: TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
300: TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
350: CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
400: TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
450: GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
 
A: 129
C: 97
G: 119
T: 155
---
Total: 500
</pre>
 
=={{header|Fōrmulæ}}==
 
{{FormulaeEntry|page=https://formulae.org/?script=examples/Bioinformatics_-_base_count}}
Fōrmulæ programs are not textual, visualization/edition of programs is done showing/manipulating structures but not text. Moreover, there can be multiple visual representations of the same program. Even though it is possible to have textual representation &mdash;i.e. XML, JSON&mdash; they are intended for storage and transfer purposes more than visualization and edition.
 
'''Solution'''
 
[[File:Fōrmulæ - Bioinformatics - base count 01.png]]
 
'''Test case'''
 
[[File:Fōrmulæ - Bioinformatics - base count 02.png]]
Programs in Fōrmulæ are created/edited online in its [https://formulae.org website], However they run on execution servers. By default remote servers are used, but they are limited in memory and processing power, since they are intended for demonstration and casual use. A local server can be downloaded and installed, it has no limitations (it runs in your own computer). Because of that, example programs can be fully visualized and edited, but some of them will not run if they require a moderate or heavy computation/memory resources, and no local server is being used.
 
[[File:Fōrmulæ - Bioinformatics - base count 03.png]]
In '''[https://formulae.org/?example=Bioinformatics_-_base_count this]''' page you can see the program(s) related to this task and their results.
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 1,107 ⟶ 1,836:
fmt.Println(" Σ:", le)
fmt.Println(" ======")
}</langsyntaxhighlight>
 
{{out}}
Line 1,132 ⟶ 1,861:
======
</pre>
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Data.List (group, sort)
import Data.List.Split (chunksOf)
import Text.Printf (printf, IsChar(..), PrintfArg(..), fmtChar, fmtPrecision, formatString)
Line 1,173 ⟶ 1,901:
putStrLn "\nBase Counts:"
mapM_ (uncurry (printf "%2s: %2d\n")) $ baseCounts test
putStrLn (replicate 8 '-') >> printf " Σ: %d\n\n" (length test)</langsyntaxhighlight>
{{out}}
<pre>Sequence:
Line 1,196 ⟶ 1,924:
=={{header|J}}==
'''Solution:'''
<langsyntaxhighlight lang="j">countBases=: (({.;#)/.~)@,
totalBases=: #@,
 
Line 1,207 ⟶ 1,935:
'%5s: %4d' printf countBases y
'-----------\nTotal = %3d' printf totalBases y
)</langsyntaxhighlight>
'''Required Example:'''
<langsyntaxhighlight lang="j"> DNABases=: ];._2 noun define
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
Line 1,241 ⟶ 1,969:
A: 129
-----------
Total = 500</langsyntaxhighlight>
 
=={{header|Java}}==
<p>
This can be quickly achieved using a <kbd>for-loop</kbd> and the <code>String.toCharArray</code> method.<br />
Additionally, use a <code>BufferedReader</code> to utilize the <code>readLine</code> method.
</p>
<p>
To "pretty print" the output, we can use a <code>String</code> formatter.
</p>
<syntaxhighlight lang="java">
void printBaseCount(String string) throws IOException {
BufferedReader reader = new BufferedReader(new StringReader(string));
int index = 0;
String sequence;
int A = 0, C = 0, G = 0, T = 0;
int a, c, g, t;
while ((sequence = reader.readLine()) != null) {
System.out.printf("%d %s ", index++, sequence);
a = c = g = t = 0;
for (char base : sequence.toCharArray()) {
switch (base) {
case 'A' -> {
A++;
a++;
}
case 'C' -> {
C++;
c++;
}
case 'G' -> {
G++;
g++;
}
case 'T' -> {
T++;
t++;
}
}
}
System.out.printf("[A %2d, C %2d, G %2d, T %2d]%n", a, c, g, t);
}
reader.close();
int total = A + C + G + T;
System.out.printf("%nTotal of %d bases%n", total);
System.out.printf("A %3d (%.2f%%)%n", A, ((double) A / total) * 100);
System.out.printf("C %3d (%.2f%%)%n", C, ((double) C / total) * 100);
System.out.printf("G %3d (%.2f%%)%n", G, ((double) G / total) * 100);
System.out.printf("T %3d (%.2f%%)%n", T, ((double) T / total) * 100);
}
</syntaxhighlight>
<pre>
0 CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG [A 16, C 12, G 6, T 16]
1 CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG [A 8, C 11, G 15, T 16]
2 AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT [A 19, C 8, G 14, T 9]
3 GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT [A 10, C 11, G 14, T 15]
4 CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG [A 12, C 7, G 11, T 20]
5 TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA [A 9, C 8, G 15, T 18]
6 TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT [A 14, C 5, G 6, T 25]
7 CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG [A 7, C 18, G 15, T 10]
8 TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC [A 20, C 8, G 8, T 14]
9 GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT [A 14, C 9, G 15, T 12]
 
Total of 500 bases
A 129 (25.80%)
C 97 (19.40%)
G 119 (23.80%)
T 155 (31.00%)
</pre>
<br />
Alternately<br />
For counting the bases, we simply use a <code>HashMap</code>, and then use the <code>Map.merge</code>, inserting <code>1</code>, and using <code>Integer::sum</code> as the aggregation function. This effectively creates a <code>Map</code> that keeps a running count for us. Java ''does'' provide the <code>groupingBy</code> and <code>counting</code> collectors, which would ''generally'' make these kinds of operation easier. However, <code>String</code>’s <code>chars()</code> method returns a <code>IntStream</code>, which generally just makes everything more complicated. Or verbose. Or inefficient. Ultimately, doing it by hand is easier and more efficient than with streams. The best tool for this job though would be Guava’s <code>MultiSet</code>, which is a dedicated Key to Count container.
 
Note that Java’s native strings are UCS-2/UTF-16: Each character is 2-byte long. If parsing from a '''very''' large ASCII/UTF8 text file, then <code>String</code> is a poor choice, as opposed to, say <code>byte[]</code>. For the purpose of this exercise though, using <code>byte[]</code> would just add uninteresting casts and bloat to the code, so we stick to <code>String</code>.
 
<langsyntaxhighlight Javalang="java">import java.util.HashMap;
import java.util.Map;
 
Line 1,296 ⟶ 2,091:
}
 
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,319 ⟶ 2,114:
 
=={{header|JavaScript}}==
<langsyntaxhighlight JavaScriptlang="javascript">const rowLength = 50;
 
const bases = ['A', 'C', 'G', 'T'];
Line 1,386 ⟶ 2,181:
prettyPrint(seq);
printBases(seq, bases);
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,408 ⟶ 2,203:
Total: 500
</pre>
 
=={{header|jq}}==
=== Naive (in-memory) solution ===
First, some general utility functions:
<langsyntaxhighlight lang="jq">def lpad($len; $fill): tostring | ($len - length) as $l | ($fill * $l)[:$l] + .;
 
# Create a bag of words, i.e. a JSON object with counts of the items in the stream
def bow(stream):
reduce stream as $word ({}; .[($word|tostring)] += 1);</langsyntaxhighlight>
Next, some helper functions:<langsyntaxhighlight lang="jq">
def read_seq:
reduce inputs as $line (""; . + $line);
Line 1,432 ⟶ 2,226:
def pp_sequence($cols):
range(0; length / $cols) as $i
| "\($i*$cols | lpad(5; " ")): " + .[ $i * $cols : ($i+1) * $cols] ;</langsyntaxhighlight>
Finally, the task at hand:<langsyntaxhighlight lang="jq">
read_seq | pp_sequence(50), "", pp_counts</langsyntaxhighlight>
{{out}}
The invocation:
jq -nrR -f base_count.jq base_count.txt
produces:<langsyntaxhighlight lang="sh">
0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50: CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
Line 1,455 ⟶ 2,249:
G: 119
T: 155
Total: 500</langsyntaxhighlight>
 
=== Memory-efficient solution ===
<langsyntaxhighlight lang="jq">def lpad($len; $fill): tostring | ($len - length) as $l | ($fill * $l)[:$l] + .;
 
# "bow" = bag of words, i.e. a JSON object with counts
Line 1,499 ⟶ 2,293:
 
# To illustrate reformatting:
report(inputs; 33)</langsyntaxhighlight>
{{out}}
<syntaxhighlight lang="sh">
<lang sh>
0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCT
33: TAAACTCCTGCTAAATGCTCGTGCTTTCCAATT
Line 1,524 ⟶ 2,318:
G: 119
T: 155
Total: 500</langsyntaxhighlight>
 
=={{header|Julia}}==
<langsyntaxhighlight lang="julia">const sequence =
"CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG" *
"CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG" *
Line 1,566 ⟶ 2,359:
 
printcounts(sequence)
</langsyntaxhighlight>{{out}}
<pre>
500nt DNA sequence:
Line 1,591 ⟶ 2,384:
Total 500
</pre>
 
=={{header|Kotlin}}==
For the first part, we can leverage the built-in <code>String.chunked</code> to transform a <code>String</code> into a <code>List&lt;String&gt;</code>, where each <code>String</code> has a defined chunk size. <code>Iterable.withIndex</code> allows you to loop over an <code>iterable</code>, while keeping track of the iteration index.
 
For counting the bases, we use <code>groupingBy</code>, which is a versatile tool for aggregating objects based on a key-function. In this case, the key function is the identity function (<code>it</code>), and the aggregation function is the counting function: <code>eachCount</code>.
 
Finally, the total count is simply the input’s length.
 
<syntaxhighlight lang="kotlin">
<lang kotlin>fun printSequence(sequence: String, width: Int = 50) {
 
fun <K, V> printWithLabel(k: K, v: V) {
fun printSequence(sequence: String, width: Int = 50) {
val label = k.toString().padStart(5)
 
println("$label: $v")
fun printWithLabel(label: Any, data: Any) =
}
label.toString().padStart(5).also { println("$it: $data") }
 
println("SEQUENCE:")
sequence.chunked(width).withIndexforEachIndexed().forEach { (i, line)chunk ->
printWithLabel(i * width + linechunk.length, linechunk)
}
 
println("BASE:")
sequence.groupingBy { it }.eachCount().forEach { (k, v) ->
Line 1,618 ⟶ 2,411:
const val BASE_SEQUENCE = "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTGAGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGATGGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTTCGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGGTCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATATTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTATCGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTGTCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGACGACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"
 
fun main() {= printSequence(BASE_SEQUENCE)
 
printSequence(BASE_SEQUENCE)
</syntaxhighlight>
}</lang>
 
{{out}}
Line 1,644 ⟶ 2,437:
 
=={{header|Lambdatalk}}==
<langsyntaxhighlight lang="scheme">
{def DNA CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTGAGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGATGGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTTCGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGGTCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATATTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTATCGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTGTCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGACGACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT}
-> DNA
Line 1,667 ⟶ 2,460:
A+C+G+T = {+ {S}}
-> A+C+G+T = 500
</syntaxhighlight>
</lang>
=={{header|Lua}}==
<syntaxhighlight lang="lua">function prettyprint(seq) -- approx DDBJ format
seq = seq:gsub("%A",""):lower()
local sums, n = { a=0, c=0, g=0, t=0 }, 1
seq:gsub("(%a)", function(c) sums[c]=sums[c]+1 end)
local function printf(s,...) io.write(s:format(...)) end
printf("LOCUS AB000000 %12d bp mRNA linear HUM 01-JAN-2001\n", #seq)
printf(" BASE COUNT %12d a %12d c %12d g %12d t\n", sums.a, sums.c, sums.g, sums.t)
printf("ORIGIN\n")
while n < #seq do
local sub60 = seq:sub(n,n+59)
printf("%9d %s\n", n, sub60:gsub("(..........)","%1 "))
n = n + #sub60
end
end
 
prettyprint[[
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
]]</syntaxhighlight>
{{out}}
<pre>LOCUS AB000000 500 bp mRNA linear HUM 01-JAN-2001
BASE COUNT 129 a 97 c 119 g 155 t
ORIGIN
1 cgtaaaaaat tacaacgtcc tttggctatc tcttaaactc ctgctaaatg ctcgtgcttt
61 ccaattatgt aagcgttccg agacggggtg gtcgattctg aggacaaagg tcaagatgga
121 gcgcatcgaa cgcaataagg atcatttgat gggacgtttc gtcgacaaag tcttgtttcg
181 agagtaacgg ctaccgtctt cgattctgct tataacacta tgttcttatg aaatggatgt
241 tctgagttgg tcagtcccaa tgtgcggggt ttcttttagt acgtcgggag tggtattata
301 tttaattttt ctatatagcg atctgtattt aagcaattca tttaggttat cgccgcgatg
361 ctcggttcgg accgccaagc atctggctcc actgctagtg tcctaaattt gaatggcaaa
421 cacaaataag atttagcaat tcgtgtagac gaccggggac ttgcatgatg ggagcagctt
481 tgttaaacta cgaacgtaat</pre>
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">seq = "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCA\
ATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTGAGGACAAAGGTCAAGATGGAGCGCATCGAACGC\
AATAAGGATCATTTGATGGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTTCGA\
Line 1,683 ⟶ 2,516:
ends = Rest[Accumulate[Prepend[StringLength /@ parts, 0]]];
StringRiffle[MapThread[ToString[#1] <> "-" <> ToString[#2] <> ": " <> #3 &, {begins, ends, parts}], "\n"]
StringRiffle[#1 <> ": " <> ToString[#2] & @@@ Tally[Characters[seq]], "\n"]</langsyntaxhighlight>
{{out}}
<pre>1-70: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGT
Line 1,697 ⟶ 2,530:
T: 155
A: 129</pre>
 
=={{header|MATLAB}} / {{header|Octave}}==
 
<syntaxhighlight lang="matlab">
<lang Matlab>
function r = base_count(f)
fid = fopen(f,'r');
Line 1,714 ⟶ 2,546:
fprintf(1, '\nTotal: %d\n\n', sum(nn));
end;
</syntaxhighlight>
</lang>
 
 
Line 1,742 ⟶ 2,574:
 
</pre>
 
=={{header|Nim}}==
Rather than inventing a new presentation format, we have chosen to use the EMBL (European Molecular Biology Laboratory) format which is well documented. See specifications here: ftp://ftp.ebi.ac.uk/pub/databases/embl/doc/usrman.txt
 
<langsyntaxhighlight Nimlang="nim">import strformat
import strutils
 
Line 1,804 ⟶ 2,635:
 
when isMainModule:
Source.display()</langsyntaxhighlight>
 
{{out}}
Line 1,817 ⟶ 2,648:
CACAAATAAG ATTTAGCAAT TCGTGTAGAC GACCGGGGAC TTGCATGATG GGAGCAGCTT 480
TGTTAAACTA CGAACGTAAT</pre>
 
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">program DNA_Base_Count;
{$IFDEF FPC}
{$MODE DELPHI}//String = AnsiString
Line 1,896 ⟶ 2,725:
OutFormatBase(TestDNA,50);
Cnt(TestDNA);
end.</langsyntaxhighlight>
{{out}}
<pre> DNA base sequence
Line 1,916 ⟶ 2,745:
T 155
Total base count 500</pre>
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">use strict;
use warnings;
use feature 'say';
Line 1,945 ⟶ 2,773:
CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT</langsyntaxhighlight>
{{out}}
<pre> 1: CGTAAAAAAT TACAACGTCC TTTGGCTATC TCTTAAACTC CTGCTAAATG
Line 1,963 ⟶ 2,791:
G: 119
T: 155</pre>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #008080;">constant</span> <span style="color: #000000;">dna</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"""
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
Line 1,988 ⟶ 2,815:
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\nBase counts: A:%d, C:%d, G:%d, T:%d, total:%d\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">acgt</span><span style="color: #0000FF;">)</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 2,004 ⟶ 2,831:
Base counts: A:129, C:97, G:119, T:155, total:500
</pre>
=={{header|Picat}}==
<syntaxhighlight lang="picat">main =>
dna(DNA, ChunkSize),
Count = 0,
println("Sequence:"),
Map = new_map(['A'=0,'C'=0,'G'=0,'T'=0]),
foreach(Chunk in DNA.chunks_of(ChunkSize))
printf("%4d: %s\n", Count, Chunk),
Count := Count + Chunk.len,
foreach(C in Chunk)
Map.put(C,Map.get(C)+1)
end
end,
println("\nBase count:"),
foreach(C in "ACGT")
printf("%5c: %3d\n", C, Map.get(C))
end,
printf("Total: %d\n", Count),
nl.
 
dna(DNA,ChunkSize) =>
DNA = "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT".delete_all('\n'),
ChunkSize = 50.</syntaxhighlight>
 
{{out}}
<pre>Sequence:
0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50: CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
100: AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
150: GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
200: CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
250: TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
300: TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
350: CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
400: TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
450: GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
 
Base count:
A: 129
C: 97
G: 119
T: 155
Total: 500</pre>
=={{header|PicoLisp}}==
<syntaxhighlight lang="picolisp">(let
<lang PicoLisp>(let
(StrS (chop "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG\
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG\
AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT\
Line 2,018 ⟶ 2,896:
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT" )
R )
(for I StrS (accu 'R I 1))
(for I R (println I))
(println 'Total: (sum cdr R)) )</langsyntaxhighlight>
{{out}}
<pre>
Line 2,029 ⟶ 2,907:
Total: 500
</pre>
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">dna$ = "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG" +
"CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG" +
"AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT" +
Line 2,062 ⟶ 2,939:
PrintN(~"\n" + "Total = " + RSet(Str(sigma), 5))
Input()
EndIf</langsyntaxhighlight>
{{out}}
<pre>
Line 2,084 ⟶ 2,961:
 
Total = 500</pre>
 
=={{header|Python}}==
===Procedural===
<langsyntaxhighlight lang="python">from collections import Counter
 
def basecount(dna):
Line 2,120 ⟶ 2,996:
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT'''
seq_pp(sequence)
</syntaxhighlight>
</lang>
 
{{out}}
Line 2,141 ⟶ 3,017:
T: 155
TOT= 500</pre>
 
=== procedural ( dictionary version) ===
{{works with|Python| 3.10.5 }}
<syntaxhighlight lang="python">
"""
Python 3.10.5 (main, Jun 6 2022, 18:49:26) [GCC 12.1.0] on linux
 
Created on Wed 2022/08/17 11:19:31
"""
 
 
def main ():
 
def DispCount () :
 
return f'\n\nBases :\n\n' + f''.join ( [ f'{i} =\t{D [ i ]:4d}\n' for i in sorted ( BoI ) ] )
 
 
S = 'CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG' \
'AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGATGGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT' \
'CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGGTCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA' \
'TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTATCGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG' \
'TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGACGACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT'
 
All = set( S )
BoI = set ( [ "A","C","G","T" ] )
other = All - BoI
D = { k : S.count ( k ) for k in All }
print ( 'Sequence:\n\n')
 
print ( ''.join ( [ f'{k:4d} : {S [ k: k + 50 ]}\n' for k in range ( 0, len ( S ), 50 ) ] ) )
 
print ( f'{DispCount ()} \n------------')
 
print ( '' if ( other == set () ) else f'Other\t{sum ( [ D [ k ] for k in sorted ( other ) ] ):4d}\n\n' )
 
print ( f'Σ = \t {sum ( [ D [ k ] for k in sorted ( All ) ] ) } \n============\n')
pass
 
 
def test ():
 
pass
 
 
## START
 
LIVE = True
 
if ( __name__ == '__main__' ) :
 
main () if LIVE else test ()
 
 
</syntaxhighlight>JPD 2022/08/17
<PRE>
Sequence:
 
0 :CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50 :CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
100 :AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
150 :GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
200 :CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
250 :TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
300 :TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
350 :CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
400 :TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
450 :GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
 
 
Bases :
 
A = 129
C = 97
G = 119
T = 155
------------
Σ = 500
============
</PRE>
 
===Functional===
Sequence and base counts displayed in GenBank format.
{{Works with|Python|3.7}}
<langsyntaxhighlight lang="python">'''Bioinformatics – base count'''
 
from itertools import count
Line 2,297 ⟶ 3,259:
# MAIN ---
if __name__ == '__main__':
main()</langsyntaxhighlight>
{{Out}}
<pre>DEFINITION len=500
Line 2,312 ⟶ 3,274:
481 TGTTAAACTA CGAACGTAAT
//</pre>
 
=={{header|Quackery}}==
 
<syntaxhighlight lang="quackery">
<lang Quackery>
[ over size -
space swap of
Line 2,365 ⟶ 3,326:
$ "GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT" join
dup prettyprint cr cr tallybases</langsyntaxhighlight>
 
{{out}}
Line 2,387 ⟶ 3,348:
total 500
</pre>
 
=={{header|R}}==
<syntaxhighlight lang="r">
<lang r>
#Data
gene1 <- "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
Line 2,433 ⟶ 3,393:
)
 
</syntaxhighlight>
</lang>
 
{{out}}
Line 2,458 ⟶ 3,418:
Total Base Count: 500
</pre>
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">#lang racket
 
(define (fold-sequence seq kons #:finalise (finalise (λ x (apply values x))) . k0s)
Line 2,515 ⟶ 3,474:
EOS
)
(bioinformatics-Base_count the-string))</langsyntaxhighlight>
 
{{out}}
Line 2,541 ⟶ 3,500:
 
TOTAL: 500</pre>
 
=={{header|Raku}}==
(formerly Perl 6)
Line 2,549 ⟶ 3,507:
The specs for what "pretty print" means are sadly lacking. Ah well, just makes it easily defensible if I do ''anything at all''.
 
<syntaxhighlight lang="raku" perl6line>my $dna = join '', lines q:to/END/;
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
Line 2,569 ⟶ 3,527:
sub pretty ($string, $wrap = 50) {
$string.comb($wrap).map( { sprintf "%8d: %s", $++ * $wrap, $_ } ).join: "\n"
}</langsyntaxhighlight>
{{out}}
<pre> 0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGTAAGCGTTCCG
Line 2,584 ⟶ 3,542:
G 119
T 155</pre>
 
=={{header|REXX}}==
A little extra boilerplate was added to verify correct coding of the bases in a DNA string and the alignment of the (totals) numbers.
<langsyntaxhighlight lang="rexx">/*REXX program finds the number of each base in a DNA string (along with a total). */
/* (along with a total). */
parse arg dna .
Parse Arg dna .
if dna=='' | dna=="," then dna= 'cgtaaaaaattacaacgtcctttggctatctcttaaactcctgctaaatg' ,
If dna==''|dna==',' Then
'ctcgtgctttccaattatgtaagcgttccgagacggggtggtcgattctg' ,
dna='cgtaaaaaattacaacgtcctttggctatctcttaaactcctgctaaatg',
'aggacaaaggtcaagatggagcgcatcgaacgcaataaggatcatttgat' ,
'ctcgtgctttccaattatgtaagcgttccgagacggggtggtcgattctg',
'gggacgtttcgtcgacaaagtcttgtttcgagagtaacggctaccgtctt' ,
'aggacaaaggtcaagatggagcgcatcgaacgcaataaggatcatttgat',
'cgattctgcttataacactatgttcttatgaaatggatgttctgagttgg' ,
'gggacgtttcgtcgacaaagtcttgtttcgagagtaacggctaccgtctt',
'tcagtcccaatgtgcggggtttcttttagtacgtcgggagtggtattata' ,
'cgattctgcttataacactatgttcttatgaaatggatgttctgagttgg',
'tttaatttttctatatagcgatctgtatttaagcaattcatttaggttat' ,
'tcagtcccaatgtgcggggtttcttttagtacgtcgggagtggtattata',
'cgccgcgatgctcggttcggaccgccaagcatctggctccactgctagtg' ,
'tttaatttttctatatagcgatctgtatttaagcaattcatttaggttat',
'tcctaaatttgaatggcaaacacaaataagatttagcaattcgtgtagac' ,
'cgccgcgatgctcggttcggaccgccaagcatctggctccactgctagtg',
'gaccggggacttgcatgatgggagcagctttgttaaactacgaacgtaat'
'tcctaaatttgaatggcaaacacaaataagatttagcaattcgtgtagac',
dna= space(dna, 0); upper dna /*elide blanks from DNA; uppercase it. */
'gaccggggacttgcatgatgggagcagctttgttaaactacgaacgtaat'
say '────────length of the DNA string: ' length(dna)
dna=translate(space(dna,0)) /* elide blanks from DNA; uppercas*/
@.= 0 /*initialize the count for all bases. */
Say '--------length of the DNA string: ' length(dna)
w= 1 /*the maximum width of a base count. */
$count.= 0 /*a placeholder forinitialize the namescount offor all bases.*/
w=1 do j=1 for length(dna) /*traipse through the maximum DNA width string.of a base count */
names='' _= substr(dna, j, 1) /* list of all names /*obtain a base name from the DNA str. */
Do j=1 To if poslength(_, $dna)==0 then $= $ || _ /*if nottraipse through foundthe before, addDNA it tostring list. */
@._name= @._ + substr(dna,j,1 ) /*bump theobtain count of thisa base. name from the DNA */
If pos(name,names)==0 Then
w= max(w, length(@._) ) /*compute the maximum width number. */
names=names||name /* if not found, add it to the list */
end /*j*/
count.name=count.name+1 /* bump the count of this base. */
say
w=max(w,length(count.name)) /* compute the maximum number width */
do k=0 for 255; z= d2c(k) /*traipse through all possibilities. */
End
if pos(z, $)==0 then iterate /*Was this base found? No, then skip. */
Say
say ' base ' z " has a basecount of: " right(@.z, w)
Do k=0 To 255
@.tot= @.tot + @.z /*add to a grand total to verify count.*/
end /*z=d2c(k*/ ) /*stick a fork in it, traipse we'rethrough all done.possibilities */
If pos(z,names)>0 Then Do
say
say '────────total for all basecounts:Say ' base ' z ' has a basecount of: ' right(@count.totz, w+1)</lang>
count.tot=count.tot+count.z /* add to a grand total to verify */
End
End
Say
Say '--------total for all basecounts:' right(count.tot,w+1)
</syntaxhighlight>
{{out|output|text=&nbsp; when using the default input:}}
<pre>
Line 2,631 ⟶ 3,594:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
dna = "" +
"CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG" +
Line 2,671 ⟶ 3,634:
? "C : " + dnaBase["C"]
? "G : " + dnaBase["G"]
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,678 ⟶ 3,641:
C : 97
G : 119
</pre>
=={{header|RPL}}==
Bases are grouped by codons, then output by groups of 4 codons to match the 22-character screen
≪ "ACGT" → sequence nucleotides
≪ { 4 } 0 CON
1 sequence SIZE '''FOR''' j
sequence j DUP SUB
'''IF''' nucleotides SWAP POS '''THEN'''
LAST GET LAST ROT 1 + PUT '''END'''
'''NEXT'''
≫ ≫ '<span style="color:blue">BASECOUNT</span>' STO
≪ ""
1 3 PICK SIZE '''FOR''' j
OVER j DUP 2 + SUB + " " +
3 '''STEP'''
SWAP DROP → codons
≪ 1 codons SIZE '''FOR''' j
codons j DUP 15 + SUB
16 '''STEP'''
codons <span style="color:blue">BASECOUNT</span>
DUP 1 CON DOT <span style="color:grey">@ calculate the sum of the vector returned by BASECOUNT</span>
≫ ≫ '<span style="color:blue">SHOWSEQ</span>' STO
 
"CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTGAGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGATGGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTTCGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGGTCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATATTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTATCGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTGTCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGACGACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT" <span style="color:blue">SHOWSEQ</span>
{{out}}
<pre>
44: "CGT AAA AAA TTA "
43: "CAA CGT CCT TTG "
...
4: "TGT TAA ACT ACG "
3: "AAC GTA AT "
2: [ 129 97 119 155 ]
1: 500
</pre>
 
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">dna = <<DNA_STR
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
Line 2,704 ⟶ 3,701:
puts dna.chars.tally.sort.map{|ar| ar.join(" : ") }
puts "Total : #{dna.size}"
</syntaxhighlight>
</lang>
{{out}}
<pre>0 CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATGCTCGTGCTTT
Line 2,723 ⟶ 3,720:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">
use std::collections::HashMap;
 
Line 2,762 ⟶ 3,759:
println!("Total: {}", total_count);
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,786 ⟶ 3,783:
Total: 500
</pre>
 
=={{header|Swift}}==
 
<langsyntaxhighlight lang="swift">import Foundation
 
let dna = """
Line 2,810 ⟶ 3,806:
 
print("Counts: \(counts)")
print("Total: \(counts.values.reduce(0, +))")</langsyntaxhighlight>
 
{{out}}
Line 2,828 ⟶ 3,824:
["C": 97, "T": 155, "G": 119, "A": 129]
Total: 500</pre>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">namespace path ::tcl::mathop
 
proc process {data {width 50}} {
Line 2,857 ⟶ 3,852:
TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC \
GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT]
process $test 50</langsyntaxhighlight>
{{out}}
<pre> 0 CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
Line 2,876 ⟶ 3,871:
T 155
Total 500</pre>
=={{header|uBasic/4tH}}==
<syntaxhighlight lang="uBasic/4tH">a := "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG"
a = Join(a, "CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG")
a = Join(a, "AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT")
a = Join(a, "GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT")
a = Join(a, "CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG")
a = Join(a, "TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA")
a = Join(a, "TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT")
a = Join(a, "CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG")
a = Join(a, "TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC")
a = Join(a, "GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT")
 
For x = 0 To Len(a)-1
If (x % 50) = 0 Then Print : Print Using "__#: "; x;
Print Chr(Set(b, Peek (a, x)));
@(b - Ord("A")) = @(b - Ord("A")) + 1
Next
 
Print : Print : Push Ord("T"), Ord("G"), Ord("C"), Ord("A")
 
For x = 1 To Used()
Print Chr(Set(b, Pop())); Using ": __#"; @(b - Ord("A"))
Next</syntaxhighlight>
{{Out}}
<pre>
0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50: CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
100: AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
150: GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
200: CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
250: TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
300: TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
350: CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
400: TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
450: GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
 
A: 129
C: 97
G: 119
T: 155
 
0 OK, 0:957</pre>
=={{header|VBScript}}==
<syntaxhighlight lang="vb">
b=_
"CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG" &_
"CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG" &_
"AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT" &_
"GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT" &_
"CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG" &_
"TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA" &_
"TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT" &_
"CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG" &_
"TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC" &_
"GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"
 
s="SEQUENCE:"
acnt=0:ccnt=0:gcnt=0:tcnt=0
for i=0 to len(b)-1
if (i mod 30)=0 then s = s & vbcrlf & right(" "& i+1,3)&": "
if (i mod 5)=0 then s=s& " "
m=mid(b,i+1,1)
s=s & m
select case m
case "A":acnt=acnt+1
case "C":ccnt=ccnt+1
case "G":gcnt=gcnt+1
case "T":tcnt=tcnt+1
case else
wscript.echo "error at ",i+1, m
end select
next
wscript.echo s & vbcrlf
wscript.echo "Count: A="&acnt & " C=" & ccnt & " G=" & gcnt & " T=" & tcnt
</syntaxhighlight>
{{out}}
<pre>
SEQUENCE:
1: CGTAA AAAAT TACAA CGTCC TTTGG CTATC
31: TCTTA AACTC CTGCT AAATG CTCGT GCTTT
61: CCAAT TATGT AAGCG TTCCG AGACG GGGTG
91: GTCGA TTCTG AGGAC AAAGG TCAAG ATGGA
121: GCGCA TCGAA CGCAA TAAGG ATCAT TTGAT
151: GGGAC GTTTC GTCGA CAAAG TCTTG TTTCG
181: AGAGT AACGG CTACC GTCTT CGATT CTGCT
211: TATAA CACTA TGTTC TTATG AAATG GATGT
241: TCTGA GTTGG TCAGT CCCAA TGTGC GGGGT
271: TTCTT TTAGT ACGTC GGGAG TGGTA TTATA
301: TTTAA TTTTT CTATA TAGCG ATCTG TATTT
331: AAGCA ATTCA TTTAG GTTAT CGCCG CGATG
361: CTCGG TTCGG ACCGC CAAGC ATCTG GCTCC
391: ACTGC TAGTG TCCTA AATTT GAATG GCAAA
421: CACAA ATAAG ATTTA GCAAT TCGTG TAGAC
451: GACCG GGGAC TTGCA TGATG GGAGC AGCTT
481: TGTTA AACTA CGAAC GTAAT
 
Count: A=129 C=97 G=119 T=155
</pre>
 
=={{header|V (Vlang)}}==
{{trans|go}}
<syntaxhighlight lang="v (vlang)">fn main() {
dna := "" +
"CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG" +
"CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG" +
"AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT" +
"GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT" +
"CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG" +
"TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA" +
"TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT" +
"CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG" +
"TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC" +
"GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT"
println("SEQUENCE:")
le := dna.len
for i := 0; i < le; i += 50 {
mut k := i + 50
if k > le {
k = le
}
println("${i:5}: ${dna[i..k]}")
}
mut base_map := map[byte]int{} // allows for 'any' base
for i in 0..le {
base_map[dna[i]]++
}
mut bases := base_map.keys()
bases.sort()
println("\nBASE COUNT:")
for base in bases {
println(" $base: ${base_map[base]:3}")
}
println(" ------")
println(" Σ: $le")
println(" ======")
}</syntaxhighlight>
 
{{out}}
<pre>
SEQUENCE:
0: CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
50: CTCGTGCTTTCCAATTATGTAAGCGTTCCGAGACGGGGTGGTCGATTCTG
100: AGGACAAAGGTCAAGATGGAGCGCATCGAACGCAATAAGGATCATTTGAT
150: GGGACGTTTCGTCGACAAAGTCTTGTTTCGAGAGTAACGGCTACCGTCTT
200: CGATTCTGCTTATAACACTATGTTCTTATGAAATGGATGTTCTGAGTTGG
250: TCAGTCCCAATGTGCGGGGTTTCTTTTAGTACGTCGGGAGTGGTATTATA
300: TTTAATTTTTCTATATAGCGATCTGTATTTAAGCAATTCATTTAGGTTAT
350: CGCCGCGATGCTCGGTTCGGACCGCCAAGCATCTGGCTCCACTGCTAGTG
400: TCCTAAATTTGAATGGCAAACACAAATAAGATTTAGCAATTCGTGTAGAC
450: GACCGGGGACTTGCATGATGGGAGCAGCTTTGTTAAACTACGAACGTAAT
 
BASE COUNT:
A: 129
C: 97
G: 119
T: 155
------
Σ: 500
======
</pre>
 
=={{header|Wren}}==
Line 2,881 ⟶ 4,041:
{{libheader|Wren-fmt}}
{{libheader|Wren-sort}}
{{libheader|Wren-traititerate}}
<langsyntaxhighlight ecmascriptlang="wren">import "./fmt" for Fmt
import "./sort" for Sort
import "./traititerate" for Stepped
 
var dna = "CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG" +
Line 2,919 ⟶ 4,079:
System.print(" ------")
System.print(" Σ: %(le)")
System.print(" ======")</langsyntaxhighlight>
 
{{out}}
Line 2,946 ⟶ 4,106:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">char Bases;
int Counts(256), Cnt, I, Ch;
[Bases:= "
Line 2,980 ⟶ 4,140:
Text(0, "
Total: "); IntOut(0, Cnt); CrLf(0);
]</langsyntaxhighlight>
 
{{out}}
Line 2,999 ⟶ 4,159:
Total: 500
</pre>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">bases:=
#<<<"
CGTAAAAAATTACAACGTCCTTTGGCTATCTCTTAAACTCCTGCTAAATG
Line 3,019 ⟶ 4,178:
 
println("\nBase Counts: ", bases.counts().pump(String,Void.Read,"%s: %d ".fmt));
println("Total: ",bases.len());</langsyntaxhighlight>
{{out}}
<pre>
2,120

edits