เขียนเครื่องตรวจจับไฮกุ


41

ไฮกุบทกวีสามบรรทัดกับ 5/7/5 พยางค์นับตามลำดับ

ไฮกุ-Wเป็นบทกวีที่มีสามสายมี 5/7/5 คำนับตามลำดับ

ท้าทาย

เขียนโปรแกรมที่จะคืนค่าจริงถ้าอินพุตเป็นไฮกุ -w และเป็นเท็จถ้าไม่

อินพุต haiku-w ที่ถูกต้องจะต้องประกอบด้วย 3 บรรทัดคั่นด้วยบรรทัดใหม่

  • บรรทัดที่ 1 จะต้องประกอบด้วย 5 คำแต่ละคำคั่นด้วยช่องว่าง
  • บรรทัดที่ 2 จะต้องประกอบด้วย 7 คำแต่ละคำคั่นด้วยช่องว่าง
  • บรรทัดที่ 3 จะต้องประกอบด้วย 5 คำแต่ละคำคั่นด้วยช่องว่าง

ตัวอย่าง

The man in the suit
is the same man from the store.
He is a cool guy.

ผลลัพธ์:จริง

Whitecaps on the bay:
A broken signboard banging
In the April wind.

ผลลัพธ์:เท็จ


กฎระเบียบ

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
  • มีช่องโหว่ของรหัสมาตรฐานสำหรับกอล์ฟ ห้ามมิให้มีการโกง
  • ค่าส่งคืนบูลีนอื่น ๆ เช่น1และ0เป็นที่ยอมรับ
  • รายการความยาว -3 ของสตริงเป็นอินพุตก็ยอมรับได้เช่นกัน
  • อินพุตไฮกุที่ถูกต้องไม่ควรมีช่องว่างนำหน้าหรือต่อท้ายหรือเว้นวรรคหลายช่องเพื่อแยกคำ

1
ไฮกุจะมี 3 บรรทัดเสมอไหม?
Kritixi Lithos

1
ใช่. ถ้าใส่มีมากกว่าหรือน้อยกว่า 3 สายโปรแกรมควรกลับเท็จ
DomTheDeveloper

5
จะมีช่องว่างนำหน้าหรือต่อท้ายในบรรทัดใด ๆ หรือไม่ หรือหลายช่องว่างคั่นคำ?
เกร็กมาร์ติ

8
โดยวิธีการชี้แจงเช่นนี้เป็นเหตุผลหลักในการโพสต์คำถามที่เสนอในSandboxก่อน :)
Greg Martin

11
คะแนนโบนัสสำหรับการส่งรหัสที่ตัวเองเป็นไฮกุ -w
Glorfindel

คำตอบ:


25

JavaScript (ES6), 73 72 64 63 54 42 39 ไบต์

ขอบคุณ Neil สำหรับการบันทึก 13 ไบต์

a=>a.map(b=>b.split` `.length)=='5,7,5'

คำอธิบาย

นี่คือฟังก์ชั่นลูกศรอ้วนที่ใช้อาร์เรย์ของสตริงเป็นอาร์กิวเมนต์ มันจะแทนที่แต่ละบรรทัดด้วยการนับจำนวนคำ ถ้ามันเป็นไฮกุ - aตอนนี้มีอาร์เรย์ห้า, เจ็ดและห้าอีกครั้ง เนื่องจาก JavaScript ไม่อนุญาตให้เราเปรียบเทียบ 2 อาร์เรย์ในเวลาเดียวกันดังนั้นอาร์เรย์จึงถูกแปลงเป็นสตริงก่อนแล้วจึงทำการเปรียบเทียบ ผลลัพธ์นี้เป็นบูลีนที่ส่งคืน


1
%และ*มีความสำคัญเหมือนกันดังนั้นคุณไม่จำเป็นต้องใช้()s ถึงแม้ว่าฉันคิดว่า(d*2|5)อาจใช้งานได้ นอกจากนี้คุณจะได้รับไปมีเพียงหนึ่งเดียวแต่ฉันคิดว่าคุณสามารถปรับปรุงแม้กระทั่งว่าด้วยการใช้& (b...).length==3>b.some(...length-...)
Neil

ขอบคุณสำหรับเคล็ดลับเกี่ยวกับวงเล็บ นอกจากนี้ฉันเปลี่ยนแนวทางของฉันดังนั้นฉันจึงไม่ตรวจสอบความยาวอีกต่อไปอย่างชัดเจน
ลุค

1
a=>a.map(c=>c.split .length)=='5,7,5'อาในกรณีที่ไม่ต้องรำคาญกับการคำนวณการใช้เพียง
Neil

เฮ้คุณพูดถูก ฉันควรคิดถึงเรื่องนั้น ...
ลูกา

คุณยังไม่จำเป็นต้อง+''- ==stringifies ถ้าอาร์กิวเมนต์อื่นเป็นสตริง
Neil

12

AWK (GNU Awk) 24, 30, 28, 20 ไบต์

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

517253==$0=q=q NF NR

จะออก "517253" สำหรับทรูและสตริงที่ว่างเปล่าสำหรับเท็จ

ใน awk ค่าตัวเลขใด ๆ ที่ไม่ใช่ศูนย์หรือค่าสตริงที่ไม่มีค่าใด ๆ เป็นจริง ค่าอื่นใด (ศูนย์หรือสตริง null "") เป็นเท็จ

คู่มือผู้ใช้ GNU Awk

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

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

pattern {action}

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

รหัสด้านบนเป็นนิพจน์ Awk แบบสแตนด์อโลน (รูปแบบ) ที่ไม่มีบล็อกการดำเนินการซึ่งมีความหมายว่าเป็น{print $0}ในกรณีนั้น

ควรอ่านจากขวาไปซ้าย:

q=q NF NR

ผนวกNสีน้ำตาลไหม้F ields (คำ) และNสีน้ำตาลไหม้R ecords (เช่นหมายเลขบรรทัดปัจจุบัน) เพื่อตัวแปรQ

วิธีนี้เมื่อการประมวลผลที่เหมาะสมไฮกุ-W Qจะถูกตั้งค่า:

  • 51 - บรรทัดที่ 1 (5 คำ)
  • 5172 - ในบรรทัด # 2 (5 คำ + 7 คำ)
  • 517253 - บรรทัดที่ 3 (5 คำ + 7 คำ + 5 คำ)

$0=q

กำหนดค่าที่คำนวณใหม่ของqเป็น$ 0 (ซึ่งเก็บบรรทัด / ระเบียนปัจจุบันทั้งหมดโดยค่าเริ่มต้น)

517253==$0

เปรียบเทียบกับ "ลายเซ็น" สำหรับ Haiku-w (517253) ที่เหมาะสมหากมีการแข่งขันนิพจน์ทั้งหมดจะประเมินเป็น "จริง" และการกระทำที่เกี่ยวข้อง (โดยนัยprint $0) กำลังดำเนินการส่ง "517253" ไปยัง stdout (True) มิฉะนั้นเอาต์พุตจะว่างเปล่า (เท็จ)

โปรดทราบว่าสิ่งนี้จะจดจำ Haiku-w ได้อย่างถูกต้องแม้ว่าจะตามมาด้วยจำนวนบรรทัดขยะโดยพลการ แต่ฉันเชื่อว่าไม่เป็นเช่นนั้น:

รายการความยาว -3 ของสตริงเป็นอินพุตก็ยอมรับได้เช่นกัน

(เช่นเราสามารถสมมติให้อินพุตมีความยาว 3 บรรทัด)

ทดสอบ

>awk '517253==$0=q=q NF NR'<<EOF
The man in the suit
is the same man from the store.
He is a cool guy.
EOF

517253

ลองออนไลน์!


2
นี้ล้มเหลวถ้าใส่ประกอบด้วยเส้นหนึ่งที่มี 575 คำหรือสองบรรทัดที่มี 57 และ 5 คำอื่น ๆ
ลินน์

@ ลินน์, จริงระงับไว้จนกระทั่งสิ่งนี้ได้รับการแก้ไข
เรือเหาะ

@Lynn ควรได้รับการแก้ไขแล้ว
zeppelin

1
การแก้ไขที่ฉลาดมาก! :)
ลินน์

9

Pythonขนาด 42 ไบต์

lambda l:[s.count(' ')for s in l]==[4,6,4]

ลองออนไลน์!

รับอินพุตเป็นรายการของบรรทัดโดยคำที่คั่นด้วยช่องว่างเดี่ยว

เนื่องจากเรารับประกันว่าจะไม่มีช่องว่างนำหน้าหรือตามหลังและมีเพียงช่องว่างเดียวเท่านั้นที่จะแยกแต่ละคำเราจึงสามารถตรวจสอบ w-haiku ได้โดยเพียงแค่นับช่องว่างในแต่ละบรรทัด

เราทำสิ่งนี้ในรายการความเข้าใจเพื่อสร้างรายการของการนับพื้นที่ ถ้ามันเป็นไฮกุที่ถูกต้องก็ควรมีหน้าตา[4, 6, 4]ดังนั้นเราเปรียบเทียบกับสิ่งนี้และส่งคืนผลลัพธ์


หากคุณโอเคกับการสนับสนุนเพียงงูหลาม 2 map(str.count,l,' ')คุณสามารถบันทึกไบต์ที่สอง:
vaultah

8

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

ċ€⁶⁼“¥©¥‘

ลองออนไลน์!

คำอธิบาย

ċ€⁶⁼“¥©¥‘  Input: length-3 list of strings
 €         For each string
ċ ⁶          Count the number of spaces
    “¥©¥‘  Convert string to code page indices, makes [4, 6, 4]
   ⁼       Match

นอกจากนี้ċ€⁶⁼4,6,4และċ€⁶⁼464D¤…ฉันไม่สามารถหาอะไรที่สั้นกว่านี้ได้ (โอ้คุณสามารถพลิกมันได้ด้วย464D⁼ċ€⁶$)
ลินน์

ċ€⁶Ḍ=464ทำงานได้ดีสำหรับ 8
Jonathan Allan

ที่จริงแล้วมันไม่ได้ขอโทษ
Jonathan Allan

7

แบตช์ 102 ไบต์

@echo off
call:c&&call:c 2||exit/b
:c
set/an=%1+5
set/ps=
for %%W in (%s%)do set/an-=1
exit/b%n%

ออกโดยไม่มีข้อผิดพลาดระดับศูนย์ทันทีที่อ่านบรรทัดที่มีจำนวนคำผิด


1
...... อึ
tbodt

7

Mathematica ขนาด 21 ไบต์

{4,6,4}==Count@" "/@#&

ฟังก์ชั่นที่ไม่มีชื่อสละรายชื่อของรายการของตัวละครที่เป็น input และกลับหรือTrue Falseเพียงนับจำนวนช่องว่างในแต่ละรายการของตัวละครซึ่งอยู่ภายใต้กฎของการท้าทายมีความสัมพันธ์อย่างสมบูรณ์แบบกับจำนวนคำในแต่ละบรรทัด

การส่งก่อนหน้า:

Mathematica, 31 ไบต์

Length/@StringSplit/@#=={5,7,5}&

ฟังก์ชั่นที่ไม่มีชื่อการรายการของสตริงเป็น input และกลับหรือTrueFalse



6

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

M%` 
^4¶6¶4$

(มีช่องว่างต่อท้ายบรรทัดแรก)

ลองออนไลน์!

  • M%`  - นับจำนวนช่องว่างในแต่ละบรรทัด

    • M - โหมดจับคู่ - พิมพ์จำนวนการแข่งขัน
    • % - สำหรับแต่ละบรรทัด
    • ` - การกำหนดค่าแยกต่างหากและรูปแบบ regex
    • - แค่ช่องว่าง
  • ^4¶6¶4$ - ควรมีช่องว่าง 4, 6 และ 4 และสามบรรทัด

    • ตรงกับบรรทัดใหม่ ที่เหลือคือการแสดงออกปกติอย่างง่าย

พิมพ์1สำหรับอินพุตที่0ถูกต้องสำหรับไม่ถูกต้อง


4

Python 58 58ไบต์

lambda h:[len(l.split())for l in h]==[5,7,5]

-14 โดย tbodt


คุณได้รับอนุญาตให้รับอินพุตเป็นรายการสตริงความยาว 3 รายการ คุณสามารถบันทึกไบต์ที่ใช้split("\n")ไปได้
ไมล์

44 ไบต์:lambda h:[len(l.split())for l in h]==[5,7,5]
2560

บางคนทำสิ่งนี้ให้สั้นลงเพื่อข้ามไป 44
Charlie


4

Pyth, 9 ไบต์

qj464T/R;

โปรแกรมที่รับอินพุต"quoted strings"และพิมพ์TrueหรือFalseตามความเหมาะสม

ชุดทดสอบ

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

qj464T/R;   Program. Input: Q
qj464T/R;Q  Implicit variable fill
     T      Are the base-10
 j          digits
  464       of 464
q           equal
      /     to the number
        ;   of spaces
       R    in each string
         Q  in the input?
            Implicitly print


4

PowerShellขนาด 43 ไบต์

"$args"-replace'\S'-match'^(    )
\1  
\1$'

ลองออนไลน์!

คำอธิบาย

รับอินพุตเป็นสตริงที่คั่นด้วยบรรทัดใหม่

ลบช่องว่างที่ไม่ใช่ช่องว่างออกทั้งหมดจากนั้นตรวจสอบเพื่อดูว่าตรงกับ "4 ช่องว่าง, บรรทัดใหม่, 6 ช่องว่าง, บรรทัดใหม่, ช่องว่าง 4 บรรทัดใหม่" โดยใช้ regex

กลุ่มการจับคู่จับคู่ช่องว่าง 4 ช่องการ\1อ้างอิงกลับหมายถึงสิ่งนั้น บรรทัดใหม่ถูกฝังอยู่ในสตริง หมายเหตุบรรทัดที่สองของ regex มีช่องว่างสองช่องหลังจากการอ้างอิงย้อนกลับ


1
นั่นคือ aproach ที่น่าสนใจ!
Ismael Miguel


3

J, 12 ไบต์

4 6 4=#@;:@>

อินพุตเป็นรายการสตริงที่มีกล่อง

คำอธิบาย

นี่คือทางแยกที่มีซี่ซ้ายคงที่ นี้จะตรวจสอบผลของขวากหนามขวา#@;:@>, 4 6 4เพื่อความเท่าเทียมกันด้วย เวลาที่เหมาะสมนำกล่องออกแต่ละอัน ( >) จากนั้น ( @) แปลงแต่ละสตริงเป็นคำ ( ;:) จากนั้น ( @) ใช้ความยาวของแต่ละสตริง( #)


3

R, 48 ไบต์

all(stringr::str_count(scan(,"")," ")==c(4,6,4))

อ่านเวกเตอร์อักขระ 3 ความยาวจาก stdin และทำงานโดยนับจำนวนช่องว่าง ในการนับจำนวนช่องว่างที่เราใช้str_countจาก stringrแพคเกจซึ่งสามารถนับจำนวนสิ่งที่เกิดขึ้นตามรูปแบบ regex

แนวทางอื่นที่ไม่ใช้แพ็คเกจอาจเป็น:

all(sapply(scan(,""),function(x)length(el(strsplit(x," "))))==c(5,7,5))

ครั้งแรกที่ฉันเคยเห็นelมาก่อนขอบคุณมากสำหรับสิ่งนั้น
BLT

3

C 142 ไบต์

void f(){char *c;l=3;s[3]={0};while(l>0){if(*c==' ')s[l-1]++;if((*c=getchar())=='\n'){l--;}}printf("%d",(s[0]==4 && s[1]==6 && s[2]==4)?1:0);}

เวอร์ชันที่ไม่ถูกปรับแต่ง:

void f()
{
  char *c;
  c = (char *)malloc(sizeof(char)); 
  int l=3;
  int s[3]= {0};


  while(l>0)
  {  
    if(*c==' ')
    s[l-1]++;

    if( (*c=getchar())=='\n')
    {    
      l--;
    }   
  }
  printf("%d",(s[0]==4 && s[1]==6 && s[2]==4)?1:0);
}

ส่งคืน 1 สำหรับลำดับ 5/7/5 อย่างอื่น 0

testcase เชิงบวก:

ป้อนคำอธิบายรูปภาพที่นี่


3

C ++, 357 ไบต์

เรียงลำดับใหม่ของรหัสกอล์ฟ แต่นี่เป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้อย่างรวดเร็ว

#include <iostream>
using namespace std;
int n(std::string s)
{
    int b = 0;
    for(char c: s)
        if(c == ' ') b++;
    cout << "C = " << b;
    return b;
}
int main()
{
    string a, b, c;
    getline(cin, a);
    getline(cin, b);
    getline(cin, c);
    if(n(a)==4 && n(b)==6 && n(c)==4)
        cout<<'1';
    else cout << '0';
    return 0;
}

4
ยินดีต้อนรับสู่ PPCG! เป้าหมายของการตีกอล์ฟคือการทำให้รหัสของคุณสั้นที่สุดเท่าที่จะเป็นไปได้ ขั้นตอนแรกที่ดีคือการลบช่องว่างที่ไม่จำเป็นออกทั้งหมด
ETHproductions

3

ทับทิม 1.9.3

ไม่เล่นกอล์ฟ แต่เป็นไฮกุ

def haiku_w(input)
  lines = input.split("\n")
  lengths = lines.map(&:split).map(&:length)
  lengths.eql?([5,7,5])
end

หรือ...

lines equals input split (newlines)
lengths equals lines map split map length
lengths equals five seven five?

น่าเสียดายที่ไม่สามารถใช้งานกับช่องว่างชั้นนำในบรรทัดใด ๆ ได้


2

Python 2 , 57 64 bytes

แก้ไขแก้ไขด้วยการเพิ่ม 7 ไบต์หลังจากข้อเสนอแนะจาก @Dada ขอบคุณ!

i,j=input,''
for x in i():j+=`len(x.split())`+' '
i(j=='5 7 5 ')

ลองออนไลน์!

ไม่ใช่คำตอบของ Python ที่สั้นที่สุด แต่ต้องการใช้เคล็ดลับใหม่ที่ฉันเรียนรู้เมื่อเร็ว ๆ นี้input()เพื่อใช้แสดงผลลัพธ์และบันทึกprintคำสั่ง รับรายการบรรทัดเป็นอินพุต ต้องการ Ctrl C (หรือกดปุ่มอื่น ๆ สำหรับเรื่องนั้น) เพื่อยุติโปรแกรม (ยกเว้น) ในเทอร์มินัล แต่ทำงานได้ดีโดยไม่ใช้ TIO


4
นี้จะล้มเหลวในกรณีเช่นนี้
Dada

ฉันจะให้ @Dada ที่ นั่นคือกรณีทดสอบที่ร้ายแรงหนึ่งข้อ :)
ElPedro

แก้ไขและทดสอบกับกรณีทดสอบของคุณ
ElPedro

2

MATL, 16 ไบต์

"@Y:Ybn&h][ACA]=

การป้อนข้อมูลที่เป็นอาร์เรย์เซลล์ของสตริงและผลตอบแทนtruthy หรือ falsey อาร์เรย์

ลองออนไลน์

คำอธิบาย

        % Implicitly grab input
"       % For each element in the cell array
@Y:Yb   % Split it on spaces
n       % Count the number of elements
&h      % Horizontally concatenate everything on the stack
[ACA]   % Create the array [5 7 5]
=       % Perform an element-wise equality
        % Implicitly display the truthy/falsey array

2

MATLAB / Octave, 38 ไบต์

@(x)cellfun(@(y)sum(y==32),x)==[4 6 4]

วิธีการแก้ปัญหานี้ยอมรับเซลล์อาร์เรย์ของสตริงเป็นอินพุตนับจำนวนช่องว่างในแต่ละบรรทัดแล้วเปรียบเทียบผลลัพธ์กับอาร์เรย์[4 6 4]และให้ผลลัพธ์ที่เป็นจริง (ค่าทั้งหมดคือ 1) หรือ falsey (ค่าใด ๆ คือศูนย์)

การสาธิตออนไลน์



2

Clojure 44 ไบต์

#(=(for[l %](count(filter #{\ }l)))'(4 6 4))

อินพุตคือรายการสตริง ฟังก์ชั่นค้นหาช่องว่างเท่านั้นและนับพวกเขา คำอธิบายนี้เป็นไฮกุ :)


2

Java 7, 154 ไบต์

class M{public static void main(String[]a){System.out.print(a.length==3&&a[0].split(" ").length==5&a[1].split(" ").length==7&a[2].split(" ").length==5);}}

ความต้องการของโปรแกรมและศักยภาพของการมีน้อยกว่าหรือมากกว่าสามบรรทัดไม่พูดถึงคำฟุ่มเฟื่อยของ Java เองทำให้รหัส 'golfed' นี้ค่อนข้างใหญ่ ..

Ungolfed:

ลองที่นี่

class M{
  public static void main(String[] a){
    System.out.print(a.length == 3
        && a[0].split(" ").length == 5
         & a[1].split(" ").length == 7
         & a[2].split(" ").length == 5);
  }
}

2

SimpleTemplate ขนาด 77 ไบต์

น่าเศร้าที่นิพจน์ทั่วไป aproach นั้นสั้นที่สุด

{@if"@^([^\s]+ ?){5}\s([^\s]+ ?){7}\s([^\s]+ ?){5}+$@"is matchesargv}{@echo1}

ต้องการให้ข้อความถูกกำหนดเป็นอาร์กิวเมนต์แรกพร้อมกับบรรทัดใหม่สไตล์ * NIX สิ่งนี้จะไม่ทำงานกับการขึ้นบรรทัดใหม่สไตล์ Windows

Ungolfed:

{@if "@^([^\s]+ ?){5}\s([^\s]+ ?){7}\s([^\s]+ ?){5}+$@"is matches argv}
    {@echo 1}
{@/}

ไม่ใช่เร็กซ์, 114 byes

{@setR 1}{@eachargv asL keyK}{@php$DATA[L]=count(explode(' ',$DATA[L]))!=5+2*($DATA[K]&1)}{@set*R R,L}{@/}{@echoR}

สิ่งนี้ต้องการให้แต่ละบรรทัดถูกกำหนดเป็นอาร์กิวเมนต์ของฟังก์ชัน

Ungolfed:

{@set result 1}
{@each argv as line key k}
    {@php $DATA['line'] = count(explode(' ', $DATA['line'])) != 5+2*( $DATA['k'] & 1 )}
    {@set* result result, line}
{@/}
{@echo result}

2

ซ้อนกัน, 22 ไบต์

[' 'eq sum]map(4 6 4)=

รับอินพุตจากด้านบนของสแต็กเป็นรายการของสตริงอักขระเช่น:

($'The man in the suit' $'is the same man from the store.' $'He is a cool guy.')

คำอธิบาย

[' 'eq sum]map(4 6 4)=
[         ]map          map the following function over each item
 ' 'eq                  vectorized equality with ' '
       sum              summed
              (4 6 4)=  is equal to (4 6 4)

2

Java (OpenJDK) , 82 ไบต์

-2 ไบต์ต้องขอบคุณ @ corvus_192!

s->s[0].split(" ").length==5&s[2].split(" ").length==5&s[1].split(" ").length==7

ลองออนไลน์!

ดูเหมือนว่าเล่นได้แต่ไม่มีฟังก์ชั่นแผนที่ในตัวฉันไม่สามารถหาวิธีที่ดีได้ การวนซ้ำผ่านอาร์เรย์นั้นยาวขึ้นอีกสองสามไบต์เช่นเดียวกับการเขียนฟังก์ชั่นแผนที่โดยใช้สตรีม

การแสดงออกของแลมบ์ดาใช้อาร์เรย์ของสตริงและส่งคืนบูลีน


เกิดอะไรขึ้นถ้าคุณมีเพียงสองบรรทัดเป็นอินพุตหรือสี่?
Kevin Cruijssen

@KevinCruijssen ตาม op, "รายการความยาว -3 ของสตริงเป็นอินพุตก็ยอมรับได้" โปรแกรมของฉันใช้รายการความยาว 3 บรรทัด
Pavel

คุณสามารถรับฟังก์ชั่นแผนที่ได้หากคุณโทรArrays.streamมา แต่มันก็นานพอที่มันอาจจะไม่คุ้มค่าที่จะใช้ (โดยเฉพาะถ้าคุณจำเป็นต้องนำเข้าArrays)
Pokechu22

@ Pokechu22 ใช่ฉันพยายามแล้วยังคงเป็นอีกต่อไป
Pavel

คุณสามารถใช้&แทน&&การบันทึกสองไบต์
corvus_192


1

R, 100 ไบต์

f<-function(a){all(sapply(a,function(x){length(grep(" ",as.list(strsplit(x,"")[[1]])))})==c(4,6,4))}

รับอาร์กิวเมนต์เป็นรายการสตริงความยาว 3 รายการ อาจจะไม่ได้เล่นกอล์ฟต่อไปเนื่องจากการเล่นกอล์ฟต่อไปจะเปลี่ยนเป็นคำตอบของ @ Billywob

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