นับจำนวนตัวอักษรต่อเนื่อง


24

รับสตริงที่มีตัวอักษรเท่านั้นเอาท์พุทความยาวของการวิ่งที่ยาวที่สุดของตัวอักษรตามลำดับคำที่บรรจุซึ่งคำสั่งไม่สำคัญ อัลกอริทึมตัวอย่างอาจเรียงลำดับคำเอารายการที่ซ้ำกันออกแล้วส่งออกความยาวของการรันที่ยาวที่สุด

กรณีทดสอบ

watch -> 1
stars -> 3
antidisestablishmentarianism -> 3
backdoor -> 4
a -> 1
tutorials -> 4

ตัวอย่างเช่นมีตัวอักษรantidisestablishmentarianism abdehilmnstrระยะที่ยาวที่สุดคือlmnและrstยาว 3 เท่า

หมายเหตุ

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

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ


@ H.PWiz ฉันเดาว่ามันเป็นตัวพิมพ์ผิดและควรเป็นrst- ไม่ซ้ำกันเรียงลำดับและได้รับการทำงานต่อเนื่องยาวนานที่สุด เราสามารถรับอินพุตเป็นอาร์เรย์ของตัวละครได้หรือไม่?
Shaggy

@Shaggy ใช่แน่นอนฉันไม่ได้รวมไว้เพราะฉันคิดว่ามันเป็นค่าเริ่มต้น
Stephen

'a' อยู่ติดกับ 'z' - ควร 'zebra' ได้คะแนน 2 หรือ 3 หรือไม่
Jonathan Allan

(... ตัดสินโดยอัลกอริทึมตัวอย่างของคุณฉันเดาว่า "ไม่" และ "2")
Jonathan Allan

@Jonathan คุณถูกต้องแล้ว
Stephen

คำตอบ:


10

เยลลี่ ,  10 9 8 7  6 ไบต์

OṬṣ0ZL

ลองออนไลน์!

9 ใช้วิธีของ Sok :ṢQẆẇƇØaṪL

อย่างไร?

OṬṣ0ZL - Link: list of (single-case) characters  e.g.  codegolf
O      - ordinal (vectorises)           [99,111,100,101,103,111,108,102]
 Ṭ     - untruth (1s at those indices)  [0,0,0,...,1,1,1,1,1,0,0,0,0,1,0,0,1]
       -                                 ^         ^       ^         ^     ^
       -                   i.e. indices: 1        99     103       108   111
   0   - literal zero
  ṣ    - split at                       [[],[],[],...,[1,1,1,1,1],[],[],[],[1],[],[1]]
    Z  - transpose                      [[1,1,1],[1],[1],[1],[1]]
     L - length                         5

8

R , 44 43 ไบต์

ทำงานบนอาเรย์ของอักขระตัวพิมพ์เล็ก แก้ไข: เปลี่ยนจากการทดสอบค่า True เป็นทวีคูณโดย T / F เป็นไบต์

function(x,r=rle(letters%in%x))max(r$l*r$v)

ลองออนไลน์!

ทำการเข้ารหัสความยาวรันบนตัวอักษรที่อยู่ในอักขระที่ให้มาจากนั้นส่งคืนค่าสูงสุดสำหรับ trues


กำลังทำงานกับโซลูชัน rle ที่คล้ายกันโดยใช้ utf8ToInt แต่การใช้อาร์เรย์ของสตริงนั้นฉลาดกว่ามาก +1
JayCe

@JayCe เริ่มต้นด้วยวิธีเดียวกัน แต่จากนั้นตระหนักว่าตัวอักษร% ในการตรวจสอบ% ดูแลการเรียงลำดับขั้นตอนที่ไม่ซ้ำกันและแตกต่างในการถลาครั้งเดียว
MickyT

7

APL (Dyalog Classic) , 10 9 ไบต์

-1 ไบต์ต้องขอบคุณ H.PWiz

≢⍉↑⊆⍨⎕a∊⍞

ลองออนไลน์!

อินพุตสตริง

⎕a เป็นตัวอักษรภาษาอังกฤษตัวพิมพ์ใหญ่

⎕a∊⍞ boolean length-26 vector - ตัวอักษรใดที่เกิดขึ้นในสตริง?

⊆⍨ รูปแบบเวกเตอร์ของ 1s ติดต่อกัน

≢⍉↑ ผสมเป็นเมทริกซ์ทรานสโพสและคืนความสูง - ได้อย่างมีประสิทธิภาพค้นหาความยาวของเวกเตอร์ที่ยาวที่สุด 1s


1
⌈/≢¨->≢⍉↑
H.PWiz

6

Perl 6 , 41 ไบต์

{max values bag .ords.sort.squish Z-0..*}

ทดสอบมัน

ขยาย:

{  # bare block lambda with implicit param $_

  max       # find the max
    values  # get the values from the following Bag (repeat counts)
      bag   # find the repeats

          .ords.sort.squish # get the unique ordinals (method call on $_)
        Z-                  # zip subtract with
          0 .. *            # Range starting with 0
}

ป.ร. ให้'stars'ไว้.ords.sort.squish Z-0..*จะกลับมา(97,113,113,113)



6

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

กรณีของสายป้อนข้อมูลไม่สำคัญ

s=>(g=_=>s&&1+g(s&=s*2))(Buffer(s).map(c=>s|=1<<c))

ลองออนไลน์!

อย่างไร?

ก่อนอื่นเราจะแปลงสตริงอินพุตเป็น bitmask ของตัวอักษรที่พบด้วย:

Buffer(s).map(c => s |= 1 << c)

การเลื่อนระดับบิตจะถูกประมวลผลด้วย modulo แบบ 32

ตัวอย่าง:

"feedback" --> 100001111110
               kjihgfedcba-

จากนั้นเราจะ 'ลด' การทำงานของ 1 ต่อเนื่องกันใน bitmask โดยซ้ำ ๆ แล้วทำการสำเนาด้วยตัวเองด้านซ้ายจนกระทั่งบิตทั้งหมดถูกล้าง:

0100001111110 AND 1000011111100 --> 0000001111100
0000001111100 AND 0000011111000 --> 0000001111000
0000001111000 AND 0000011110000 --> 0000001110000
0000001110000 AND 0000011100000 --> 0000001100000
0000001100000 AND 0000011000000 --> 0000001000000
0000001000000 AND 0000010000000 --> 0000000000000

จำนวนตัวอักษรต่อเนื่องกันตามลำดับตัวอักษรคือจำนวนการวนซ้ำของกระบวนการข้างต้น ดังนั้นฟังก์ชั่นวนซ้ำ:

g = _ => s && 1 + g(s &= s * 2)

5

Pyth , 9 ไบต์

le}#G.:S{

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

le}#G.:S{Q   Q=eval(input()), G=lowercase alphabet. Trailing Q inferred.

        {Q   Deduplicate input string
       S     Sort it
     .:      Take all substrings (these are generated in length order)
  }#G        Filter out those that aren't found in the alphabet
le           Find the length of the last remaining element

วิธีการที่ยอดเยี่ยมโดยใช้ความจริงที่ว่าวัสดุพิมพ์นั้นเรียงตามความยาว!
Jonathan Allan

มันจะมีประสิทธิภาพน้อยลง แต่คุณสามารถใช้ในสถานที่ของy .:
FryAmTheEggman

5

MATL 10 ไบต์

2Y2imY'*X>

อินพุตเป็นตัวพิมพ์เล็ก

ลองออนไลน์! หรือตรวจสอบกรณีทดสอบทั้งหมด

นี้ใช้การผสมผสานของ@ Sundar ของ (เก่า) และ@ NGN ของวิธีการ

คำอธิบาย

พิจารณาการป้อนข้อมูล'tutorial'เป็นตัวอย่าง

2Y2   % Push predefind literal 'abcdefghijklmnopqrstuvwxyz'
      % STACK: 'abcdefghijklmnopqrstuvwxyz'
i     % Push input
      % STACK: 'abcdefghijklmnopqrstuvwxyz', 'tutorials'
m     % Ismember: true for letters present in the input
      % STACK: [1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 1 0 0 0 0 0]
Y'    % Run-length encoding
      % STACK: [1 0 1 0 1 0 1 0 1 0], [1 7 1 2 1 2 1 2 4 5]
*     % Multiply, element-wise
      % STACK: [1 0 1 0 1 0 1 0 4 0]
X>    % Maximum. Implicitly display
      % STACK: 4

5

Python 3 , 55 ไบต์

f=lambda s:s and-~f({*s}&{chr(ord(c)+1)for c in s})or 0

ลองออนไลน์!


Python 2 , 58 ไบต์

f=lambda s,c=99,r=0:c and max(r,f(s,c-1,-~r*(chr(c)in s)))

ลองออนไลน์!


Python 2 , 63 ไบต์

n=t=0
for c in input():n|=2**ord(c)
while n:n&=n/2;t+=1
print t

ลองออนไลน์!


สิ่งที่เกี่ยวกับการใช้ python3 ไบต์เป็น input: f=lambda s:s and-~f({*s}&{c+1for c in s})or 0?
Vincent

5

05AB1E , 6 ไบต์

Œ...éæ

êæAÃθg

ลองออนไลน์!

นอกจากนี้ 6 ไบต์

บันทึก 2 ไบต์ขอบคุณAdnanอีกครั้ง: ใช้ASåแทนêÇ¥Θดังนั้นจึงไม่จำเป็นต้องเพิ่มค่าสูงสุดในตอนท้าย ดูประวัติการแก้ไขเพื่อเปรียบเทียบ beviours ของทั้งสองวิธี

ASåγOà

ลองออนไลน์!

วิธีการใช้งานเหล่านั้น

ฉันชอบความท้าทายเช่นนี้ซึ่งนำไปสู่แนวทางที่แตกต่างหลากหลาย

êæAÃθg | Full program.
ê      | Push a sorted and without duplicates version of the input.
 æ     | Powerser.
  AÃ   | Keep those that also occur in the lowercase alphabet.
    θg | Take the length of the last one. θ and ` can be used interchangeably.
-------+-------------------------------------------------------------------------------
ASåγOà | Full program.
A      | Push the lowercase alphabet.
 S     | Listify it (i.e. convert it to a sequence of characters).
  å    | Replace each char in the alphabet by 1 if its in the input, else by 0.
   γ   | Split into chunks of equal adjacent elements.
    O  | Sum each part.
     à | Extract the maximum of this list. Again, à and Z can be used interchangeably.

โปรแกรมแรกที่สามารถแข็งแรงเล่นกอล์ฟไปและโปรแกรมที่สองสามารถจะแข็งแรงเล่นกอล์ฟêæAÃ`g ASåγOZ
Adnan

@Adnan ขอบคุณอัปเดต! ฉันชอบASåเคล็ดลับ
Mr. Xcoder

4

TSQL (Microsoft SQL Server), 206 ไบต์

WITH C AS (SELECT 1p,SUBSTRING(@,1,1)c UNION ALL SELECT p+1,SUBSTRING(@,p+1,1)FROM C WHERE p<LEN(@)),R AS(SELECT c d,1r FROM C UNION ALL SELECT c,r+1FROM R JOIN c ON ASCII(d)+1=ASCII(c))SELECT MAX(r)FROM R

สำหรับการป้อนข้อมูลให้ใช้DECLAREคำสั่งต่อไปนี้ก่อนรหัส:

DECLARE @ varchar(200) = 'propinquities';

คาดว่าอินพุตจะเป็นตัวพิมพ์เล็กทั้งหมด (ด้านบนหรือด้านล่างไม่สำคัญ แต่ตัวพิมพ์ผสมจะไม่ทำงาน)

Ungolfed:

DECLARE @data varchar(200) = 'propinquities'

;WITH CTE AS (
    SELECT
        1 as CharacterPosition,
        SUBSTRING(@data,1,1) as Character
    UNION ALL
    SELECT
        CharacterPosition + 1,
        SUBSTRING(@data,CharacterPosition + 1,1)
    FROM
        CTE
    WHERE CharacterPosition < LEN(@data)
), Runs AS
(
    SELECT Character, 1 rc
    FROM CTE
    UNION ALL
    SELECT b.Character, rc + 1
    FROM Runs r
    JOIN CTE b ON ASCII(r.Character) + 1 = ASCII(b.Character)
)
SELECT max(rc)
from runs

คำอธิบาย:

แบ่งสตริงออกเป็นแถว aa สำหรับแต่ละอักขระ (ดัดแปลงจาก/programming//a/27623321/1474939 ) ในCTEcte

จากนั้นค้นหาการทำงานของตัวอักษรที่ต่อเนื่องกันโดยการแปลงเป็นรหัส ASCII ในRunscte

สุดท้ายจะเลือกการวิ่งที่ใหญ่ที่สุดและรายงานกลับมาในคำสั่ง select


คำตอบที่ดีใช้ CTE ได้ดีมาก ไม่แน่ใจว่านี้จะช่วยหรือทำร้ายนับไบต์คุณ แต่"อนุมัติ" วิธีการที่จะได้รับการป้อนข้อมูลใน T-SQL เป็นผ่านตารางก่อนสร้าง
BradC

@BradC ถ้าฉันสามารถใช้ตารางที่มีแต่ละแถวเป็นอักขระหนึ่งตัว (เรียงลำดับเหมือนอาเรย์ถ่านแทนที่จะเป็นสตริง) ก็จะช่วยลบ CTE หนึ่งรายการ หากยังต้องเป็นหนึ่งแถวอาจเป็นเรื่องเดียวกันกับการใช้มันเป็นตัวแปรอินพุต ขอบคุณสำหรับความคิดที่ว่า!
Brian J

4

C (gcc) , 58 56 ไบต์

บันทึก 2 ไบต์ขอบคุณ @gastropner

ใช้วิธีการเดียวกับคำตอบของฉัน Node.js กรณีของสายป้อนข้อมูลไม่สำคัญ

m,i;f(char*s){for(i=0;*s?m|=1<<*s++:(i++,m&=m*2););s=i;}

ลองออนไลน์!

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

m,                   // m = bitmask of encountered letters
i;                   // i = counter of max. consecutive letters
f(char *s) {         // f = function taking the input string s
  for(               // main loop:
    i = 0;           //   start with i = 0 and assume m = 0 on first call
                     //   (it is forced back to 0 when the program terminates)
    *s ?             //   if we haven't reached the end of the string:
      m |= 1 << *s++ //     update m by setting the appropriate bit for this character
                     //     (with implicit modulo 32) and advance the string pointer
    : (              //   else:
        i++,         //     increment i
        m &= m * 2   //     'reduce' runs of consecutive 1's in m by AND'ing it with a
      );             //     left-shifted copy of itself (e.g. 11101 & 111010 -> 11000;
                     //     11000 & 110000 -> 10000); we stop when m = 0
  );                 // end of for()
  s = i; }           // return i

มันใช้งานเฉพาะที่1<<*swraps หรือเป็นพฤติกรรมมาตรฐาน?
Jonathan Frech

@JonathanFrech ฉันคิดว่านั่นเป็นพฤติกรรมที่ไม่ได้กำหนดอย่างเป็นทางการ ดังนั้นจะต้องมีการดำเนินการเฉพาะ
Arnauld

เนื่องจากน่าสนใจมากพอที่จะปรากฏขึ้นเมื่อมีการคำนวณที่รันไทม์เท่านั้น เมื่อถึงเวลาที่รวบรวม1<<32ผลลัพธ์0และออกคำเตือนขนาดชนิดข้อมูล
Jonathan Frech

จริงๆแล้วฉันสงสัยว่าคอมไพเลอร์จะใช้รูปแบบ 5 บิตอย่างชัดเจน โอกาสที่จะเกิดขึ้นที่ระดับ CPU
Arnauld

2
@Arnauld มันคือ (ดูหมายเหตุ: "[... ] ตัวถูกดำเนินการตรวจนับสามารถเป็นค่าได้ทันทีหรือลงทะเบียน CL การนับถูกปิดบังไว้ที่ 5 บิตซึ่ง จำกัด ช่วงการนับเป็น 0 ถึง 31")
ErikF

3

C (gcc) , 100 ไบต์

c,o,u;n(t,e,r)char*r,*e,*t;{for(u=0,e=t;c=*t++;u=u<o?o:u)for(o=0,r=e;*r;*r++-c||(c++,r=e,++o));o=u;}

ลองออนไลน์!

คำอธิบาย

c,o,u;n(t,e,r)    // setup, function declaration
char*r,*e,*t;{    // K&R style
 for(u=0,e=t;     // initialize global maximum u to 0, write string start to e
 c=*t++;          // look at every character in the string
 u=u  <o?o:  u)   // funny face
  for(o=0,r=e;*r; // initialize local maximum o to 0, look at entire string again
  *r++-c||(c++,   // equal character found, search for next one
   r=e,++o));     // reset local pointer, increment local maximum
o=u;}             // return maximum character streak

ลองออนไลน์!


+1 สำหรับ "c, o, u; n (t, e, r)" :)

3

MATL , 12 10 ไบต์

91:wX-dX>q

ลองออนไลน์!

คำอธิบาย:

91:- สร้างรายการตัวเลขตั้งแต่ 1 ถึง 91 91 คือตัวอักษร '[' ซึ่งมาหลัง 'Z' ดังนั้นสิ่งนี้จึงสร้างรายการของตัวละครทั้งหมดจาก '\ x1' ถึง '[' (ส่วนใหญ่เราต้องการให้อยู่ในช่วง ['A'-1:' Z '+ 1] แต่การที่เหลือไม่เจ็บและต้องการจำนวนน้อยลง)

w - อินพุตโดยนัยนำอินพุตไปด้านบนสุดของสแต็ก (สมมติว่า "TUTORIALS")

X- - ตั้งค่าความแตกต่าง ซึ่งจะทิ้งเฉพาะอักขระที่ไม่พบในสตริงอินพุตตามลำดับดั้งเดิม ('เสถียร') สแต็ค:' !"#$%&'()*+,-./0123456789:;<=>?@BCDEFGHJKMNPQVWXYZ['

d - ความแตกต่างระหว่างองค์ประกอบต่อเนื่องในรายการนั้น สแต็ค:[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 5 1 1 1 1 1]

X> - รับความแตกต่างสูงสุดเช่นจำนวนตัวอักษรต่อเนื่องสูงสุดที่หายไปจากความแตกต่างที่ตั้งไว้

q - ลดลงเพื่อให้ได้จำนวนตัวละครที่แท้จริง


เก่า:

12 ไบต์

Sud1=Y'*X>sQ

ลองออนไลน์!


วิธีการมากมาย :-)
Luis Mendo

3

K (ngn / k) , 17 15 ไบต์

#1_{x^x^x+1}\-:

ลองออนไลน์!

- มีเพียงการแปลงตัวอักษรให้เป็นตัวเลข (ไม่สำคัญว่าจะเป็นลบหรือไม่)

{ }\ ใช้ฟังก์ชั่นจนกระทั่งบรรจบกันรักษาผลกลาง

x+1 เพิ่ม 1 ในแต่ละหมายเลข x

^ "ไม่มี" - รายการด้านซ้ายโดยไม่มีองค์ประกอบที่เกิดขึ้นในรายการทางด้านขวา

x^x^x+1หมายถึงxตัดกับx+1

1_ วางองค์ประกอบแรก

# นับ


#1_{x^x^x+1}\-?
อดัม

@ Adámใช่วันหนึ่งฉันควรรถไฟทำงาน ...
ก.ย.

กรอบความคิดนี้เป็นสี่แยกที่มีการเพิ่มขึ้นจนบรรจบกันเป็นสิ่งที่ดีมากทีเดียว
โจนาห์

รถไฟทำงาน
ngn

2

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

O`.
D`.
.
$&$&¶
T`l`_l`¶.
(.)¶\1
$1
.(.+)
$.1
O#^`
1G`

ลองออนไลน์! ลิงค์มีกรณีทดสอบ คำอธิบาย:

O`.

เรียงตัวอักษรตามลำดับ

D`.

คัดลอกตัวอักษรซ้ำ

.
$&$&¶

ทำซ้ำตัวอักษรแต่ละตัวโดยแยกบรรทัด

T`l`_l`¶.

ลดแรกของแต่ละคู่

(.)¶\1
$1

หากตอนนี้ตรงกับตัวละครก่อนหน้าเข้าร่วมกลับ

.(.+)
$.1

นับความยาวของการวิ่งทั้งหมด

O#^`

จัดเรียงตามลำดับตัวเลขแบบย้อนกลับ

1G`

ใช้ครั้งแรก (ใหญ่ที่สุด)


2

J, 16 ไบต์

-7 ไบต์ขอบคุณ FrownyFrog

[:>./a.#;._1@e.]

ลองออนไลน์!

คำอธิบาย

[: >./ a. #;._1@e. ]    
       a. (    )e. ]    is the ascii alphabet an element of the input:
                        this will transform the alphabet into a 1-0 array,
                        the ones representing the letters in the input
          #;._1@        split that 1-0 list up into pieces, using 0
                        as the delimiter, and transforming each chunk
                        into its length. now we have a list of ints
[: >./                  take the max 

ฉันคิดว่าคุณสามารถใช้]แทน~.@/:~ตัวอักษรถูกเรียงลำดับแล้วดังนั้นคุณไม่จำเป็นต้องเรียงลำดับอินพุตและเก็บเฉพาะรายการที่ไม่ซ้ำกัน TIO - 18 ไบต์
Galen Ivanov


@FrownyFrog และ Galen ขอขอบคุณทั้งคู่! ในการหวนกลับมันควรจะชัดเจนว่าฉันไม่ต้องการ uniq / sort ก่อน
Jonah

2

C (gcc) , 98 92 ไบต์

ขอบคุณ Jonathan Frech สำหรับคำแนะนำ

ตัวพิมพ์ใหญ่เท่านั้น

f(char*s){int a[99]={0},i,j,k=j=i=0;for(;*s;a[*s++]++);for(;i<99;j=!!a[i++]*++j,k=j>k?j:k);}

ลองออนไลน์!


คุณไม่ต้องการจริงๆk;ในตอนท้าย การส่งคืน gcc โดยนัยคือผลข้างเคียงของการกำหนดตัวแปรซึ่งจะปรากฏขึ้นซึ่งจะถูกดำเนินการเป็นขั้นตอนสุดท้ายในการวนซ้ำ
Jonathan Frech

เป็นไปได้95 ไบต์
Jonathan Frech

@JonathanFrech ฉันไม่เชื่อถือผลตอบแทนโดยปริยายของ gcc พวกเขาไม่ได้เกิดขึ้นอย่างที่ฉันคาดหวังไว้เสมอและพวกเขามักจะไม่ทำงานเลยสำหรับตัวชี้และจุดลอยตัว โชคดีที่นอกรหัสกอล์ฟฉันไม่เคยใช้เลย! :-)
ErikF

2

Japt -h , 9 ไบต์

Case insenstive รับอินพุตเป็นสตริงหรืออาร์เรย์ของอักขระ

;CôkU mÊn

ลองใช้หรือรันการทดสอบหลายครั้ง (บรรทัดที่สองทำหน้าที่แทน-hแฟล็กเพื่อให้แฟล็กสามารถใช้เพื่อประมวลผลอินพุตจำนวนมากแทน)


คำอธิบาย

              :Implicit input of string/array U
;C            :The lowercase alphabet
  ô           :Partition at characters returning truthy
   kU         :  Remove all characters in U from the current letter
              :  This will return a non-empty string (truthy) if the current letter ISN'T in U
     m        :Map
      Ê       :  Length
       n      :Sort
              :Implicitly output the last element in the array

@Downvoter คุณช่วยบอกเหตุผลกับคุณ-1ได้ไหม?
Shaggy

2

Perl 5, 68 ไบต์

$"=<>;map{$"=~/$_/i&&++$$_||last for$_..z;$.=$$_ if$$_>$.}a..z;say$.

ลองออนไลน์ลองมันออนไลน์

Ungolfed:

use feature 'say';

my $s = <>;
my $r;
for ('a' .. 'z') {
    my $c = 0;
    for ($_ .. 'z') {
        last if $s !~ /$_/i;
        $c++;
    }
    $r = $c if $c > $r;
}
say($r);

2

C (gcc) , 66 65 63 ไบต์

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

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

a,l;f(char*s){for(l=0;*s;)a|=1<<*s++-97;for(;a;l++)a&=a*2;s=l;}

ลองออนไลน์!


2

Perl 5, 62 + 2 ( -nFตั้งค่าสถานะ) = 64 bytes

$c[ord lc$_]=1for@F;$y[y///c]++for"@c "=~/((1 )+)/g}{say@y/2|0

ลองมันออนไลน์

Perl 5, 68 ไบต์

<>=~s/./$c[ord lc$&]=1/gre;$y[y///c]++for"@c "=~/((1 )+)/g;say@y/2|0

ลองมันออนไลน์


1
วิธีการที่ดี! ฉันไม่คิดว่าจะใช้วิธีนี้เลย ... คุณสามารถบันทึกได้สองสามไบต์โดยใช้-pFและ-MList::Util+(max)ถึง 56: ลองออนไลน์!
Dom Hastings

@DomHastings -MList::Util=maxเพิ่ม 16 ไบต์ถึงคะแนนผลลัพธ์
เดนิส Ibaev

หากฉันเข้าใจการให้คะแนนใหม่อย่างถูกต้องแฟล็กบรรทัดคำสั่งจะไม่นับเป็นไบต์ แต่เป็นภาษาที่มีคะแนนแยกต่างหากดังนั้นแทนที่จะเป็นเพียง Perl ก็จะเป็น Perl ด้วย-MList::Util+(max) -pFหรือคล้ายกัน codegolf.meta.stackexchange.com/a/14339/9365
Dom Hastings

2

SQLite 265

WITH w AS(SELECT'a'w),n AS(SELECT 1 n UNION ALL SELECT n+1 FROM n LIMIT(SELECT length(w)FROM w)),l AS(SELECT substr(w,n,1)l FROM n,w)SELECT max(v)FROM(SELECT min(n)v FROM(SELECT*FROM l,n EXCEPT SELECT l.l,unicode(l.l)-unicode(b.l)d FROM l,l b WHERE d>0)GROUP BY l);

Ungolfed:

WITH w AS (SELECT 'antidisestablishmentarianism' w)
   , n AS (SELECT 1 n
           UNION ALL
           SELECT n+1 FROM n
           LIMIT (SELECT length(w) FROM w) )
   , l AS (SELECT DISTINCT substr(w,n,1) l FROM n,w ORDER BY l)
   , d AS (
           SELECT l,n FROM l,n
           EXCEPT
           SELECT a.l l, unicode(a.l) - unicode(b.l) d 
           FROM l a, l b 
           WHERE d > 0 
           )

SELECT max(v) FROM ( SELECT min(d.n) v FROM d GROUP BY d.l );

2

Brachylog , 14 13 12 ไบต์

{⊇pS∧ẠsSl}ᶠ⌉

ลองออนไลน์!

{        }ᶠ    % Find all values that satisfy this predicate
           ⌉   % And get their maximum
               % The predicate being:
 ⊇pS           % There exists a permutation of a subset of the input
               %  Call it S
    ∧          % And, 
      sS       % S is a substring of
     Ạ         %  the set of alphabets, Ạ, 
        l      % Then, the length of that substring is the return value of the 
               %  predicate

ช้าพอที่มันจะไม่เสร็จสิ้นสำหรับอินพุต "antidisestablishmentarianism" ใน TIO ค่อนข้างเร็วหนึ่งสำหรับ +1 ไบต์:

13 ไบต์

{dosS∧ẠsSl}ᶠ⌉

ลองออนไลน์!

ใช้dosแทน⊇p: S เป็นdeduplicated s orted substring ของท่านแทนเพียงการเปลี่ยนแปลงของส่วนย่อยบางบาง


1

Haskell , 87 ไบต์

import Data.List
maximum.map length.filter(`isInfixOf`['a'..'z']).subsequences.nub.sort

ลองออนไลน์!

คาดว่าอักขระตัวพิมพ์เล็ก

คำอธิบาย:

maximum.map length.filter(`isInfixOf`['a'..'z']).subsequences.nub.sort
                                                                  sort {- sort the characters -}
                                                              nub      {- remove duplicates -}
                                                 subsequences          {- all subsequences -}
                   filter(`isInfixOf`['a'..'z'])                       {- all characters are adjacent -}
        map length                                                     {- length of filtered subsequences -}
maximum                                                                {- maxmimum length -}


1

Pyth - 11 ไบต์

le@.:G).:S{

การป้อนข้อมูลต้องอยู่ในเครื่องหมายคำพูด หากไม่ได้รับอนุญาต:

Pyth - 12 ไบต์

le@.:G).:S{z

คำอธิบาย:

l(
  e(
    @(
      .:(G),
      .:(
         S(
           {(Q)
         )
      )
    )
  )
)
length(
    last element(
        intersection(
            all positive length substrings(the alphabet as string),
            all positive length substrings(
                sorted(
                    uniquified(input)
                )
            )
        )
    )
)


1

Java 8, 77 ไบต์

int i,j,m;
c->{for(i=j=0;(m=j<c.length?m|1<<c[j++]:m&m*2+0*++i)>0;);return i;}

ท่าเรือArnauld 's C คำตอบ ลองออนไลน์ได้ที่นี่

Ungolfed:

int i, j, m; // instance variables of the surrounding class - initialised to 0
c -> { // lambda - c is of type char[]; return type is int
    for(i = j = 0; // i is the length of the longest run, j is used to step through c - both start at 0
        (m = j < c.length // work with the bitmask of all the letters present in c: if we have not reached the end of c ...
             ? m | 1 << c[j++] // ... set the bit corresponding to the current character, advance one character ...
             : m & m * 2 + 0 * ++i) > 0 ;) ; // ... else reduce runs of consecutively set bits in m by AND-combining it with a left-shifted copy of itself until m hits 0
    return i; // return the result - by now m is back to 0
}

1

> <> , 63 ไบต์

อ่านอักขระตัวพิมพ์เล็กจาก stdin ส่งออกตัวเลขไปยัง stdout

0l55*)?\
8/?(0:i<]r1~r[-*c
~/00
}</?)@:{:*+1/?(3l
  \~:03. ;n~/

ลองออนไลน์!

0l55*)?\             Push 26 zeroes onto the stack

Record which characters are used
      i              Read a character from the input
 /?(0:               Check if it is -1, marking the end of the input
8             -*c    Subtract 96 from the character code, 
                         giving 1 for 'a', 2 for 'b' etc.
            r[       Pop that many values on to a new stack and reverse 
                         it, putting that character's value at the top of 
                         the stack
          1~         Write 1 to that value
        ]r           Return the stack back to it's normal state

Count the longest run of ones in the stack
  00                 Push values for currentRun = 0, and bestRun = 0
}                    Move bestRun to the bottom of the stack
            /?(3l    Check if there are only 2 values left on the stack
          +1         Increment currentRun
         *           Multiply currentRun by the next value in the stack, 
                         resetting it to 0 if the run is broken
  /?)@:{:            Check if currentRun > bestRun
  \~:                Overwrite bestRun if so
     03.             Jump back to the start of loop
         ;n~/        Once all values have been consumed, 
                         print bestRun and exit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.