คำที่ยาวที่สุดโดยใช้แป้นพิมพ์ qwerty แถวเดียว


30

สามแถวของคีย์บอร์ดที่มีqwertyuiop, และasdfghjkl zxcvbnmงานของคุณคือค้นหาคำที่ยาวที่สุดที่สามารถพิมพ์ได้โดยใช้เพียงแถวเดียวของแป้นพิมพ์จากรายการคำที่กำหนด

ตัวอย่างอินพุต 1

artist
home
gas
writer
geology
marine
twerp

เอาท์พุต

writer

(จากคำที่กำหนดเท่านั้นgas, writerและtwerpสามารถเขียนได้โดยใช้แถวเดียวและwriterเป็นที่ยาวที่สุด)

คำอาจไม่เป็นคำที่แท้จริง (ดังนั้นอย่าถือว่าแถวที่สามไม่ถูกต้อง) อย่างไรก็ตามคุณสามารถสันนิษฐานได้ว่าจะมีคำตอบเดียวเสมอ (ไม่มากไม่น้อย)

ตัวอย่างอินพุต 2

wrhuji
bxnzmmx
gllwssjjd
vnccbb
lrkjhgfdsa
tttttt

เอาท์พุต

bxnzmmx

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


@ MartinBüttnerฉันอยากจะเห็นว่าสิ่งนี้สามารถแก้ไขได้ด้วย Retina คุณคิดว่าทำได้ง่ายหรือไม่?
Jerry Jeremiah

คำที่ใช้ป้อนเป็นตัวพิมพ์เล็กเสมอหรือไม่
nimi

@nimi ใช่พวกเขาเป็น
ghosts_in_the_code

@ghosts_in_the_code คุณควรระบุว่าในการท้าทายเพื่อความชัดเจน
Luis Mendo

6
xkcd ที่เกี่ยวข้อง: what-if.xkcd.com/75
John Dvorak

คำตอบ:


18

Python 2, 84 ไบต์

lambda l:max(l,key=lambda w:(-len({"asdfghjklzxcvbnm".find(c)/9for c in w}),len(w)))

ค้นหาmaxอินพุตจากการเปรียบเทียบด้วยแถวแป้นพิมพ์ที่น้อยลงที่ขยายออกไปจากนั้นเพิ่มความยาว ค่าของแถวคีย์บอร์ดถูกแยกโดย"asdfghjklzxcvbnm".find(c)/9ซึ่งจะนำแถวกลางไป0ที่แถวด้านล่าง1และแถวบนสุดซึ่งไม่รวมอยู่ใน-1เนื่องจากfindจะให้-1ค่าที่ขาดหายไป

ความพยายามอื่น ๆ :

lambda l:max((-len({"asdfghjklzxcvbnm".find(c)/9for c in w}),len(w),w)for w in l)[2]
lambda l:max(l,key=lambda w:len(w)-1./len({"asdfghjklzxcvbnm".find(c)/9for c in w}))
lambda l:max([w for w in l if len({"asdfghjklzxcvbnm".find(c)/9for c in w})<2],key=len)

1
/อักขระ1 ตัวสำหรับ Python 3;)
Antti Haapala

6
ฉันไม่ทราบว่าไวยากรณ์อนุญาตให้ใช้กับช่องว่างระหว่าง9และfor...
jogloran

นี่คือคำตอบที่ฉันโปรดปราน
SBI

1
@ jogloran ตราบใดที่ตัวละครไม่ได้เป็นEหรือeคุณสามารถลบช่องว่างระหว่างหมายเลขและชื่อ / คำหลักตัวแปรได้
เสมอ

@wnnmaw นั้นไม่เป็นความจริงอีกต่อไปสำหรับ Python เวอร์ชันใหม่เช่น4if 0else 2ถูกต้องใน 2.7.11 และ 3.5.1 (และอาจใช้ได้กับรุ่นก่อนหน้าสองสามรุ่น)
Sp3000

13

Japt 32 32ไบต์

;Uf_¬£DbXu)f10Ãä¥ eÃn@Yl -XlÃg

ทดสอบออนไลน์! อินพุตเป็นอาร์เรย์ของสตริง

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

;Uf_  ¬ £  DbXu)f10Ã ä¥  eà n@  Yl -Xlà g
;UfZ{Zq mX{DbXu)f10} ä== e} nXY{Yl -Xl} g

         // Implicit: U = input array of strings
;        // Reset variables A-L to various values.
         // D is set to the string "QWERTYUIOP\nASDFGHJKL\nZXCVBNM".
UfZ{   } // Take U and filter to only the items Z that return truthily to this function:
Zq       //  Split Z into chars, then
mX{    } //  map each char X by this function:
DbXu)    //   Return D.indexOf(X.toUpperCase()),
f10      //   floored to a multiple of 10.
         //  This maps each char to 0 for the top row, 10 for the middle, 20 for the bottom.
q ä==    //  Split the resulting string into chars and check each pair for equality.
e        //  Check that every item in the result is truthy. This returns true if all chars
         //  are on the same row; false otherwise.
         // Now we have only the words that are entirely on one row.
nXY{   } // Sort by passing each two args X and Y into this function:
Yl -Xl   //  Return Y.length - X.length. Sorts the longest to the front.
g        // Get the first item in the resulting array. Implicitly output.

8
ว้าวคุณเพิ่งจะแพ้เดนนิสเหรอ?
Morgan Thrapp

1
นี่จะเป็นเรื่องยากที่จะเอาชนะ
Adnan

2
คุณมี"QWERTYUIOP\nASDFGHJKL\nZXCVBNM"ตัวอักษรที่กำหนดไว้ล่วงหน้าใช่ไหม เล่นได้ดี :-)
Luis Mendo

1
ฉันไม่สามารถดูเหมือนจะหาที่ที่มันถูกระบุว่าDมีการตั้งค่าQWERTYUIOP\nASDFGHJKL\nZXCVBNMแม้หน้าเว็บที่คุณอ้างถึงดูเหมือนว่ารัฐVariables <...> D 13
sukhmel

1
@sukhmel A ;ที่จุดเริ่มต้นของโปรแกรมจะรีเซ็ตตัวแปรA-Lเป็นค่าต่างๆ Dถูกตั้งค่าเป็นสตริงคีย์บอร์ด คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่
ETHproductions

11

Python 2.5+ และ 3, 93 bytes

ต้องทดสอบจำนวนสโตรกสำหรับวิธีนี้ สิ่งนี้ใช้ความจริงที่ว่าa.strip(b)ผลลัพธ์ในสตริงว่างเปล่าหากaประกอบด้วยตัวอักษรที่เกิดขึ้นใน

ฟังก์ชันรับรายการสตริงและส่งคืนสตริง

lambda a:max(a,key=lambda x:(~all(map(x.strip,['qwertyuiop','asdfghjkl','zxcvbnm'])),len(x)))

5
ยินดีต้อนรับสู่ PPCG, โพสต์แรกที่ดี :)
FryAmTheEggman

ทำไมถึงมีkeyตัวแปร ฉันคิดว่าคุณสามารถลบมันได้
CalculatorFeline

@CatsAreFluffy ไม่เป็นไปไม่ได้ keyข้อโต้แย้งของmaxฟังก์ชั่นเป็นคำหลักเท่านั้น
Antti Haapala

ตอบฉันลืมเกี่ยวกับ kwargs
CalculatorFeline

8

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

G`^([eio-rtuwy]+|[adfghjkls]+|[bcmnvxz]+)$
1!`(.)+(?!\D+(?<-1>.)+(?(1)!))

ลองออนไลน์!

สรุป: จอประสาทตาต้องมีขั้นตอนการเรียงลำดับ

คำอธิบาย

G`^([eio-rtuwy]+|[adfghjkls]+|[bcmnvxz]+)$

นี่คือระยะ grep: มันเก็บเฉพาะเส้นที่จับคู่โดย regex นั่นคือสิ่งที่เกิดขึ้นจากคลาสตัวละครเหล่านั้นเท่านั้น

1!`(.)+(?!\D+(?<-1>.)+(?(1)!))

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


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

@daavko ขออภัยสำหรับการโปรโมตตนเอง แต่คุณได้อ่านโพสต์สแต็คโอเวอร์โฟลว์ของฉันในกลุ่มการสร้างสมดุลแล้วหรือยัง? ฉันถูกบอกว่าเป็นการแนะนำที่ดี แนวคิดนั้นไม่ซับซ้อนจริง ๆ โดยเฉพาะอย่างยิ่งถ้าคุณไม่ได้ใช้(?<a-b>...)ไวยากรณ์ที่ไม่ค่อยจำเป็นในการเล่นกอล์ฟ
Martin Ender

ฉันไม่คิดว่าฉันเคยเห็นโพสต์นั้น เป็นไปได้มากเพราะฉันไม่เรียกดูสแต็คโอเวอร์โฟลว์บ่อย ขอบคุณสำหรับลิงค์ฉันจะบุ๊คมาร์คและอ่านมัน
daavko

1
อาจปิดหัวข้อสำหรับความคิดเห็น แต่ความรู้เกี่ยวกับสมดุลของกลุ่มมาจากการอ่านโพสต์ของคุณ ฉันคิดว่าคุณสามารถโปรโมตตัวเองได้ทุกเมื่อมันเป็นความช่วยเหลือที่ยอดเยี่ยม :) อย่างไรก็ตามในหัวข้ออื่น ๆ จะเรียงลำดับขั้นตอนการทำงานบางอย่างเช่น <code> O-1`. * </code> เพื่อให้สอดคล้องกับอินพุตที่ยาวที่สุด? บางทีมันอาจจะทำงานได้เหมือนการถอดเสียงและมีแบ็คทิคคั่นมากกว่าหนึ่งภูมิภาค regex ที่แยกและอีกหนึ่งนับ? ที่จริงแล้วนี่อาจจะเป็นของแชทด้วย ... ¯_ (ツ) _ / ¯
FryAmTheEggman

ไม่เคยคิดเลยว่าจะยอดo-rเยี่ยม
Emanuel Vintilă

6

Java, 154 142 หรือ142 130 ไบต์

เพราะคุณรู้ชวา

C # สำหรับการเปรียบเทียบสำหรับการเปรียบเทียบ

146 ไบต์ถ้าอินพุตต้องเป็นสตริงเดี่ยวที่มีค่าคั่นด้วย\n:

s->java.util.Arrays.stream(s.split("\n")).filter(g->g.matches("[wetyuio-r]*|[asdfghjkl]*|[zxcvbnm]*")).max((a,b)->a.length()-b.length()).get()

134 ไบต์ถ้าฉันสามารถสมมติว่าอินพุตเป็นสตริง [] แทน:

s->java.util.Arrays.stream(s).filter(g->g.matches("[wetyuio-r]*|[asdfghjkl]*|[zxcvbnm]*")).max((a,b)->a.length()-b.length()).get()

ungolfed เล็กน้อย:

UnaryOperator<String> longestQwertyStr = s -> 
        java.util.Arrays.stream(s.split("\n")) // Split string input over `\n` and convert to Stream<String>
                .filter(g->g.matches("[wetyuio-r]*|[asdfghjkl]*|[zxcvbnm]*")) // Filter to Strings that only use characters from a single row
                .max((a,b)->a.length()-b.length()) // Find the max by comparing String length
                .get(); // Convert from Optional<String> to String and implicit return single statement lambda

Function<String[],String>แลมบ์ดาที่สองคือ


รุ่นปรับปรุงของฉันตอนนี้แม้กระทั่งเต้นแลมบ์ดาสั้นเป็นโปรแกรมเต็ม :)
เอสบีไอ

@SBI Curse การขอใช้วิธีแบบยาวของ Java! (ทั้งหมดในสนุกดี)
CAD97

การเป็นนักพัฒนา Java ด้วยตัวเองเป็นเรื่องดีที่ได้เห็นภาษา verbose ที่สามารถกระชับได้ในเวลาเดียวกัน :)
SBI

หากเราจะทำการสันนิษฐานการป้อนข้อมูลลองทำสิ่งที่ช่วยเราได้มากที่สุดการป้อนข้อมูลเข้ามาในรายการ <String>: l->l.stream().filter(g->g.matches("[wertyuio-r]*|[asdfghjkl]*|[zxcvbnm]*")).max((a,b)->a.length()-b.length()).get()(116 ตัวอักษร)
Andreas

@Andreas ตามการอภิปรายเมตาล่าสุดของฉันหากแลมบ์ดารับรายการคุณต้องรวมimport java.util.*;ไว้ในจำนวนไบต์ซึ่งหมายถึงการรับรายการคือ -16 ไบต์โดยใช้รายการ แต่ +19 เพื่อนำเข้ารายการ อย่างไรก็ตามคุณไม่ได้ใช้ที่นั่นmaxแทนreduceการรับ -7 ไบต์
CAD97

4

เยลลี่40 34 ไบต์

p“£vẈ¬ḣ“£AS°GƤg“£ḷḳƤ²ƤȤḤ»f/€fµL€Mị

ลองออนไลน์!

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

p“£vẈ¬ḣ“£AS°GƤg“£ḷḳƤ²ƤȤḤ»f/€fµL€Mị

 “£vẈ¬ḣ“£AS°GƤg“£ḷḳƤ²ƤȤḤ»           Use dictionary compression to yield
                                    ['quipo twyer', 'adj flash jg', 'bcmnz xv'].
p                                   Cartesian product; for all pairs of an input
                                    string and one of the rows.
                         f/€        Reduce each pair by filter, keeping only the
                                    letters in the input string that are on that
                                    particular keyboard row.
                            f       Filter the results, keeping only filtered words
                                    that occur in the input.
                             µ      Begin a new chain.
                              L€    Get the length of each kept word.
                                M   Get the index corr. to the greatest length.
                                 ị  Retrieve the word at that index.

4

Python 3, 98

บันทึก 5 ไบต์ขอบคุณเควิน
บันทึกแล้ว 3 ไบต์ขอบคุณ PM 2Ring
บันทึกแล้ว 3 ไบต์ขอบคุณ Antti Haapala

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

lambda a:max(a,key=lambda x:(any(map(set(x).__le__,['qwertyuiop','asdfghjkl','zxcvbnm'])),len(x)))

กรณีทดสอบ:

assert f(['asdf', 'qwe', 'qaz']) == 'asdf'
assert f('''artist
home
gas
writer
geology
marine
twerp'''.splitlines()) == 'writer'
assert f('''wrhuji
bxnzmmx
gllwssjjd
vnccbb
lrkjhgfdsa
tttttt'''.splitlines()) == 'bxnzmmx'

3

PowerShell v2 +, 72 ไบต์

($args-match"^([qwertyuiop]+|[asdfghjkl]+|[zxcvbnm]+)$"|sort Length)[-1]

รับอินพุตผ่านอาร์กิวเมนต์บรรทัดคำสั่งเป็น$argsจากนั้นใช้-matchโอเปอเรเตอร์ที่มี regex เพื่อเลือกเฉพาะคำที่ประกอบขึ้นเป็นหนึ่งแถวคีย์บอร์ดโดยเฉพาะ เราท่อผลเหล่านั้นเป็นประเภทที่ว่าด้วยทรัพย์สินSort-Object Lengthเราสามารถทำสิ่งนี้ได้เนื่องจากสตริงใน PowerShell เป็นSystem.Stringประเภททั้งหมดซึ่งรวมถึง.Lengthคุณสมบัติที่สามารถเรียงลำดับได้ นี่จะเรียงสตริงเป็นลำดับขึ้นตามความยาวดังนั้นเราจึงนำสตริงสุดท้ายมาด้วย[-1]ไปไว้กับไปป์ไลน์และเอาท์พุทก็เป็นนัย

ตัวอย่าง

PS C:\Tools\Scripts\golfing> .\longest-word-qwerty-keyboard.ps1 asdf qwe zxc typewriter halls establishment
typewriter

3

Pyth, 45 35 ไบต์

ขอบคุณ @FryAmThe ​​Eggman ที่ช่วยฉันได้ไบต์!

elDf}k-LTc."`z:I¿Ç  Ì(T4²ª$8·"\`Q

ลองที่นี่!

รับอินพุตเป็นรายการของคำ

คำอธิบาย

elDf} k-LTc. "... " \ `Q # Q = รายการคำที่ป้อนทั้งหมด

   f Q # กรองอินพุตด้วย T เป็นตัวแปรแลมบ์ดา
         c. "... " \ `# รายการแถวแป้นพิมพ์ทั้งหมด
      -LT # ลบตัวอักษรทั้งหมดของแถวอินพุตปัจจุบันออกจากอินพุตปัจจุบัน
                      # คำ ส่งผลให้รายการ 3 สตริงโดยหนึ่งจะว่างเปล่าถ้า
                      # คำสามารถพิมพ์ด้วยหนึ่งแถว
    } k # ตรวจสอบว่ารายการมีสตริง emtpy หรือไม่
elD # รายการผลการสั่งซื้อตามความยาวและใช้ล่าสุด

3

ทับทิม, 88 82 69

หากฉันไม่ได้รับอนุญาตให้รับรายการสตริงและต้องใช้สตริงหลายบรรทัดให้เพิ่ม +12 ไปยังคะแนนและเพิ่ม.split('\n')สิทธิ์ก่อนการ.grepโทร

ขอบคุณ CatsAreFluffy ที่สอนฉันเกี่ยวกับ stambby lambdas ใน Ruby และการเพิ่มประสิทธิภาพเพิ่มเติมจาก manatwork

->x{x.grep(/^([o-rwetyui]+|[asdfghjkl]+|[zxcvbnm]+)$/).max_by &:size}

ไม่คุณเพิ่ม.split('\n')ก่อน.selectใช่มั้ย และทำไมไม่มีลูกแกะตัวแสบ
CalculatorFeline

ฉันไม่รู้เกี่ยวกับแลมบ์แลมบ์ดาจนถึงตอนนี้เมื่อคุณพูดถึงมัน ขอบคุณ!
มูลค่าหมึก

คุณสามารถเพิ่มช่องว่างระหว่าง -88- และ 82 ได้หรือไม่?
CalculatorFeline

ไม่จำเป็นต้องกำหนดให้ตัวแปรฟังก์ชั่นที่ไม่ระบุชื่อได้รับอนุญาต หากสิ่งเดียวที่ต้องทำภายใน.selectบล็อคโค้ดของคือการจับคู่กับนิพจน์ทั่วไป.grepจะเหมาะสมกว่า ไม่จำเป็นต้องใส่วงเล็บไว้รอบพารามิเตอร์ของวิธีการสุดท้ายในสายโซ่; .lengthมีนามแฝงที่สั้นกว่า.size:->x{x.grep(/^([o-rwetyui]+|[asdfghjkl]+|[zxcvbnm]+)$/).max_by &:size}
manatwork

3

C #, 141/112 / (120 ไบต์)

ภาษาคู่แข่งที่เลวร้ายที่สุดสำหรับเหตุผลที่ชัดเจน ใช้โลแคล "my" กับ qwertz แทนที่จะเป็น qwerty แต่ใช้งานได้ดี

โปรแกรมเต็มรูปแบบโดยไม่ต้องที่ไหน:

static void Main(string[]a){Console.WriteLine(a.OrderBy(x=>x.Length).Last(x=>Regex.IsMatch(x,"^([qwertzuiop]+|[asdfghjkl]+|[yxcvbnm]+)$")));}

เอาต์พุตเท่านั้นโดยไม่มีที่ไหน:

Console.WriteLine(a.OrderBy(x=>x.Length).Last(x=>Regex.IsMatch(x,"^([qwertzuiop]+|[asdfghjkl]+|[yxcvbnm]+)$")));

เอาต์พุตเท่านั้น (ดั้งเดิม):

Console.WriteLine(a.Where(x=>Regex.IsMatch(x,"^([qwertzuiop]+|[asdfghjkl]+|[yxcvbnm]+)$")).OrderBy(x=>x.Length).Last());

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

ภูมิใจในเลย์เอาต์ของฉัน: P มันไม่ใช่ว่าฉันมีโอกาสชนะต่อไปโดยใช้ C # แก้ไขในเวอร์ชันที่มีเฉพาะเอาต์พุต
SBI

เพิ่มทางเลือกอื่นโดยใช้เฉพาะ Last กับเพรดิเคตแทนการใช้ที่ไหน สิ่งนี้จะลบทิ้งอีก 8 ไบต์
SBI

2

bash, 105 ไบต์

และสาธารณูปโภคอื่น ๆ อีกมากมายแน่นอน

egrep -x '[wetyuio-r]+|[asdfghjkl]+|[zxcvbnm]+'|awk '{print length($0)"\t"$0;}'|sort -n|cut -f2|tail -n1

รหัสสามารถเขียนได้สั้นลงawk $0=length"\t"$0
จัดการ

2

awk, 92 84 81 ไบต์

(/^([wetyuio-r]+|[asdfghjkl]+|[zxcvbnm]+)$/)&&length>length(a){a=$0}END{print a}  

บันทึก 3 ไบต์ด้วยคำแนะนำ @Wolfgang


คุณสามารถลบไบต์ด้วยการใช้[wetyuio-r]แทนและอีกสองอย่างโดยทำ/^(expr|expr|expr)$/แทน `/ ^ expr $ | ^ expr $ | ^ expr $ /
Wolfgang

@ Wolfgang: ขอบคุณสำหรับเคล็ดลับ ฉันลองอันที่ 2 แล้วและเมื่อฉันตกใจมันทำให้ฉันคำที่ยาวที่สุดแทนคำที่ถูกต้อง ... ฉันจะลองอีกครั้ง ฉันเห็นด้วยกับคนแรกแม้ว่าจะช่วยประหยัด 1 ไบต์
Olivier Dulac

@ Wolfgang: อืมทำงานได้ครั้งนี้ (ฉันอาจคลำวงเล็บในการทดสอบของฉันเองศุกร์) ฉันจะแก้ไขเคล็ดลับของคุณในขอบคุณ
Olivier Dulac

คุณแน่ใจว่าจำเป็นต้องใช้วงเล็บในการแสดงออกปกติหรือไม่? gawkและmawkไม่มีความสุข
จัดการ

@ การจัดการงาน: สิ่งที่อยู่ภายในนั้นเป็นสิ่งที่จำเป็นด้านนอกที่ฉันต้องการให้พวกเขาเพื่อให้แน่ใจว่าตรรกะและลำดับการประเมินผล .. อาจจะอยู่ที่ "ราคา" ของ 2 ตัวอักษร
Olivier Dulac

1

MATL , 54 ไบต์

[]y"@Y:nh]2$SP"@Y:!t'asdfghjkl'mw'zxcvbnm'myy+~hhAa?@.

ใช้ได้กับภาษา / คอมไพเลอร์รุ่นปัจจุบัน (14.0.0)

รูปแบบอินพุตคือ (ตัวอย่างแรก)

{'artist' 'home' 'gas' 'writer' 'geology' 'marine' 'twerp'}

หรือ (ตัวอย่างที่สอง)

{'wrhuji' 'bxnzmmx' 'gllwssjjd' 'vnccbb' 'lrkjhgfdsa' 'tttttt'}

ลองออนไลน์!

คำอธิบาย

[]               % push empty array. Will be used for concatenation
y                % take input array implicitly at bottom of stack, and copy onto top
"                % for each string
  @Y:            %   push current string
  nh             %   get its length. Concatenate with array of previous lengths
]                % end for each
2$S              % sort the original copy of input array by increasing string length
P                % flip: sort by decreasing length
"                % for each string in decreasing order of length
  @Y:!           %   push that string as a column char vector
  t'asdfghjkl'm  %   duplicate. Tru for chars in 2nd row of keyboard
  w'zxcvbnm'm    %   swap. True for chars in 3rd row of keyboard
  yy+~           %   duplicate top two arrays, sum, negate: true for chars in 1st row
  hh             %   concatenate horizontally twice
  Aa             %   true if any column has all true values
  ?              %   if that's the case
    @            %     push string  
    .            %     break for each loop
                 %   end if implicitly
                 % end for each
                 % display implicitly


0

Groovy, 65 ตัวอักษร

{it.grep(~/[o-rwetyui]+|[asdfghjkl]+|[zxcvbnm]+/).max{it.size()}}

วิ่งตัวอย่าง:

groovy:000> ({it.grep(~/[o-rwetyui]+|[asdfghjkl]+|[zxcvbnm]+/).max{it.size()}})(['wrhuji', 'bxnzmmx', 'gllwssjjd', 'vnccbb', 'lrkjhgfdsa', 'tttttt'])
===> bxnzmmx

โปรดทราบว่าการแสดงออกปกติที่ใช้โดย.grep()ไม่ต้องมีการยึดเพื่อให้สามารถสำรองการจัดกลุ่มได้เช่นกัน:

groovy:000> ['ab', 'ac', 'bc', 'abc', 'aca', 'bbc'].grep ~/[ac]+|b+/
===> [ac, aca]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.