ตัวอักษรวิ่งสัญญาณ


41

ในแต่ละวันคุณใส่คำใหม่ลงในตัวอักษรวิ่งด้วยตัวอักษรที่สามารถเคลื่อนย้ายได้ซื้อตัวอักษรที่คุณต้องเขียน คุณจะใช้ตัวอักษรที่คุณซื้อสำหรับคำก่อนหน้านี้ทุกครั้งที่ทำได้ ให้คำที่คุณต้องการเขียนในแต่ละวันตามลำดับเอาท์พุทตัวอักษรที่คุณซื้อในแต่ละวัน

ตัวอย่าง

Input:  ['ONE', 'TWO', 'THREE', 'SEVENTEEN']
Output: ['ENO', 'TW', 'EHR', 'EENSV']

วันที่ 1:คุณเริ่มต้นด้วยตัวอักษรไม่ดังนั้นการเขียนONEคุณซื้อทุกตัวอักษรของมันE, ,N วันที่ 2:ในวันถัดไปคุณต้องการที่จะนำขึ้น (ลง) คุณมีจากเพื่อที่คุณจะซื้อเพิ่มอีก วันที่ 3:ณ จุดนี้คุณมี การเขียน คุณต้อง โปรดทราบว่าคุณต้องซื้อที่สองนอกเหนือจากที่คุณมี วันที่ 4:ในการเขียนคุณต้องมีทั้งหมด4 ข้อซึ่งคุณมีอยู่สองตัว (ไม่ใช่สาม!) ดังนั้นคุณจึงซื้ออีกสอง คุณมีและหนึ่งในนั้นดังนั้นคุณซื้อตัวอักษรที่เหลือ: O
TWOONEOONETW
ENOWTTHREEEHRE
SEVENTEENETNEENSVเพื่อให้คุณซื้อตัวอักษรที่เหลือ:

เราได้เรียงลำดับตัวอักษรตามตัวอักษรในตัวอย่างนี้ แต่คุณสามารถส่งออกเรียงตามลำดับใดก็ได้

: การป้อนข้อมูลA-Zรายการที่ไม่ว่างเปล่าของสตริงที่ไม่ว่างเปล่าของตัวอักษร คุณสามารถใช้ตัวพิมพ์เล็กได้หากต้องการ รายการของตัวละครดีสำหรับสตริง

เอาท์พุท:เอาท์พุทหรือพิมพ์ตัวอักษรเพิ่มเติมที่คุณจำเป็นต้องซื้อในแต่ละวัน ตัวอักษรสำหรับวันอาจถูกส่งออกในลำดับใด ๆ แต่วันจะต้องมาในลำดับที่ถูกต้อง

ควรแยกตัวอักษรจากแต่ละวันออกจากวันอื่น ๆ เพื่อให้คุณสามารถบอกได้ว่าวันใดจะสิ้นสุด ตัวคั่นต่อท้ายและ / หรือตัวคั่นชั้นนำนั้นใช้ได้ทั้งภายในวันหรือระหว่างวัน โปรดทราบว่าวันหนึ่งอาจไม่มีตัวอักษรที่ซื้อซึ่งควรสะท้อนออกมาในช่องว่าง (ช่องว่างหรือบรรทัดว่างก็โอเคแม้กระทั่งในวันสุดท้าย)

กรณีทดสอบ

['ONE', 'TWO', 'THREE', 'SEVENTEEN']
['ENO', 'TW', 'EHR', 'EENSV']

['ONE', 'TWO', 'ONE', 'THREE']
['ENO', 'TW', '', 'EHR']

['ABC', 'AABC', 'ABBC', 'ABCC', 'AABBCC']
['ABC', 'A', 'B', 'C', '']

['SHORT', 'LOONG', 'LOOOONG', 'LOOOOOOONG', 'SHORT', 'LOOONG']
['HORST', 'GLNO', 'OO', 'OOO', '', '']

นี่คืออินพุตและเอาต์พุตทั้งหมดเป็นรายการแยกต่างหาก:

[['ONE', 'TWO', 'THREE', 'SEVENTEEN'], ['ONE', 'TWO', 'ONE', 'THREE'], ['ABC', 'AABC', 'ABBC', 'ABCC', 'AABBCC'], ['SHORT', 'LOONG', 'LOOOONG', 'LOOOOOOONG', 'SHORT', 'LOOONG']]
[['ENO', 'TW', 'EHR', 'EENSV'], ['ENO', 'TW', '', 'EHR'], ['ABC', 'A', 'B', 'C', ''], ['HORST', 'GLNO', 'OO', 'OOO', '', '']]

และเป็นสตริงที่คั่นด้วยช่องว่าง (ช่องว่างต่อท้ายในเรื่องผลลัพธ์):

ONE TWO THREE SEVENTEEN
ONE TWO ONE THREE
ABC AABC ABBC ABCC AABBCC
SHORT LOONG LOOOONG LOOOOOOONG SHORT LOOONG

ENO TW EHR EENSV
ENO TW  EHR
ABC A B C 
HORST GLNO OO OOO  

ลีดเดอร์


5
สคริปต์กระดานแต้มนำแบบ Wild ปรากฏขึ้นในอายุ userscript: o
Quintec

เราสามารถส่งออกเป็นอาร์เรย์ของตัวละครที่ต้องซื้อแทนที่จะเป็นสตริงของตัวละครทั้งหมดหรือไม่? เช่น:[['E', 'N', 'O'], ...]
Downgoat

เอาต์พุตSHORTLONGOOOOOถูกต้องสำหรับเอาต์พุตล่าสุดหรือไม่? AKA ไม่มีตัวคั่นใช่หรือไม่
Magic Octopus Urn

@Daygoat ใช่รายการเป็นตัวอักษรที่ดีในการส่งออก
xnor

@MagicOctopusUrn ไม่คุณต้องการตัวคั่นมิฉะนั้นคุณจะไม่สามารถบอกได้ว่าตัวอักษรนั้นคืออะไรในวันใด
xnor

คำตอบ:


10

Haskell, 54 49 ไบต์

import Data.List
g x=zipWith(\\)x$scanl(++)""$g x

ลองออนไลน์!

เราสร้างรายการเอาท์พุทโดยการคำนวณความแตกต่างของรายการ ( \\) ของรายการอินพุตและผนวกต่อท้ายของรายการเอาท์พุท (เริ่มต้นด้วย"")

input list:                ONE       TWO       THREE        SEVENTEEN
cumulative append:         ""   +->  ONE  +->  ONETW   +->  ONETWHRE
list difference (output):  ONE -+    TW  -+    HRE    -+    SVEEN

ด้วยขอบเขตData.Listและทั้งสองData.Function(เช่นโดยใช้สภาพแวดล้อม lambdabot) สิ่งนี้สามารถทำให้สั้นลงถึง 30 ไบต์:

fix.(.scanl(++)"").zipWith(\\)

แก้ไข: -5 ไบต์ขอบคุณ @Sriotchilism O'Zaic



10

Python 2 , 72 68 ไบต์

-4 ไบต์ขอบคุณ Jonathan Allan

p=''
for r in input():
 for x in p:r=r.replace(x,'',1)
 print r;p+=r

ลองออนไลน์!

แสดงความคิดเห็น

l=input()       # the list of words to write
p=''            # p contains all letters we own
for r in l:     # for each word ...
  for x in p:   # for each letter we own ...
    r=r.replace(x,'',1)   # remove one occurence from the current word
  print r       # print the remaining word
  p+=r          # add the remaining chars to p

3
for r in input():บันทึก 4 ไบต์
Jonathan Allan


7

Perl 6 , 44 ไบต์

{$!=@;.map:{kxxv $!=.comb.Bag∖($⊎=$!):}}

ลองออนไลน์!

เอาต์พุตเป็นรายการของอักขระ

คำอธิบาย

{                                      } # Anonymous codeblock
 $!=@;                                   # Initialise $! to an empty list
      .map:{                          }  # Map each item in the input to
                    .comb                # The string split to characters
                         .Bag            # In a Bag
                                        # Set minus
                              ($⊎=$!)    # The accumulated Bag of results
                 $!=                     # And save the result for the next item
            kxxv                     : # Then decompose the Bag into a list

2
เหตุผลสำหรับการโหวตจะได้รับการชื่นชม
Jo King

ไม่ใช่ downvoter แต่ฉันจะบอกว่ารูปแบบผลลัพธ์นี้อยู่ไกลเกินไป สิ่งที่ต้องการBag(E(2), N, S, V)จะต้องแสดงให้เห็นว่าอีสองตัวนั้นจะโอเค
xnor

3
อะไรนะ นั่นเป็นเพียงการจัดรูปแบบการพิมพ์เริ่มต้น ผลลัพธ์ที่ส่งคืนคือรายการที่ไม่เรียงลำดับซึ่งมีอักขระเหล่านั้น (และสามารถมีได้หลายอักขระเหมือนกัน) ฉันจะอัปเดตการจัดรูปแบบผลลัพธ์เพื่อสะท้อนสิ่งนี้ดีขึ้น แต่ downvote ดูเหมือนไร้สาระ
Jo King เมื่อ

Downvoter คุณช่วยอธิบายได้ไหมเรื่องนี้เกี่ยวกับ I / O หรืออย่างอื่น? เกี่ยวกับรูปแบบถุงฉันไม่รู้ Perl นี่เป็นเรื่องธรรมดาสำหรับ I / O ใน Perl golfs หรือไม่ เมื่อดูที่เอกสาร (แคชเนื่องจากไซต์ไม่ทำงาน) พวกเขาดูเหมือนจะเป็นคนที่ชอบนับด้วยการนับคล้ายกับ Python collections.Counterซึ่งฉันไม่ได้ตั้งใจให้เป็นเอาท์พุท สามารถวนซ้ำอย่างง่ายดายบนถุงเอลต์ที่มีหลายหลาก, ส่งไปยังรายการ / อาร์เรย์, แสดงด้วยหลายหลาก, ฯลฯ ?
xnor

3
Downvote เป็นความผิดพลาดตั้งใจขึ้น
Jonathan Allan

7

Haskell , 44 ไบต์

import Data.List
foldl1(\a x->a++',':(x\\a))

ลองออนไลน์!

เอาต์พุตเป็นสตริงเหมือนกับONE,TW,HRE,SVEENเครื่องหมายจุลภาคระหว่างวัน


1
การใช้รูปแบบเอาต์พุตเป็นสิ่งที่ดีเพื่อหลีกเลี่ยงการต้องพับ\`. And an unexpected เคสฐานของ foldl1 ด้วย
xnor

7

JavaScript (Node.js) , 59 ไบต์

a=>a.map(h=>([...t].map(c=>h=h.replace(c,'')),t+=h,h),t='')

ลองออนไลน์!

วิธีการแก้ปัญหาค่อนข้างตรงไปตรงมา สำหรับแต่ละคำhให้ลบตัวอักษรที่เรามีอยู่แล้ว

นี่คือรหัสอธิบายรุ่น:

f = list => {
  // the string that accumulates all the letters already bought
  let accu = '';
  // for every word in the list
  return list.map( word => {
    // for every letter already bought 
    [...accu]
      // remove the letter from the word
      .map(char => {
        return word = word.replace(char,'')
      });
    // add not bought letters to accumulator
    accu += word;
    // the reduced word (without already bought letters) should be added to result map
    // this represents the letters to buy today
    return word
  }, accu)
}

console.log(f(['ONE', 'TWO', 'THREE', 'SEVENTEEN']))
console.log(f(['ONE', 'TWO', 'ONE', 'THREE']))
console.log(f(['ABC', 'AABC', 'ABBC', 'ABCC', 'AABBCC']))
console.log(f(['SHORT', 'LOONG', 'LOOOONG', 'LOOOOOOONG', 'SHORT', 'LOOONG']))


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

5

J , 29 ไบต์

-29 ไบต์ขอบคุณ FrownyFrog!

(],a.<@#~0>.-&(1#.a.=/;))/@|.

ลองออนไลน์!

โพสต์ต้นฉบับ

J , 58 ไบต์

[:}.@>[:(],<@(/:~@({.@>@-.&(((e.<@#[){:)\));))&.>/<@a:,~|.

ลองออนไลน์!

ขอบคุณ ngn สำหรับความช่วยเหลือในการปรับปรุง "ลบจดหมายขณะที่เคารพส่วนการทำซ้ำ"

ไม่เหมาะสำหรับ J แต่เป็นการออกกำลังกายที่ให้แสงสว่าง

เริ่มต้นด้วยการสร้างกริยาช่วยwo("ไม่มี") ที่จะลบ chacters ทั้งหมดในสตริงหนึ่งจากอีกสตริงหนึ่งในขณะที่เคารพ repetitions

wo=.{.@>@-.&(((e. <@# [) {:)\)

มีความคิดที่สนุกสนานที่นี่: เราสร้างอินสแตนซ์ที่ซ้ำกันของอักขระแต่ละตัวโดยการทำซ้ำตามจำนวนครั้งที่ต้องการ ดังนั้นหากสตริงเดิมของเราคือABBA:

┌─┬─┬──┬──┐
│A│B│BB│AA│
└─┴─┴──┴──┘

หนึ่งในสามAจะกลายเป็นAAAและอื่น ๆ นี้สามารถทำได้โดยวลี ((e. <@# [) {:)\ซึ่งจะใช้เวลาแต่ละคำนำหน้า\รูปลักษณ์ที่องค์ประกอบสุดท้าย {:ของมันและสร้างหน้ากากขององค์ประกอบทั้งหมดในคำนำหน้าว่าการแข่งขัน ว่าองค์ประกอบสุดท้ายแล้วฟิลเตอร์และกล่องเพียงองค์ประกอบเหล่านั้นe.<@#

ด้วยอินพุตของเราทั้ง "unique-ified" เราสามารถใช้ชุดลบปกติได้อย่างปลอดภัย-. ในขณะที่ยังคงเคารพการทำซ้ำ

จากนั้นเราเปิดผลลัพธ์แต่ละรายการและนำองค์ประกอบแรกเท่านั้นที่จะ "เลิกทำ" การทำซ้ำของเรา: {.@>

เสียบกริยาผู้ช่วยนี้เข้าด้วยกันการแก้ปัญหาโดยรวมของเรา

[: }.@> [: (] , <@(/:~@wo ;))&.>/ <@a: ,~ |.

โดยพื้นฐานแล้วสิ่งที่เราทำที่นี่คือการทำให้ปัญหาของเราลดลงเพียงครั้งเดียว เราเริ่มที่จะย้อนกลับอินพุต|.และต่อท้าย,~เป็นเอซa:หรือกล่องเปล่าซึ่งจะเป็นค่าเริ่มต้นของผลลัพธ์สุดท้ายของเราเช่น:

┌─────────┬─────┬───┬───┬──┐
│SEVENTEEN│THREE│TWO│ONE│┌┐│
│         │     │   │   ││││
│         │     │   │   │└┘│
└─────────┴─────┴───┴───┴──┘

เราติดคำกริยาต่อไปนี้ระหว่างแต่ละองค์ประกอบเพื่อให้การลดมีผล:

(] , <@(/:~@wo ;))/

สิ่งนี้บอกว่า: รับอินพุตที่ถูกต้อง](เช่นผลลัพธ์ของเรา) และผนวกเข้า, กับอินพุตซ้าย (นี่คือONEการทำซ้ำครั้งแรกTWOในวันที่ 2 และอื่น ๆ ) โดยไม่มีwoการทำลายของ;อินพุตที่ถูกต้อง (เช่นไม่มีตัวอักษรใด ๆ ใช้) แต่ก่อนที่ท้ายเรียงและกล่องมันอีกครั้ง/:~<@

ในตอนท้ายของทั้งหมดนี้เราจะได้ผลลัพธ์ตามที่เราต้องการรายการของกล่อง แต่ทั้งหมดอยู่ในกล่องขนาดใหญ่หนึ่งกล่องและยังมีกล่องเปล่าที่ด้านหน้า }.@>ดังนั้นเราจึงเปิดให้เอากล่องด้านนอกและฆ่าองค์ประกอบแรก:


[:}.@>|.(],a.<@#~0>.-&(1#.a.=/;))&.>/@,<@a:
FrownyFrog

ง่าย ๆ(],a.<@#~0>.-&(1#.a.=/;))/@|.ก็ใช้งานได้เว้นแต่ว่าฉันจะหายไปกรณีที่ขอบ
FrownyFrog

เท่าที่ฉันสามารถบอกได้การจัดเรียงไม่มีที่ใดในข้อกำหนด
FrownyFrog

2
อัปเดตแล้วและตอนนี้ฉันมีเวลาที่จะดูดซับมันแค่อยากจะพูดอีกครั้ง: นั่นเป็นเรื่องที่เจมาก J!
โยนาห์

4

JavaScript (ES6),  66  65 ไบต์

a=>a.map(b=s=>[...s].filter(c=>x==(x=x.replace(c))?b+=c:0,x=b+0))

ลองออนไลน์!

แสดงความคิดเห็น

bbxcxb

a =>                      // a[] = input
  a.map(b =               // initialize b to the callback function of this map()
                          // it will be coerced to a string that does not contain
                          // any letter in uppercase
    s =>                  // for each entry s in a[]:
    [...s].filter(c =>    //   for each character c in s:
      x == (              //     check whether x is changed when
        x = x.replace(c)  //     c is replaced with 'undefined'
      ) ?                 //     if so:
        b += c            //       append c to b and keep c
      :                   //     else:
        0,                //       discard c
      x = b + 0           //     coerce b to a string and save it in x
    )                     //   end of filter()
  )                       // end of map()

4

C ++ (gcc) , 177 170 ไบต์

-5 ไบต์ขอบคุณปลาย @ anatolyg, -2 ไบต์กับสิ่งเล็ก ๆ ที่ฉันสังเกตเห็น

#import<random>
#define v std::vector<std::string>
v a(v p){std::vector<int>o(91),b;int j=-1;for(auto i:p){b=o;p[++j]="";for(int c:i)--b[c]<0?p[j]+=c,++o[c]:0;}return p;}

คำอธิบาย

#import<random>เพิ่มทั้งสอง<string>และ<vector>ครึ่งไบต์

ขั้นแรกสร้างเวกเตอร์ 91 องค์ประกอบของ 0s (เฉพาะดัชนี 65-90 เท่านั้นที่ใช้ในการจัดเก็บจดหมายที่เกิดขึ้น) และเวกเตอร์อื่น ๆ ที่มีประเภทเดียวกัน แต่ไม่ได้ตั้งค่าเป็นค่า วนซ้ำแต่ละองค์ประกอบของอินพุต (วัน): รับตัวอักษรที่เป็นเจ้าของในปัจจุบันได้รับตัวอักษรที่จำเป็นสำหรับวันนั้นแทนที่อินพุตที่ดัชนีด้วยจำนวนที่ต้องการและอัพเดตตัวอักษรที่เป็นเจ้าของ ส่งคืนอินพุตที่แทนที่

ลองออนไลน์!


คุณสามารถทำ#define v std::vector<std::stringและลบusing namespace stdเพื่อลดจำนวนไบต์ 6 ไบต์
Anatolyg

2

C # (Visual C # Interactive คอมไพเลอร์) , 123 ไบต์

a=>{var b="";for(dynamic i=0,e,f;i<a.Count;b+=a[i++]=f)foreach(var c in((e,f)=(b.ToList(),"")).f+a[i])f+=e.Remove(c)?"":c;}

ลองออนไลน์!

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

// a: input array of strings
a=>{
  // b: cumulative letters
  var b="";
  for(
    // i: loop index of string
    // e: copy of cumulative letters for manipulation
    // f: characters missing from current string
    dynamic i=0,e,f;
    // iterate over each string in a
    i<a.Count;
    // add missing letters of the day to
    // cumulative missing letters and
    // update array for output
    b+=a[i++]=f
  )
    // iterate current string with character c
    foreach(var c in
      // tuplized variable assignment
      // e=b.ToList()
      //   set e to a copy of the cumulative letters
      // f=""
      //   initially there are no letters needed for the day
      ((e,f)=
      (b.ToList(),"")).f+a[i]
    )
      // conditionally add c to missing letters for the day
      f+=e.Remove(c)?"":c;
}

2

R, 119 112 106 103 ไบต์

-7 ไบต์จากนามแฝงชื่อฟังก์ชั่นอีกต่อไปสองชื่อและตอนนี้การป้อนข้อมูลผู้ใช้จากscan()
-6 ไบต์เพื่อเรียกเพียงstrsplit()ครั้งเดียวที่จุดเริ่มต้น
-3 ไบต์เพื่อกำจัดนามแฝงอีกครั้งและกำหนดสองตัวแปรในการโทรครั้งเดียว

(แก้ไขจำนวนไบต์ที่ต่ำก่อนหน้านี้อย่างไม่ถูกต้องเช่นกัน)

a=scan(,'');b=a=strsplit(a,'');for(i in 2:length(a))b[[i]]=vecsets::vsetdiff(a[[i]],unlist(b[1:i-1]));b

นี่คือการส่ง PPCG ครั้งแรกของฉันทุกชนิด! ดังนั้นฉันจึงไม่มีความคิดว่าฉันกำลังทำอะไรทั้งในแง่ของการเล่นกอล์ฟและในแง่ของการโพสต์มารยาท ผลลัพธ์คือรายการของเวกเตอร์ซึ่งอาจหรืออาจจะไม่เป็นไปตามเงื่อนไขของความท้าทาย :-P

สำหรับรหัสนั้นมันใช้เวลาในการป้อนข้อมูลของผู้ใช้scan()และเปรียบเทียบตัวอักษรของวันใหม่กับตัวอักษรที่เป็นของสะสมเช่นเดียวกับในโซลูชันอื่น ๆ หากมีทางเลือกที่สั้นกว่าunlistและstrsplitสำหรับการแปลงสตริงเป็นเวกเตอร์ของตัวละครแต่ละตัวที่น่าจะรู้ ฉันยังใช้vsetdiffฟังก์ชั่นในvecsetsแพ็คเกจของ Carl Withoft เพื่อรับความแตกต่างของตัวอักษรที่จำเป็นสำหรับวันถัดไปและตัวอักษรปัจจุบันที่เป็นเจ้าของ


1
ไม่เป็นไร ฉันเพียงเล็กน้อยลังเลตัวเองในการใช้แพคเกจภายนอก แต่มันเป็นเพียงแค่ฉัน ... ฉันชอบที่จะเข้าใกล้ความท้าทายในรหัส R ฐาน;)
digEmAll






2

Japt , 15 14 ไบต์

£Q®X=rZPPÃQ±XX

ลองมัน

£Q®X=rZPPÃQ±XX     :Implicit input of array
£                  :Map each X
 Q®                :  Map each Z in Q (initially a quotation mark)
   X=              :    Reassign to X
     rZ            :    Replace Z with
       P           :    The empty string
        P          :    With the default global flag disabled
         Ã         :  End map
          Q±X      :  Append X to Q
             X     :  Return X

1
@Downvoter โปรดมีความเหมาะสมที่จะแสดงความคิดเห็น
ปุย


1

PowerShell , 71 ไบต์

$args|%{$w=$_;$p|% t*y|%{$w=$w-replace"^(.*?)$_(.*)",'$1$2'};$w;$p+=$w}

ลองออนไลน์!

นำคำที่ป้อนเข้ามา$argsและทำซ้ำมัน การวนซ้ำแต่ละครั้งเราตั้งค่าคำปัจจุบัน$wจากนั้นวน$pลูบมากกว่าool ของเราที่ซื้อไปแล้ว แต่ละวงด้านในเราดำเนินการ regex -replaceกับ$word ปัจจุบันของเราเพื่อให้เราแทนที่เพียงตัวอย่างแรกของจดหมายจาก$pool ของเรา เมื่อเราผ่านตัวอักษรทั้งหมดในสระว่ายน้ำเราจะส่งออกสิ่งที่เหลืออยู่$w(เช่นสิ่งที่เราต้องซื้อ) แล้วตะปูหัวจดหมายเหล่านั้นลงในสระของเรา$p+=$wสำหรับคำถัดไป



1

C (gcc) , 118 ไบต์

m(a,r,q,u)char**a,*r,*q,*u;{for(;*a;a++,memcpy(r,q,255))for(memcpy(q,r,255),u=*a;*u;u++)*u=r[*u]-->0?32:(q[*u]++,*u);}

ลองออนไลน์!

ในฐานะที่เป็นโบนัสเล็ก ๆ น้อย ๆ มันจะใช้เวลาหุ้นในrช่วงเริ่มต้นเป็นอาร์เรย์ ส่งออกรายการสิ้นสุดด้วยค่า null ที่สิ้นสุดด้วยการป้อนข้อมูลaด้วยตัวอักษรที่เป็นเจ้าของทั้งหมดแทนที่ด้วยช่องว่าง



1

05AB1E , 11 ไบต์

-6 ขอบคุณ Kevin Cruijssen

ćsvDysSõ.;»

ลองออนไลน์!


1
ผลงาน 15 byter ของคุณ แต่ฉันจะเข้ามาแทนที่ต่อท้ายด้วยJ »นอกจากนี้คุณยังสามารถบันทึก 4 ไบต์โดยการแทนที่vyð.;}ðKด้วยSõ.; 11 ไบต์
Kevin Cruijssen

Ahhhh ... ฉันต้องการ S เพื่อทำให้เวกเตอร์
Magic Octopus Urn

1

Swift 4.2 / Xcode 10.2 , 244 242 239 238 ไบต์

a.reduce(([Character:Int](),[String]())){c,l in let b=l.reduce(into:[Character:Int]()){$0[$1,default:0]+=1}.map{($0,max(0,$1-(c.0[$0] ?? 0)))};return(c.0.merging(b){$0+$1},c.1+[b.map{String(Array(repeating:$0.0,count:$0.1))}.joined()])}.1

ลองออนไลน์!

ตัวอักษรไม่ได้ถูกจัดเรียงตามตัวอักษรมันเป็นสิ่งต้องห้ามตามกฎ


1

สกาลา, 68 ไบต์

(c:Seq[String])=>c./:(Seq(""))((a,n)=>a:+n.diff(a./:("")(_+_))).tail

ลองออนไลน์!

/: สั้น ๆ สำหรับโอเปอเรเตอร์ foldLeft a คือการรวมท้ายที่สุดจะส่งคืนผลลัพธ์ที่เราต้องการ n คือองค์ประกอบถัดไป

ยกเลิกแข็งแรงเล่นกอล์ฟ

def NewLettersPerDay(c: Seq[String]): Seq[String] = {
    c.foldLeft(Seq(""))((agg, next) => {
      val existingLetters = agg.reduce(_+_)
      val newDayLetters = next.diff(existingLetters)
      agg :+ newDayLetters
    }).tail
}


0

ถ่าน 18 ไบต์

EθΦι¬⊙…θκ‹№…ιμλ№νλ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

 θ                  Input array
E                   Map over strings
   ι                Current string
  Φ                 Map over characters
       θ            Input array
      …             Truncated to length
        κ           Outer index
    ¬               Logical Not
     ⊙              Any element exists where
          №         Count of
              λ     Current letter in
            ι       Outermost word
           …        Truncated to
             μ      Current letter index
         ‹          Is less than
               №    Count of
                 λ  Current letter in
                ν   Innermost word
                    Implicitly print each day's bought letters on their own line

0

PHP, UTF-8 ทราบ (253 ไบต์)

<?php $p=[];for($i=1;$i<$argc;$i++){$a=$p;$b=[];for($j=0;$j<mb_strlen($s=$argv[$i]);$j++){$k=1;if(isset($a[$c=mb_substr($s,$j,1)]))if($a[$c]){$k=0;$a[$c]--;}if($k){echo $c;if(isset($b[$c]))$b[$c]+=$k;else $b[$c]=$k;}}$p=array_merge($p,$b);echo PHP_EOL;}

0

C # (Visual C # Interactive คอมไพเลอร์) , 112 ไบต์

a=>{var b="";for(int i=0;;b+=a[i++])foreach(var z in b)if(a[i].Contains(z))a[i]=a[i].Remove(a[i].IndexOf(z),1);}

ลองออนไลน์!


อืม ... มันมีข้อผิดพลาดเกิดขึ้นเหรอ?
dana

@dana ฉันค่อนข้างแน่ใจว่าฟังก์ชั่นที่ไม่ส่งคืนสิ่งใดได้รับอนุญาตให้ออกโดยมีข้อยกเว้น
ศูนย์รวมแห่งความไม่รู้

น่าสนใจ ... ฉันคิดว่ามันไม่ใช่กฎที่แปลกประหลาดที่สุด
dana




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