สายนี้เป็นสี่เหลี่ยมหรือไม่?


44

สตริงถือเป็นสแควร์หากตรงตามเงื่อนไขต่อไปนี้:

  • แต่ละบรรทัดมีจำนวนอักขระเท่ากัน
  • จำนวนอักขระในแต่ละบรรทัดเท่ากับจำนวนบรรทัด

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

คุณอาจต้องป้อนข้อมูลให้คั่นด้วยตัวเลือก LF, CR หรือ CRLF

อักขระขึ้นบรรทัดใหม่ไม่ถือเป็นส่วนหนึ่งของความยาวของบรรทัด

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

อินพุตเป็นสตริงหรืออาร์เรย์ถ่าน 1D มันไม่ใช่รายการของสตริง

คุณอาจสมมติว่าอินพุตไม่ว่างเปล่าและมี ASCII ที่พิมพ์ได้เท่านั้นรวมถึงช่องว่าง

คุณต้องส่งออกค่าความจริงสำหรับสตริงสแควร์และหนึ่งค่าเท็จสำหรับสตริงอื่น ๆ

กรณีทดสอบจริง:

foo
บาร์
baz
.
.S
.ss
.S
(s หมายถึงพื้นที่)
เอสเอส
เอสเอส
(s หมายถึงพื้นที่)
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa

กรณีทดสอบเท็จ:

..
.
.

.
....


....
4444
333
22
333
333
abc.def.ghi

บันทึกบรรทัดว่างพิเศษในบางกรณีที่เป็นเท็จ

นี่คือ - ไบต์ที่น้อยที่สุดชนะ!


ซ้ำเป็นไปได้ของการออกแบบภาษา: 2-D แบบจับคู่ ปัญหา # 5 เหมือนกับคำถามนี้
mbomb007

1
@ mbomb007 ฉันรู้สึกว่าเกณฑ์การชนะที่แตกต่างกันทำให้สิ่งนี้ไม่ซ้ำกันหรือ "Golfiness" เป็นหนึ่งในเกณฑ์การลงคะแนน แต่ฉันไม่คิดว่าคำตอบสำหรับคำถามนั้นจะสะท้อนถึงสิ่งที่อยู่ที่นี่เป็นส่วนใหญ่
FryAmTheEggman

2
@ mbomb007 ฉันลงคะแนนให้เปิดคำถามนี้เพราะในขณะที่มันเป็นส่วนย่อยของคำถามอื่น ๆ คำถามอื่น ๆ จะถูก จำกัด เฉพาะภาษาที่สร้างขึ้นโดยเฉพาะสำหรับคำถามนั้น
ETHproductions

2
@ mbomb007: นั่นไม่ใช่ของซ้ำเพราะคำถามนั้นขอให้คุณออกแบบภาษาเพื่อจุดประสงค์ในการตอบคำถามแทนที่จะตอบในภาษาที่มีอยู่ คำตอบน้อยมากที่นี่จะถูกต้องตามกฎหมายที่นั่น

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

คำตอบ:


19

Brachylog (2), 3 ไบต์

ṇẹṁ

ลองออนไลน์!

โปรแกรมเต็มรูปแบบ เอาท์พุทtrue.สำหรับความจริงfalse.สำหรับความเท็จ

คำอธิบาย

ṇẹṁ
ṇ     Split {standard input} into lines
 ẹ    Split {each line} into basic elements {in this case, characters}
  ṁ   Assert that the result is square

ฉันค่อนข้างสงสัยเกี่ยวกับประโยชน์ของbuiltin เมื่อมันถูกเพิ่มเข้ามา แต่ฉันไม่สามารถปฏิเสธได้ว่ามันมีประโยชน์ที่นี่ ...

Brachylog (2), 7 ไบต์

ṇẹ.\l~l

ลองออนไลน์!

วิธีแก้ปัญหาที่ไม่ได้สร้างขึ้น ยังคงเต้นรายการอื่น ๆ ทั้งหมด ณ เวลาที่เขียน แก้ไข: ไม่มากรายการ Jelly ยาวเท่ากันได้ในขณะที่ฉันกำลังเขียนนี้และเต้นมันผ่านไทม์เบรคไทม์ส

คำอธิบาย

ṇẹ.\l~l
ṇ         Split {standard input} into lines
 ẹ        Split {each line} into basic elements {in this case, characters}
   \l     Assert that the result is rectangular, and the number of columns
  .  ~l     is equal to the number of rows

1
เครื่องมือที่ถูกต้องสำหรับงาน!
Pavel

10
= "ยืนยันว่าผลลัพธ์เป็นรูปสี่เหลี่ยม" :(
Erik the Outgolfer

5
มีช่วงเวลาหนึ่งที่ฉันต้องดิ้นรนเขียนสี่เหลี่ยมจัตุรัสซึ่งเป็นความท้าทายสักระยะหนึ่ง (มันน่าจะเป็นอะไรบางอย่าง.\l~lในเวลานั้นยกเว้นว่าคำสั่ง backslash ซึ่งเหนือสิ่งอื่นใดอ้างว่าอินพุตเป็นสี่เหลี่ยมถูกทำลาย ทราบว่าแม้ว่าเราจะแทนที่ด้วย.\l~lนี้เป็นยังโปรแกรมที่สั้นที่สุดที่นี่มาคิดว่ามันฉันจะเพิ่มว่าการโพสต์) คำสั่ง backslash ได้รับการแก้ไข แต่ผู้เขียนภาษาตัดสินใจที่จะเพิ่ม assert-square ในเวลาเดียวกัน ฉันคิดว่า "แน่นอนว่ามันจะไม่เกิดขึ้นอีก" เห็นได้ชัดว่าฉันผิด

2
@Phoenix: หมายเลขเวอร์ชันของภาษาสิ่งนี้จะไม่ทำงานใน Brachylog v1 คนส่วนใหญ่พูดว่า "Brachylog" (เหมือนกับที่คนส่วนใหญ่พูดว่า "Perl" แทนที่จะเป็น "Perl 5") แต่ฉันกลับติดนิสัยไม่นานเพราะฉันใช้ Brachylog v1 ในโอกาสที่หายาก

2
@iFreilicht แย่มากเพราะมันเกินกว่าภาษาการเล่นกอล์ฟทุกภาษาจนถึงตอนนี้
Erik the Outgolfer

21

Python 2 , 52 ไบต์

x=input().split('\n')
print{len(x)}==set(map(len,x))

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


4
ฉันชอบความจริงที่ว่านี่เป็นทั้งกอล์ฟและอ่านได้
jpmc26

คุณไม่ต้องการ'\n'เพียงแค่ปล่อยให้มันว่างเปล่า (เนื่องจากไม่มีช่องว่างและแท็บในอินพุต)
12431234123412341234123

@ 12431234123412341234123 ไม่มันไม่ทำงานสำหรับสตริงสแควร์ที่มีช่องว่าง !!!
นาย Xcoder

@ Mr.Xcoder ต้องใช้ช่องว่างหรือไม่ อย่างที่ฉันเข้าใจไม่มีช่องว่างในอินพุต
12431234123412341234123

คุณเข้าใจรายละเอียดผิด: คุณอาจสมมติว่าอินพุตไม่ว่างเปล่าและมี ASCII ที่พิมพ์ได้เท่านั้น และช่องว่าง (``) นั้นสามารถพิมพ์ได้ ASCII
Mr. Xcoder

14

JavaScript (ES6), 46 45 ไบต์

s=>!(s=s.split`
`).some(x=>x.length-s.length)

คำอธิบาย

  1. แยกสตริงเป็นอาร์เรย์ในบรรทัดใหม่
  2. วนรอบอาร์เรย์
  3. ลบความยาวของอาร์เรย์จากความยาวของแต่ละบรรทัด
  4. หากค่าที่ไม่ใช่ศูนย์ (เช่นค่าจริง) ถูกส่งคืนสำหรับบรรทัดใด ๆ สตริงจะไม่เป็นรูปสี่เหลี่ยม
  5. ลบล้างผลลัพธ์ของการวนซ้ำเพื่อให้ได้trueสี่เหลี่ยมและfalseไม่ใช่

ลองมัน

f=
s=>!(s=s.split`
`).some(x=>x.length-s.length)
oninput=_=>o.innerText=f(i.value)
o.innerText=f(i.value=`foo
bar
baz`)
<textarea id=i></textarea><pre id=o>


3
ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วยs=>!(s=s.split`\n`).some(x=>x.length-s.length)
ETHproductions

ขอบคุณ @ETHproductions ฉันมีนิสัยที่น่ากลัวที่จะขับ!someออกจากมือเพียงเพราะมันมีความยาวเท่าeveryกัน
Shaggy

9

05AB1E , 10 8 ไบต์

¶¡€gDgQP

ลองออนไลน์!

-2 ต้องขอบคุณไรลีย์นี่เป็นคำตอบของเขา

Code       # Explanation                  | Truthy Example          | Falsy Example
-----------#------------------------------+-------------------------+--------------
¶¡         # Split on newlines            | [['aaa','aaa','aaa']]   | [['aa']]
  €g       # Get length of each           | [[3,3,3]]               | [[2]]
    D      # Dupe                         | [[3,3,3],[3,3,3]]       | [[2],[2]]
     g     # Get length                   | [[3,3,3],3]             | [[2],1]
      Q    # Check equality               | [[1,1,1]]               | [[0]]
       P   # Take product                 | 1                       | 0

@Riley ahhh จับดีความคิดดั้งเดิมของฉันเป็นไปตามสิ่งที่คุณมี แต่แตกต่างกันเล็กน้อย ทำซ้ำอีกสองครั้งและไม่พบข้อผิดพลาดทางคณิตศาสตร์ของฉัน
Magic Octopus Urn

ฉันไม่คิดว่า "ส่วนหัว" เป็นรูปแบบที่ถูกต้องในการป้อนข้อมูล
Pavel

@Phoenix คือว่าดีขึ้นหรือไม่
Magic Octopus Urn

1
การป้อนข้อมูลนอกจากนี้ยังสามารถนำมาในสามคำพูดเช่นนี้
Adnan

1
sถ้าคุณได้รับความยาวของแต่ละคนแรกที่คุณสามารถหลีกเลี่ยง แบบนี้¶¡€gDgQP
Riley


9

Haskell, 38 34 ไบต์

l=length
(all=<<(.l).(==).l).lines

ลองออนไลน์!

รุ่น Pointfree ของf s = all ((==length (lines s)).length) (lines s)คือแบ่งอินพุตเป็นเส้นและตรวจสอบว่าความยาวของแต่ละบรรทัดเท่ากับจำนวนบรรทัดหรือไม่

แก้ไข: ขอบคุณ @xnor เป็นเวลา 4 ไบต์


1
ฉันคิดว่าคุณสามารถใช้allสำหรับการที่จะตัดmap and.
xnor

9

เยลลี่ขนาด 7 ไบต์

ỴµL;L€E

ลองออนไลน์!

คำอธิบาย

Ỵµ       Split the input on newline and use as input in the second link     
  L      Get the number of list items
   ;     And append to that
    L€   A list with the legth of each list item
      E  Check to see if all items are equal.

1
ดูเหมือนว่าลิงค์ TIO ของคุณจะระบุว่าไม่ควรมีการขึ้นบรรทัดใหม่
Pavel

@Phoenix แก้ไข / เปลี่ยนกลับ ...
steenbergh

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

@ คริสเตียนคงที่และสั้นลง ขออภัยด้วยความสับสนฉันเดาว่ามีบางอย่างผิดปกติหลังจากฉันมีวิธีแก้ปัญหาการทำงานและฉันพยายามตีกอล์ฟนั่น ..
steenbergh

9

Japt , 9 ไบต์

=Ur.Q)¥Uy

ทดสอบออนไลน์!

คำอธิบาย

 =Ur.Q)¥ Uy
U=Ur.Q)==Uy
             // Implicit: U = input string, Q = quotation mark
U=    )      // Set U to
  Ur.Q       //   U with each non-newline (/./g) replaced with a quotation mark.
       ==Uy  // Return U == U transposed. U is padded to a rectangle with spaces before
             // transposing; if U was not a rectangle before, or the sides are not of
             // equal length, the result will not be the same as U.
             // Implicit: output result of last expression

การใช้คุณสมบัติบางอย่างที่ใช้งานไม่นานหลังจากโพสต์ความท้าทายนี้สามารถมีขนาด 6 ไบต์

r.Q
¥y

ทดสอบออนไลน์!

คำอธิบาย

       // Implicit: U = input string
r.Q    // Replace each non-newline (/./g) in U with a quotation mark.
       // Newline: set U to the result.
¥      // Return U ==
 y     //   U transposed.
       // Implicit: output result of last expression

ว่าในโลกที่คุณมีเพื่อให้รวดเร็ว?
มนุษย์โดยรวม

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

ดี :) ฉันรู้ว่าyเป็นวิธีแก้ปัญหา แต่ฉันก็เข้ามาไม่กี่ไบต์
Shaggy

" การใช้คุณสมบัติบางอย่างที่ใช้งานไม่นานหลังจากความท้าทายนี้ถูกโพสต์ " - ตอนนี้คุณสามารถโพสต์สิ่งนั้นในฐานะ asnwer ของคุณ
Shaggy

7

เรติน่า , 33 31 ไบต์

.
.
^(.(.)*)(?<-2>¶\1)*$(?(2).)

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


น่าเสียดายที่ผลลัพธ์นี้เป็นจริงสำหรับtestcaseนี้
Kritixi Lithos

@KritixiLithos ฉันเชื่อว่าการส่งนั้นจำเป็นต้องขึ้นบรรทัดใหม่ต่อท้ายในอินพุตซึ่งได้รับอนุญาต
Pavel

นอกจากนี้ฉันเชื่อว่าการใช้\S\n;แทนบรรทัดแรกจะช่วยประหยัดหนึ่งไบต์
Kritixi Lithos

@KritixiLithos ที่จริงแล้วการแทนที่.ด้วยการ.ประหยัดสอง แต่ขอบคุณ
Neil

@ Neil นั่นฉลาดจริงๆ!
Kritixi Lithos

6

Husk , 6 ไบต์

S≡T'a¶

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

คำอธิบาย

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

ในระดับสูงโปรแกรมทำงานดังนี้:

S≡T'a¶  Define a function:
     ¶  split on newlines,
  T'a   transpose and pad to rectangle using character 'a',
 ≡      check if this has the same shape as
S       the split input.

ฟังก์ชั่นการตรวจสอบจริงว่าสองอาร์เรย์มีรูปร่างเหมือนกันและการกระจายขององค์ประกอบความจริงเดียวกัน ใน Husk ตัวละครทั้งหมดยกเว้นไบต์ที่เป็นจริงและจะไม่เกิดขึ้นในอินพุตของเรา นอกจากนี้ยังSเป็นS-Combinatorฟังก์ชั่นที่ใช้เป็นปัจจัยการผลิตทั้งสองฟังก์ชั่นที่นี่และT'aและผลตอบแทนที่ฟังก์ชั่นใหม่ที่แผนที่เพื่อx ≡(x)(T'a x)ผลลัพธ์ของการSประกอบและฟังก์ชั่นนั้นจะใช้กับอินพุตโดยปริยาย

Husk รู้ได้อย่างไรว่าควรนำSไปใช้กับฟังก์ชั่นถัดไป แต่ควรประกอบกับฟังก์ชั่นด้านซ้าย เรียบง่าย: มันแค่พยายามตีความทุกอย่างและเลือกสิ่งที่ประเภทนั้นเหมาะสม นี่คือคำอธิบายในรายละเอียดเพิ่มเติมในเอกสารแกลบ


5

ทุบตีบริสุทธิ์ (ไม่มีสาธารณูปโภค), 55

mapfile -t a
for l in ${a[@]};{
((c+=${#l}^${#a[@]}))
}
  • mapfile อ่านอินพุตลงในอาร์เรย์ a
  • ดังนั้นจำนวนองค์ประกอบของอาเรย์คือ XORed กับความยาวแต่ละบรรทัดและผลรวมที่ได้ สำหรับสี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบผลลัพธ์ XOR แต่ละรายการ (และผลรวมทั้งหมด) จะเป็น 0 สำหรับสิ่งอื่นผลลัพธ์จะเป็น> 0

ความรู้สึกตรงกันข้ามนี้ถูกส่งคืนเป็นรหัสส่งคืนเชลล์ (ตรวจสอบด้วยecho $?) - ช่องสี่เหลี่ยมที่สมบูรณ์แบบคือ 1 สิ่งใดคือ 0

ลองมันออนไลน์ (truthy)

ลองมันออนไลน์ (falsy)


คำตอบก่อนหน้านี้โดยใช้ eval-escape-expansion hell, 78:

mapfile -t a
echo $[0$(eval eval echo +\\$\{#a[{0..$[${#a[@]}-1]}]}^${#a[@]})]

ลองมันออนไลน์ (truthy)

ลองมันออนไลน์ (falsy)


5

Perl 6 , 27 ไบต์

{.lines==all .lines».comb}

ทดสอบว่าจำนวนบรรทัดในอินพุตสตริงเท่ากับจำนวนอักขระในแต่ละบรรทัดหรือไม่


สิ่งนี้จะละเว้นอักขระบรรทัดใหม่หรือไม่
Khaled.K

ใช่การขึ้นบรรทัดใหม่ยังไม่ได้ส่งกลับโดย.linesวิธีการ
Sean

4

Pyth, 7 ไบต์

CImL1.z

ลองที่นี่

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


4

Java (OpenJDK 8) ,96 91 90 87 ไบต์

-5 ไบต์ขอบคุณ @KevinCruijssen
-1 ไบต์ขอบคุณ @TheLethalCoder
-2 ไบต์ขอบคุณ @ OlivierGrégoire

a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)

ลองออนไลน์!


1
คุณสามารถลบช่องว่างที่String[]sและคุณสามารถลบ,0ใน.split("\\n");สำหรับ -3 ไบต์ และเครื่องหมายอัฒภาค / ;ท้ายที่สุดคุณจะไม่ต้องนับดังนั้น -1 โอ้และคุณจะต้องรวมjava.util.ด้านหน้าของArraysฉันกลัว การนำเข้า / การใช้เป็นส่วนหนึ่งของจำนวนไบต์เช่นกัน
Kevin Cruijssen

1
เนื่องจากคุณลืมที่จะรวมถึงjava.util.เพียงปกติสำหรับวงเช่นนี้ดูเหมือนจะสั้นกว่าfor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0; return java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
Kevin Cruijssen

2
มันไม่ใช่แค่\n?
TheLethalCoder

1
การทำซ้ำa.split("\n")จะสั้นกว่าจริง ๆ ! a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
Olivier Grégoire

2
อืมม ... เพิ่มเติมบางส่วนที่มีอยู่รวมทั้งระหว่างและleng th()เห็นได้ชัดว่าพวกเขาปรากฏตัวครั้งแรกหลังจากถ่านที่ 60 จากนั้นทุก ๆ 20 ตัวอักษร
Olivier Grégoire

3

05AB1E , 7 ไบต์

|€gDgQP

ลองออนไลน์!


ชนิดของการโกง imo ที่โดยทั่วไปแล้วจะนำnเข้าแทนที่จะเป็น 1 และทำไมคำตอบเดิมของฉันไม่ทำงาน
Magic Octopus Urn

@carusocomputing ไม่|หมายถึง "ใช้เวลาที่เหลือของอินพุตและแยกตามบรรทัดใหม่" ซึ่งไม่ได้รับหลายอินพุต คุณเพียงแค่ต้องถือว่า STDIN เป็นอินพุตเดียว
Erik the Outgolfer

3

R , 57 ไบต์

function(s)all(nchar(n<-strsplit(s,'
')[[1]])==length(n))

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

ลองออนไลน์!


3

MATL , 14 12 ไบต์

10H&XXot&n=h

สตริงอินพุตถูกกำหนดโดยใช้การต่อสตริง ( [...]) และมีจุดโค้ด10เพื่อแทน LF ตัวอย่างเช่น['aaa' 10 'bb']มีการตีความใน MATL เป็นสตริง'aaa'ตัดแบ่งด้วยตัวอักษรที่มีจุดรหัสต่อกันด้วยเชือก10'bb'

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

ลองออนไลน์!

คำอธิบาย

['4444' 10 '333' 10 '22']พิจารณาการป้อนข้อมูล

10H   % Push 10 (code point of LF). Push 2
      % STACK: 10, 2
&XX   % Regexp with three arguments. First argument is implicit input (string);
      % second is 2, which indicates that we want to split the input; third is
      % 10, which is the character to split on. The result is a cell array of
      % matched strings
      % STACK: {'4444', '333', '22'}
o     % Concatenate into a numeric 2D array of code points, right-padding with
      % zeros if needed
      % STACK: [52 52 52 52; 51 51 51 0; 50 50 0 0]
t&n   % Duplicate. Push number of rows and number of columns
      % STACK: [52 52 52 52; 51 51 51 0; 50 50 0 0], 3, 4
=     % Are they equal?
      % STACK: [52 52 52 52; 51 51 51 0; 50 50 0 0], 0
h     % Concatenate into a row vector (in column-major order). Implicit display
      % STACK: [52 51 50 52 51 50 52 51 0 52 0 0 0]

3

R, 35 ไบต์

all(nchar(x<-scan(,""))==length(x))

รับอินพุตจาก stdin ตรวจสอบว่าจำนวนอักขระในแต่ละบรรทัดเท่ากับจำนวนบรรทัดทั้งหมด ส่งคืนTRUEหรือFALSEตามความเหมาะสม


โปรดทราบว่าอินพุตต้องถูกห่อด้วยเครื่องหมายคำพูดหรืออาจทำให้ช่องว่างในแต่ละบรรทัด
Giuseppe





2

QBICขนาด 43 ไบต์

{_?~_lA||h=h+1┘g=g+_lA|~g%_lA||_Xp]\_xg/h=h

ฉันฉันมีความสุขกับการที่อนุพันธ์ QBasic สั้น ๆ จะได้รับต่อความท้าทายนี้

คำอธิบาย:

{_?       DO infinitely: ask the user for input, store as A$
~    |    IF
 _lA|       The length of A$   (implicitly <> 0)
h=h+1     Add 1 to our line counter
┘         (syntactic linebreak)
g=g+_lA|  Add the length of this line to the running total of line lengths
~      |  IF
 g%_lA|     The length of the running total modulo the length of the last string
            yields anything but 0, there is a discrepancy between earlier line
            lengths and this one.
_Xp]      THEN QUIT, printing 0, end IF
\         ELSE (refers to the LEN(A$), user didn't input anything.
_xg/h=h   QUIT (the inf. loop) printing -1 if the root of the chars is the row count
            or 0 if not.

2

Pyth, 7 ไบต์

qCC.z.z

สาธิต

ย้ายอินพุตด้วยการตัดทอนสองครั้งจากนั้นตรวจสอบว่าผลลัพธ์เหมือนเดิมหรือไม่


2

Ruby, 50 ไบต์

s=$<.read.split $/,-1;p [s.size]==s.map(&:size)|[]

ลองออนไลน์!

คำอธิบาย

  1. แยกอินพุตออกเป็นอาร์เรย์ในบรรทัดใหม่
  2. ยืนยันว่าอาร์เรย์ที่มีเฉพาะขนาดของอาร์เรย์นี้จะเท่ากับอาร์เรย์ที่มีขนาดทั้งหมด uniq (ชุดการรวมกับอาร์เรย์ว่าง) ขององค์ประกอบทั้งหมดในอาร์เรย์นี้

1
บันทึกตัวละครด้วย .split($/,-1);->.split $/,-1;
Christopher Lates

ประหยัดมากขึ้นโดยใช้linesแทนreadแล้วsplit(แต่คุณต้องเพิ่ม 1 sizeเนื่องจากบรรทัดมีบรรทัดขึ้นบรรทัดใหม่)
GB


1

Clojure, 58 ไบต์

#(let[s(re-seq #"[^\n]+"%)c count](apply =(c s)(map c s)))

ต้องขึ้นบรรทัดใหม่ตามด้วยการรอคอยที่จะเห็นบางสิ่งที่น่าอัศจรรย์ยิ่งขึ้น


1

APL (Dyalog)ขนาด 17 ไบต์

ต้องใช้⎕ML←3ซึ่งเป็นค่าเริ่มต้นในหลาย ๆ ระบบ ใช้ CR

↓∘⎕FMT≡⎕TC[2]∘≠⊂⊢

ลองออนไลน์!

↓∘⎕FMT [เป็น] แยกออกเป็นสายFหรือm เสื้อ ted ลง-a-ตารางอาร์กิวเมนต์

 เหมือนกับ

⎕TC[2]∘≠ เข้าสู่กลุ่มของที่ไม่ขึ้นบรรทัดใหม่ * -characters

 แบ่งพาร์ติชัน

 ข้อโต้แย้ง?

* องค์ประกอบที่สองของรายการตัวอักษรT erminal C ontrol


ในรุ่น 16.0 หนึ่งสามารถเขียนด้วย↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢⎕ML←1


อยากรู้อยากเห็นอะไร⎕ML?
Pavel

1
@Phoenix ใน Dyalog APL และ APL + M igration L Evelเป็นมาตรการหยาบสำหรับการเคลื่อนไหววิภาษในทิศทางของไอบีเอ็ม APL2 ยิ่งจำนวนสูงขึ้นภาษาที่เหมือนกันของ APL2 ก็จะยิ่งมากขึ้น คนที่ย้ายจาก APL2 เพื่อ APLs อื่น ๆ มีแนวโน้มที่จะทำงานกับสูง⎕MLในขณะที่คนที่เริ่มต้นด้วยการ APLs อื่น ๆ ⎕MLมีแนวโน้มที่จะทำงานกับต่ำ
อดัม

1

PowerShell, 64 ไบต์

วิธีเดียวกัน (แยก, ความยาวบรรทัด, จำนวนบรรทัด) เหมือนกับคำตอบภาษาอื่นที่ไม่ใช่กอล์ฟ แต่ไม่มีแผนที่ที่ดีเทียบเท่า () ดังนั้นจึงเป็นอาร์เรย์ของความยาวบรรทัดที่มีจำนวนบรรทัดที่ติดแท็กไปยังจุดสิ้นสุดจากนั้นอาร์เรย์นั้น ถูกจัดกลุ่ม สแควร์สออกมาเหมือน3,3,3,3 -> 1 group, all line lengths and line count were equalและไม่ใช่สแควร์สออกมา3,2,1 -> 3 groupsมีบางอย่างไม่เท่ากันในสแควร์:

$f={@(@(($L="$args"-split"`n")|% le*)+$L.Count|group).Count-eq1}

ต้องขึ้นบรรทัดใหม่ในตอนท้ายสไตล์ลินุกซ์ไม่มีการขึ้นบรรทัดใหม่ เช่น

$Ttests = @(@'
foo
bar
baz
'@,
'.',
@'
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
'@
)
$Ttests = $Ttests | foreach {$_ -replace "`r"}

$Ttests | % { & $f $_ }

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

ฉันหวังว่ามันอาจจะสั้นกว่าที่จะแทนที่ตัวละครทั้งหมดด้วย 'a' จากนั้นเดรัจฉานบังคับจาก 1 เป็นความยาวอินพุตสี่เหลี่ยมทั้งหมด 'a' และดูว่ามีการจับคู่อินพุตหรือไม่ เมื่อฉันได้รับ param ที่ผ่านมา () และ. ความยาวและ -join และ -replace มันจะจบลงที่ความยาว 81 ไบต์:

$f={param($s)!!(1..$s.Length|?{,('a'*$_)*$_-join"`n"-eq($s-replace"[^`n]",'a')})}

1

สิ่งสกปรก 11 ไบต์

e`.|_./+/.+

พิมพ์1สำหรับสี่เหลี่ยมและ0ไม่ใช่สี่เหลี่ยม ลองออนไลน์!

คำอธิบาย

คำอธิบายโดยละเอียดสามารถพบได้ในหน้าบทช่วยสอน Grimeซึ่งมีตัวอย่างโปรแกรมที่แน่นอนนี้

e`.|_./+/.+
e`            Match entire input against pattern:
  .           A single character
   |          OR
    _         a recursive match of this pattern
     ./+      with one column of characters on its right
        /     and below that
         .+   one row of characters.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.