この単語は字句順ですか?


44

入力文字列Sを指定すると、Sのtruthyすべての文字が字句順の場合に返されます。ASCII値は昇順または降順のいずれかである必要があります。falsy他の場合に戻ります。

入力

  • 入力は同じケースになります(すべて大文字またはすべて小文字)。あなたの提出物は両方を処理できるはずです。
  • 入力は範囲内のASCII [A-Za-z]のみで構成されます
  • 入力長は、言語がサポートする最大値まで、少なくとも1です。
  • 入力は文字列です-文字のリストではなく、ASCIIコードポイントの配列ではありません。

出力

  • 出力は、trueまたはfalse、または0/1、またはtrue / falseあなたの言語が提供できる他の明確なスタイル出力でなければなりません。
  • すべての偽のケースは、すべての偽のケースと同様に、同じ出力を持つ必要があります。いいえ、「Falseは0、trueは1、2、または3」。

追加のルール

  • 標準的な抜け穴は禁止されています
  • 回答は、スニペットまたはREPLエントリではなく、完全なプログラムまたは関数でなければなりません。
  • 、バイト単位の最短回答が勝ちます。

テストケース

真実の

"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
TrueとFalseの明確な値が本当に必要な場合は、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、私の答えを削除しました。分岐の使用に気づかなかった、私のものはあまりにも似ていた。
魔法のタコUr

@carusocomputing:残念ながら、入力がソートされた入力の逆であるかどうかのみをチェックします。
エミグナ

または、ソートされた入力と等しい。aba => ['aab', 'baa'] => is in? => 0| aab => same => 1
魔法のタコUr

@carusocomputing:ソートされた入力は、スタックの逆の下にあるため無視されます。リストでそれらをペアにすることはありません。
エミグナ

分岐したラップ出力を宣誓できました。nvm、無視してください。
魔法のタコUr


13

Haskell、33バイト

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

オンラインでお試しください!

エイリアスscanl1インフィックス付きの1バイトのØrjanJohansenに感謝します。

Haskellは、組み込みの並べ替えを持たず、長い時間を必要としないため、ゴルフの並べ替えベースの課題にとって興味深い言語import Data.Listです。これにより、明示的にソートせずに手動でタスクを実行する方法を見つけることができます。

コードはを使用scanl1して、リスト上で左から右へ操作を折りたたみ、中間結果を追跡します。そのため、scanl1 maxリストの累積最大値、つまり次第に長いプレフィックスの最大値をリストする効果があります。たとえば、scanl1 max [3,1,2,5,4] == [3,3,3,5,5]

minリストが減少しているかどうかをチェックする場合も同じです。コードは2つのケースをチェックし、それらをに結合します||

他の式と比較してください:

(%)=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ヨハンセン

11

Perl 6、25バイト

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

使い方:

  • .comb 入力を文字のシーケンスに分割します。
  • leおよびgeは、「以下」および「以上」の文字列比較演算子です。
  • [ ]中置演算子を囲むと、その演算子で引数リストを縮小( "折り畳み")します。(入力に0文字または1文字しかない場合にTrueを返すのは十分賢い方法です。)
  • or 両側の式が真の場合、Trueを返します。

10

JavaScript(ES6)、43バイト

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

引数自体の変数を変更できることを知りませんでした。いいね!
ルーク

1
@Lukeこれは、デフォルトのパラメーターのトリッキーな使用法です。2番目の引数で関数を呼び出すq場合、代わりにその値に設定されます。
ETHproductions

実際には、スプレッド演算子(この場合)をすぐに配列に変換します。
ルーク

ああ、わかった。ええ、
解体の

チェックで.sort()暗黙的にソートするために変異を使用するreverse
巧妙な

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


1
@PatrickBard指示が示すように、それらのどれも処理する必要はありません。
-Suever

6

Clojure、47バイト

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

どの演算子を簡潔に適用するかを決定する方法がわかりませんでした。これは素晴らしい。
発癌性

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未満の場合はTRUEです

オンラインでお試しください!


function(s,d=utf8ToInt(s))all(d==sort(d))またはfunction(s,d=utf8ToInt(s))!is.unsorted(d)
-mnel

または、34バイトまで!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バイターがあると確信していましたが、それを考えることができませんでした!
ジョナサンアラン

1
...残念ながら、OPは出力が真実/偽であるのではなく、2つの異なる値であることを明らかにしました。それでも4バイトは可能ですが、私は信じています。編集:ugh Ṣm0ẇ@
ジョナサンアラン

@JonathanAllan残念ながら、言語のtrue / falseスタイルを使用するという元のルールを満たしていました。別の形式がありますṢẇm0$。引数の順序が異なるためではなかった場合w...
マイル


@PatrickBardえ?'\n''Hello'は完全に有効な値です。
エリックアウトゴルファー


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

Perl、35バイト

直接@Xcaliのおかげで4バイト、さらに間接的に4バイト節約されました

31バイトのコード+ -pFフラグ。

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

オンラインでお試しください!

コードは入力を並べ替え、入力が並べ替えられた(または逆の順序で)入力と一致するかどうかを確認します。


少し異なる方法ですが、38バイトに削減します。オンラインで試してください!
Xcali

@Xcali非常に素晴らしい、ありがとう。次に、代わりに修飾子$"=$,を使用/xして、5バイト節約します。
ダダ



3

PHP、66バイト

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

コマンドライン引数から入力を受け取ります。で実行し-rます。




3

Brachylog、5バイト

私は成功せずに4バイトのソリューションを見つけようとしましたので、今のところ私が見つけた最も興味深い5バイトのソリューションがあります:

:No₎?

オンラインでお試しください!

o、順序付け関数はパラメーターを取ることができます:0昇順、1降順を意味します。そのパラメーターを非バインド変数に設定しますN。Brachylogは、異なる値N(のみ0または1可能)を試行し、結果を入力と統合しようとし、それらの試行のいずれかが成功したかどうかを返します。


動作しなくなったようです:( o?|o₁?余分なバイトで動作しますtho
hakr14

コロンをセミコロンに置き換えると動作するようです。別の1バイト長のバリアントはになりますo{|↔}?
無関係な文字列


2

JavaScript(ES6)74 62 50 47 43バイト

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

ゴルフとバグ修正をいくつか行った後、この回答はETHProductionの回答とほぼ同じになったため、彼の回答をチェックして、を入力してください+1


バグを修正..
ルーク

1
あなたは私を捕まえて、編集する前にコメントを投稿し
ルーク

バグの原因を発見し、すべてを巧みに配置することで適切に修正し
ルーク

バグが帰ってきた... repl.it/FZrs/2
steenbergh

1
さて、これは今や@ETHProductionの回答であるため、通知を追加しました。+1彼の答えをください。
ルーク

2

Haskell、54 50バイト

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

使用例:t "defggh"-> Trueオンラインでお試しください!

たぶん、sort他の答えのように使うことは、それが必要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

これは、1つの明確な真値を返しません。
-steenbergh

1
いいえ、それを満たし、当社の@steenbergh メタコンセンサス truthyまたはfalsyとしてカウントするものに- 12しているTrueのに対し、強引です。0False
FlipTack

Pushyにビット単位のOR演算子がある場合、代わりに動作するはずです。
ETHproductions

@FlipTackチャレンジでは明確だと思っていましたが、より具体的にしました。TRUEはすべてのテストケースで同じ値を出力する必要があります。FALSEについても同じことが言えます。
-steenbergh

@steenberghメタコンセンサスは理由があり、理にかなっていますが、あなたが主張する場合
...-FlipTack

2

Pyth、5バイト

}Q_BS

の入力を"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行目を参照)

実行例:スクリプトは、1行に1つずつ、複数の入力語をテストできます

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

2

CJam12 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.