文字列をWicka-wub


8

これに触発されました。

大文字と小文字のアルファベット文字のみで構成される入力として文字列が与えられた場合、それをwicka-wubします。

文字列をウィッカウブする方法は?

使用されるテキスト例は「DJMcMayhem」です。

各大文字の前で文字列を分割すると、が得られ["D", "J", "Mc", "Mayhem"]ます。

次に、リストの2つの半分をサブリストとして扱います。これは私たちに与え[["D", "J"],["Mc", "Mayhem"]]ます。リストの長さが奇数(つまり3)の場合、最初のサブリストには中央の部分文字列(つまり[[a,b], [c]])が含まれます。

wickawubのリストを作成します。wickas の数は、入力リストの最初の部分(つまり["D", "J"] -> ["wicka", "wicka"]wubsの長さと同じでなければなりません。また、の数は、入力リストの2番目の部分の長さと同じでなければなりません。私たちの場合、これはを与え["wicka", "wicka", "wub", "wub"]ます。

ここで、入力リストのサブリストを単一の文字列に結合し、フラット化します。

現在とが["DJ", "McMayhem"]あり["wicka", "wicka", "wub", "wub"]ます。

参加wicka/ wubでリスト-秒:wicka-wicka-wub-wub。先頭に-。入力に複数の大文字がある場合は、もう1つを追加します-

今、とが ["DJ", "McMayhem"]あり"-wicka-wicka-wub-wub-"ます。

追加wicka-wub取得するには、入力リストの最初の項目の末尾に文字列を["DJ-wicka-wicka-wub-wub-","McMayhem"]

最後に、文字列の2番目の部分の文字を、元の入力文字列の0インデックス値で繰り返します。私たちの例では、それは最初のものMが2回繰り返され、次にc3回、そして次のM4回繰り返されることを意味します。リストに参加すると、2番目の部分(文字を繰り返し入力した部分)が最初の部分("DJ-wicka-wicka-wub-wub-")に追加されます。

入力の最終結果:

"DJ-wicka-wicka-wub-wub-MMcccMMMMaaaaayyyyyyhhhhhhheeeeeeeemmmmmmmmm"

総プロセス:

["D", "J", "Mc", "Mayhem"] =>
[["D", "J"], ["Mc", "Mayhem"]] => 
["DJ", "McMayhem"] and ["wicka", "wicka", "wub", "wub"] =>
["DJ", "McMayhem"] and "-wicka-wicka-wub-wub-" =>
["DJ-wicka-wicka-wub-wub-", "McMayhem"] =>
"DJ-wicka-wicka-wub-wub-MMcccMMMMaaaaayyyyyyhhhhhhheeeeeeeemmmmmmmmm"

あなたのタスク

あなたの仕事は、大文字と小文字のアルファベット文字のみで構成される文字列が与えられた場合、その文字列の吹き替えバージョンを出力することです。

いくつかのルール

  • 入力は、すべて小文字、すべて大文字、またはそれぞれ任意の数で構成できますが、他の文字は使用できません。
  • 入力が完全に小文字で構成されている場合、正しい出力は最終段階(0から始まる位置に従って文字が繰り返される文字列)になります。ないwickaか、wubその場合は、そのます。
  • 標準的なルールが適用され、完全なプログラムまたは機能はあなた次第です。
  • これはので、最短のコードが優先されます。

GoodLuck-wicka-wicka-wub-GGGGGGGGooooooooollllllllllfffffffffffeeeeeeeeeeerrrrrrrrrrrrrssssssssssssss

テストケース

input => output

DJMcMayhem => DJ-wicka-wicka-wub-wub-MMcccMMMMaaaaayyyyyyhhhhhhheeeeeeeemmmmmmmmm
PPCG => PP-wicka-wicka-wub-wub-CCGGG
foobarbaz => fooooobbbbaaaaarrrrrrbbbbbbbaaaaaaaazzzzzzzzz
FooBarBaz => FooBar-wicka-wicka-wub-BBBBBBaaaaaaazzzzzzzz
HelloWorld => Hello-wicka-wub-WWWWWoooooorrrrrrrllllllllddddddddd
Test => Test-wicka
UPPER => UPP-wicka-wicka-wicka-wub-wub-EEERRRR
fooBarBaz => fooBar-wicka-wicka-wub-BBBBBBaaaaaaazzzzzzzz


5大文字のテストを追加できますか?
ロッド

これはPythonの手に負えないリファレンス実装です
caird coinheringaahing

1
代わりに「Wubba Lubba Dub Dub」を使用できますか?ただし、バイトを節約できません:P。
Magic Octopus Urn 2017

2
foobarbaz単に戻る必要がありfoobarbazますか?後編はありますか?
Erik the Outgolfer 2017

回答:


1

Java 8(782バイト)

import com.google.common.collect.*;import java.util.*;import java.util.function.*;public class p{Function<String,String>b=s->{List<String>p=Arrays.asList(s.split("(?=[A-Z])"));if(!s.matches("[^A-Z]*[A-Z].+")){String w="";int i=0;for(char c:String.join("",s).toCharArray()){w+=String.join("",Collections.nCopies(i,Character.toString(c)));i++;}return w;}String h="-";List<List<String>>k;if(p.size()!=1){k=Lists.partition(p,2);String w=String.join("",k.get(0))+h+String.join(h,Collections.nCopies(k.get(0).size(),"wicka"))+h+String.join(h,Collections.nCopies(k.get(1).size(),"wub"))+h;int i=String.join("", k.get(0)).length();for(char c:String.join("",k.get(1)).toCharArray()){w+=String.join("",Collections.nCopies(i,Character.toString(c)));i++;}return w;}return p.get(0)+h+"wicka";};}

未ゴルフ:

import com.google.common.collect.*;

import java.util.*;
import java.util.function.*;

public class p {
    Function<String, String> b = s -> {
        List<String> p = Arrays.asList(s.split("(?=[A-Z])"));

        if (!s.matches("[^A-Z]*[A-Z].+")) {
            String w = "";

            int i = 0;

            for (char c : String.join("", s).toCharArray()) {
                w += String.join("", Collections.nCopies(i, Character.toString(c)));

                i++;
            }

            return w;
        }

        String h = "-";

        List<List<String>> k;

        if (p.size() != 1) {
            k = Lists.partition(p, 2);

            String w = String.join("", k.get(0)) + h + String.join(h, Collections.nCopies(k.get(0).size(), "wicka")) + h + String.join(h,    Collections.nCopies(k.get(1).size(), "wub")) + h;

            int i = String.join("", k.get(0)).length();

            for (char c : String.join("", k.get(1)).toCharArray()) {
                w += String.join("", Collections.nCopies(i, Character.toString(c)));

                i++;
            }
            return w;
        }

        return p.get(0) + h + "wicka";
    };
}

1

Perl 5、142バイト

130バイトコード+の12 -F(?=[A-Z])

これで、提供されるすべてのテストケースが正しく一致するようになりました。

map$a+=y///c,@E=($z=/[A-Z]/)?splice@F,0,@F/2+.5:();print@E,("-wicka"x@E,"-wub"x@F,"-"x!!@F)x$z,map$_ x$a++,$z?map/./g,@F:('',/./g)

オンラインでお試しください!

:TIOには-l、すべてのテストを一度に実行することが含まれます。


1

Kotlin 1.1の- 494の 492バイト

提出

typealias S=String
fun Iterable<*>.j(s:S="")=this.joinToString(s)
fun s(s:S):S{var c=0
val m=mutableListOf<S>()
var t=""
s.map{if(it.isUpperCase()){c+=1
if(t!=""){m.add(t)
t=""}}
t+=it}
if(c==0)return e(s,1)
m.add(t)
val p=Math.ceil(m.size/2.0).toInt()
val f=m.subList(0,p)
val z=m.subList(p,m.size)
val w=List(f.size,{"wicka"})
val u=List(z.size,{"wub"})
val x=f.j()
var v="-"+(w+u).j("-")
if(c>1)v+="-"
return x+v+e(z.j(),x.length)}
fun e(s:S,o:Int)=s.mapIndexed{c,i->List(c+o,{i}).j()}.j()

テスト

typealias S=String
fun Iterable<*>.j(s:S="")=this.joinToString(s)
fun s(s:S):S{var c = 0
val m=mutableListOf<S>()
var t=""
s.map{if(it.isUpperCase()){c+=1
if(t!=""){m.add(t)
t=""}}
t+=it}
if(c==0)return e(s,1)
m.add(t)
val p=Math.ceil(m.size/2.0).toInt()
val f=m.subList(0,p)
val z=m.subList(p,m.size)
val w=List(f.size,{"wicka"})
val u=List(z.size,{"wub"})
val x=f.j()
var v="-"+(w+u).j("-")
if(c>1)v+="-"
return x+v+e(z.j(),x.length)}
fun e(s:S,o:Int)=s.mapIndexed{c,i->List(c+o,{i}).j()}.j()

data class TestData(val input: String, val output: String)

fun main(args: Array<String>) {
    val tests = listOf(
            TestData("DJMcMayhem", "DJ-wicka-wicka-wub-wub-MMcccMMMMaaaaayyyyyyhhhhhhheeeeeeeemmmmmmmmm"),
            TestData("PPCG", "PP-wicka-wicka-wub-wub-CCGGG"),
            TestData("foobarbaz", "fooooobbbbaaaaarrrrrrbbbbbbbaaaaaaaazzzzzzzzz"),
            TestData("FooBarBaz", "FooBar-wicka-wicka-wub-BBBBBBaaaaaaazzzzzzzz"),
            TestData("HelloWorld", "Hello-wicka-wub-WWWWWoooooorrrrrrrllllllllddddddddd"),
            TestData("Test", "Test-wicka"),
            TestData("UPPER", "UPP-wicka-wicka-wicka-wub-wub-EEERRRR"),
            TestData("fooBarBaz", "fooBar-wicka-wicka-wub-BBBBBBaaaaaaazzzzzzzz")
    )

    for (test in tests) {
        var out = s(test.input)
        if (out != test.output) {
            System.err.println("TEST FAILED")
            System.err.println("IN  " + test.input)
            System.err.println("EXP " + test.output)
            System.err.println("OUT " + out)
            return
        }
    }
    println("Test Passed")
}

ランニング

KotlinLangで動作しますが、1.1はサポートされていないため、TryItOnlineでは動作しません

私のコンプレッサーを実行し、2バイト節約しました


0

Pythonの3234の 281 270 248 246バイト

s,j=input(),"".join;f=lambda l,n:j(c*i for i,c in enumerate(j(l),n));import re;u=re.split("([A-Z])",s);l=len(u)
m=[j(u[i:i+2])for i in range(1,l,2)];i=-~l//4;d=j(m[:i]);print((j([d+"-wicka"*i+"-wub"*(l//2-i)+"-",f(m[i:],len(d))]),f(u[0],1))[l<2])

オンラインでお試しください!

Xcoder氏のおかげで47バイトが追加されました;)

Jonathan Frechのおかげで11バイト節約

Halvard Hummelのおかげで22バイトを節約

Xcoder氏のお陰でさらに2バイト節約


1
の失敗foobar
Xcoder氏2017

@ Mr.Xcoderが修正されました!
jferard 2017

2
Xcoder氏のおかげで47バイトが追加されました;) > _>
Xcoder氏17


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.