{"id":735,"date":"2013-05-15T21:42:58","date_gmt":"2013-05-15T21:42:58","guid":{"rendered":"http:\/\/psyphi.net\/blog\/?p=735"},"modified":"2013-05-15T21:42:58","modified_gmt":"2013-05-15T21:42:58","slug":"unique-overlapping-kmer-strings","status":"publish","type":"post","link":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/","title":{"rendered":"unique, overlapping kmer strings"},"content":{"rendered":"<p>Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless.<\/p>\n<p>It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends a seed, terminating the recursion and printing if all kmers have been used.<\/p>\n<p>Run it like so:<\/p>\n<pre><code> .\/kmer-overlap -k=3 -overlap=2 ACTG<\/code><\/pre>\n<pre><code>#!\/usr\/local\/bin\/perl\r\n#########\r\n# Author:        rmp\r\n# Created:       2013-05-15\r\n# Last Modified: $Date$\r\n# Id:            $Id$\r\n# HeadURL:       $HeadURL$\r\n#\r\nuse strict;\r\nuse warnings;\r\nuse Getopt::Long;\r\nuse Readonly;\r\nuse English qw(-no_match_vars);\r\n\r\nReadonly::Scalar our $DEFAULT_K =&gt; 3;\r\nReadonly::Scalar our $DEFAULT_BASES =&gt; [qw(A C T G)];\r\n\r\nmy $opts = {};\r\nGetOptions($opts, qw(k=s rand help));\r\n\r\nif($opts-&gt;{help}) {\r\n  print &lt; &lt;\"EOT\"; $PROGRAM_NAME - rmp 2013-05-15 Usage:  $PROGRAM_NAME -k=3 -overlap=2 -rand ACTG EOT   exit; } my $k       = $opts-&gt;{k}       || $DEFAULT_K;\r\nmy $overlap = $opts-&gt;{overlap} || $k-1;\r\nmy $bases   = $DEFAULT_BASES;\r\n\r\nif(scalar @ARGV) {\r\n  $bases = [grep { $_ } map {split \/\/smx} @ARGV];\r\n}\r\n\r\n#########\r\n# Build all available kmers\r\n#\r\nmy $kmers = [];\r\n\r\nfor my $base1 (@{$bases}) {\r\n  build($base1, $bases, $kmers);\r\n}\r\n\r\n#########\r\n# optionally randomise the seeds\r\n#\r\nif($opts-&gt;{rand}) {\r\n  shuffle($kmers);\r\n}\r\n\r\n#########\r\n# start with a seed\r\n#\r\nfor my $seed (@{$kmers}) {\r\n  my $seen = {\r\n\t      $seed =&gt; 1,\r\n\t     };\r\n  solve($seed, $seen);\r\n}\r\n\r\nsub build {\r\n  my ($seq, $bases, $kmers) = @_;\r\n  if(length $seq == $k) {\r\n    #########\r\n    # reached target k - store &amp; terminate\r\n    #\r\n    push @{$kmers}, $seq;\r\n    return 1;\r\n  }\r\n\r\n  for my $base (@{$bases}) {\r\n    ########\r\n    # extend and descend\r\n    #\r\n    build(\"$seq$base\", $bases, $kmers);\r\n  }\r\n\r\n  return;\r\n}\r\n\r\nsub solve {\r\n  my ($seq_in, $seen) = @_;\r\n\r\n  if(scalar keys %{$seen} == scalar @{$kmers}) {\r\n    #########\r\n    # exhausted all kmers - completed!\r\n    #\r\n    print $seq_in, \"\\n\";\r\n    return 1;\r\n  }\r\n\r\n  my $seq_tail     = substr $seq_in, -$overlap, $overlap;\r\n\r\n  my $overlapping  = [grep { $_ =~ \/^$seq_tail\/smx } # filter in only seqs which overlap the seed tail\r\n\t\t      grep { !$seen-&gt;{$_} }          # filter out kmers we've seen already\r\n\t\t      @{$kmers}];\r\n  if(!scalar @{$overlapping}) {\r\n    #########\r\n    # no available overlapping kmers - terminate!\r\n    #\r\n    return;\r\n  }\r\n\r\n  if($opts-&gt;{rand}) {\r\n    shuffle($overlapping);\r\n  }\r\n\r\n  my $overhang = $k-$overlap;\r\n  for my $overlap_seq (@{$overlapping}) {\r\n    #########\r\n    # extend and descend\r\n    #\r\n    my $seq_out = $seq_in . substr $overlap_seq, -$overhang, $overhang;\r\n    solve($seq_out, {%{$seen}, $overlap_seq =&gt; 1});\r\n  }\r\n\r\n  return;\r\n}\r\n\r\nsub shuffle {\r\n  my ($arr_in) = @_;\r\n  for my $i (0..scalar @{$arr_in}-1) {\r\n    my $j = int rand $i;\r\n    ($arr_in-&gt;[$i], $arr_in-&gt;[$j]) = ($arr_in-&gt;[$j], $arr_in-&gt;[$i]);\r\n  }\r\n}<\/code><\/pre>\n<p>Output looks like this:<\/p>\n<pre><code>epiphyte:~ rmp$ .\/kmer-overlap -k=2 AC\r\nAACCA\r\nACCAA\r\nCAACC\r\nCCAAC<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends &hellip; <a href=\"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;unique, overlapping kmer strings&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[11],"tags":[38,920,21,778],"class_list":["post-735","post","type-post","status-publish","format-standard","hentry","category-programming","tag-bioinformatics","tag-kmers","tag-perl","tag-sequence"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Roger Pettett\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"psyphi.net blog - Another collection of braingunk and technolint\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"unique, overlapping kmer strings - psyphi.net blog\" \/>\n\t\t<meta property=\"og:description\" content=\"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2013-05-15T21:42:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2013-05-15T21:42:58+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"unique, overlapping kmer strings - psyphi.net blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#blogposting\",\"name\":\"unique, overlapping kmer strings - psyphi.net blog\",\"headline\":\"unique, overlapping kmer strings\",\"author\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/author\\\/rmp\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/#organization\"},\"datePublished\":\"2013-05-15T21:42:58+00:00\",\"dateModified\":\"2013-05-15T21:42:58+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#webpage\"},\"articleSection\":\"programming, bioinformatics, kmers, perl, sequence\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/psyphi.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/category\\\/programming\\\/#listItem\",\"name\":\"programming\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/category\\\/programming\\\/#listItem\",\"position\":2,\"name\":\"programming\",\"item\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/category\\\/programming\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#listItem\",\"name\":\"unique, overlapping kmer strings\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#listItem\",\"position\":3,\"name\":\"unique, overlapping kmer strings\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/category\\\/programming\\\/#listItem\",\"name\":\"programming\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/#organization\",\"name\":\"psyphi.net blog\",\"description\":\"Another collection of braingunk and technolint\",\"url\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/author\\\/rmp\\\/#author\",\"url\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/author\\\/rmp\\\/\",\"name\":\"Roger Pettett\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f715f8335258578c567eb8c22335f1cee22c971c2aff8be27c4d8d934c436503?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Roger Pettett\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#webpage\",\"url\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/\",\"name\":\"unique, overlapping kmer strings - psyphi.net blog\",\"description\":\"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/2013\\\/05\\\/unique-overlapping-kmer-strings\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/author\\\/rmp\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/author\\\/rmp\\\/#author\"},\"datePublished\":\"2013-05-15T21:42:58+00:00\",\"dateModified\":\"2013-05-15T21:42:58+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/\",\"name\":\"psyphi.net blog\",\"description\":\"Another collection of braingunk and technolint\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/psyphi.net\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"unique, overlapping kmer strings - psyphi.net blog","description":"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends","canonical_url":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#blogposting","name":"unique, overlapping kmer strings - psyphi.net blog","headline":"unique, overlapping kmer strings","author":{"@id":"https:\/\/psyphi.net\/blog\/author\/rmp\/#author"},"publisher":{"@id":"https:\/\/psyphi.net\/blog\/#organization"},"datePublished":"2013-05-15T21:42:58+00:00","dateModified":"2013-05-15T21:42:58+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#webpage"},"isPartOf":{"@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#webpage"},"articleSection":"programming, bioinformatics, kmers, perl, sequence"},{"@type":"BreadcrumbList","@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/psyphi.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/psyphi.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/psyphi.net\/blog\/category\/programming\/#listItem","name":"programming"}},{"@type":"ListItem","@id":"https:\/\/psyphi.net\/blog\/category\/programming\/#listItem","position":2,"name":"programming","item":"https:\/\/psyphi.net\/blog\/category\/programming\/","nextItem":{"@type":"ListItem","@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#listItem","name":"unique, overlapping kmer strings"},"previousItem":{"@type":"ListItem","@id":"https:\/\/psyphi.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#listItem","position":3,"name":"unique, overlapping kmer strings","previousItem":{"@type":"ListItem","@id":"https:\/\/psyphi.net\/blog\/category\/programming\/#listItem","name":"programming"}}]},{"@type":"Organization","@id":"https:\/\/psyphi.net\/blog\/#organization","name":"psyphi.net blog","description":"Another collection of braingunk and technolint","url":"https:\/\/psyphi.net\/blog\/"},{"@type":"Person","@id":"https:\/\/psyphi.net\/blog\/author\/rmp\/#author","url":"https:\/\/psyphi.net\/blog\/author\/rmp\/","name":"Roger Pettett","image":{"@type":"ImageObject","@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/f715f8335258578c567eb8c22335f1cee22c971c2aff8be27c4d8d934c436503?s=96&d=mm&r=g","width":96,"height":96,"caption":"Roger Pettett"}},{"@type":"WebPage","@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#webpage","url":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/","name":"unique, overlapping kmer strings - psyphi.net blog","description":"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/psyphi.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/#breadcrumblist"},"author":{"@id":"https:\/\/psyphi.net\/blog\/author\/rmp\/#author"},"creator":{"@id":"https:\/\/psyphi.net\/blog\/author\/rmp\/#author"},"datePublished":"2013-05-15T21:42:58+00:00","dateModified":"2013-05-15T21:42:58+00:00"},{"@type":"WebSite","@id":"https:\/\/psyphi.net\/blog\/#website","url":"https:\/\/psyphi.net\/blog\/","name":"psyphi.net blog","description":"Another collection of braingunk and technolint","inLanguage":"en-US","publisher":{"@id":"https:\/\/psyphi.net\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"psyphi.net blog - Another collection of braingunk and technolint","og:type":"article","og:title":"unique, overlapping kmer strings - psyphi.net blog","og:description":"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends","og:url":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/","article:published_time":"2013-05-15T21:42:58+00:00","article:modified_time":"2013-05-15T21:42:58+00:00","twitter:card":"summary_large_image","twitter:title":"unique, overlapping kmer strings - psyphi.net blog","twitter:description":"Tinkering today I wrote a quick toy to generate strings of unique, overlapping kmers. Not particularly efficient, but possibly handy nonetheless. It takes a given k size, a configurable overlap and optionally the bases to use. First it generates a list of all the kmers then it recursively scans for matching overlapping kmers and extends"},"aioseo_meta_data":{"post_id":"735","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2024-05-16 17:00:02","updated":"2025-08-15 17:32:03","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/psyphi.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/psyphi.net\/blog\/category\/programming\/\" title=\"programming\">programming<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tunique, overlapping kmer strings\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/psyphi.net\/blog"},{"label":"programming","link":"https:\/\/psyphi.net\/blog\/category\/programming\/"},{"label":"unique, overlapping kmer strings","link":"https:\/\/psyphi.net\/blog\/2013\/05\/unique-overlapping-kmer-strings\/"}],"_links":{"self":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts\/735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/comments?post=735"}],"version-history":[{"count":6,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts\/735\/revisions"}],"predecessor-version":[{"id":741,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/posts\/735\/revisions\/741"}],"wp:attachment":[{"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/media?parent=735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/categories?post=735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/psyphi.net\/blog\/wp-json\/wp\/v2\/tags?post=735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}