Bu meydan okuma için Ruby Abbrevmodülünü olabildiğince az kodda uygulamalısınız .
Meydan okuma
Giriş, dilinizin dizeler dizisi (dizi, liste, dizi vb.) Olarak sahip olduğu her şey olacaktır. Bir işlev yazabilir veya STDIN üzerinde virgülle ayrılmış sözcükleri kabul edebilirsiniz.
Daha sonra bu dizeler için açık önek kümesini hesaplamanız gerekir. Bu, kısaltmaların karma değerini (veya eşlemini, nesnesini, vb.) Orijinal dizelerine döndürmeniz gerektiği anlamına gelir.
Bir "önek", dizenin başında başlayan orijinal dizenin bir alt dizesidir. Örneğin, "pref", "prefix" kelimesinin bir önekidir.
Bir açık öneki sadece tek kelime anlamına gelebilir biridir. Girişinizi ise Örneğin,
car,catdaha sonracao da "araba" veya anlamına gelebilir çünkü kesin bir önek değil "kedi."Bu kuralın istisnası, bir kelimenin her zaman kendi önekidir. Eğer olarak girdi böyle varsa Örneğin,
car,carpet,car:carçıktınıza olmalıdır.
Daha sonra hash / map / object / etc öğesini döndürebilirsiniz. işlevinden (veya kendi dilinizde eşdeğerini yapın) veya STDOUT'a
key:valueçiftler halinde yazdırınf:foo,fo:foo,.... (Anahtar / değer çiftleri, kodunuzu kısaltırsa boşlukla da ayrılabilir.)
Test senaryoları
Input code,golf,going
Output c:code,co:code,cod:code,code:code,gol:golf,golf:golf,goi:going,goin:going,going:going
Input pie
Output p:pie,pi:pie,pie:pie
Input pie,pier,pierre
Output pie:pie,pier:pier,pierr:pierre,pierre:pierre
Input a,dog
Output a:a,d:dog,do:dog,dog:dog
kurallar
Giriş, yinelenen öğeler içermeyecektir.
Çıktınız herhangi bir sırada olabilir; sıralamak zorunda değilsiniz.
AbbrevRuby gibi yerleşik bir modül / işlev / şey kullanamazsınız .Bu kod golf , bu yüzden bayt içindeki en kısa kod kazanacak!
key:value\nkey:value\nkey:value...?