Xác minh một văn bản bằng cách thêm khoảng trắng


10

Đưa ra văn bản này

Lorem ipsum dolor ngồi amet, consectetur adipisinating elit, sed do eiusmod TIME incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud tập thể dục ullamco labis nisi ut aliquip ex ea Vendo result. Duis aute irure dolor in repimpenderit in voluptate esse cillum dolore eu fugiat nulla pariatur. Ngoại trừ sint thỉnh thoảng cupidatat không phải là người bình thường, sunt in culpa qui docia deserunt mollit anim id est labum.

viết chương trình ngắn nhất tạo ra cùng một văn bản với 80 ký tự. Văn bản trên phải chính xác như sau:

Lorem ipsum dolor sit amet,  consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut  labore et  dolore magna aliqua.  Ut  enim ad  minim veniam,  quis
nostrud exercitation ullamco laboris nisi ut  aliquip ex  ea  commodo consequat.
Duis aute irure dolor in  reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident,  sunt in
culpa qui officia deserunt mollit anim id est laborum.

Quy tắc:

  • từ không được cắt
  • không gian thêm phải được thêm vào
    • sau một dấu chấm.
    • sau dấu phẩy
    • sau từ ngắn nhất (từ trái sang phải)
    • kết quả không được có nhiều hơn 2 khoảng trắng liên tiếp
  • dòng cuối cùng là không chính đáng.
  • các dòng không được bắt đầu bằng dấu phẩy hoặc dấu chấm.
  • cung cấp đầu ra của chương trình của bạn

người chiến thắng: Chương trình ngắn nhất.

lưu ý: Chuỗi đầu vào được cung cấp trên STDIN dưới dạng một dòng (không có nguồn cấp dữ liệu hoặc trả về vận chuyển)

cập nhật:

Chuỗi đầu vào có thể là bất kỳ văn bản nào có độ dài từ hợp lý (nghĩa là không quá 20 ~ 25 char), chẳng hạn như:

Lorem ipsum dolor ngồi amet, consitetur adipiscing elit. Sed không risus. Suspendisse traus tortor, dignissim ngồi amet, adipiscing nec, ultricies sed, dolor. Cras Elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Prot porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, hệ quả trong, Pretium a, enim. Pellentesque congue. Ut trong risus volutpat Libero pharetra tạm thời. Cras vestibulum bibendum augue. Lời khen ngợi eestas leo trong pede. Lời khen blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis trong faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, eestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Số nguyên id felis. Curabitur aliquet viên diam. Số nguyên quis metus vitae elit lobortis eestas. Lorem ipsum dolor ngồi amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis scriptsicula. Nulla et sapien. Integer tortor Tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non Elementum posuere, metus purus iaculis speechus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu speechus. Fusce Vulputate sem tại sapien. Vivamus leo. Aliquam euismod Libero eu enim. Nulla nec felis sed leo placerat không hoàn hảo. Aenean suscipit nulla trong justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curu eu amet.


3
Tại sao yêu cầu mọi người cung cấp đầu ra của chương trình của họ? Bạn có lo lắng về việc mọi người không kiểm tra kết quả của họ trước khi đăng không?
Peter Taylor

1
Tôi muốn cung cấp một chương trình php bao gồm văn bản đầu ra. ;-) Nghiêm túc mà nói, các khoảng trắng trên dòng thứ hai của văn bản đầu ra dường như đã được thêm vào các khoảng trắng một cách ngẫu nhiên? Có một số mẫu mà tôi không nhìn thấy, và nếu không, làm thế nào chúng ta có thể được dự kiến ​​sẽ sản xuất chính xác đầu ra đó cho đầu vào đã cho?
Gareth

@Gareth: Xin lỗi, xấu của tôi. Tôi đã phạm một sai lầm, là sau dấu phẩy, không phải sau khi phát sinh. Câu hỏi được chỉnh sửa.
Toto

@Peter Taylor: Chỉ vì tôi không thể kiểm tra tất cả các ngôn ngữ.
Toto

1
@Ilmari Karonen: Vâng, chuỗi đầu vào có thể là bất cứ điều gì.
Toto

Câu trả lời:


5

Perl, 94 ký tự

for(/(.{0,80}\s)/g){$i=1;$i+=!s/^(.*?\.|.*?,|(.*? )??\S{$i}) \b/$1  /until/
|.{81}/;chop;say}

Chạy với perl -nM5.01. ( nĐược bao gồm trong số lượng nhân vật.)

Đoạn mã trên là đoạn ngắn nhất tôi có thể thực hiện để có thể xử lý bất kỳ đường cong nào tôi đã ném vào nó (chẳng hạn như các từ một chữ cái ở đầu một dòng, các dòng đầu vào chính xác dài 80 ký tự, v.v.) chính xác theo thông số:

Lorem ipsum dolor sit amet,  consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut  labore et  dolore magna aliqua.  Ut  enim ad  minim veniam,  quis
nostrud exercitation ullamco laboris nisi ut  aliquip ex  ea  commodo consequat.
Duis aute irure dolor in  reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident,  sunt in
culpa qui officia deserunt mollit anim id est laborum.

I'm  tempted to  provide a  php  program which consists of  the output text. ;-)
Seriously though,  the spaces on the second line of the output text seem to have
been added to  the spaces at  random? Is  there some pattern to  it that I'm not
seeing,  and if  not,  how can we be expected to produce exactly that output for
the given input?

(Với lời xin lỗi đến Gareth vì đã sử dụng nhận xét của mình làm đầu vào kiểm tra bổ sung.)

Phiên bản 75 char sau đây hoạt động đủ tốt để tạo đầu ra mẫu từ đầu vào mẫu, nhưng có thể thất bại cho các đầu vào khác. Ngoài ra, nó để lại một ký tự khoảng trắng thừa ở cuối mỗi dòng đầu ra.

for(/(.{0,80}\s)/g){s/(.*?\.|.*?,|.*? ..) \b/$1  /until/.{81}/||s/
//;say}

Cả hai phiên bản sẽ lặp lại mãi mãi nếu chúng gặp phải đầu vào mà chúng không thể biện minh chính xác. (Trong phiên bản dài hơn, thay thế untilbằng until$i>80||sẽ khắc phục điều đó với chi phí thêm bảy ký tự.)


Ah, tôi nên bắt đầu với một giải pháp perl ;-) Ngôn ngữ này tất nhiên thực sự tốt cho một nhiệm vụ như vậy.
Howard

Tôi đã nhận được Quantifier in {,} bigger than 32766 in regex; marked by <-- HERE in m/^(.*?\.|.*?,|(.*? )??\S{ <-- HERE 32767}) \b/cho văn bản thứ hai.
Toto

@ M42: Đó là vì văn bản ví dụ thứ hai không thể được chứng minh theo các quy tắc. Nếu tôi thêm vào $i>80kiểm tra, nó sẽ mở rộng dòng thứ 11 thành pede  pellentesque  fermentum.  Maecenas  adipiscing  ante  non  diam  sodales, chỉ dài 78 ký tự, và sau đó bỏ cuộc vì mỗi từ (ngoại trừ dòng cuối cùng) được theo sau bởi hai khoảng trắng.
Ilmari Karonen

2

Ruby, 146 ký tự

$><<gets.gsub(/(.{,80})( |$)/){$2>""?(s=$1+$/;(['\.',?,]+(1..80).map{|l|"\\b\\w{#{l}}"}).any?{|x|s.sub! /#{x} (?=\w)/,'\& '}while s.size<81;s):$1}

Nó in chính xác đầu ra mong muốn (xem bên dưới) nếu văn bản đã cho được đưa vào STDIN.

Lorem ipsum dolor sit amet,  consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut  labore et  dolore magna aliqua.  Ut  enim ad  minim veniam,  quis
nostrud exercitation ullamco laboris nisi ut  aliquip ex  ea  commodo consequat.
Duis aute irure dolor in  reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non proident,  sunt in
culpa qui officia deserunt mollit anim id est laborum.

Chỉnh sửa: Ngay sau khi gửi giải pháp đầu tiên của tôi, tôi đã thấy trong các nhận xét rằng cần phải xử lý bất kỳ chuỗi đầu vào nào. Câu trả lời trước chỉ có 95 ký tự nhưng không đáp ứng yêu cầu này:

r=gets.split;l=0;'49231227217b6'.chars{|s|r[l+=s.hex]+=' '};(r*' ').gsub(/(.{,80}) ?/){puts $1}

Nếu tôi không nhầm, bạn đang sử dụng cùng một mánh gian lận như tôi nghĩ (mã hóa vị trí của các từ có khoảng cách gấp đôi trong đầu ra ví dụ). Lưu ý rằng M42 đã làm rõ rằng các chương trình cũng nên đối phó với các đầu vào khác.
Ilmari Karonen

@Ilmari Karonen Vâng, tôi đã thấy điều đó sau khi gửi. Xem chỉnh sửa và ý kiến ​​của tôi ở trên. Quay trở lại sân golf ...
Howard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.