私の変化を数える


21

あなたの仕事は、彼らがこの順になっているので、ということがない特定の順序で「DIME」、「ニッケル」、および「ペニー」、何度でも文字列「四半期」を含む配列をソートし、ソートそれらすることです。quarter dime nickel penny(つまり、最大から最小の金額)。


ルール

  1. プログラムは、入力として米国のコインの名前を含む配列を取り、金銭的価値の大きい順に並べる必要があります。
    • 米国から来ていない人、または変更を使用していない人にとって、米国の硬貨の価値は次のとおりです。
      • 四半期:25セント
      • ダイム:10セント
      • ニッケル:5セント
      • ペニー:1セント
  2. 出力が上記の金額で並べ替えられている限り、この配列を任意の方法で並べ替えることができます。
  3. 入力は、コマンドライン引数またはSTDINのいずれでも、任意の方法で取得できます。
  4. 入力配列はすべて次のような小文字の文字列になります。
    • quarter dime nickel nickel quarter dime penny penny
  5. 入力と出力の実際の形式はあなた次第です。

テストケース

"penny nickel dime quarter" 
-> "quarter dime nickel penny"

"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"

"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"

これはなので、標準のルールと抜け穴が適用されます。



1
すべてのテストケースに出力を含める必要があります。モバイル二行目が出力されるかのように見えるように、第二及び第三のケースは、二列に示されているに
ルイスMendo

4
私はカナダ人ですが、入力にペニーがないと仮定できますか?;)
地下

1
悲しいことに、いいえ。
ckjbgames

1
ルーニーと半ドルはどうなりましたか?
アダム

回答:


26

Japt5 3バイト

ñg9

オンラインでテストしてください!

説明

私もここ数週間で言語にソート関数を追加しました:-) ñ配列と関数を受け取り、その関数を介して各アイテムがマッピングされたかのように配列をソートします。

g文字列の関数は、数値nを受け取り、文字列のnth文字を返しnます。負の場合、または文字列の末尾を超える場合は、ラップします。したがって、文字列は次のように整列できます。

quarterquarter...
dimedimedimedi...
nickelnickelni...
pennypennypenn...

各文字列の9番目の文字(0から始まる)は太字で強調表示されています。これらは正しい順序にある​​ため、やらなければならないことはすべてですñg9。(今振り返ってみると、ñg5同様に機能します...)


5でも動作するはずです。
FlipTack

@FlipTackええ、私はちょうど自分自身に気づいた。それが違いを
生む

この。できません。あります。負けた。
ckjbgames

1
@ckjbgamesデニスは回答を投稿しませんでした;-)
ETHproductions

1
@ETHproductions彼はおそらくそうするでしょう。彼にこの質問を見せてください。
-ckjbgames

8

V、7バイト

ú/¨qu©¿

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

これは、約1週間前にVに追加した派手な新しい並べ替えコマンドを使用していますú)。いいタイミング!

これが機能する方法は、デフォルトのソート(ASCII値)ですべての行をソートしますが、特定の正規表現の最初の一致を無視します。この場合、正規表現は(qu)?になりますが、バックスラッシュの使用を避けるためにいくつかの非ASCII文字が含まれています。「クォーター」の最初の2文字を無視すると、「a」で始まり、すべてのコインはすでにアルファベット順になっています。

非競合バージョン、4バイト

ú!/.

この機能は既に実装されていますが、まだ広範囲にテストしていなかったため、この課題のために気付いたバグがありました。TIOは少し遅れているため、TIOリンクはありません。

これは、各行の最初の文字を無視してすべての行を逆にソートすることにより機能します。


8

Python、36バイト

lambda a:a.sort(key=lambda x:x[-5:])

指定されたキー機能によってリストをその場でソートする名前のない関数。

各コイン名のスライスは、次いで、arterdimeickel、およびpenny-アルファベット順(またはより重要な、序)ためにです。


おっと- el間違った方法で行かないとc:pが恋しくなります
ジョナサンアラン


6

Pythonの342の 41 38バイト

入力を文字列のリストとして受け取る名前のないラムダ関数は、所定の場所でソートされます。

(ジョナサン・アランによるアウトゴルフ)

lambda x:x.sort(key=lambda s:(s*2)[5])

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

私が台無しにした他のソリューション:

lambda x:x.sort(key=lambda s:s*(s<'q'))
lambda x:x.sort(key=lambda s:(s+'pi')[5])
lambda x:x.sort(key=lambda s:ord(s[3])%16)

5

PowerShell、21バイト

$args|sort{($_*3)[9]}

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

説明

ETHproductionsの答えでアルゴリズムを恥知らずに盗んだ(基本的に)。各文字列に3を掛けて、結果の文字列の9番目の文字に基づいて並べ替えます。


$_PowerShellには何がありますか?
ckjbgames

@ckjbgamesスクリプトブロック内のパイプラインでは、現在のアイテムを参照します。そのため、次のようなもの1,2,3,4 | ForEach-Object { $_*2 }が各数値に2を掛けたものを出力します。スクリプトブロックは、入力項目ごとに1回実行されます。
briantist

それは理にかなっている。
ckjbgames

5

ゼリー、4 バイト

6ịµÞ

オンラインでお試しください!(フッター、ÇYは、結果のリストを改行で結合し、きれいに印刷します。)

どうやって?

6ịµÞ - Main link: list of strings
  µ  - monadic chain separation
   Þ - sort the list of strings by the monadic function:
6ị   - the sixth index - Jelly indexing is modular and 1-based

JellyのリストのN番目のインデックスは、左から始まり、1からカウントして、必要に応じて最初にループバックするN番目のアイテムです。(0番目が右側、-1が左側など)。

したがって、の6番目の文字['d','i','m','e']'i'、6が4を法とする2に一致するためです。

順番に並んでいる4つのコインの6番目のキャラクターは、クォートer、d ime lpnicke 、ennyです。これらはアルファベット順(または、より重要な順序)です。


同じことを達成するための別の方法は、回転して、文字列によってソートになりṙ5µÞ文字列を作る右に回転すると、erquartimedlnicke、とpenny


5

Python、32バイト

lambda s:s.sort(key="npr".strip)

オンラインでお試しください!リストを所定の位置に並べ替えます。

考え方は、なしでソートキー機能を使用することlambdaです。適切な候補はx.strip、文字列xを取得し、入力のすべての文字の左端と右端を削除します。たとえば、"abcdef".strip("faces") == "bcd"

メソッド"npr".stripは以下を取ります:

quarter ->  np
dime    ->  npr
nickel  ->  pr
penny   ->  r

辞書順にソートされます。ストリングnprをブルートフォースで見つけました。npuそしてnptまた仕事、とどれも短いがあります。


5

Bash(+ coreutils)11バイト

ゴルフ

sort -rk1.2

使い方

最初のフィールド(単語)の2番目の文字から行末までの「ソートキー」による逆ソート、つまり:

uarter
ime
ickel
enny

テスト

>echo penny nickel dime quarter|tr ' ' '\n'|sort -rk1.2

quarter
dime
nickel
penny

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





3

V8 7バイト

@DJMcMayhemのおかげで1バイト節約

Úçq/:m0

[オンラインで試してみてください!]

DJMcMayhemさん@参照してください答え(Vで1 0は私より短いバイト)

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

Ú                    " sort all lines "
 ç                   " globally "
  q/                 "  where there a q is matched, "
    :m0              "  move it to the top of the buffer "

1バイト大きい古いソリューションを次に示しますが、本当に気に入っています。

V、8バイト

Ú/q
dGHP

[オンラインで試してみてください!]

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

説明

Ú        " sorts the lines

これで、バッファは次の形式になります。

dimes
nickels
pennies
quarters

今やるべきことは、クォーターをトップに移動することだけです。

/q      " search for a q "
dG      " delete everything from the first quarter to the end of buffer "
HP      " and paste it at the top of the buffer

:m0別のソリューションでバイトを節約することができます(そして私を結び付けます)Úçq/:m0
DJMcMayhem

@DJMcMayhemありがとう、TILについて:move
Kritixi Lithos


1

T-SQL、41 36 34バイト

select*from @ order by right(a,5)

説明

入力はという名前のテーブル変数に事前にロードされ、名前が1つの@aで、各値はソートされる1つのコインであると仮定します。

select * from @一部はボイラープレート「すべての値を返すことを得る」です。本当の魔法はorder by節で起こります。

同じ戦略を使用してジョナサンアラン(それは短すぎるかどうSQLは、文字列全体を返します)、Iソート最後の5つの文字で:arterdimeickelpenny


qはの後の次の文字pであるため、単純なmodが結果qよりも小さいp値を得るには、素因数である必要がありますq。あなたは最初の1を引くことができ、その後、7の弾性率は動作しますが、それはおそらく113として多くのバイトとして、少なくともかかるだろう
ニール・

@ニールええ、私は113がプライムであることがカウントを減らす私の試みを破壊していることに気付きました。必要括弧を含む複数のバイトを(実行-1、次いで7 MODである。
ブライアン・J

1

JavaScript(ES6)、35 33バイト

a=>a.sort(([,...a],[,...b])=>b>a)

テストケース


1

Befunge、158バイト

~:0`v0v4<~_
9:%8_^>8*`^1p9\+1g
$:!#@_1-0" ynnep">:#,_>
1-0" lekcin">:#,_>$:!#^_
" emid">:#,_>$:!#^_1-0
>:#,_$1>-:!#^_0" retrauq"
*84g9< ^*84g91-*84g94-*84g96-

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

文字列の処理と並べ替えは、通常Befungeで試みたい種類ではありませんが、このソリューションは、実際には何も並べ替える必要がないというジョン・カスニッチの観察を利用しています。各コインの出現回数(最初の文字から簡単に判断できます)をカウントし、適切な順序で各コイン名の多くを出力します。

サイズに関してはまだ他の言語とはまったく競争力がありませんが、このアプローチは、文字列ソートの演習としてチャレンジを処理しようとした場合よりも少なくとも優れています。



1

APL(Dyalog APL)、11バイト

文字列のリストを取得して返します。

{⍵[⍋↑5⌽¨⍵]}

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

{ 匿名関数:

⍵[] によってインデックス付けされた引数

 の昇順インデックス

 行がパディングされている行列

5⌽ 5ステップ回転

¨⍵ 引数の項目

}



1

、3バイト

Öṙ9

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

ETHproductionsのJapt回答を剥ぎ取ったBrachylog回答から移植されましたが、n番目の要素に単純にアクセスする代わりに回転を使用するため、正確な翻訳ではありません。そこで、入力の終わりを超えてインデックスを作成できないため、これを行いました(これはおそらく、言語の宣言的な性質のために多くの状況で非常に役立ちます)。ハスクでは、! ないことJAPTの周りに同じモジュラーラッピングで、入力の末尾を越えてあなたがインデックスさせñg9使用していますが、特にこのプログラムは1台のバイト長くなってしまうだろうので、それは1からです:Ö!10

Ö      Sort by
 ṙ     rotation by
  9    9.

0

バッチ、82バイト

@for %%c in (quarter dime nickel penny)do @for %%a in (%*)do @if %%a==%%c echo %%c

入力をコマンドライン引数として受け取り、STDOUTに出力します。各コインの元のリストをフィルタリングした結果のリストを連結することにより機能します。



0

ルビー、31バイト

->s{s.sort_by{|i|i[1]}.reverse}

これは、常に「ニッケル」と「ダイム」を正しくソートするとは限りません。
daniero

0

ルビー、30バイト

->m{m.sort_by{|s|s[3].ord^16}}

試行錯誤によって見つかった魔法の数字。少し不器用ですが、を使用するよりも短くなり.reverseます。


0

Perl 6の 40の36  34バイト

*.sort: {(<q d n p>Zxx 1..*).Bag{~m/./}}

それを試してみてください

*.sort: {%(<q d n p>Z=>1..*){~m/./}}

それを試してみてください

*.sort: {%(<q d n p>Z=>^4){~m/./}}

それを試してみてください

拡張:

*\            # WhateverCode lambda ( this is the parameter )

.sort:        # sort using the following code block

{             # bare block lambda with implicit parameter 「$_」

  %(          # treat this list as a hash

    <q d n p> # list of first characters
    Z[=>]     # zipped using pair constructor
    ^4        # Range from 0 up-to 4 ( excludes 4 )

  ){          # get the value associated with this key

    ~m/./     # regex which gets the first character ( implicitly from 「$_」 )

  }

}


0

RProgN、18バイト

~{3mtt¢\3mtt¢>}$

説明した

~               # Zero Space Segment
 {            } # Anonymous Function
  3m            # Repeat the inputted string 3 times
    tt¢         # And take the tenth character of that
       \3mtt¢   # Do the same for the entry underneith
             >  # Compare the ascii value of the two
               $# Sort the input by the anonymous function.

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


0

ジャワ8、128の 112バイト

これは、 java.util.function.Function<String[],String[]>

s->{String r="";for(String k:"q d c p".split(" "))for(String t:s)if(t.contains(k))r+=" "+t;return r.split(" ");}

エクスプランション:4枚のコインのそれぞれについて、入力を確認し、そのコインの固有のキャラクターに一致するたびにコインの名前を結果に追加します。結果を配列に分割して返します。


0

ルビー、27バイト

->s{s.sort_by{|x|(x*2)[5]}}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.