Skip to content

doesn't return shortest common superstring? #1

@increpare

Description

@increpare

I ran your code on the wordlist from toki pona

worter = ["a", "akesi", "ala", "alasa", "ale", "ali", "anpa", "ante", "anu", "awen", "e", "en", "esun", "ijo", "ike", "ilo", "insa", "jaki", "jan", "jelo", "jo", "kala", "kalama", "kama", "kasi", "ken", "kepeken", "kili", "kiwen", "ko", "kon", "kule", "kulupu", "kute", "la", "lape", "laso", "lawa", "len", "lete", "li", "lili", "linja", "lipu", "loje", "lon", "luka", "lukin", "oko", "lupa", "ma", "mama", "mani", "meli", "mi", "mije", "moku", "moli", "monsi", "mu", "mun", "musi", "mute", "nanpa", "nasa", "nasin", "nena", "ni", "nimi", "noka", "o", "olin", "ona", "open", "pakala", "pali", "palisa", "pan", "pana", "pi", "pilin", "pimeja", "pini", "pipi", "poka", "poki", "pona", "pu", "sama", "seli", "selo", "seme", "sewi", "sijelo", "sike", "sin", "namako", "sina", "sinpin", "sitelen", "sona", "soweli", "suli", "suno", "supa", "suwi", "tan", "taso", "tawa", "telo", "tenpo", "toki", "tomo", "tu", "unpa", "uta", "utala", "walo", "wan", "waso", "wawa", "weka", "wile"]
scs=ShortestCommonSuperstring(worter)

print(scs)

it produced a string which, when concatinated, is 282 characters

['kule', 'kute', 'lupa', 'mute', 'pilin', 'poki', 'seli', 'selo', 'sewi', 'taso', 'tu', 'weka', 'suli', 'lukinsamani', 'molinjan', 'tomonsinpinimije', 'lawanu', 'wawaloje', 'pipimejakiwen', 'lasonanpakalama', 'ponamakon', 'tokilili', 'musijeloko', 'semelijo', 'tantenpokamamaletelon', 'munpanasinasawen', 'lapesunokakesikepeken', 'mokuluputalasa', 'lukasitelenena', 'tawasowelilopen', 'suwile', 'supalisalipu']

kulekutelupamutepilinpokiseliselosewitasotuwekasulilukinsamanimolinjantomonsinpinimijelawanuwawalojepipimejakiwenlasonanpakalamaponamakontokililimusijelokosemelijotantenpokamamaletelonmunpanasinasawenlapesunokakesikepekenmokuluputalasalukasitelenenatawasowelilopensuwilesupalisalipu

however this is a shorter string containing all words (generated with this ):

lukinsakesitelenpilinjantenpokamawenkuletelokopenenasinpinijokutelapelasoweliliputalasalesunokasikepekenlawasonamakonlukalupalisamamokulupumolinmusinanpakalamamanimijemutepipimejakiwenpokililoponaseliselosemelisewilesulisupanasasuwitasotawawalojetokitomonsijelonwekamunpatanuwantu

it's 280 characters, vs 282 which your code gives.

here's my testing code (node.js)

var wörter = ["a", "akesi", "ala", "alasa", "ale", "ali", "anpa", "ante", "anu", "awen", "e", "en", "esun", "ijo", "ike", "ilo", "insa", "jaki", "jan", "jelo", "jo", "kala", "kalama", "kama", "kasi", "ken", "kepeken", "kili", "kiwen", "ko", "kon", "kule", "kulupu", "kute", "la", "lape", "laso", "lawa", "len", "lete", "li", "lili", "linja", "lipu", "loje", "lon", "luka", "lukin", "oko", "lupa", "ma", "mama", "mani", "meli", "mi", "mije", "moku", "moli", "monsi", "mu", "mun", "musi", "mute", "nanpa", "nasa", "nasin", "nena", "ni", "nimi", "noka", "o", "olin", "ona", "open", "pakala", "pali", "palisa", "pan", "pana", "pi", "pilin", "pimeja", "pini", "pipi", "poka", "poki", "pona", "pu", "sama", "seli", "selo", "seme", "sewi", "sijelo", "sike", "sin", "namako", "sina", "sinpin", "sitelen", "sona", "soweli", "suli", "suno", "supa", "suwi", "tan", "taso", "tawa", "telo", "tenpo", "toki", "tomo", "tu", "unpa", "uta", "utala", "walo", "wan", "waso", "wawa", "weka", "wile"]

var teststr1 = "lukinsakesitelenpilinjantenpokamawenkuletelokopenenasinpinijokutelapelasoweliliputalasalesunokasikepekenlawasonamakonlukalupalisamamokulupumolinmusinanpakalamamanimijemutepipimejakiwenpokililoponaseliselosemelisewilesulisupanasasuwitasotawawalojetokitomonsijelonwekamunpatanuwantu"

// from php algo
var teststr2 = "lasonanpakalamakesikepekenenamakontokisupalisatasokulupuponamusinpinisulitusemelisewimokulelukinwekasijelosuwiletomolinjakiwenpilinsaselomunpanasinasakutemutewasowelilapelupatawanupipimejantenpokililokoselijopenpokawenmonsitelenlawawalojelukaliliputalasamamanimijesunokamaletelontan"

// from python algo
var teststr3 = "kulekutelupamutepilinpokiseliselosewitasotuwekasulilukinsamanimolinjantomonsinpinimijelawanuwawalojepipimejakiwenlasonanpakalamaponamakontokililimusijelokosemelijotantenpokamamaletelonmunpanasinasawenlapesunokakesikepekenmokuluputalasalukasitelenenatawasowelilopensuwilesupalisalipu"


function test(s){
	var bad=false;
	console.log("\ntesting string "+s+"\n")	
	for (var i=0;i<wörter.length;i++){
		var w = wörter[i];
		if (s.indexOf(w)===-1){
			console.log("coudln't find "+w+".")
			bad=true;
		}
	}
	if (bad===false){
		console.log("all checks out - contains every word.")
	}

}

test(teststr1)
test(teststr2)
test(teststr3)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions