Là từ này theo thứ tự từ điển?


44

Cho một chuỗi đầu vào S, trả về truthynếu tất cả các chữ cái trong S được sắp xếp theo thứ tự: các giá trị ASCII của chúng cần phải theo thứ tự tăng dần hoặc giảm dần. Trả lại falsytrong các trường hợp khác.

Đầu vào

  • Đầu vào sẽ trong cùng một trường hợp (tất cả chữ hoa hoặc chữ thường). Trình của bạn sẽ có thể xử lý cả hai.
  • Đầu vào sẽ bao gồm ASCII trong phạm vi [A-Za-z]chỉ
  • Độ dài đầu vào sẽ tối thiểu là 1, tối đa bằng bất cứ thứ gì ngôn ngữ của bạn hỗ trợ.
  • Đầu vào là một chuỗi - không phải là danh sách các ký tự, không phải là một mảng các mã hóa ASCII.

Đầu ra

  • Đầu ra nên truehay false, hoặc 0/1, hoặc bất kỳ khác biệt khác true / falsera phong cách ngôn ngữ của bạn có thể cung cấp.
  • Tất cả các trường hợp đúng cần phải có cùng một đầu ra, cũng như tất cả các trường hợp sai. Không "Sai là 0, đúng là 1, 2 hoặc 3".

Quy tắc bổ sung

  • Sơ hở tiêu chuẩn bị cấm
  • Câu trả lời phải là một chương trình đầy đủ hoặc một chức năng, không phải là một đoạn trích hoặc một mục REPL.
  • , câu trả lời ngắn nhất trong byte thắng.

Các trường hợp thử nghiệm

Sự thật

"ABCDEF"
"ZYX"
"no"
"tree"   --> the multiple 'e's don't break the order
"q"

Giả

"ABCDC"
"yes"
"deed"

không hợp lệ

"Hello" --> invalid input - mixed case-, does not have to be handled
""      --> invalid input - length 0-, does not have to be handled
"\n
  "     --> invalid input - newline is not in range [A-Za-z]-, does not have to be handled

1
Bạn có thể làm rõ về đầu ra: giá trị trung thực cần phải giống nhau bất kể đầu vào nào được đưa ra?
Mèo kinh doanh

1
@BusinessCat Tôi đã thêm một giải thích.
steenbergh

Điều gì xảy ra nếu ngôn ngữ của bạn thực hiện một chuỗi là một danh sách các ký tự? Nhiều câu trả lời được đăng ở đây đang sử dụng các ngôn ngữ như vậy ...
theonlygusti

1
Nếu bạn thực sự muốn các giá trị riêng biệt cho Đúng và Sai, bạn không nên nói truthyhoặc falsy. Điều này ngụ ý rằng bất kỳ giá trị nào đánh giá truehoặc falseđược cho phép.
FlipTack

Câu trả lời:


8

05AB1E , 5 byte

Â)¤{å

Hãy thử trực tuyến!

Giải trình

Â)     # pair the input with it's reverse in a list
  ¤{   # get a copy of the reverse and sort it
    å  # check if the sorted copy is in the list of [input,reverse_input]

{¹åcho 4, xóa câu trả lời của tôi. Không nhận thấy việc sử dụng bifurcate, của tôi quá giống nhau.
Bạch tuộc ma thuật Urn

@carusocomputing: thật không may, chỉ kiểm tra xem đầu vào có ngược với đầu vào được sắp xếp không.
Emigna

Hoặc bằng với đầu vào được sắp xếp. aba => ['aab', 'baa'] => is in? => 0| aab => same => 1
Bạch tuộc ma thuật Urn

@carusocomputing: Đầu vào được sắp xếp bị bỏ qua vì nó nằm dưới đảo ngược trên ngăn xếp. Bạn không bao giờ ghép chúng trong một danh sách.
Emigna

Sản phẩm bọc bifurcate có thể tuyên thệ; nvm, mặc kệ tôi
Bạch tuộc ma thuật Urn


13

Haskell , 33 byte

(%)=scanl1
f s=s==max%s||s==min%s

Hãy thử trực tuyến!

Cảm ơn Ørjan Johansen cho 1 byte với hàm bí danh scanl1.

Haskell là một ngôn ngữ thú vị cho các thử thách dựa trên phân loại golf bởi vì nó không có sắp xếp tích hợp, kéo dài import Data.List. Điều này khuyến khích việc tìm cách thực hiện nhiệm vụ bằng tay mà không cần sắp xếp rõ ràng.

Mã sử ​​dụng scanl1, gấp một thao tác trên danh sách từ trái sang phải, theo dõi các kết quả trung gian. Vì vậy, scanl1 maxcó tác dụng liệt kê cực đại tích lũy của danh sách, tức là cực đại của các tiền tố dài hơn dần dần. Ví dụ , scanl1 max [3,1,2,5,4] == [3,3,3,5,5].

Tương tự với minviệc kiểm tra xem danh sách có giảm không. Mã kiểm tra hai trường hợp và kết hợp chúng với ||.

So sánh với các biểu thức khác:

(%)=scanl1;f s=s==max%s||s==min%s

f s=or[s==scanl1 q s|q<-[min,max]]
f s=s==scanl1 max s||s==scanl1 min s
f s=any(\q->scanl1 q s==s)[min,max]
f s=any((==s).(`scanl1`s))[min,max]
f s=elem s$(`scanl1`s)<$>[min,max]

Thực tế phiên bản của bạn với ||chiến thắng nếu bạn xác định (?)=scanl1.
Ørjan Johansen

11

Perl 6 , 25 byte

{[le] .comb or[ge] .comb}

Làm thế nào nó hoạt động:

  • .comb chia đầu vào thành một chuỗi các ký tự.
  • legelà các toán tử so sánh chuỗi "ít hơn hoặc bằng""lớn hơn hoặc bằng" .
  • [ ]xung quanh một toán tử infix, làm giảm ("nếp gấp") danh sách đối số với toán tử đó. (Nó đủ thông minh để trả về True nếu đầu vào chỉ có 0 hoặc một ký tự.)
  • or trả về True nếu các biểu thức ở hai bên của nó là đúng.

10

JavaScript (ES6), 43 byte

([...s],q=s+"")=>q==s.sort()|q==s.reverse()

Không biết bạn có thể sửa đổi các biến trong chính đối số. Đẹp!
Lu-ca

1
@Luke Đây chỉ là một cách sử dụng khéo léo các tham số mặc định : nếu bạn gọi hàm bằng đối số thứ hai, qthay vào đó sẽ được đặt thành giá trị đó.
Sản phẩm ETH

Tôi thực sự có nghĩa là toán tử lây lan (trong trường hợp này) chuyển đổi nó thành một mảng ngay lập tức.
Luke

Ồ được thôi. Vâng, phá hủy các bài tập cũng thực sự tiện dụng ;-)
ETHproductions 30/1/2017

Khéo léo sử dụng đột biến .sort()để sắp xếp ngầm trong reverseséc
Cyoce

7

MATL , 7 byte

dZSuz2<

Hãy thử trực tuyến! Hoặc xác minh tất cả các trường hợp thử nghiệm .

d     % Implicitly input string. Push array of consecutive differences of code points
ZS    % Sign. Transforms each entry into 1, 0 or -1
u     % Unique
z     % Number of nonzeros
2<    % Is it less than 2? Implicit display

Nó trả về đúng cho tất cả các trường hợp không hợp lệ
Patrick Bard

1
@PatrickBard Theo hướng dẫn, không ai trong số họ cần phải xử lý.
Suever

6

Clojure, 47 byte

#(let[c(map int %)a apply](or(a <= c)(a >= c)))

Không thể tìm ra cách quyết định áp dụng chính xác toán tử nào. Điều đó thật tuyệt.
Carcigenicate

Đợi bạn có thể đặt tên hàm dựng sẵn vào các biến trong Clojure không? Huh, thật tuyệt. Nó làm cho <=>=nhìn infix mặc dù, đó là thực sự kỳ lạ.
clismique

(let[+ *](+ 2 3))= 6: D Nó hoạt động trên bất kỳ chức năng nào nhưng dường như không phải trên macro: "Không thể lấy giá trị của macro"
NikoNyrh

6

C (gcc) , 70 byte

o(s,a)char*s;{for(a=0;s[1];s++)a|=s[1]-*s&64|*s-s[1]&32;return a!=96;}

Tôi đã hy vọng tìm ra một giải pháp ngắn hơn dựa trên hàm đệ quy, nhưng nó không hoạt động do yêu cầu đầu ra. Vì vậy, đây là một cách tiếp cận bắt buộc. Ít nhất, ưu tiên toán tử của C hoạt động độc đáo cho câu lệnh vòng lặp bên trong.

Hãy thử trực tuyến!


6

R, 48 50 61 byte

Là một chức năng không tên

function(s)sd(range(sign(diff(utf8ToInt(s)))))<1

Cảm ơn @guiseppe cho một vài byte bổ sung.

charToRawmất svà chia thành một vector thô. Điều này được chuyển đổi thành số nguyên và diffáp dụng. signlàm cho các khác biệt một đơn vị. rangegiảm vector đến mức tối thiểu và tối đa của nó. Sau đó, nếu độ lệch chuẩn sdnhỏ hơn 1 thì đó là TRUE

Hãy thử trực tuyến!


Bạn có thể lưu 9 byte bằng cách sử dụng function(s,d=utf8ToInt(s))all(d==sort(d))hoặcfunction(s,d=utf8ToInt(s))!is.unsorted(d)
mnel

Hoặc giảm xuống còn 34 byte với!is.unsorted(utf8ToInt(scan(,'')))
mnel

@mnel không may những cái này không xử lý sắp xếp ngược lại, ví dụ như cbacái cuối cùng sẽ yêu cầu cat()phải biến nó thành một chương trình đầy đủ
MickyT

Lưu 5 byte với function(s)all(!diff(order(utf8ToInt(s)),,2))(cũng hoạt động với sắp xếp ngược lại!)
mnel

@mnel xin lỗi lần nữa, điều đó không thành côngtree
MickyT

5

MATL, 8 byte

tPvGSXma

Hãy thử trực tuyến!

Giải trình

        % Implicitly grab the input as a string
tP      % Create a copy that is reversed
v       % Vertically concatenate these
GS      % Grab the input again and sort it
Xm      % Check if each row of the normal and reversed matrix is equal to the sorted one
a       % Check if either row matched
        % Implicitly display the result

Đẹp, nhưng nó trả về đúng cho '\n''Hello': /
Patrick Bard

1
@PatrickBard Đầu vào sẽ là tất cả các trường hợp tương tự và sẽ chỉ được [A-Za-z]nêu trong bài viết ban đầu. Chúng nằm trong phần "không hợp lệ" vì rõ ràng chúng không cần phải xử lý.
Suever

5

Thạch , 4 5 byte

Ṣm0ẇ@

Hãy thử trực tuyến!

Ban đầu là Ṣm0wở bốn byte.

Giải trình

Ṣm0ẇ@  Input: string S
Ṣ      Sort S
 m0    Concatenate sort(S) with reverse(sort(S))
   ẇ@  Sublist exists? Check if S is contained in the previous result

Tôi chắc chắn đã có bốn byter, nhưng không thể nghĩ về nó!
Jonathan Allan

1
... Thật không may, OP đã làm rõ đầu ra không phải là sự thật / giả, mà là hai giá trị riêng biệt. Bốn byte vẫn có thể với mặc dù, tôi tin. Chỉnh sửa: ugh Ṣm0ẇ@.
Jonathan Allan

@Jonathan ALLan Thật không may vì nó đã đáp ứng quy tắc ban đầu là sử dụng phong cách đúng / sai của ngôn ngữ. Một hình thức khác có thể là Ṣẇm0$. Nếu trình tự lập luận là không khác nhau cho w...
dặm

Đẹp, nhưng nó trả về đúng giá trị không hợp lệ
Patrick Bard

@PatrickBard Huh? '\n''Hello'là giá trị hoàn toàn hợp lệ.
Erik the Outgolfer

5

Toán học, 33 byte

0<=##||##>=0&@@ToCharacterCode@#&

Dựa trên mẹo này . Thật không may, tôi phải sử dụng ToCharacterCodethay vì Characters, <=>=không so sánh các chuỗi.


4

PowerShell , 61 byte

param($a)$a-in-join(($b=[char[]]$a)|sort),-join($b|sort -des)

Hãy thử trực tuyến!

Đưa đầu vào $a, sau đó kiểm tra xem đó có phải là -inmảng hai thành phần không. Mảng được hình thành bằng cách lấy $a, đúc nó thành một char-array, lưu trữ nó $bđể sau này, đưa nó vào sort-objectđó sắp xếp theo từ vựng. Các yếu tố khác được $bsắp xếp theo -desthứ tự.


4

Perl , 35 byte

Đã lưu 4 byte nhờ @Xcali trực tiếp và 4 gián tiếp nữa.

31 byte mã + -pFcờ.

@b=reverse@a=sort@F;$_=/@a|@b/x

Hãy thử trực tuyến!

Mã sắp xếp đầu vào và kiểm tra xem đầu vào có khớp với chính nó được sắp xếp không (hoặc theo thứ tự ngược lại).


Phương pháp hơi khác nhau, nhưng cắt giảm xuống còn 38 byte: Hãy thử trực tuyến!
Xcali

@Xcali Rất đẹp, cảm ơn. Sau đó, chúng ta có thể loại bỏ $"=$,và sử dụng công cụ /xsửa đổi để tiết kiệm thêm 5 byte.
Dada


3

Bash + coreutils, 59 byte

f()(sed 's/\(.\)/\1\
/g'<<<$s|grep .|sort -c$1)
s=$1
f||f r

Chuỗi đầu vào được truyền dưới dạng đối số.

Đầu ra được trả về trong mã thoát (0 cho sự thật, 1 cho sai, như thường lệ), như được cho phép bởi các phương thức I / O của PPCG .


3

PHP, 66 byte

$a=$s=$r=str_split($argv[1]);sort($s);rsort($r);echo$s==$a|$r==$a;

lấy đầu vào từ đối số dòng lệnh. Chạy với -r.



3

Vợt , 93 byte

(define(f s)(let([t(string->list s)])(or(equal?(sort t char<=?)t)(equal?(sort t char>=?)t))))

Hãy thử trực tuyến!

Ung dung:

(define (lex-sorted? string)
  (let ([char-list (string->list string)])
    (or
     (equal? (sort char-list char<=?) char-list)
     (equal? (sort char-list char>=?) char-list))))

Sử dụng sắp xếp sau đó so sánh với cách tiếp cận ban đầu


3

Brachylog , 5 byte

Tôi đã cố gắng tìm một giải pháp 4 byte nhưng không thành công, vì vậy bây giờ đây là giải pháp 5 byte thú vị nhất mà tôi đã tìm thấy:

:No₎?

Hãy thử trực tuyến!

o, chức năng đặt hàng, có thể lấy một tham số: 0có nghĩa là thứ tự tăng dần, 1có nghĩa là thứ tự giảm dần. Chúng tôi đặt tham số đó thành một biến không liên kết N. Brachylog sẽ thử các giá trị khác nhau cho N(chỉ 0hoặc 1có thể), cố gắng thống nhất kết quả với đầu vào và trả về bất kỳ thử nào trong số những lần thử đó đã thành công.


Có vẻ như không còn hoạt động :( o?|o₁?hoạt động cho một byte thêm
hakr14

Có vẻ hoạt động nếu bạn thay thế dấu hai chấm bằng dấu chấm phẩy. Một biến thể dài hơn một byte sẽ là o{|↔}?.
Chuỗi không liên quan


2

JavaScript (ES6) 74 62 50 47 43 byte

([...a],b=a+'')=>b==a.sort()|b==a.reverse()

Sau khi chơi golf và sửa lỗi, câu trả lời này cuối cùng cũng giống như của ETH Producttion, vì vậy vui lòng kiểm tra câu trả lời của anh ấy và đưa ra câu trả lời +1.


Đã sửa lỗi ..
Luke

1
Bạn bắt gặp tôi, tôi đã đăng bình luận trước khi chỉnh sửa ...
Luke

Tôi đã tìm ra nguyên nhân của lỗi và bây giờ tôi đã sửa nó bằng cách sắp xếp mọi thứ một cách khéo léo ...
Luke

Lỗi đã trở lại ... repl.it/FZrs/2
steenbergh

1
Chà, bây giờ đây là câu trả lời của @ ETH Producttion khá nhiều, vì vậy tôi đã thêm một thông báo. Xin +1anh trả lời.
Lu-ca

2

Haskell, 54 50 byte

t a=or[and(zipWith(<=)`f`tail$a)|f<-[(=<<),(<*>)]]

Ví dụ sử dụng: t "defggh"-> True. Hãy thử trực tuyến! .

Có thể sử dụng sortlike có thể các câu trả lời khác ngắn hơn mặc dù nó yêu cầu import Data.List. Đây là một cách tiếp cận khác:

Đối với mọi hàm ftừ [(=<<),(<*>)], tính toán and(zipWith(<=)`f`tail$a)và yêu cầu bất kỳ kết quả nào True. Các chức năng là

((=<<) (zipWith(<=)) tail) a
((<*>) (zipWith(<=)) tail) a

mà cả hai thực hiện so sánh các yếu tố hàng xóm của danh sách đầu vào avới <=, nhưng một với những lập luận lộn kết quả trong một >=. andkiểm tra nếu tất cả các so sánh là True.


2

Đẩy , 7 byte

ogoGo|#

Hãy thử trực tuyến!

Giải trình:

      \ Implicit: Input on stack as charcodes
og    \ Check if the stack is sorted ascendingly (Push 0/1)
oG    \ Check if the stack is sorted descendingly (Push 0/1)
      \   - Note that this will work regardless of the first check, as input
      \     is guaranteed to be /[A-Za-z]+/
o|    \ Bitwise OR
#     \ Print the result

Điều này không trả về một giá trị thật khác biệt.
steenbergh

1
@steenbergh Không, nhưng nó đáp ứng của chúng tôi đồng thuận meta vào những gì đếm như truthy hoặc falsy - 12đang Truetrong Pushy, trong khi 0False.
FlipTack

Nếu Pushy có toán tử OR bitwise, thì nó sẽ hoạt động thay thế.
Sản phẩm ETH

@FlipTack Tôi nghĩ rằng điều đó rõ ràng trong thử thách, nhưng giờ tôi đã làm cho nó cụ thể hơn: TRUE phải xuất cùng một giá trị trên tất cả các testcase. Tương tự với FALSE.
steenbergh

@steenbergh Sự đồng thuận meta là có lý do và có ý nghĩa, nhưng nếu bạn khăng khăng ...
FlipTack

2

Bình thường, 5 byte

}Q_BS

Một chương trình lấy đầu vào của một "quoted string"và in TruehoặcFalse khi thích hợp.

Bộ kiểm tra

Làm thế nào nó hoạt động

}Q_BS   Program. Input: Q
}Q_BSQ  Implicit variable fill
 Q      Is Q
}       in
    SQ  Q sorted
   B    or
  _     Q sorted reversed?
        Implicitly print

Bạn có thể lưu một byte (và trở thành câu trả lời ngắn nhất) bằng cách thay thế }Qbằng /, sử dụng ẩn Q.
isaacg


2

GNU sed, 97 + 1 (cờ r) = 98 byte

Nếu các chữ cái được sắp xếp, kịch bản trả về 1, nếu không 0. Trong sed không có loại dữ liệu.

s:$: zyxwvutsrqponmlkjihgfedcba:
s:(.*(.)(.).* ).*\2.*\3.*:\1abcdefghijklmnopqrstuvwxyz:i
//c0
c1

Để kiểm tra xem tất cả các chữ cái có được sắp xếp theo thứ tự tăng dần hay không, tôi thực hiện tra cứu bảng của từng cặp chữ cái liên tiếp trong một bảng chữ cái giảm dần, đó là tôi cố gắng tìm một ví dụ ngược. Lưu ý rằng //thực sự lặp lại trận đấu biểu thức chính quy cuối cùng! (xem dòng 2 và 3)

Chạy ví dụ: tập lệnh có thể kiểm tra nhiều từ đầu vào, mỗi từ trên một dòng

me@LCARS:/PPCG$ echo -e "tree\nABCDC" | sed -rf word_ordered.sed
1
0

2

CJam , 12 11 byte

q_$_W%+\#)g

Hãy thử trực tuyến!

Giải trình

q            Push the input
 _$          Duplicate and sort
   _W%       Duplicate and reverse
      +      Concatenate the sorted and the reversed strings
       \     Bring input to the top
        #    Find the index of the input in the other string; returns -1 if not found
         )   Increment
          g  Signum (coerces to 0 or 1)

2

Mã máy 8086, 68 61 48 46 45 39 byte

00000000  b2 31 be 82 00 ac 9f 88  c3 ac 3c 0d 74 14 38 c3  |.1........<.t.8.|
00000010  74 f5 e3 03 b1 00 9f 77  05 9e 76 ea eb 03 9e 77  |t......w..v....w|
00000020  e5 4a b4 02 cd 21 c3                              |.J...!.|
00000027

Lắp ráp từ:

org 0x100
use16
    mov dl, 0x31
    mov si, 0x82
    lodsb
a:  lahf
b:  mov bl, al
    lodsb
    cmp al, 0x0d
    je y
    cmp bl, al
    je b
    jcxz @f
    mov cl, 0
    lahf
@@: ja @f
    sahf
    jbe a
    jmp n
@@: sahf
    ja a
n:  dec dx
y:  mov ah, 0x02
    int '!'
    ret

2

Scala, 47 byte

def f(x:String)=x==x.sorted|x==x.sorted.reverse
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.