Bleeeet Bleeeet Bl Bleet!


18

(ความหมาย: แปลงภาษาอังกฤษเป็น Bleet)

เราได้ยกย่องแพะเป็นเทพเจ้ามานานหลายปีแล้ว

แต่ถ้าเราไม่สามารถแปลภาษาอังกฤษเป็น 'Bleet' ภาษาของแพะพระเจ้าเราไม่สามารถสื่อสารกับพวกเขาได้

ดังนั้นเพื่อสื่อสารกับพวกเขาเราได้วิจัยกิจกรรมของแพะและดึงรูปแบบนี้ซึ่งเป็นแกนหลักของภาษา

พูด 'Bleet' ตามความยาวของแต่ละคำ นั่นหมายถึงปริมาณของ 'e's ควรเป็น (ความยาว -3) สำหรับคำที่ยาวกว่า 3 ตัวอักษรคุณจะต้องตัด' Bleet 'สำหรับคำที่สั้นกว่า' Blt ' ตัวอย่างเช่น 'be' กลายเป็น 'bl' แต่ 'cat' และ 'boat' กลายเป็น 'blt' และ 'blet'

ดูเหมือนพวกเขาจะไม่เปลี่ยนอักขระที่ไม่ใช่ตัวอักษรเป็น 'Bleet' การวิจัยของเราแสดงให้เห็นว่า 'สวัสดีโลก!' ถึง Bleet คือ 'Bleet, Bleet!' ไม่ใช่ 'Bleeet Bleeet' นอกจากนี้แพะยังไม่ฉลาด (ไม่มีความผิด) ดังนั้นพวกเขาจึงดูเหมือนจะไม่เข้าใจตัวละครหรือนักออกเสียงที่ไม่มีเลย

ตอนนี้ถึงเวลาที่จะทำให้นักแปลสื่อสารกับเทพเจ้าแพะ

Bleeeeet (ความหมาย: ตัวอย่าง)

Hello, World! => Bleet, Bleet!
lorem ipsum dolor sit amet. => Bleet Bleet Bleet Blt Blet.
We praise the Goat God! => Bl Bleeet Blt Blet Blt!
I have a pen => B Blet B Blt
0123456789_ => 0123456789_
0te_st1 => 0Bl_Bl1


1
และสิ่งที่เกี่ยวกับคำที่มีเครื่องหมายวรรคตอน? จะit'sกลายเป็นBltหรือBl'tหรือBl'B?
Kevin Cruijssen

3
มันขึ้นอยู่กับคุณ แต่ถ้าคุณรักษาไว้ฉันจะแจ้งผู้ตอบทุกคน ถ้าเป็นผมผมคิดว่าผมอาจจะช่วยให้พฤติกรรมใด ๆ ผ่านพวกเขา ( Jimmy's: Bleee't) รักษาพวกเขาเป็นแยกคำ ( Jimmy's: Bleet'B) หรือปฏิบัติต่อพวกเขาเป็นส่วนหนึ่งของคำ ( Jimmy's: Bleeeet) ถ้าฉันต้องเลือกอย่างใดอย่างหนึ่งฉันจะไปกับตัวเลือกคำแยกเพราะมันเป็นสิ่งที่ 6 คำตอบทำ
Jonathan Allan

2
นี่เป็นความท้าทายที่ดีจริง ๆ เราควรมีมากกว่านี้
Downgoat

2
@ Downgoat ฉลาดคุณภาพหรือแพะฉลาด?
Matthew Roh

คำตอบ:


13

เรติน่า 31 ไบต์

T`lL`e
(?<!e)e
B
Be
Bl
e(?!e)
t

ลองออนไลน์!

คำอธิบาย

T`lL`e

เปลี่ยนตัวอักษรทั้งหมดเป็นes

(?<!e)e
B

เปิดครั้งแรกในการทำงานแต่ละเข้าไปeB

Be
Bl

เลี้ยวเข้าไปBeBl

e(?!e)
t

เปิดสุดท้ายในการทำงานแต่ละเข้าไปet


T1LTเวที "แรป" คู่แปลเพื่อให้คุณสามารถเปิดตัวอักษรทั้งหมดเช่นเดียวกับที่ไปe
Conor โอไบรอัน

@ ConorO'Brien จริงๆแล้วมันเป็นตัวพิมพ์เล็กlไม่ใช่ไม่ใช่1แต่ฉันไม่แน่ใจว่าคุณหมายถึง "wrap" การทับศัพท์เพียงซ้ำตัวอักษรตัวสุดท้ายในรูปแบบเป้าหมายดังนั้นถ้ามันเป็นT`lL`efคุณต้องการ map aไปeและตัวอักษรอื่น ๆ ทั้งหมดfไม่ alternatingly ไปและe f
Martin Ender

มันเป็นเรื่องตลกที่ไม่ดี ขออภัย
Conor O'Brien

4

JavaScript (ES6), 79 77 74 ไบต์

s=>s.replace(/[A-Z]+/gi,x=>x.replace(/./g,(_,i)=>'Bl'[i]||'et'[+!x[i+1]]))

วิธีอื่นในปัจจุบัน83 78 ไบต์:

s=>s.replace(/[A-Z]+/gi,x=>`Bl${'e'.repeat((l=x.length)>3&&l-3)}t`.slice(0,l))

สิ่งที่ดีที่สุดที่ฉันสามารถทำซ้ำได้คือ 88 ไบต์:

f=([c,...s],i=0,q=/^[A-Z]/i)=>c?q.test(c)?('Bl'[i]||'te'[+q.test(s)])+f(s,i+1):c+f(s):''

ฉันมาด้วย'Blet'[i>1?2+!x[i+1]:i]แต่น่าเศร้าที่มันมีความยาวเท่ากัน
Neil

@ นีลใช่ฉันคิดว่ามันจะเป็นไปได้ที่จะทำอย่างนั้น แต่ฉันประหลาดใจว่ามันเกือบจะสั้นกว่าวิธีที่ฉันทำมัน
ETHproductions

4

PHP, 115 88 86 77 75 ไบต์

preg_replace กับอาร์เรย์ (ต้องการ PHP 5.4 ขึ้นไป)

echo preg_replace(["#[a-z]#i","#(?<!e)e#",_Be_,"#e(?!e)#"],[e,B,Bl,t],$argn);

ทำงานด้วยecho '<string>' | php -nR '<code>'หรือทดสอบออนไลน์

ชำรุด

SEARCH      EXPLANATION             REPLACE     EXAMPLE
            original string                     Hello
[a-z]       every letter            e           eeeee
(?<!e)e     first letter            B           Beeee
Be          first two letters       Bl          Bleee
e(?!e)      last letter if still e  t           Bleet

การแก้ไขที่ 5: บันทึก 9 ไบต์ที่มีห่วงโซ่มาร์ติน Ender's regex
(นั่นคือกรณีที่แก้ไขด้วยตัวอักษรที่ไม่ใช่ตัวอักษร = ตัวเลข / ขีดล่าง)


3

Haskell , 135 128 ไบต์

b"e"="B"
b"ee"="Bl"
b('e':_:_:e)="Bl"++e++"t"
b e=e
e!(l:t)|elem l$['a'..'z']++['A'..'Z']=('e':e)!t|1<3=b e++l:""!t
e!_=[]
(""!)

ลองออนไลน์! (""!) $ "some string"การใช้ หากไม่มี regexes สิ่งนี้จะค่อนข้างยาวบางทีอาจมีวิธีอื่นที่สั้นกว่า แก้ไข: บันทึกแล้ว 7 ไบต์ขอบคุณ @nimi!


1
ฟังก์ชั่นการเปลี่ยนชื่อbให้กับaคุณสามารถใช้งานได้ทันทีเมื่อสร้างสตริงผลลัพธ์และละเว้นสุดท้าย=<<: b!(l:t)|...|1<3=a b++l:""!t;b!_=a b;(""!).
nimi

ไม่ทำงานออนไลน์เพราะเป็นบททดสอบของ Jimmy ฉันได้รับ Bl'B Bleet'B
cleblanc

@cleblanc ข้อกำหนดนี้ได้รับการเพิ่มหลังจากคำตอบของฉันและทำให้คำตอบปัจจุบันส่วนใหญ่ไม่ถูกต้อง ... ให้ฉันถาม OP
Laikoni

@Laikoni ถูกต้อง ฉันมาสายในเกมนี้และอะพอสโทรฟีเป็นข้อยกเว้นที่ยากเป็นพิเศษ
cleblanc

2

Perl 5 , 47 ไบต์

ที่บันทึกไว้ 15 ไบต์โดยใช้เทคนิคเดียวกับมาร์ตินพลิกคำตอบ Retina (คำตอบนี้เป็นพอร์ตของคำตอบของเขาตอนนี้)

46 ไบต์ของรหัสเมือง + -pธง

s/\pl/e/g;s/(?<!e)e/B/g;s/Be/Bl/g;s/e(?!e)/t/g

ลองออนไลน์!


รุ่นเก่ากว่า: 62 ไบต์:

s/\pl+/$l=length$&;$_=Bl.e x($l-3).t;chop while$l<y%%%c;$_/ge

และ 68 ไบต์:

s%\pl+%$_=$&;s/./B/;s/.\K./l/;s/(?<=..).(?=.)/e/g;s/..\K.$/t/;$_%ge

2

PHP, 84 ไบต์

<?=preg_replace(["#[a-z]#i","#(?<!l)l#","#(?<=l)l#","#e(?!e)#"],[l,B,e,t],$argv[1]);

PHP, 117 ไบต์

<?=preg_replace_callback("#[a-z]+#i",function($m){return substr(str_pad(Bl,-1+$l=strlen($m[0]),e).t,0,$l);},$argv[1]);

บันทึกหนึ่งไบต์ด้วย-1+$l=...
Titus

@Titus ดีและฉันได้พบทางออกที่ดีกว่า
JörgHülsermann

1
Zwei Dumme - ein Gedanke :) แต่\blล้มเหลวสำหรับตัวอักษรที่ไม่ใช่ตัวอักษร: _we_. (?<!l)lคุณจำเป็นต้องมีการยืนยันอย่างชัดเจน: Same for e\b-> e(?!e)(+7 bytes)
Titus

@Titus ในขณะเดียวกันก็สังเกตเห็นว่าตัวเองคิดผิด และฉันรักความคิดเห็นของคุณในภาษาเยอรมัน
JörgHülsermann

2

C, 120 151 140 111 108 105 104 92 90 ไบต์

ทำงานกับ "การทดสอบของ Jimmy" -> Bl'B Bleet'B Blet

j;f(char*m){for(;*m=!isalpha(*m++)?j=0,*(m-1):"*Blet"[isalpha(*m)?j^3?++j:j:j>1?4:++j];);}

ตอนนี้เอาต์พุตจะเป็นผลข้างเคียงโดยการทำลายสตริงเดิม

main(c,v)char**v;{
    char test[] = "The End is near Fellows!";
    f(test);puts(test);
    char test2[] = "We praise the Goat God!";
    f(test2);puts(test2);
    char test3[] = "It's Jimmy's test";
    f(test3);puts(test3);
    char test4[] = "0te_st1";
    f(test4);puts(test4);
    char test5[] = "I have a pen";
    f(test5);puts(test5);
    char test6[] = "_0123456789_";
    f(test6);puts(test6);
}

ฉันคิดว่ามันถูกต้องอย่างน้อยตอนนี้

Blt Blt Bl Blet Bleeeet!
Bl Bleeet Blt Blet Blt!
Bl'B Bleet'B Blet
0Bl_Bl1
B Blet B Blt
_012345678_


@DLosc ฉันยังไม่ได้บ้าและตายไป
cleblanc

2

Python 2.7, 129 118 114 109 95 91 88 ไบต์

import re
s=re.sub
def f(i):print s(r"e\b","t",s("Be","Bl",s(r"\be","B",s("\w","e",i))))

แค่re.subโซ่

เป็นขั้นเป็นตอน

อินพุตตัวอย่าง: " เราสรรเสริญพระเจ้าแพะ! "


นามแฝงย่อยเพื่อให้เราสามารถบันทึกไบต์ในการโทรซ้ำ

import re
s=re.sub

แทนที่อักขระคำทั้งหมดด้วย "e"

s("\w","e",i)

เอาท์พุท: ee eeeeee eee eeee eee!

แทนที่ "e" s ทั้งหมดซึ่งนำหน้าด้วยขอบเขตคำ (จุดเริ่มต้นของคำ) ด้วย "B"

s(r"\be","B",s("\w","e",i))

เอาท์พุท: Be Beeeee Bee Beee Bee!

แทนที่ "Be" ทั้งหมดด้วย "Bl"

s("Be","Bl",s(r"\be","B",s("\w","e",i)))

เอาท์พุท: Bl Bleeee Ble Blee Ble!

แทนที่ "e" s ทั้งหมดซึ่งตามด้วยขอบเขตคำด้วย "t"

s(r"e\b","t",s("Be","Bl",s(r"\be","B",s("\w","e",i))))

เอาท์พุท: Bl Bleeet Blt Blet Blt!


ยินดีต้อนรับสู่ PPCG! เราอนุญาตให้ฟังก์ชันพิมพ์ผลลัพธ์ดังนั้นการแทนที่returnด้วยprintควรบันทึกไบต์
Conor O'Brien

นอกจากนี้คุณยังสามารถลบผู้นำrจากสตริงดิบหากพวกเขาไม่มี backlashes ในพวกเขาบันทึกอีก 3 ไบต์
Conor O'Brien

ขอบคุณ @ ConorO'Brien! ฉันสามารถทำให้ regex ง่ายขึ้น (ซึ่งจำเป็นต้องมีr) และฉันได้รับมันที่ 95 ไบต์ ขอบคุณสำหรับคำแนะนำ!
แบรนดอนปลาสเตอร์เจียน

เอาล่ะฉันได้รับมันลงไปที่ 88 ไบต์และฉันคิดว่านั่นเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้ที่นี่
Brandon Sturgeon

1

Pip , 28 ไบต์

aR+XA{Y'eX#a-3\"Bl\yt\"@<#a}

รับอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ลองออนไลน์!

คำอธิบาย

มันสนุก - ฉันต้องใช้ตัวดัดแปลง regex และการแก้ไขสตริง

                              a is 1st cmdline arg; XA is the regex `[A-Za-z]` (implicit)
aR                            In a, replace
   XA                          the regex XA
  +                            wrapped in (?:  )+
     {                     }  with this callback function:
          #a-3                 Length of argument - 3
       'eX                     Repeat e that many times (empty string if #a-3 is negative)
      Y                        Yank that string into the y variable
              \"Bl\yt\"        An escaped string, which interpolates the value of y
                       @<#a    Take first len(a) characters
                              After the replacement, the string is autoprinted

1

Python 3, 271 ไบต์

ฉันทราบว่านี่ค่อนข้างยาวและฉันยินดีรับข้อเสนอแนะเกี่ยวกับวิธีลดความยาว

def f(s):
 b=[];t='';f=[];a=list.append
 for c in s:
  if c.isalpha():t+='e'
  else:
   if t:a(b,t);t=''
    a(b,c)
 if t:a(b,t)
 for i in b:
  i=[*i]
  if i[0]=='e':
   i[0]='B';i[-1]=[i[-1],'t'][len(i)>2]
   if len(i)>2:i[1]='l'
  a(f,''.join(i))
 return ''.join(f)

ยินดีต้อนรับสู่เว็บไซต์! ฉันเห็นกอล์ฟที่คุณสามารถทำได้ คุณสามารถไปที่หน้าเคล็ดลับของเราเพื่อดูรายการเคล็ดลับที่มีประโยชน์สำหรับการเล่นกอล์ฟใน Python
ข้าวสาลีตัวช่วยสร้าง

แทนx.append(y)หรือในกรณีของa(x,y)คุณคุณสามารถทำได้x+=y,(จำเป็นต้องใช้คอมม่า)
Cyoce

1

ซ้อนกัน , 57 ไบต์

'\l+'{!n size 2-:4\^5*1+3/\1<-4 tb 0\,'Blet'\#''join}repl

ลองออนไลน์! รับอินพุตจากด้านบนของสแต็ก

ให้a ( n ) = A136412 ( n - 2) = (5 × 4 n - 2 + 1) ÷ 3. การแปลงa ( n ) เป็นเบส 4 อัตราผลตอบแทน:

a (3) = 13 4 
a (4) = 123 4 
a (5) = 1223 4 
a (6) = 12223 4
...

การแมปดัชนี 0..3 กับสตริงBletเราจะได้รับ:

a (3) = lt
a (4) = ให้
a (5) = leet
a (6) = leeet
...

ตอนนี้การเติมBจะทำให้เรามีสตริงที่ต้องการตามความยาว ส่วนใหญ่ เราแค่ต้องจัดการกับกรณีพิเศษสำหรับn ≤ 2 ในกรณีของฉันนี่คือการแก้ไขโดยการลบ ( n - 2 <1) เป็นบูลีนตัวเลข (1 สำหรับ "true" และ 0 สำหรับ "false")

สำหรับรายละเอียดเฉพาะของคำตอบ:

'\l+'{! ... }repl
             repl    replace all
'\l+'                alphanumeric strings ("letters")
     {!     }        applying this function to the result.


0

Java 7, 201 ไบต์

String c(String s){String r="",z="e([^e]|$)";char p=0;int x;for(char c:s.toCharArray()){x=c&~32;p=x>64&x<91?p==66?'l':p>100&p<109?'e':66:c;r+=p;}return r.replaceAll("l"+z,"lt$1").replaceAll(z,"et$1");}

ไม่ค่อยมีความสุขกับมันและสามารถเล่นกอล์ฟได้มากกว่านี้ ..

คำอธิบาย:

String c(String s){               // Method with String parameter and String return-type
  String r="",                    //  The return-String
         z="e([^e]|$)";           //  Partial regex String that's used twice ('e' followed by non-'e' or nothing)
  char p=0;                       //  The previous character
  int x;                          //  Another temp value
  for(char c : s.toCharArray()){  //  Loop over the characters of the input String
    x = c&~32;                    //   Make every lowercase character uppercase (this returns an integer, hence the integer temp value, which is shorter than a cast to char)
    p = x>64 & x<91 ?             //   If the current character is a letter:
         p == 66 ?                //    And if the previous character is 'B':
          'l'                     //     Set the character value to 'l'
         : p>100&p<109 ?          //    Else if the previous character is either an 'e' or 'l':
            'e'                   //     Set the character value to 'e'
           :                      //    Else:
            66                    //     Set the character value to 'B'
         :                        //   Else (not a letter):
          c;                      //    Set the character to the current character
    r += p;                       //   Append the result-String with this character
  }                               //  End loop
  return r                        //  Return the result-String
    .replaceAll("l"+z,"lt$1")     //   After we've replaced all occurrences of "le." with "lt." (where "." can be anything else, including nothing at the end of a line)
    .replaceAll(z,"et$1")         //   And also replaced all occurrences of "ee." with "et." (where "." can again be anything else)
}                                 // End of method

รหัสทดสอบ:

ลองที่นี่

class M{
  static String c(String s){String r="",z="e([^e]|$)";char p=0;int x;for(char c:s.toCharArray()){x=c&~32;p=x>64&x<91?p==66?'l':p>100&p<109?'e':66:c;r+=p;}return r.replaceAll("l"+z,"lt$1").replaceAll(z,"et$1");}

  public static void main(String[] a){
    System.out.println(c("Hello, World!"));
    System.out.println(c("lorem ipsum dolor sit amet."));
    System.out.println(c("We praise the Goat God!"));
    System.out.println(c("I have a pen"));
    System.out.println(c("0123456789_"));
    System.out.println(c("0te_st1"));
  }
}

เอาท์พุท:

Bleeet, Bleeet!
Bleeet Bleeet Bleeet Blt Bleet.
Bl Bleeeet Blt Bleet Blt!
B Bleet B Blt
0123456789_
0Bl_Bl1

s.split("")แทนที่จะs.toCharArray()บันทึกบางอย่างที่ฉันเชื่อ
Kritixi Lithos

@KritixiLithos ฉันลองแล้ว แต่ฉันมีปัญหาในการตรวจสอบว่า String เป็นตัวอักษร ( x=c&~32จะไม่ทำงานบน String และx>64&x<91ทั้งสองจะไม่ทำงานอีกต่อไป) ถ้าคุณสามารถทำให้มันสั้นลงด้วยการแบ่งให้ฉันรู้ว่า
Kevin Cruijssen

0

05AB1E , 36 ไบต์

lDAsSå.¡€g£vyAySåPigÍ<'e×"Blÿt"yg£}J

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

เตรียมอินพุต:

lD                                    # convert input to lower-case and duplicate
  As                                  # push lower-case alphabet and swap input to the top
    Så                                # check each char in input for 
                                      # membership in the alphabet
      .¡                              # split into chunks of equal elements
        €g                            # get length of each chunk
          £                           # split input into chunks of those lengths

สิ่งนี้จะสร้างรายการเช่น ['hello', ', ', 'world', '!'] สำหรับอินพุตHello, World!

ทำซ้ำในรายการ:

v                          # for each element in the list
 y                         # push current element
  AySåPi               }   # if all members of current element are letters
        gÍ<'e×             # repeat string "e" len(element)-3 times
              "Blÿt"       # replace "ÿ" with the e's in the string "Blÿt"
                    yg£    # take the first len(element) chars of the string
                        J  # join to string
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.