Wicka-wub một chuỗi


8

Lấy cảm hứng từ điều này.

Đưa ra một chuỗi làm đầu vào chỉ bao gồm các ký tự chữ cái viết hoa và viết thường, wicka-wub nó.

Làm thế nào để tôi wicka-wub một chuỗi?

Văn bản ví dụ được sử dụng là "DJMcMayhem".

Tách chuỗi trước mỗi chữ in hoa, để bạn nhận được ["D", "J", "Mc", "Mayhem"].

Tiếp theo, lấy hai nửa của danh sách làm danh sách phụ. Điều này cho chúng ta [["D", "J"],["Mc", "Mayhem"]]. Nếu danh sách có độ dài lẻ (tức là 3), danh sách con đầu tiên sẽ chứa chuỗi con giữa (nghĩa là [[a,b], [c]]).

Tạo một danh sách wickas và wubs. Số lượng wickas nên nhiều bằng độ dài của phần đầu tiên của danh sách đầu vào (nghĩa là ["D", "J"] -> ["wicka", "wicka"]) và số lượng wubsnên bằng với độ dài của phần thứ hai của danh sách đầu vào. Trong trường hợp của chúng tôi, điều này mang lại ["wicka", "wicka", "wub", "wub"].

Bây giờ hãy tham gia các danh sách con của danh sách đầu vào thành các chuỗi đơn và làm phẳng.

Chúng tôi hiện đang có ["DJ", "McMayhem"]["wicka", "wicka", "wub", "wub"].

Tham gia wicka/ wubdanh sách với -s : wicka-wicka-wub-wub. Chuẩn bị a -. Nếu có nhiều chữ in hoa trong đầu vào, hãy thêm một chữ cái khác -.

Bây giờ chúng tôi có ["DJ", "McMayhem"]"-wicka-wicka-wub-wub-".

Nối wicka-wubchuỗi vào cuối mục đầu tiên trong danh sách đầu vào, để lấy ["DJ-wicka-wicka-wub-wub-","McMayhem"].

Cuối cùng, lặp lại các ký tự trong phần thứ hai của chuỗi bằng giá trị 0 được lập chỉ mục của chúng trong chuỗi đầu vào ban đầu. Trong ví dụ của chúng tôi, điều đó có nghĩa là lần đầu tiên Msẽ được lặp lại hai lần, sau đó cba lần và Mbốn lần tiếp theo . Tham gia danh sách, vì vậy phần thứ hai (phần bạn vừa lặp lại các chữ cái trong) được thêm vào phần đầu tiên ( "DJ-wicka-wicka-wub-wub-").

Kết quả cuối cùng của đầu vào:

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

Tổng số quá trình:

["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"

Nhiệm vụ của bạn

Nhiệm vụ của bạn là, được đưa ra một chuỗi chỉ bao gồm các ký tự chữ cái viết hoa và viết thường, xuất ra phiên bản wicka-wubbed của chuỗi đó.

Một vài quy tắc

  • Đầu vào có thể bao gồm hoàn toàn các chữ cái viết thường hoặc hoàn toàn bằng chữ in hoa hoặc bất kỳ số nào của mỗi chữ cái, nhưng không có các ký tự khác.
  • Nếu đầu vào bao gồm các chữ cái hoàn toàn viết thường, đầu ra chính xác chỉ đơn giản là giai đoạn cuối cùng (chuỗi có các ký tự được lặp lại theo vị trí được lập chỉ mục 0 của chúng). Không nên có wickahoặc wubtrong trường hợp đó.
  • Quy tắc tiêu chuẩn áp dụng, chương trình đầy đủ hoặc chức năng, tùy thuộc vào bạn.
  • Đây là một nên mã ngắn nhất sẽ thắng.

GoodLuck-wicka-wicka-wub-GGGGGGGGooooooooollllllllllfffffffffffeeeeeeeeeeerrrrrrrrrrrrrssssssssssssss

Các trường hợp thử nghiệm

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


Bạn có thể thêm một bài kiểm tra với 5chữ in hoa?
Rod

Đây là một triển khai tham chiếu vô căn cứ trong Python
caird coinheringaahing

1
Tôi có thể sử dụng "Wubba Lubba Dub Dub" không? Không tiết kiệm cho tôi byte mặc dù: P.
Bạch tuộc ma thuật Urn

2
Có nên foobarbazđơn giản trở lại foobarbaz? Có phần thứ hai nào không?
Erik the Outgolfer

Câu trả lời:


1

Java 8 (782 byte)

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";};}

Ung dung:

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 byte

Mã 130 byte + 12 cho -F(?=[A-Z]).

Điều này bây giờ phù hợp chính xác với tất cả các trường hợp thử nghiệm được cung cấp.

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)

Hãy thử trực tuyến!

Lưu ý : TIO bao gồm -lđể chạy tất cả các thử nghiệm cùng một lúc.


1

Kotlin 1.1 - 494 492 byte

Nộp hồ sơ

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()

Kiểm tra

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")
}

Đang chạy

Hoạt động trên KotlinLang, nhưng không hoạt động trên TryItOnline vì 1.1 không được hỗ trợ

Chạy qua máy nén của tôi, lưu 2 byte


0

Python 3 , 234 281 270 248 246 byte

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])

Hãy thử trực tuyến!

Đã thêm 47 byte, nhờ ông Xcoder;)

Đã lưu 11 byte nhờ Jonathan Frech

Đã lưu 22 byte nhờ Halvard Hummel

Đã lưu thêm 2 byte nhờ Mr. Xcoder


1
Thất bại cho foobar.
Ông Xcoder

@ Mr.Xcoder Đã sửa!
jferard

2
Đã thêm 47 byte, nhờ có ông Xcoder;) > _>
Ông Xcoder

Có thể 270 byte .
Jonathan Frech

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.