이 단어가 Lexically Ordered입니까?


44

입력 문자열 S가 주어지면 S의 truthy모든 문자가 사전 순으로 정렬되면 ASCII 값이 오름차순 또는 내림차순이어야합니다. falsy다른 경우에는 반환하십시오 .

입력

  • 입력은 같은 경우입니다 (모두 대문자 또는 모두 소문자). 제출물이 두 가지를 모두 처리 할 수 ​​있어야합니다.
  • 입력은 범위 내 [A-Za-z]에서만 ASCII로 구성 됩니다.
  • 입력 길이는 언어가 지원하는 최대 값까지 1 이상입니다.
  • 입력은 문자열이며 문자 목록이 아니며 ASCII 코드 포인트 배열이 아닙니다.

산출

  • 출력은 true또는 false, 또는 또는 언어가 제공 할 수 0/1있는 다른 고유 한 true / false스타일 출력이어야 합니다.
  • 모든 실제 사례는 모든 잘못된 사례와 동일한 결과를 가져야합니다. 아니오 "거짓은 0, 참은 1, 2 또는 3"입니다.

추가 규칙

  • 표준 허점 은 금지되어 있습니다
  • 답변은 스 니펫이나 REPL 항목이 아닌 전체 프로그램 또는 기능이어야합니다.
  • , 바이트 단위의 최단 답변이 승리합니다.

테스트 사례

Truthy

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

거짓

"ABCDC"
"yes"
"deed"

무효

"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
결과에 대해 명확하게 설명 할 수 있습니까 : 어떤 입력이 제공되는지에 관계없이 진실 된 가치가 동일해야합니까?
비즈니스 고양이

1
@BusinessCat 설명을 추가했습니다.
steenbergh

언어의 문자열 구현이 문자 목록 인 경우 어떻게합니까? 여기에 게시 된 많은 답변이 그러한 언어를 사용하고 있습니다.
theonlygusti

1
당신은 정말 진정한 당신이 말을 안 거짓에 대한 고유 한 값하려는 경우 truthy또는 falsy. 이는 평가 되거나 허용 되는 모든 값을 의미합니다 . truefalse
FlipTack

답변:


8

05AB1E , 5 바이트

Â)¤{å

온라인으로 사용해보십시오!

설명

Â)     # 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]

{¹å4, 내 대답을 삭제했습니다. 분기의 사용을 알지 못했지만 광산은 너무 비슷했습니다.
Magic Octopus Urn

@carusocomputing : 불행히도 입력이 정렬 된 입력의 반대인지 확인합니다.
Emigna

또는 정렬 된 입력과 같습니다. aba => ['aab', 'baa'] => is in? => 0| aab => same => 1
Magic Octopus Urn

@carusocomputing : 정렬 된 입력은 스택의 역 아래에 있으므로 무시됩니다. 당신은 그것들을 목록으로 연결하지 않습니다.
Emigna

Coulda는 분기 출력을 맹세했다; nvm, 저를 무시하십시오.
Magic Octopus Urn


13

하스켈 , 33 바이트

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

온라인으로 사용해보십시오!

앨리어싱이 scanl1적용된 1 바이트의 Ørjan Johansen에게 감사합니다 .

Haskell은 골프 정렬 기반의 도전 과제에있어 흥미로운 언어 import Data.List입니다. 이를 통해 명시 적으로 정렬하지 않고 수동으로 작업을 수행 할 수있는 방법을 찾는 것이 좋습니다.

이 코드 scanl1는를 사용 하여 목록에서 왼쪽에서 오른쪽으로 작업을 접고 중간 결과를 추적합니다. 따라서, scanl1 max리스트의 누적 최대 값, 즉 점진적으로 긴 접두사의 최대 값을 나열하는 효과가 있습니다. 예를 들면 다음과 같습니다 scanl1 max [3,1,2,5,4] == [3,3,3,5,5].

min목록의 감소 여부 를 확인합니다. 코드는 두 경우를 확인하고와 결합합니다 ||.

다른 표현과 비교 :

(%)=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]

실제로 ||정의하면 버전이 승리합니다 (?)=scanl1.
Ørjan Johansen

11

펄 6 , 25 바이트

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

작동 방식 :

  • .comb 입력을 일련의 문자로 분할합니다.
  • lege있다 "작거나 같은""크거나 같은" 문자열 비교 연산자.
  • [ ]중위 연산자를 사용하면 해당 연산자로 인수 목록을 줄입니다 ( "폴드"). (입력에 0 또는 1 개의 문자 만 있으면 True를 반환하는 것이 좋습니다.)
  • or 양쪽의 표현식이 참이면 True를 반환합니다.

10

자바 스크립트 (ES6), 43 바이트

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

인수 자체에서 변수를 수정할 수 있다는 것을 몰랐습니다. 좋은!
Luke

1
@Luke 이것은 기본 매개 변수를 까다롭게 사용 하는 것입니다. 두 번째 인수로 함수를 호출 q하는 경우 대신 해당 값으로 설정됩니다.
ETHproductions

실제로 스프레드 연산자 (이 경우)를 배열로 즉시 변환하는 것을 의미했습니다.
Luke

오 그래. 네, 파괴적인 과제도 정말 편리합니다 ;-)
ETHproductions

.sort()묵시적 돌연변이 를 사용하여 reverse수표 를 암시 적으로 정렬
Cyoce

7

MATL , 7 바이트

dZSuz2<

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

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

그것은 모든 true를 돌려 잘못된 경우
패트릭 바드

1
@PatrickBard 지시에 따르면, 그중 어느 것도 처리 할 필요가 없습니다.
Suever

6

클로저, 47 바이트

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

어떤 연산자를 간결하게 적용할지 결정하는 방법을 알 수 없습니다. 대단하다.
Carcigenicate

Clojure의 내장 함수 이름을 변수에 넣을 수 있습니까? 허, 멋지다. 그것은을 않습니다 <=>=정말 이상한이다,하지만 중위 본다.
clismique

(let[+ *](+ 2 3))= 6: D 그것은 매크로에 어떤 기능을 작동하지만 분명히하지 : "매크로의 값을 취할 수 없습니다"
NikoNyrh

6

C (gcc) , 70 바이트

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

재귀 함수를 기반으로 더 짧은 솔루션을 찾고 싶었지만 출력 요구 사항으로 인해 해결되지 않았습니다. 그래서 여기에 필수적인 접근 방식이 있습니다. 적어도 C의 연산자 우선 순위는 내부 루프 문에 훌륭하게 작동합니다.

온라인으로 사용해보십시오!


6

R, 48 50 61 바이트

명명되지 않은 함수로

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

약간의 추가 바이트를위한 @guiseppe에게 감사합니다.

charToRaw소요 s원시 벡터에와 분할. 이것은 정수로 변환되고 diff적용됩니다. signdiff를 단일 단위로 만듭니다. range벡터를 최소 및 최대로 줄입니다. 표준 편차 sd가 1보다 작 으면 참입니다.

온라인으로 사용해보십시오!


function(s,d=utf8ToInt(s))all(d==sort(d))또는function(s,d=utf8ToInt(s))!is.unsorted(d)
mnel

또는!is.unsorted(utf8ToInt(scan(,'')))
mnel

@mnel 불행하게도 이들은 역 정렬 등을 처리하지 않는 cba마지막 하나는 필요하다 cat()그것을 전체 프로그램을 만들기 위해
MickyT

를 사용하여 5 바이트를 절약하십시오 function(s)all(!diff(order(utf8ToInt(s)),,2))(역 정렬도 가능합니다!)
mnel

@mnel 다시 죄송합니다.tree
MickyT

5

MATL, 8 바이트

tPvGSXma

온라인으로 사용해보십시오!

설명

        % 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

니스는하지만 true를 반환 '\n'하고 'Hello': /
패트릭 바드

1
@PatrickBard 입력은 모두 같은 경우이며 [A-Za-z]초기 게시물에 명시된 대로만 사용됩니다 . 명시 적으로 처리 할 필요가 없기 때문에 "유효하지 않은"섹션에 있습니다.
Suever

5

젤리 , 4 5 바이트

Ṣm0ẇ@

온라인으로 사용해보십시오!

원래 Ṣm0w4 바이트였습니다.

설명

Ṣ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

나는 4 명이 있다고 확신했지만 그것을 생각할 수 없었습니다!
Jonathan Allan

1
안타깝게도 OP는 결과가 진실 / 거짓이 아니라 두 가지 다른 값이라는 것을 분명히했습니다. 그래도 4 바이트는 가능합니다 . 편집 : ugh Ṣm0ẇ@.
Jonathan Allan

@JonathanAllan 언어의 참 / 거짓 스타일을 사용하는 원래의 규칙을 충족했기 때문에 불행합니다. 또 다른 형태는입니다 Ṣẇm0$. 인수의 순서는 서로 다른 아니었다면 w...
마일


@PatrickBard 응? '\n'그리고 'Hello'완벽하게 유효한 값입니다.
Outgolfer Erik

5

Mathematica, 33 바이트

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

이 팁을 기반으로 합니다 . 불행하게도, 내가 사용해야하는 ToCharacterCode대신 Characters, 때문에 <=하고 >=있지 비교 문자열을한다.


4

PowerShell , 61 바이트

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

온라인으로 사용해보십시오!

input을 가져 $a와서 -in요소가 2 개인 배열 인지 확인합니다 . 이 배열은을 가져 와서 배열로 $a캐스팅 하여 나중에 char저장하고 어휘 적으로 정렬하는 $b파이프로 sort-object구성됩니다. 다른 요소는 오름차순 $b으로 정렬됩니다 -des.


4

, 35 바이트

@Xcali 덕분에 4 바이트를 직접 절약 하고 4 개 더 간접적으로 저장

31 바이트의 코드 + -pF플래그

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

온라인으로 사용해보십시오!

이 코드는 입력을 정렬하고 입력이 자체적으로 (또는 역순으로) 일치하는지 확인합니다.


약간 다른 방법이지만 38 바이트로 줄입니다. 온라인으로 사용해보십시오!
Xcali

@Xcali 감사합니다. 그런 다음 5 바이트를 더 절약하기 위해 수정자를 제거 $"=$,하고 /x대신 사용할 수 있습니다 .
Dada


3

Bash + coreutils, 59 바이트

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

입력 문자열이 인수로 전달됩니다.

출력은 PPCG I / O 메소드에 의해 허용되는대로 종료 코드 (정확한 경우 0, 거짓 인 경우 1)로 리턴됩니다 .


3

PHP, 66 바이트

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

명령 행 인수에서 입력을받습니다. 로 실행하십시오 -r.



3

라켓 , 93 바이트

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

온라인으로 사용해보십시오!

언 골프 드 :

(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))))

정렬을 사용하여 원래 접근 방식과 비교


3

Brachylog , 5 바이트

나는 성공하지 않고 4 바이트 솔루션을 찾으려고 노력 했으므로 지금은 내가 찾은 가장 흥미로운 5 바이트 솔루션이 있습니다.

:No₎?

온라인으로 사용해보십시오!

o, 순서 함수는 매개 변수를 취할 수 있습니다. 0오름차순, 1내림차순을 의미합니다. 해당 매개 변수를 바인딩되지 않은 변수로 설정했습니다 N. Brachylog는 다른 값을 시도 하거나 N( 가능한 경우에만 ) 입력과 결과를 통합하고 시도한 결과가 있는지 여부를 반환합니다.01


더 이상 작동하지 :( 보인다는 o?|o₁?그래도 여분의 바이트 작동
hakr14

콜론을 세미콜론으로 바꾸면 작동하는 것 같습니다. 1 바이트 길이의 다른 변형은입니다 o{|↔}?.
관련없는 문자열


2

JavaScript (ES6) 74 62 50 47 43 바이트

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

골프와 버그 수정 후,이 답변은 ETHProduction과 거의 같았으므로, 답변을 확인한 후을 입력하십시오 +1.


버그 수정.
Luke

1
당신은 나를 잡았고, 편집하기 전에 의견을 게시했습니다 ...
Luke

나는 버그의 원인을 발견했고, 모든 것을 영리하게 정리하여 올바르게
Luke

버그가 다시 ... repl.it/FZrs/2
steenbergh

1
글쎄, 이것은 @ETHProduction의 답변과 거의 비슷하므로 통지를 추가했습니다. +1그의 대답을 부탁드립니다 .
Luke

2

하스켈, 54 50 바이트

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

사용 예 : t "defggh"-> True. 온라인으로 사용해보십시오! .

어쩌면 sortlike를 사용 하면 다른 답변이 더 짧을 수도 있습니다 import Data.List. 다른 접근 방식은 다음과 같습니다.

모든 함수의 f에서 [(=<<),(<*>)]계산,and(zipWith(<=)`f`tail$a) 그리고 할 결과 중 하나를 필요 True. 기능은

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

두 입력리스트의 인접 요소들의 비교를 수행하는 a과를 <=하지만 인수 하나가 발생 대칭 >=. and모든 비교가 있는지 확인합니다 True.


2

Pushy , 7 바이트

ogoGo|#

온라인으로 사용해보십시오!

설명:

      \ 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

하나의 고유 한 true 값을 반환하지 않습니다.
steenbergh

1
아니 @steenbergh하지만 만족 우리의 메타 합의 truthy 또는 falsy으로 간주 무엇에 - 1하고 2있습니다 True조객에, 반면 0입니다 False.
FlipTack

Pushy에 비트 OR 연산자가 있으면 대신 작동합니다.
ETHproductions

@FlipTack 도전 과제가 명확하다고 생각했지만 이제는 더 구체적으로 만들었습니다. TRUE는 모든 테스트 케이스에서 동일한 값을 출력해야합니다. FALSE도 마찬가지입니다.
steenbergh

@steenbergh 메타 합의는 이유가 있고 의미가 있지만, 주장한다면 ...
FlipTack

2

Pyth, 5 바이트

}Q_BS

a를 입력 "quoted string"하여 인쇄 True하거나 False적절한 프로그램.

테스트 스위트

작동 원리

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

당신은 바이트를 저장 (가장 짧은 답이 될) 대체하여 수 }Q/암시를 사용하는 Q.
isaacg


2

GNU sed, 97 + 1 (r 플래그) = 98 바이트

문자가 정렬되면 스크립트는를 반환 1하고 그렇지 않으면를 반환합니다 0. sed에는 데이터 유형이 없습니다.

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

모든 문자가 오름차순으로 정렬되어 있는지 확인하기 위해 연속되는 각 문자 쌍을 내림차순으로 표 조회합니다. 즉, 카운터 예제를 찾으려고합니다. 참고 //실제로 지난 정규 표현식 매치를 반복! (2 행과 3 행 참조)

실행 예 : 스크립트는 한 줄에 하나씩 여러 입력 단어를 테스트 할 수 있습니다

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

2

CJam , 12 11 바이트

q_$_W%+\#)g

온라인으로 사용해보십시오!

설명

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

8086 기계 코드, 68 61 48 46 45 39 바이트

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

다음에서 조립 :

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.