การเขียนโปรแกรมที่ไม่แบ่งแยก


74

เราบอกว่าสตริงไม่มีการแบ่งแยกหากอักขระแต่ละตัวของสตริงปรากฏจำนวนครั้งเท่ากันและอย่างน้อยสองครั้ง

ตัวอย่าง

  • "aa!1 1 !a !1"จะไม่ใช่การแบ่งแยกเพราะแต่ละตัวละคร , !, aและ1ปรากฏสามครั้ง
  • "abbaabb"จะไม่ได้ ไม่ใช่แบ่งแยกเพราะปรากฏบ่อยกว่าba
  • "abc"ก็ไม่ได้ แยกแยะเพราะตัวละครจะไม่ปรากฏขึ้นอย่างน้อยสองครั้ง

งาน

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

นั่นคือโปรแกรมที่ทำงานบนซอร์สโค้ดของตัวเองควรคืนค่าความจริง

การส่งแต่ละครั้งจะต้องสามารถจัดการกับสตริงที่ไม่ว่างเปล่าที่มีASCII ที่พิมพ์ได้รวมถึงอักขระทั้งหมดที่ปรากฏในซอร์สโค้ดของการส่ง

กรณีทดสอบ

Truthy:

<your program's source code>
"aaaa"
"aa!1 1 !a !1"
"aabbccddeeffgg"
"1Q!V_fSiA6Bri{|}tkDM]VjNJ=^_4(a&=?5oYa,1wh|R4YKU #9c!#Q T&f`:sm$@Xv-ugW<P)l}WP>F'jl3xmd'9Ie$MN;TrCBC/tZIL*G27byEn.g0kKhbR%>G-.5pHcL0)JZ`s:*[x2Sz68%v^Ho8+[e,{OAqn?3E<OFwX(;@yu]+z7/pdqUD"

Falsy:

"a"
"abbaabb"
"abc"
"bQf6ScA5d:4_aJ)D]2*^Mv(E}Kb7o@]krevW?eT0FW;I|J:ix %9!3Fwm;*UZGH`8tV>gy1xX<S/OA7NtB'}c u'V$L,YlYp{#[..j&gTk8jp-6RlGUL#_<^0CCZKPQfD2%s)he-BMRu1n?qdi/!5q=wn$ora+X,POzzHNh=(4{m`39I|s[+E@&y>"

4
@Laikoni เราสามารถละเมิดความคิดเห็นเพื่อให้มันใช้งานได้หรือไม่
Magic Octopus Urn

6
ในฐานะที่เป็นบันทึกย่อฉันรักความท้าทายที่ฉันสามารถใช้รายการอื่นเพื่อทดสอบความถูกต้องของรายการของฉัน
Magic Octopus Urn

3
@ MagicOctopusUrn ฉันคิดว่าเขาพูดในกล่องทรายที่ได้รับอนุญาตเพราะมันไม่สามารถระบุได้อย่างชัดเจน
Erik the Outgolfer

11
เผง แม้ว่าคุณจะจัดการกับการห้ามแสดงความคิดเห็นในรูปแบบวัตถุประสงค์ก็ตามแล้วตัวอักษรสตริงที่ไม่ได้ใช้แล้วล่ะ อย่างไรก็ตามฉันคิดว่าการให้คะแนนเป็นสิ่งจูงใจที่จะหลีกเลี่ยงความคิดเห็นให้มากที่สุด
Laikoni

4
ฉันได้รับมันเป็นเพียงปริศนา แต่การรวมกลุ่มของ "ไม่แบ่งแยก" กับ "ประเภทสมาชิกที่ระบุว่ามีอยู่ในส่วนเท่า ๆ กันทั้งหมด" เป็นการรบกวนอย่างอ่อนโยน ... การ "แยกแยะ" หมายถึง "เพื่อบอกความแตกต่างระหว่าง" และ การทำเช่นนี้อย่างไม่ยุติธรรมหมายถึงการปฏิบัติหรือตัดสินผู้อื่นอย่างไม่เป็นธรรมโดยมองว่าพวกเขาแตกต่างจากชนชั้นอื่น แน่นอนไปต่อด้วยความสนุก!
ErikE

คำตอบ:


37

Brachylogขนาด 10 ไบต์

=ᵍbᵐbᵐlᵍ=l

ลองออนไลน์!

คำอธิบาย

=ᵍ                Group all equal elements together
  bᵐbᵐ            Remove the first element of each group twice. This fails if
                  there are fewer than 2 elements
      lᵍ          Group elements together that have the same length
        =         Are all elements of that list equal? This only succeeds if the
                  list has one element
         l        Length. This will always succeed

25

Java 8, 198 192 186 174 168 165 160 ไบต์ (ถ่านนับ6 5)

o->{byte x[]=new byte[+333-3|2],u=-0,i,fe,fi,w; s:w:no0r3sswwyyy:for(int s:o){{u=++x[s];}};for(int b:x){if(!!!(2>b||u==b)|2>u|2>2){x[0]++;}}return!!(0>--x[0]);}

ลองออนไลน์
รหัสที่ใช้ในการตรวจสอบการเกิดขึ้นของตัวละครซึ่งเป็นคำตอบของฉันสำหรับความท้าทายนี้

-5 ไบต์ขอบคุณ@ OlivierGrégoireอีกครั้งโดยกำจัดความคิดเห็นและทำให้ยุ่งเหยิง ;)

คำตอบเก่า168 ไบต์ (นับถ่าน 6) คำตอบ :

o->{int w[]=new int[2222],u=0,f=0;for(int r:o)u=++w[r];for(int e:w)if(!(2>e|u==e)|2>u)f++;return!(f>0);}//[[[]]]  !!!!e(i)++,,,,-----oo////000tuww::::{{{{{;;||||}}}}}>>

ลองออนไลน์
รหัสที่ใช้ในการตรวจสอบการเกิดขึ้นของตัวละครไม่รวมความคิดเห็นซึ่งเป็นคำตอบของฉันสำหรับความท้าทายนี้

-6 ไบต์ขอบคุณที่@ OliverGrégoireลบโดยการแลกเปลี่ยนการตรวจสอบไปยัง<>

คำอธิบายของโปรแกรม golf golf พื้นฐาน (98 ไบต์):
ลองออนไลน์

s->{                     // Method with character-array parameter and boolean return-type
  int a[]=new int[256],  //  Occurrences integer-array containing 256 zeroes
      t=0,               //  Temp integer, starting at 0
      f=0;               //  Flag integer, starting at 0
  for(int c:s)           //  Loop over the input
    t=++a[c];            //   Increase the occurrence-counter of the current character
                         //   And set the temp integer to this value
  for(int i:a)           //  Loop over the integer-array
    if(i>1               //   If the value is filled (not 0) and at least 2,
       &i!=t             //   and it's not equal to the temp integer
       |t<2)             //   Or the temp integer is lower than 2
      f++;               //    Increase the flag-integer by 1
  return f<1;}           //  Return whether the flag integer is still 0

บางสิ่งที่ฉันทำเพื่อลดจำนวนอักขระที่ใช้:

  • ชื่อตัวแปรo, w, u, f, rและeได้รับการแต่งตั้งในวัตถุประสงค์เพื่อกลับมาใช้ตัวละครที่เรามีอยู่แล้ว ( แต่ไม่เกิน 6)
  • 2222256ถูกนำมาใช้แทน
  • การเปลี่ยนแปลงหากตรวจสอบe>0&u!=e|u<2เพื่อ!(e<2|u==e)|u<2ที่จะลบ &6x
  • ลบออกทั้งสองแยกออกจากกันและผลตอบแทนที่ใช้ธงfและเรากลับมาไม่ว่าจะยังคงเป็น 0 ในที่สุด (ซึ่งหมายความว่าฉันสามารถลบ 6x byจากbyteตอนนี้ที่เราจะใช้nในintครั้งที่ 6 แทน 8)
  • e<2และu<2เปลี่ยนไป2>eและ2>uจะลบ <6x

สิ่งที่ฉันทำเพื่อลดจำนวนถ่าน 6 ถึง 5:

  • 2 เท่าintถึงbyteจำนวนที่nใช้คือ 4 แทน 6
  • ใช้x[0]แทนตัวแปรใหม่f=0ดังนั้นจำนวนการ=ใช้คือ 5 แทน 6
  • เปลี่ยน2222ไป3333ดังนั้นจำนวนเงิน2ที่ใช้คือ 2 แทน 6
  • เปลี่ยนตัวแปรfแล้วและrอีกครั้งเพื่อให้พวกเขาไม่ได้อีก 6 คน

@ OlivierGrégoireทำอะไรเพื่อกำจัดความคิดเห็นและทำให้ 5x /:

  • ,i,fe,fi,w;เพิ่มตัวแปรที่ไม่ได้ใช้
  • การเพิ่มป้ายกำกับที่ไม่ได้ใช้: s:w:no0r3sswwyyy:.
  • กำลังเพิ่มที่ไม่ได้ใช้ |2>2
  • เพิ่ม{}รอบ for-loops และ ifs และเพิ่ม{}-block ที่ไม่ได้ใช้
  • เปลี่ยนไป!!!!
  • เปลี่ยนไป|||
  • เปลี่ยน333ไป+333-3|2ในการกำจัดของผู้ประกอบการทางคณิตศาสตร์ที่เหลือและ+-|2
  • เปลี่ยนไป!(x[0]>0)!!(0>--x[0])

1
180 ไบต์ : การเปลี่ยนแปลงทั้งหมดลงใน< >
Olivier Grégoire

@ OlivierGrégoireขอโทษด้วยฉันอยู่ที่ 174 :) แต่จะดูว่าเคล็ดลับของคุณยังสามารถใช้ได้หรือไม่
Kevin Cruijssen

การเปลี่ยนแปลงยังสามารถใช้กับการบันทึก 6 ไบต์
Olivier Grégoire

ที่อยู่ใกล้ฉันถึง 162 ตัวอักษร (161 ตัวอักษร) ฉันพยายามลบความคิดเห็น แต่ฉันยังต้องใส่เครื่องหมายจุลภาคที่อื่น ฉันไม่สามารถหาที่ใดก็ได้
Olivier Grégoire

1
160 ไบต์ ( พิสูจน์ ) มีโอกาสเล่นกอล์ฟได้มากกว่า
Olivier Grégoire

15

เยลลี่ , 18 16 12 10 ไบต์

Ġ¬zḊḊ¬zĠȦȦ

ลองออนไลน์!

มันทำงานอย่างไร

Ġ¬zḊḊ¬zĠȦȦ  Main link. Argument: s (string)

Ġ           Group the indices of s by their corresponding elements.
            "abcba" -> [[1, 5], [2, 4], [3]]

 ¬          Take the logical NOT of each 1-based(!) index.
            [[1, 5], [2, 4], [3]] -> [[0, 0], [0, 0], [0]]

   Ḋ        Dequeue; yield s without its fist element.
            "abcba" -> "bcba"

  z         Zip-longest; zip the elements of the array to the left, using the
            string to the right as filler.
            ([[0, 0], [0, 0], [0]], "bcba") -> [[0, 0, 0], [0, 0, "bcba"]]

    Ḋ       Dequeue; remove the first array of the result.
            This yields an empty array if s does not contain duplicates.
            [[0, 0, 0], [0, 0, "bcba"]] -> [[0, 0, "bcba"]]

    ¬       Take the logical NOT of all zeros and characters.
            [[0, 0, "bcba"]] -> [[1, 1, [0, 0, 0, 0]]]

      Ġ     Group.

     z      Zip-longest. Since all arrays in the result to the left have the same
            number of elements, this is just a regular zip.
            [[1, 1, [0, 0, 0, 0]]] -> [[1], [1], [[0, 0, 0, 0]]

       Ȧ    Any and all; test if the result is non-empty and contains no zeroes,
            at any depth. Yield 1 if so, 0 if not.
            [[1], [1], [[0, 0, 0, 0]] -> 0

        Ȧ   Any and all.
            0 -> 0

13

Brachylogขนาด14 12 ไบต์

ọtᵐℕ₂ᵐ==tℕ₂ọ

ลองออนไลน์!

คำอธิบาย

ọ   Occurrences. Gives a list of [char, count] pairs for the entire input.
tᵐ  Map "tail" over this list, giving each character count.
ℕ₂ᵐ Make sure that each count is at least 2.
=   Make sure that all counts are equal.
    At this point we're done with the actual code, but we need another copy
    of each character (except ᵐ). We can just put them after this, as long as
    we make sure that they can never cause the predicate to fail.
=   Make sure that all counts are equal, again...
t   Extract the last count.
ℕ₂  Make sure that it's at least 2, again...
ọ   Get the digit occurrences in that count, this can't fail.

โซลูชัน 12 ไบต์ทางเลือกที่นำมาใช้tแทน:

ọtᵐ==tℕ₂ℕ₂ọᵐ

13

T-SQL, 320 ไบต์ (32 ตัวอักษร x 10 ตัว)

การป้อนข้อมูลผ่านทางตารางที่มีอยู่ก่อนFILLที่มีเขต varchar STEW, ตามมาตรฐาน IO ของเรา

WITH BUMPF AS(SeLeCT GYP=1
UNION ALL
SeLeCT GYP+1FROM BUMPF
WHeRe GYP<=1000)SeLeCT
IIF(MIN(WAXBY)<MAX(WAXBY)OR
MAX(WAXBY)<=1,+0,+1)FROM(SeLeCT
WAXBY=COUNT(1),WHICH=+1+0,HEXCHANGE=+01,HUNG=+0+1,CHLUB=+0,GEFF=+0FROM
BUMPF,FILL WHERE
GYP<=LEN(STEW)GROUP BY
SUBSTRING(STEW,GYP,1))CHEXX
OPTION(MAXRECURSION 0)----------<<<<<<

ฉันไม่เคยยินดีมากขึ้น แต่ยังน่ากลัวด้วยรหัส

ต้องรันบนเซิร์ฟเวอร์หรือฐานข้อมูลที่ตั้งค่าเป็นการเปรียบเทียบขนาดเล็ก มีอักขระแต่ละตัว 32 ตัวที่แตกต่างกัน 10 ตัวรวมถึงตัวพิมพ์เล็กและตัวพิมพ์เล็กE(คำสั่ง SQL นั้นไม่ตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็กดังนั้นตามต้องการจึงเว้นวรรคและแท็บ (แท็บจะแสดงเป็นตัวแบ่งบรรทัดในโค้ดด้านบน

ผมพบว่าวิธีการที่จะรวม 10 แต่ละสัญลักษณ์อื่น ๆ+ = ,ในรหัส แต่น่าเสียดายที่ไม่สามารถหาวิธีที่จะทำอย่างนั้นด้วยดังนั้นผมจึงมีการเพิ่มการแสดงความคิดเห็นของตัวละคร<-

นี่คือรหัสที่จัดรูปแบบก่อนที่ฉันจะยัดเยียดให้กับสารตัวเติมพิเศษทั้งหมด:

WITH b AS (SELECT g=1 UNION ALL SELECT g+1 FROM b WHERE g<1000)
SELECT IIF(MIN(w)<MAX(w) OR MAX(w)<1+1,0,1)
FROM(
    SELECT w=COUNT(1), --extra constant fields here are ignored
    FROM b, fill
    WHERE g < 1+LEN(stew)
    GROUP BY SUBSTRING(stew,g,1)
)a OPTION(MAXRECURSION 0)

บรรทัดบนสุดคือ CTE แบบเรียกซ้ำที่สร้างตารางตัวเลขbซึ่งเราเข้าร่วมกับสตริงต้นทางเพื่อแยกตามตัวอักษร อักขระเหล่านั้นถูกจัดกลุ่มและนับและIIFคำสั่งจะคืนค่า 0 หรือ 1 ขึ้นอยู่กับว่าสตริงอินพุตนั้นไม่แบ่งแยก


11

C (gcc) ,  333  168 ไบต์

ขอบคุณ @Kevin Cruijssen สำหรับการบันทึก 9 ไบต์และขอขอบคุณ @Laikoni สำหรับการบันทึก 45 ไบต์!

f(r,h,a){char*o=r,c[222]={!o};for(a=!o;*o;)++c[*o++];for(h=!o;222/++h;c[h]&&c[h]!=a&&(a=!*c))!a&&c[h]&&(a=c[h]);r=!(2/2/a);}/////!(())****++,,,,,[[]]fffffrr{{{{{{}}}}}}

ลองออนไลน์!

C, 333 ไบต์

i,v;f(S){char*s=S,L[128]={0};for(v=0;*s;)++L[*s++];for(i=-1;++i<128;L[i]&&L[i]-v?v=-1:0)!v&&L[i]?v=L[i]:0;return-v<-1;}/////////!!!!!!!!&&&&&(((((())))))******+++,,,,,,,----00000111122222228888888:::::::<<<<<<<===???????LLLSSSSSSS[[[]]]aaaaaaaacccccccceeeeeeeeffffffhhhhhhhhiinnnnnnnnooooooorrrrssssssttttttttuuuuuuuuvv{{{{{{{}}}}}}}

แม้แต่ bytecount ก็ไม่แบ่งแยก!

ลองออนไลน์!


อ๊ะ ... ฉันต้องการเป็นผู้แสดงความคิดเห็นคนแรก แม้ว่าหนึ่งดีฉันชอบวิธีที่คุณจัดเรียงตัวอักษรสำหรับความคิดเห็น ^ _ ^
Magic Octopus Urn

1
คุณสามารถลดขนาดลงเป็น324 ไบต์ได้โดยเปลี่ยนทั้งสองเป็น128เพื่อ222ให้8สามารถลดลงได้
Kevin Cruijssen

1
279 ไบต์โดยการเปลี่ยนชื่อi, v, S, sและLตัวละครที่แล้วปรากฏในคำหลักchar, forและreturn: ลองออนไลน์!
Laikoni

@Laikoni ขอบคุณ! เมื่อวานนี้ฉันไม่มีเวลาเล่นกอล์ฟอย่างถูกต้อง
Steadybox

@MagicOctopusUrn พวกเขาจะถูกจัดเรียงเพราะผมขี้เกียจเกินไปที่จะเพิ่มพวกเขาด้วยมือ
Steadybox

9

05AB1E , 20 18 16 14 ไบต์

S¢Z≠sË*sZ¢≠SË*

ลองออนไลน์!

โปรแกรมแบ่งออกเป็น 2 ส่วนโดยที่เป้าหมายของส่วนแรกคือการทำงานที่แท้จริงและเป้าหมายของส่วนที่สองคือการใช้ฟังก์ชั่นเดียวกับส่วนแรกโดยไม่แก้ไขผลลัพธ์

คำอธิบาย (ส่วนแรก)

S          # push input split into list of chars
 ¢         # count the occurrence of each char in input
  Z≠       # check that the max count is not 1
    sË     # check if all counts are equal
      *    # multiply

คำอธิบาย (ส่วนที่สอง)

s          # swap input to top of stack
 Z¢        # count the number of occurrences of the largest element
   ≠       # check that the count isn't 1
    SË     # split into list and check that each element are equal (always true)
      *    # multiply (as it is with 1, the original result is left unchanged)

{γ€gDË*P≠qq{γ€gDË*P≠เป็นอีก 20;)
Magic Octopus Urn

1
@ MagicOctopusUrn: ดีมาก! ฉันมีคู่อื่นที่อายุ 20 ด้วย ฉันมีหนึ่งที่ 18 ตอนนี้เช่นกัน :)
Emigna

2
คาถา! ไม่มีคำอธิบายอื่น ๆ !
Magic Octopus Urn

1
¢... คนที่คิดดีและฉันก็ดีใจที่เห็นว่ามีประโยชน์เท่าที่ฉันคิดว่ามันอาจจะเป็นฮ่าฮ่า!
Magic Octopus Urn

9

Husk , 14 ไบต์

§<ε#εu§m#u
m
<

ลองออนไลน์!

คำอธิบาย

สองบรรทัดสั้น ๆ คือไม่มีตัวเลือกเนื่องจากฟังก์ชั่นหลักไม่เคยเรียกพวกเขา

§<ε#εu§m#u  Implicit input, say S = "asasdd"
         u  Remove duplicates: "asd"
      §m#   For each, get number of occurrences in S: [2,2,2]
     u      Remove duplicates: L = [2]
   #ε       Number of elements in L that are at most 1: 0
  ε         1 if L is a singleton, 0 otherwise: 1
§<          Is the former value smaller than the latter?

แต่นี่มี 'u' มากกว่า 'm' ดังนั้นจึงไม่เป็นไปตามข้อกำหนด
WGroleau

@WGroleau mเกิดขึ้นสองครั้ง: ที่บรรทัดแรกและบรรทัดที่สอง คำอธิบายไม่รวมสองบรรทัดสั้น ๆ เพราะไม่มีผลต่อพฤติกรรมของโปรแกรม
Zgarb

ฉันเดาว่า OP ควรชี้แจงว่าคำอธิบายของโปรแกรมสามารถสแกนพร้อมกับ program.but จริง แต่ถ้าคุณรวมที่แล้วคุณมีสี่ 'u' และสอง 'm'
WGroleau

ไม่เป็นไร; นี่ทำให้ฉันงงแบบเดียวกับที่คำตอบอื่นทำ
WGroleau

9

Python 2 , 75 69 ไบต์

def f(s):len({2<<s.count(c)-2for c,in s})<2or{{e.dil:-tu,r.dil:-tu,}}

เอาท์พุทผ่านการมีหรือไม่มีข้อผิดพลาด ข้อผิดพลาดคือValueError (หนึ่งตัวหรือมากกว่านั้นเกิดขึ้นเพียงครั้งเดียว) หรือNameError (จำนวนตัวอักษรนั้นไม่เท่ากัน)

ลองออนไลน์!


เคล็ดลับข้อผิดพลาดกะลบเป็นระเบียบ! ฉันชอบวิธีการใช้ประโยชน์จากตัวดำเนินการ shift ที่มีความสำคัญน้อย
Vincent

1
{{e.dil:-tu,r.dil:-tu,}} เจ้านายที่ดีนั่นคืออะไร?
Adam Barnes

1
@AdamBarnes ซึ่งพูดพล่อยๆที่ถูกต้อง Syntactically ที่โยนNameErrorถ้ามีการประเมิน
Dennis

ฉันไม่เข้าใจ ฉันพยายามเปลี่ยนมันaและทุกอย่างก็พัง คุณช่วยอธิบายเพิ่มเติมได้ไหม?
Adam Barnes

@AdamBarnes orที่ควรจะทำงานตราบเท่าที่คุณออกจากพื้นที่หลัง ฉันจะเพิ่มคำอธิบายเมื่อฉันอยู่ที่คอมพิวเตอร์
Dennis

9

Brachylog v2, 8 ไบต์ (ในชุดอักขระของ Brachylog)

oḅ\k\koḅ

ลองออนไลน์!

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

นี่เป็นโปรแกรมเต็มรูปแบบที่รับอินพุตเป็นรายการของรหัสอักขระ (ส่วนหนึ่งเป็นเพราะ Brachylog ดูเหมือนจะมีข้อผิดพลาดบางอย่างที่เกี่ยวข้องกับแบ็กสแลชในสตริงและส่วนหนึ่งเป็นเพราะ\คำสั่งไม่ทำงานในรายการของสตริง)

คำอธิบาย

oḅ\k\koḅ
o          Sort {standard input}
 ḅ         Group identical adjacent values
  \        Assert rectangular; if it is, swap rows and columns
   k       Delete last element
    \      Assert rectangular; (rest of the program is irrelevant)

koḅที่สิ้นสุดไม่เกี่ยวข้อง; kจะมีองค์ประกอบให้ทำหน้าที่oและไม่สามารถล้มเหลวได้หากมีรายการเป็นอินพุต

เหตุผลสำหรับการเริ่มต้นoḅควรมีความชัดเจน มันแบ่งพาร์ติชันรายการป้อนข้อมูลด้วยค่าเช่นจะกลายเป็น[1,2,1,2,4,1] [[1,1,1],[2,2],[4]]เพื่อให้อักขระแต่ละตัวปรากฏจำนวนครั้งเท่ากันแต่ละรายการเหล่านี้จะต้องมีความยาวเท่ากันนั่นคือรายการผลลัพธ์เป็นรูปสี่เหลี่ยมผืนผ้า เราสามารถยืนยันรูปสี่เหลี่ยมผืนผ้านี้โดยใช้\ซึ่งยังสลับแถวและคอลัมน์เป็นผลข้างเคียง

ขณะนี้เรามีค่าปัจจุบันประกอบด้วยสำเนาหลายชุดอักขระเช่นถ้าใส่เป็นมูลค่าปัจจุบันจะ[4,2,1,2,4,1] [[1,2,4],[1,2,4]]หากเราลบสำเนาเมทริกซ์ที่ได้จะยังคงเป็นรูปสี่เหลี่ยมผืนผ้าดังนั้นเราสามารถเปลี่ยนกลับมา\ใช้ได้ แต่ถ้าเหตุผลเมทริกซ์เป็นรูปสี่เหลี่ยมผืนผ้าเป็นว่าทุกตัวละครป้อนข้อมูลได้ที่แตกต่างกัน, เมทริกซ์ที่เกิดจะมีองค์ประกอบที่ไม่เหลือและ\ไม่ได้รักษาเมทริกซ์ "0 × 0" เป็นรูปสี่เหลี่ยมผืนผ้า (ค่อนข้างจะล้มเหลว) ดังนั้นoḅ\k\อย่างมีประสิทธิภาพอ้างว่าตัวละครที่ปรากฏในการป้อนข้อมูลแต่ละรายการจะแสดงหมายเลขเดียวกันของเวลาและจำนวนครั้งที่ไม่ได้เป็นที่ 1

นั่นเป็นฟังก์ชั่นทั้งหมดของโปรแกรมของเรา (ในฐานะโปรแกรมเต็มรูปแบบเราจะได้รับtrueหากไม่มีความล้มเหลวในการยืนยันเกิดขึ้นfalseหากบางคนทำ) เราจะต้องปฏิบัติตามข้อ จำกัด รูปแบบของแหล่งที่มาแม้ว่าดังนั้นฉันเพิ่มเพิ่มเติมkoḅว่าไม่มีวัตถุประสงค์ แต่ที่ไม่สามารถล้มเหลว (ไม่เหมือน\, oและมีความสุขที่จะทำหน้าที่ในรายการว่างเปล่า)




7

JavaScript (Node.js) , 144 ... 100 96 ไบต์

o=>!(a=o.split``.map(i=>o.split(i||aeehhhlmmnnnpst)[`length`]-1)).some(g=>![g>1][-!1]||a[-!1]-g)

ลองออนไลน์!

24 ตัวอักษรต่างกัน * 6 ครั้ง

28 ตัวอักษรต่างกัน * 5 ครั้ง

27 ตัวอักษรที่แตกต่าง * 5 ครั้ง

27 ตัวอักษรที่แตกต่าง * 4 ครั้ง

26 ตัวอักษรที่แตกต่าง * 4 ครั้ง

25 ตัวอักษรต่างกัน * 4 ครั้ง

24 ตัวอักษรต่างกัน * 4 ครั้ง

คำอธิบาย

o=>!(
 a=o.split``.map(                            // Split the input into character array and
  i=>o.split(i||aeehhhlmmnnnpst)[`length`]-1 // count the occurrences of each character.
 )
).some(                                      // Then check
 g=>![g>1][-!1]                              // If each character appears at least twice
 ||a[-!1]-g                                  // and the counts are all the same number.
)                                            

More to add:
1. Using {s.split``} instead of {[...s]} is to reduce the number of {.} that dominates
   the count.
2. Using {!c.some} instead of {c.every} to reduce the number of inefficient characters 
   (v,r,y in every)
3. Still one unavoidable inefficient character left ({h}).

Update:
1. Got rid of one {.} by replacing {.length} by {["length"]}.
2. Got rid of one {=} by replacing {c[-!1]!=g} by {c[-!1]-g}.
3. Got rid of one {()} by replacing {!(g>1)} by {![g>1][-!1]}.
4. Finally, because count per character is now 4, the backslashes can be taken out.

Update:
1. Got rid of all {"} by replacing {"length"} by {`length`} and exploiting shortcut
   evaluation. 
   {aaaeehhhlmmnnnpst} is not defined but is not evaluated either because of {c} which
   must be evaluated to true.

Update:
1. Got rid of all {c} by shortcutting the undefined variable at {split(i)} and replacing 
   all {c} by {a}.
   Since {i} is never an empty string, it is always evaluated true (except compared 
   directly to true).

Update:
1. Got rid of all {,} by moving the assignment after the argument list. The {()} at the
   front can therefore be moved to the assignment, retaining same number of {()}s.

6

PowerShell , 104 ไบต์

($qe=$args[0]| group |sort count|% count)[0]-eq$qe[-1]-and$qe[0]-gt1####((()))%%%pppddd===aaccss11nu|0gr

ลองออนไลน์!

มันสนุกมากที่ได้เล่นกอล์ฟ ข้อ จำกัด คือ$ที่เราต้องการอย่างน้อยสี่ของ (หนึ่งสำหรับการป้อนข้อมูล$argsหนึ่งสำหรับการกำหนดผลการคำนวณ$qeหนึ่งสำหรับการตรวจสอบตัวละครตัวสุดท้าย$qe[-1]และหนึ่งสำหรับการตรวจสอบตัวละครตัวแรก$qe[0]เพื่อให้เป็นจำนวนสูงสุดของตัวอักษรทำงาน

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


6

Haskell, 90 75 72 ไบต์

a[i]|d:n<-[[i|n<-i,n==a]|a<-i]=and[[i]<d,[d|i<-n]==n]--aadd,,,,:::::<=||

ตัวละครแต่ละตัวปรากฏขึ้น 6 ครั้ง สายป้อนจะถูกนำมาเป็นรายการเดี่ยว

ลองออนไลน์!

สำหรับการอ้างอิงรุ่นเก่า:

75 ไบต์แต่ละถ่าน 5 ครั้ง

n(l)|d<-[[0|n<-l,n==a]|a<-l]=and[[0]<d!!0,all(==d!!0)d]--an!((())),,,0<[]||

ลองออนไลน์!

90 ไบต์แต่ละถ่าน 3 ครั้ง:

a x|h:u<-[sum[1|d<-x,not(d/=c)]|c<-x],"  \"\\&,../1::>acdlmmnosst">[]=h>1&&all(not.(/=h))u

ลองออนไลน์!


6

Python 2 , 108 104 92 88 ไบต์

-12 ไบต์ขอบคุณRod-4
ไบต์ขอบคุณKevin Cruijssen

s=input();c=s.count;print[all(c(s[[]>[1]])==c(o)>1. for o in s)];aaafffillpprrtuu>1.>1.;

ลองออนไลน์!


1
โปรแกรมของคุณจะต้องไม่เลือกปฏิบัติ
user202729

1
ตัวโปรแกรมเองจะต้องไม่เลือกปฏิบัติ
HyperNeutrino

@ user202729 ขอบคุณที่บอกฉันฉันได้อัปเดตคำตอบของฉัน
OVS



6

MATLขนาด 12 ไบต์

q&=sqt&=tsvv

อินพุตเป็นสตริงที่อยู่ในเครื่องหมายคำพูดเดี่ยว เครื่องหมายคำพูดเดี่ยวในสตริงจะถูกหลีกเลี่ยงโดยการทำซ้ำ

เอาต์พุตเป็นเมทริกซ์ที่ไม่ว่างเปล่าซึ่งเป็นความจริงหากมันไม่มีเลขศูนย์และเป็นเท็จถ้ามันมีอย่างน้อยหนึ่งศูนย์

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมดรวมถึงการทดสอบความจริง / ความผิดพลาดมาตรฐานเพื่อความสะดวก

มันทำงานอย่างไร

ข้อความที่ทำเครื่องหมายด้วย(*)ไม่จำเป็นหรือไม่เป็นอันตรายและรวมอยู่ในนั้นเพื่อทำให้ซอร์สโค้ดไม่แบ่งแยก

q     % Implicit input. Convert chars to code points and subtract 1 from each (*)
&=    % Square matrix of all pairwise equality comparisons
s     % Sum of each column. Gives a row vector
q     % Subtract 1 from each value. An entry equal to 0 indicates the input string
      % is discriminating because some character appears only once
t     % Duplicate
&=    % Square matrix of all pairwise equality comparisons. An entry equal to 0
      % indicates the input string is discriminating because some character is
      % more repeated than some other
t     % Duplicate (*)
s     % Sum of each column (*) (all those sums will be positive if the previous
      % matrix doesn't contain zeros)
v     % Vertically concatenate the matrix and the vector of its column sums
v     % Vertically concatenate the resulting matrix with nothing (*)
      % Implicit display

5

Perl 5 , -p57 ไบต์

ตัวละครแต่ละตัวปรากฏขึ้น 3 ครั้ง มีเพียงคนเดียวเท่านั้นที่1ไม่ได้ทำอะไรเลย

เพิ่ม 12 ไบต์ในโซลูชัน 45 อักขระขั้นพื้นฐานเพื่อสร้างการแยกแยะ

s{.}[@m[@1{$&}+=$.].=g]eg;$\=s()(e@m;1)&&m[e(\sg+)\1+;]}{

ลองออนไลน์!


5

R , 90 ไบต์

"?"=`u\164f8ToI\x6Et`;'!'=prod;!{y<-xtabs(~?readLines())}%in%{z<-y[1]}&z>T##&[]>~48bEfILpu

ลองออนไลน์!

เอาต์พุตTRUEสำหรับสตริงที่ไม่แบ่งแยกและFALSEสำหรับสตริงที่แบ่งแยก ฉันได้เขียนโค้ดที่น่าเกลียดมากสำหรับความท้าทายในเว็บไซต์นี้ แต่ฉันคิดว่านี่เป็นสิ่งที่น่าเกลียดที่สุด

45 ตัวอักษรใช้สองครั้ง (รวมถึงความคิดเห็นสองสามข้อ) คำตอบ R ที่ดีที่สุดก่อนหน้านี้คือ116 ไบต์โดยมี 29 ตัวอักษรใช้กัน 4 ครั้ง ฉันกำลังโพสต์สิ่งนี้แยกจากกันเพราะมันแตกต่างอย่างมาก

รหัสเทียบเท่า

y = table(utf8ToInt(readLines()))
z = y[1]
all(y == z) & (z > 1)

ซึ่งแปลงอินพุตเป็นเวกเตอร์ของจำนวนเต็มคำนวณตารางฉุกเฉินyของค่าจากนั้นตรวจสอบว่าการนับทั้งหมดในตารางนั้นเท่ากับการนับครั้งแรกและการนับครั้งแรกมีค่ามากกว่า 1

ปัญหาเบื้องต้นคือการใช้วงเล็บ 2 คู่เท่านั้น นี้จะทำได้โดยการกําหนดฟังก์ชั่นเอก!และ?จะเป็นutf8ToIntและprodตามลำดับ (ฉันไม่สามารถใช้allเพราะฉันต้องการa) สอง: มีสี่ที่ได้รับมอบหมายเป็นสองด้วย= <-ซึ่งหมายความว่าการทดสอบความเท่าเทียมกันระหว่างyและzไม่สามารถใช้y==zหรือy-z; y%in%zมาเพื่อช่วยเหลือ

การกำหนดฟังก์ชันเหล่านี้ใช้ทุกคำพูดที่เป็นไปได้: สองราคาคู่สองราคาเดียวและฉันจะต้องสอง backticks ในวรรคถัดไปดังนั้นผมจึงมีรีสอร์ทให้แทนreadLines() scan(,"")(ตัวเลือกอื่น ๆ เช่นscan(,letters)หรือscan(,month.abb)ทั้งหมดใช้ของมีค่าt ซึ่งฉันไม่สามารถแบ่งได้)

utf8ToIntจุดนี้ผมก็มีมากที่สุดของการสร้างบล็อก: prod, table, readLines, %in%, entตัวละครทั้งสามปรากฏสามครั้งในชื่อเหล่านี้: ครั้งแรกที่ผมค้นพบว่าtable(foo)เทียบเท่ากับการประหยัดxtabs(~foo) eฉันสามารถช่วยเหลือnและtด้วยเคล็ดลับรหัสฐานสิบหก / octal ; วิธีการแก้ปัญหา golfiest คือการใช้u\164f8ToI\x6Et(ใน backticks) utf8ToIntสำหรับ


เป็นเรื่องที่น่าประทับใจที่คุณสามารถแยกแยะกรณีทั้งสองใน 90 ไบต์ (และผู้ใช้วิธีใช้อย่างไม่เหมาะสม) แต่อนิจจาNAไม่ถือว่าเป็นค่าจริง (ใน R ถ้า (NA) x อื่น y ทำให้เกิดข้อผิดพลาดดังนั้นจึงNAไม่ใช่ความจริงหรือเท็จ )
JDL

1
@JDL ขอบคุณคุณพูดถูก การแก้ไขล่าสุดแก้ไขปัญหานี้
Robin Ryder

1
@JDL ความคิดเห็นแสดงให้เห็นว่าคำตอบที่สอดคล้องและแตกต่างนั้นโอเคสำหรับความจริงและเท็จ
Giuseppe

@Giuseppe ที่จริงฉันแก้ไขปัญหานี้เมื่อไม่กี่วินาทีที่ผ่านมา (ดูรุ่นใหม่ซึ่งแตกต่างกันมาก แต่นับไบต์เดียวกัน); ตอนนี้จะแสดงผล TRUE และ FALSE
Robin Ryder

4

Brachylogขนาด 18 ไบต์

oḅlᵐ=h≥2
oḅlᵐ=h≥2

ลองออนไลน์!

น่าเสียดายที่ฉันไม่สามารถลบ linefeeds ได้เนื่องจากมีตัวเลขที่ทำให้เกิดความล้มเหลว


เป็นไปได้แน่นอนที่จะทำบางสิ่งให้สั้นลงซึ่งไม่ต้องการ linefeeds (แต่คุณอาจต้องเปลี่ยนบางสิ่ง);)
Fatalize

@Falize ไม่มีเวลาไปแล้วใช่แล้วฉันได้อ่านการสนทนา :)
Erik the Outgolfer

4

Ruby , 87 78 ไบต์

c=->m{y=m.chars;x=y.map{|d|y.count d}|[];x[-1]>1and not x[1]};->{pushrortpush}

26 ตัวอักษรซ้ำกัน 3 ครั้ง

ลองออนไลน์!


ขอขอบคุณสำหรับการชี้ @nimi มันออกผมคิดว่าเป็นความแปลกประหลาดบางอย่างกับและgets ;เปลี่ยนแล้วมันจะสั้นกว่าแลมบ์ดา
Asone Tuhid

3

R, 132 116 ไบต์

crudcardounenforceableuploads<-function(b){{pi&&pi[[1-!1]];;;"";{1<{f<<-table(strsplit(b,"",,,)[[1]])}}&&!!!sd(-f)}}

มันไม่ได้มีความคิดเห็นใด ๆ หรือสตริงฟุ่มเฟือยอย่างใดอย่างหนึ่ง crudcardounenforceableuploadsแต่นี่อาจจะเป็นครั้งเดียวของฉันในสนามกอล์ฟรหัสเรียกฟังก์ชั่น อาจมีแอนนาแกรมที่ยอดเยี่ยมในที่แห่งหนึ่งสำหรับชื่อฟังก์ชั่น! ขอบคุณ John Dvorak ที่ชี้ให้เห็นถึงแอนนาแกรมแอนนาแกรมที่ดีซึ่งฉันใช้เป็นชื่อ

ตารางตัวละคร:

- , ; ! " ( ) [ ] { } & < 1 a b c d e f i l n o p r s t u 
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

ตัวอย่าง:

> crudcardounenforceableuploads("aaabbbccc")
[1] TRUE
> crudcardounenforceableuploads("aaabbbcc")
[1] FALSE
> crudcardounenforceableuploads("abc")
[1] FALSE
> crudcardounenforceableuploads("crudcardounenforceableuploads<-function(b){{pi&&pi[[1-!1]];;;\"\";{1<{f<<-table(strsplit(b,\"\",,,)[[1]])}}&&!!!sd(-f)}}")
[1] TRUE

ไม่ทราบว่าถ้านับไบต์เป็นสิ่งสำคัญ แต่เราอาจจะสามารถลบ 2s และ>s, fโดยการเปลี่ยนรอบเปรียบเทียบกับ นอกจากนี้ยังสามารถใช้แทน= อาจหลีกเลี่ยงไม่ได้ซึ่งเป็นที่มาของตัวละครอื่น ๆ ส่วนใหญ่ <<-strsplit
JDL

คุณต้องการช่องว่างหรือไม่ คุณสามารถลองutf8ToIntแทนstrsplitได้ แต่ไม่แน่ใจว่าจะช่วยได้หรือไม่ อาจรวมลิงก์ไปยัง TIO หรือไม่
จูเซปเป้

.ดูเหมือนทั้งหมดจะฟุ่มเฟือย
จูเซปเป้

นี่คือโค้ดกอล์ฟดังนั้นการนับจำนวนไบต์จึงมีความสำคัญต่อความคิดเห็นของคุณ
Giuseppe

2
แอนนาแกรมที่เป็นไปได้บางอย่าง: ไม่มีระบบราชการแบบ pip-bonded ปอนด์จิ้มปอนด์บาร์บีคิวถ่าน RIP ค้นพบโดยใช้wordplays.com/anagrammer
John Dvorak

2

BASH 144 ไบต์

grep -o .|sort|uniq -c|awk '{s=$1}{e[s]=1}END{print((s>1)*(length(e)==1))}##>>>#|'#wwwuuutrqqqppooNNNnlllkkkiihhhggEEEDDDcccaaa1***{}[[[]]]...--''

บรรทัดของโค้ดนี้ใช้สตริง stdin เป็นอินพุต "grep -o." วางอักขระแต่ละตัวในบรรทัดใหม่ "uniq -c" นับการใช้งานของแต่ละ chacteric สคริปต์ awk สร้างอาร์เรย์ที่มีการใช้งานแต่ละอย่างเป็นองค์ประกอบที่แตกต่างกันและเอาท์พุทเป็นจริงเมื่อมีเพียง 1 ดัชนีอาเรย์และค่าอย่างน้อย 2 ตัวอักขระแต่ละตัวจะถูกใช้ 4 ครั้งดังนั้นแหล่งที่มานี้กลับจริง


2

Stax , 26 24 18 ไบต์

:u{m*_{y#m:u_hy#h*

ลองออนไลน์!

ทางออกที่สั้นที่สุดที่ใช้เพียง ASCII ที่ตีพิมพ์โดยMATL

เดาว่าฉันกำลังเข้าใกล้ปัญหาในทางที่ผิด การทำซ้ำบล็อกที่ใช้งานได้นั้นจะไม่น่าสนใจหรือน่าสนใจ อย่างน้อยตอนนี้มันก็ดูดีกว่า ...

คำอธิบาย

:u{m* สร้างขยะบางส่วนที่ไม่ส่งผลกระทบต่อผลลัพธ์

_{y#m:u_hy#h*
_{y#m           map each character to its number of occurences in the string
     :u         all counts are equal (result 1)
       _hy#     get the count of appearance for the first character
           h    halve it and take the floor, so that 1 becomes 0(result 2)
            *   multiply the two results

@WGroleau ตัวละครตัวไหนปรากฏครั้งเดียว? คุณอ่านคำตอบของฉันอย่างรอบคอบเพียงพอหรือไม่?
Weijun Zhou

'#' ปรากฏบ่อยกว่า ':' (มีเพียงตัวอย่างเดียว) โอ๊ะโออ่านผิด (ดูความคิดเห็นอื่น)
WGroleau

@WGroleau มีสอง#และสอง:s แน่นอนคุณอ่านคำตอบของฉันในบรรทัดที่สอง? คุณเพิ่งข้ามย่อหน้าแรกใน "คำอธิบาย" ของฉันหรือไม่
Weijun Zhou

ขออภัยคิดว่าบรรทัดด้านบนคำอธิบายเป็นเรื่องทั้งหมด
WGroleau

1

Pip , 22 ไบต์

I1&MY$=_Y_NaMa$=y&1NIy

ลองออนไลน์!

คำอธิบาย

ตัวละครแต่ละตัวเกิดขึ้นสองครั้ง

                        a is first command-line argument
I1&MY$=_                No-ops to make the program non-discriminating
            Ma          Map this function to the characters of a:
         _Na             Count occurrences of each character in a
        Y               Yank the result into y
              $=y       Fold y on equals: truthy if all elements are equal
                 &      Logical and
                  1NIy  1 is not in y
                        Autoprint the result of the last expression

รุ่น 22- ไบต์สำรองที่ไม่มีตัวเลือกน้อยลง:

$&MY_Y_NaMa$=y&--1=1Ny

1

SmileBASIC, 164 152 148 140 ไบต์

DeF M(X)DIM W[#R]WHILE""<X
INC w[ASC(x)]X[n]=""wEND
FOR F=e#TO--nOT-LEN(W)U=w[F]H=H||U&&U<MAx(W)neXT-!!!AASSS#&&Oxx||CCLL<<wIM#
RETURN!H
enD

35 ตัวละครที่แตกต่างกันทำซ้ำ 4 ครั้งในแต่ละครั้ง

ไม่มีการใช้ความคิดเห็น (แต่นิพจน์หลังจากneXTนั้นไม่เคยได้รับการประเมินจริง)

สคริปต์เพื่อตรวจสอบคำตอบ:


1

เรติน่า 0.8.2 , 168 90 ไบต์

เอาต์พุตจะว่างเปล่าถ้าเป็นเท็จหรือไม่ว่างถ้าเป็นจริง

***???;;;;```!!$$$$MMMMOOOO..1111ssss222{{{{\^^^^

s;{O`.
M!*\`^((.)\2(?!\2))*$
(.)(?!\1)

ลองออนไลน์

โปรแกรมหลัก (39 ไบต์)

s;{O`.
M!*\`^((.)\2(?!\2))*$
(.)(?!\1)

คำอธิบาย

โปรแกรมหลักทั้งหมดอยู่ในลูปแบบเงียบ ขั้นตอนแรกจะเรียงลำดับอินพุต ขั้นตอนที่สองจะพิมพ์สตริงปัจจุบันหากประกอบด้วยคู่ต่อเนื่องของตัวละครที่แตกต่างกัน ขั้นตอนที่สามจะลบการเกิดขึ้นครั้งสุดท้ายของตัวละครทุกตัว (ลบหนึ่งในแต่ละตัวละครในสตริง)

เกี่ยวกับขยะที่ด้านบน: การสั่งซื้อเป็นสิ่งสำคัญ นอกจากต้องมีความถูกต้องทางไวยากรณ์เซมิโคลอนต้องอยู่หลังเครื่องหมายดอกจันและก่อน backticks ตราบใดที่*อยู่ในสตริงการกำหนดค่าเพื่อไม่ให้พิมพ์


ดีมากคำตอบของฉันสั้นลง แต่ฉันไม่แน่ใจว่ามันจะลดลงเหลือ 0/1 เป็นเอาต์พุตดังนั้นฉันจะเพิ่มที่นี่ในกรณีที่ช่วยคุณได้: tio.run/##K0otycxLNPz/
FryAmTheEggman

@FryAmTheEggman ฉันกำลังมองหาโซลูชัน regex ที่บริสุทธิ์เพื่อจับคู่กลุ่มตัวละครที่มีความยาวเท่ากัน แต่ฉันไม่สามารถหาคำตอบได้
mbomb007

@FryAmTheEggman ทำการปรับปรุงครั้งใหญ่! ฉันไม่ได้ใช้สิ่งที่คุณมีจริงๆ แต่ฉันเริ่มจากศูนย์พยายามคิดวิธีที่ดีกว่า
mbomb007

ทำได้ดีมาก! และฉันก็ไม่ได้คิดมากพอเกี่ยวกับโปรแกรมของฉันดูเหมือน แต่อย่างน้อยคุณก็ได้พบสิ่งที่ดีกว่า :)
FryAmTheEggman


1

Pyth, 30 ไบต์

  "&8<MQSlqr{"&q1lJ{hMrSz8<1hJ

ช่องว่างชั้นนำที่จำเป็น

ลองออนไลน์!

&q1lJ{hMrSz8<1hJโปรแกรมที่เกิดขึ้นจริงเป็นเพียง ฉันเพิ่งเติมสตริง"&8<MQSlqr{"เพื่อทำให้ไม่เลือกปฏิบัติ แต่เพื่อให้สตริงไม่พิมพ์ตัวเองฉันต้องเพิ่มช่องว่างดังนั้นฉันจึงเพิ่ม 2 ช่องว่าง

&q1lJ{hMrSz8<1hJ

 q1l                (1 == len(
    J{                  J = deduplicate(
      hM                  map(lambda a: a[0],
        r  8                length_encode(
         Sz                   sorted(input())
                            )
                          )
                        )
                    )
&                     and
            <1hJ    (1 < J[0])

length_encodehere ( r <any> 8) รับลำดับและเอาท์พุทความยาวของการวิ่งแต่ละครั้งของตัวละครเดียวกันเช่น จะกลายเป็น"aaabbcc"[[3, "a"], [2, "b"], [2, "c"]]

ดังนั้นนี่ใช้อินพุตป้อนการเข้ารหัสความยาวและใช้องค์ประกอบแรกของแต่ละรายการในรายการผลลัพธ์ (เช่นตัวอย่างก่อนหน้านี้จะกลายเป็น[3, 2, 2]) สิ่งนี้จะนับจำนวนตัวอักษรที่เกิดขึ้น จากนั้นมันจะซ้ำซ้อน (ตัวอย่างก่อนหน้านี้จะกลายเป็น[3, 2]) และ J ตั้งค่าเป็นอย่างนั้น

จากนั้นจะตรวจสอบว่าความยาวเท่ากับ 1 หรือไม่นั่นคือมีจำนวนครั้งที่ไม่ซ้ำกัน 1 ครั้งเท่านั้นที่อักขระจะเกิดขึ้นและถ้านั่นคือ> 1, ie> = 2

อาจมีการติดตั้งในตัวเพื่อแทนที่rSz8หรือhMrSz8แต่ฉันหาไม่พบ


1

C (gcc) , 153 ไบต์

f(h,a,c,f){{{{{{{char*o=f=h,*r;for(a=!h;*o;o++){for(c=!h,r=h;*r;c+=!(*r++^*o)){}f*=!!(c^!!h)*(!a+!(a^c));a=c;}(a^c^c^f^f^h)+o,a+r,o,o,+h^*r;(a=f);}}}}}}}

ลองออนไลน์!

ส่งคืนที่อยู่ของสตริงเป็นค่าความจริงและศูนย์เป็นเท็จ

f(
h,                              Address of string.
a,                              # instances of previous character
c,                              # instances of current character
f                               Return value
){{{{{{{                        
char*o=f=h,*r;                  Point o to string, while giving f a non-zero value.
for(a=!h;*o;o++){               Set previous char count to 0, and then traverse the string.
for(c=!h,r=h;*r;                Set current char count to 0 and r to string,
                                and start counting instances of current character.
c+=!(*r++^*o))                  Add to counter if current character matches.
{}                              Lower the amount of semi-colons
f*=                             Multiply (AND) return value with:
   !!(c^!!h)                    Is current count not 1? (Must be 2 or above.)
            *(!a+!(a^c));       AND, is previous count valid (meaning this is not the first
                                character counted), and matches current count?
a=c;}                           Previous count = current count.
(a^c^c^f^f^h)+o,a+r,o,o,+h^*r;  Spend surplus characters to make source code valid.
(a=f);}}}}}}}                   Return value.

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