วิธีทำหลายจุดไข่ปลา?


14

เห็นได้ชัดว่าเป็นรูปไข่

แรงบันดาลใจจากข้อความแชท

ความท้าทายของคุณ

รับรายการหรือช่องว่างหรือสตริงของคำที่คั่นด้วยเครื่องหมายจุลภาค

หากต้องการคำว่า ellipsisessieses-ify:

  1. เริ่มด้วยคำว่า
  2. เพิ่มตัวอักษรตัวแรกของคำต้นฉบับจนจบ
  3. เพิ่ม 2 ตัวอักษรสุดท้ายของคำต้นฉบับไปยังท้าย
  4. เพิ่มตัวอักษรตัวที่สอง - สุดท้ายของคำต้นฉบับไปที่ท้าย
  5. เพิ่มตัวอักษรตัวแรกของคำต้นฉบับจนจบ
  6. เพิ่มตัวอักษรตัวสุดท้ายของคำต้นฉบับจนจบ
  7. ทำซ้ำขั้นตอนที่ 5 และ 6 ครั้งเดียว
  8. คุณทำเสร็จแล้ว!

คุณสามารถสันนิษฐานได้ว่า:

  • คำที่ป้อนจะเป็นตัวอักษรและตัวเลขเท่านั้น
  • อินพุตและเอาต์พุตสามารถเป็นสตริงหรือรายการที่คั่นด้วยช่องว่าง
  • ข้อมูลที่ป้อนจะมีเพียงคำเดียว
  • คำจะต้องมีความยาวอย่างน้อย 2 ตัวอักษร
  • อินพุตจะตรงกับ regex /^[a-z0-9]{2,}( [a-z0-9]{2,})*$/i
  • คุณสามารถมีรูปแบบอินพุตและเอาต์พุตอื่นได้
  • เพิ่มเติมที่จะมา ...

กรณีทดสอบ:

ellipsis -> ellipsisessieses
goat -> goatgttagtgt
covfefe -> covfefeceefcece
programmer5000 -> programmer5000p000p0p0
up vote down goat -> upuppuupup voteveetveve downdnnwdndn goatgttagtgt
it is golf yo -> itittiitit isissiisis golfgfflgfgf yoyooyyoyo
crossed out 44 is still 44 -> crossedcddecdcd outottuotot 4444444444 isissiisis stillslllslsl 4444444444

สั้นที่สุดststststarrearar ininniinin bytesbssebsbs winswssnwsws!


ค่อนข้างแน่ใจว่า "e" ใน "ellipsisessieses" มาจาก "ellipses" (ยกเว้น "e" ตัวแรก)
Leun Nun

15
ฉันยังไม่รู้วิธีการเขียนหลาย ๆ จุดไข่ ... แก้ไข : เห็นได้ชัดว่ามันเป็นจุดไข่ปลา
มนุษย์โดยรวม

1
สำหรับขั้นตอนที่ 2 ฉันคิดว่ามันควรจะเพิ่ม e ไม่ได้เพิ่มตัวอักษรตัวแรก
เบนซิน

@ เบนซีนอาจมีเหตุผลมากกว่า แต่ตอนนี้มันสายเกินไปแล้ว
programmer5000

2
มันเป็นวงรี พหูพจน์อื่น ๆ ที่มีการสะกดคำการออกเสียงเหมือนกัน แต่แตกต่างกันสำหรับคำที่ลงท้ายด้วย -is และคำที่ลงท้ายด้วย -e เป็นแกนและฐาน

คำตอบ:


16

JavaScript (ES6), 58 57 ไบต์

หมายเหตุ: นี่จะใช้เคล็ดลับเดียวกับ Jonathan Allan ในคำตอบของ Jelly นี้ (แม้ว่าฉันจะสังเกตเห็นหลังจากโพสต์)

บันทึกแล้ว 1 ไบต์ขอบคุณ Jonathan Allan

ทำงานบนอาร์เรย์ของสตริง

s=>s.map(s=>s+'01120101'.replace(/./g,n=>s.substr(-n,1)))

กรณีทดสอบ


ว้าวนี่เยี่ยมมาก! งานที่ดี!
programmer5000

ผมเชื่อว่าคุณสามารถบันทึกไบต์โดยการแทนที่21102121ด้วย01120101และมีn-2 -n
โจนาธานอัลลัน

@JanathanAllan จับได้ดี ขอบคุณ!
Arnauld

11

เยลลี่ ,  13 12  11 ไบต์

⁽×ʠb3’ịṭµ€K

โปรแกรมเต็มรูปแบบที่รับรายการของตัวละครและพิมพ์เอาต์พุตที่คั่นด้วยช่องว่าง

ลองออนไลน์!

อย่างไร?

⁽×ʠb3’ịṭµ€K - Main link: list of lists of characters e.g. ["this","is","it"]
        µ€  - for each word in the input:            e.g. "this"
⁽×ʠ         -   base 250 literal 5416                     5416
   b3       -   converted to base 3                       [2,1,1,0,2,1,2,1]
     ’      -   decrement                                 [1,0,0,-1,1,0,1,0]
      ị     -   index into the word                       "tssitsts"
       ṭ    -   tack to the word                          ["this",["tssitsts"]]
          K - join the results with spaces                ["this",["tssitsts"]," is",["issiisis"]," it",["ittiitit"]]
            - implicit print                              thistssitsts isissiisis itittiitit

อีกทางเลือกหนึ่งของรายการคำในรายการคำนั้นสามารถทำได้ใน11 ไบต์ :

⁽×ʠb3’ị;@µ€

⁽×ʠb3’อาจถูกแทนที่ด้วย4,⁵Bj-สำหรับการนับไบต์เดียวกัน
( [4,10]ในไบนารีจะ[[1,0,0],[1,0,1,0]]เข้าร่วมโดย-1คือ[1,0,0,-1,1,0,1,0])


คุณต้องการเข้าร่วมผลลัพธ์ด้วยการเว้นวรรคหรือไม่? คุณได้รับอนุญาตให้ส่งออกรายการ / รายการรายการ
programmer5000

@ programmer5000 ใช่การเข้าร่วมกับช่องว่างเป็นตัวเลือกได้ที่นี่
ASCII- เท่านั้น

@ programmer5000 มี 11 ตัวเลือกอื่นที่ส่งคืนรายการที่ฉันได้ให้ไว้ด้านล่างคำตอบหลัก (โปรดทราบว่าไม่มีทางที่จะได้รับหลักลงไป 10 โดยการลบKเพราะเป็นลิงค์ monadic รายการที่ส่งคืนจะไม่เป็นหนึ่ง ระดับลึกซึ่งฉันคิดว่าจะผลัก lax I / O มากเกินไป - นั่นคือการป้อน["this", "is", "it"]ค่าส่งคืนจะเป็น[['t','h','i','s',"tssitsts"],['i','s',"issiisis"],['i','t',"ittiitit"]](โดยที่ "... " เป็นรายการของตัวอักษร) และปล่อยให้พิมพ์เป็นโปรแกรมเต็มรูปแบบจะทุบมัน ทั้งหมดเข้าด้วยกันthistssitstsisissiisisitittiitit)
Jonathan Allan

7

05AB1E , 12 ไบต์

εD•Lz•3вÍèJ«

ลองออนไลน์!

คำอธิบาย

ε              # apply on each word in input
 D             # duplicate the word
  •Lz•         # push the base-255 compressed number 5416
      3в       # convert to a list of base-3 digits (yields [2, 1, 1, 0, 2, 1, 2, 1])
        Í      # subtract 2 from each (yields [0, -1, -1, -2, 0, -1, 0, -1])
         è     # index into the word with these numbers
          J    # join to string
           «   # append to the original word

1
Hehe, จิตใจที่ดี ...
Jonathan Allan

@ Jonathanathan Allan: ใช่เรามีความคิดเหมือนกันทุกประการ การบีบอัดที่สั้นกว่าของ Jelly ได้รับรางวัลในวันนี้ :)
Emigna

6

จอประสาทตา , 52ไบต์

3 ไบต์ขอบคุณ Arnauld

(\w)(\w+)
$1$2$1
(.)(.)(.)\b
$1$2$3$2$2$1$3$2$3$2

ลองออนไลน์!


5
บรรทัดที่สามของรหัสทำให้ฉันนึกถึงการกลายพันธุ์จากการเรียกคืนรวม
Jonathan Allan

@JanathanAllan ใครได้รับแรงบันดาลใจจาก Eccentrica Gallumbits ที่ถูกกล่าวถึงในคู่มือ Hitch-Hiker to the Galaxy
Neil



4

ถ่าน 20 ไบต์

F⪪S «ι↑E”o∨↙8”§ι±Iκ→

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด เกิดขึ้นเพียงเพื่ออ่านคำตอบของ @ Arnauld หลังจากเขียนโค้ด แต่นี่เป็นพอร์ตของมัน คำอธิบาย:

F   «                   Loop over
  S                     Input string
 ⪪                       Split at spaces
     ι                  Print the word
        ”o∨↙8”          Compressed string 01120101
       E                Map over each character
                 Iκ     Cast character to integer
                ±       Negate
              §ι        Circularly index into word
      ↑                 Print array upwards, prints each element rightwards
                    →    Move right


@ ASCII เท่านั้นคุณไม่ต้องเพิ่มไบต์พิเศษสำหรับการ-rsตั้งค่าสถานะหรือไม่
Neil

ไม่แน่ใจฉันเดาเหรอ -rsมีเพียงเพื่อปิดใช้งานการพิมพ์พรอมต์อินพุตแม้ว่า
ASCII- เท่านั้น

ฉันควรทำให้-rsโหมดเป็นค่าเริ่มต้นแทนหรือไม่
ASCII เท่านั้น


3

JavaScript (ES6), 74 60 ไบต์

s=>s.map(s=>s+(a=s[l=s.length-1],b=s[0])+a+a+s[l-1]+b+a+b+a)

รับอินพุตเป็นอาร์เรย์และส่งออกอาร์เรย์

-9 ไบต์ขอบคุณ Programmer5000

กรณีทดสอบ:





3

Paradoc (v0.2.10), 13? ไบต์ (CP-1252)

µ96Qó3BÌDX=v+

ลองออนไลน์!

ใช้รายการคำและผลลัพธ์ในรายการคำบนสแต็ก

ความแตกต่างเล็กน้อยในเคล็ดลับพื้นฐาน -3 อาจถึงเวลาที่จะทำงานบนพื้นฐานของฉัน 250- คอมเพรสเซอร์อะไรก็ตาม

คำอธิบาย:

μ             .. Map the following block over each word (the block is
              .. terminated by }, but that doesn't exist, so until EOF)
              .. (The word is on the stack now.)
 96Qó         .. 96 * 26 (Q in base 26) = 2496, a hack to prevent us from
              .. needing a space to separate this from the following number.
     3B       .. Convert 2496 to base 3 to get [1,0,1,0,2,1,1,0]
       ÌD     .. Negate and reverse to get [0,-1,-1,-2,0,-1,0,-1]
         X    .. Push the loop variable: the word being mapped over
          =v  .. Index, vectorize; map over the indices by indexing them
              .. into the word
            + .. Concatenate with the original word

(คำถามที่นับจำนวนไบต์: ตอนนี้ฉันแสดงให้เห็นจริง ๆ ใน TIO แล้วก็ใช้รายการคำบนสแต็คและผลลัพธ์ในรายการคำบนสแต็ก แต่คุณไม่สามารถทำอะไรได้มากกับรายการของคำนั้น ยกเว้นว่าคุณปิดบล็อกที่เริ่มต้นด้วย µ ฉันควรนับวงเล็บปิดนั้นหรือไม่)


1
ฉันควรจะปิดวงเล็บปีกกานั้นหรือไม่? ใช่ถ้าคุณต้องการมัน
Erik the Outgolfer

3

ภาษา Wolfram / Mathematica, 66 ไบต์

StringJoin[StringSplit[#,""]/.{a_,___,b_,c_}:>{#,a,c,c,b,a,c,a,c}]&

เพิ่งตีขึ้นจริงเร็วอาจมีการปรับปรุงเล็กน้อยที่นี่หรือที่นั่น




2

Java 8, 117 ไบต์

a->{int i=0,l;for(String s:a){char c=s.charAt(0),d=s.charAt(l=s.length()-1);a[i++]+=""+c+d+d+s.charAt(l-1)+c+d+c+d;}}

รับอินพุตเป็น String-array และแก้ไขอาร์เรย์ดั้งเดิมนี้แทนที่จะส่งคืนอาร์เรย์ใหม่เพื่อบันทึกไบต์

มีโอกาสมากที่จะเล่นกอล์ฟได้มากกว่านี้ ..

คำอธิบาย:

ลองที่นี่

a->{                          // Method with String-array as parameter and no return-type
  int i=0,                    //  Index-integer (starting at 0)
      l;                      //  Length-integer which we use multiple times
  for(String s:a){            //  Loop over the input array
    char c=s.charAt(0),       //   The first character of the word
         d=s.charAt(          //   The last character of the word
            l=s.length()-1);  //    and set `l` at the same time to `length()-1`
    a[i++]+=                  //   Append to the current value in the array:
      ""                      //    String so the characters aren't appended as integers
      +c                      //    + the first character
      +d+d                    //    + two times the last character
      +s.charAt(l-1)          //    + the single-last character
      +c+d+c+d;               //    + the first + last character two times
  }                           //  End of loop
}                             // End of method

2

C # (. NET Core) 106 ไบต์

n=>{for(int i=0,x;i<n.Length;){var h=n[i];x=h.Length-1;char y=h[0],j=h[x];n[i++]=h+y+j+j+h[x-1]+y+j+y+j;}}

ลองออนไลน์!

ฟังก์ชั่นแลมบ์ดาที่รับอินพุตเป็นอาเรย์ของสตริงและแก้ไขอาเรย์ดั้งเดิมของเอาต์พุต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.