番号を逆にする最短の方法


31

関数(または同等のサブプログラム)を作成して、単一の整数値の引数を受け入れ、引数の10進数の順序を逆にして見つかった(同様に型指定された)値を返します。

たとえば、76543が34567を返す場合


6
その文字列逆転、数は文字列をした時に戻る
PMG

2
「最短のアルゴリズム」という考え方は、特に「すべての言語」を許可する場合、いくぶん奇妙です。...アルゴリズムを考えて、と私はあなたに適切なとDSLをあげる「〜」演算子

3
ただ、予告:0で終わる任意の数が...逆転桁の短縮番号になります
powtac

44
は時間をまったくとらないアルゴリズムを知っていますが、回文数でのみ動作します;)
シュナダー

自分で書き直す時間を見つけました。これが、eltondが意図したパズルであり続けることを願っています。
dmckee

回答:


85

HTML 21 7文字(生意気なら1文字...)

‮n

nあなたの番号に置き換えてください


1
これは単なる天才です。私は1つの文字に行きたいです。または2、UTF-16で2バイトにエンコードするため:P
tomsmeding

17
ハハハ私はそのタグでGoogle検索を行い、報われましたYour search -‮ -どのドキュメントとも一致しませんでした。
JoeFish

Uは、ブラウザでこのリンクを試みることができる:data:text/html,&%238238;egnahcxEkcatS olleH
F. HAURI

3
グーグル翻訳でも面白い。@JoeFish:再現できません。リンクを投稿してください!
F. HAURI

1
@JoeFishコメントを見ると、ユーザー名が反転し、その後にテキストがあります。‮txetemos si ereH
Stefnotch

32

Python

int(str(76543)[::-1])

編集:

@gnibblerが提案する短いソリューション:

int(`76543`[::-1])

または、上記が不明な場合:

x=76543
int(`x`[::-1])

4
s[::-1]よりもはるかに高速です''.join(reversed(s))
リザ

4
代わりに、STRを使用する(のrepr用)バッククォートを使用することができます
gnibbler

@gnibbler提案をありがとう。回答を更新しました。
ベイダー

2
TBH、それは関数/手順/あなたがそれを呼び出したいものではなく、仕様はそれを必要とします。
トーマスエディング

また、値も受け入れません...
Exelian

28

ユニバーサル(言語非依存/独立

あなたが使用したい場合は数字のみ(回避は、数値を文字列に変換する)としていないいくつか使用したい特定の(任意の言語のための普遍的なする)ライブラリ:

x = 76543 # or whatever is your number
y = 0
while x > 0:
    y *= 10
    y += ( x %10 )
    x /= 10 # int division 

これはpythonですが、数学メソッドにすぎないため、どの言語でも実行できます。


あなたが交換した場合mod%、それは有効なPythonだ;)
phihag

あなたは正しい、実際:) 10x

3
最短ではなく、最も一般的で普遍的なものです。
キリルキーロフ

3
y=y*10+x%10....
st0le

1
BrainFuckは計算できませんが、計算しません。それを持たない言語はのa - (n * int(a/n))代わりに使用できますa mod n。また、ここを見ると、モジュラス演算はすべての言語で異なって実装されています。(右の表を参照してください。)
mbomb007

13

Perl 6

+$n.flip

または:

$n.flip

動的に型指定されたコード用。

数字は、言語設計により文字列メソッドを取得しました。


10

J-6文字+変数

".|.":y

yはあなたの価値です。


2
関数として:|.&.":「逆に実行」は、タスクの文字通りの翻訳です。
ホタル14


8

PHP、9文字

(int)strrev(123);

N定数がどこにあるかを短くするには:

strrev(N)

8

Befunge(3文字)

完全な実行可能プログラム:

N.@

Nあなたの番号はどこですか。ルールは「単一の整数値の引数を受け入れる」と言っています。Befungeでは、0〜9の整数のみを入力できます。


3
これらは唯一のリテラルですが、他の数字も確かに表すことができます。それ以外の場合、勝利の答えは空のプログラムでBrainfuckになります。;-)
FireFly

8

言語に依存しない/数学

上記のキリルキーロフの答えに触発されました。数値を逆にすることの数学的な性質に興味があったので、少し調べてみることにしました。

いくつかのbase でn - rev(n)自然数の差をプロットすると、次のようなパターンが得られます(、for 、列でラップ、赤は負の数を示します):nr(n - rev(n)) / (r - 1)r=10r

table of differences

このシーケンスは次のように生成できます(擬似コード):

for i=1 to r:
  output 0

for m=0, 1, …
  for k=1 to (r-1):
    for d=1 to r^m:
      for i=0 to (r-1):
        output (r-1) * (r+1)^m * (k - i)

これらの値をリスト/配列に保存n - arr[n]すると、の逆の形式になりnます。さて、これを「数学的にゴルフ」するには、理想的には、シーケンス全体のn:番目の値を与える閉形式の表現が必要です。これにより、タスク全体を解くための閉形式の表現ができます。残念ながら、私はそのような表現を見つけることができませんでした...しかし、それ可能なはずのように見えます。:(

そう、数学の好奇心というよりコードゴルフではありませんが、上記のシーケンスの閉形式表現がある場合、それは実際に適切なPLゴルフの提出に役立つかもしれません。


7

ハスケル、 28 24文字

f=read.reverse.show.(+0)

2
どうf=read.reverse.show.(+0)
FUZxxl

2
(+0):合法的な男!技術的にはあなたが必要としませんが.(+0)、全くとして、f問題が要求するものよりも多型だろう(「同様に入力された」出力を返すことが許可されています)。私はそれらの5つのキャラクターを剃ります。
トーマスエディング

7

Vim

17文字

:se ri<CR>C<C-R>"

vimで直接コマンドを入力すると、10文字(キーストローク)になります。ところで、私は今日vimで何か新しいことを学んだ、ありがとう:)
ダニエル

6

Scala-33文字

def r(a:Int)=(a+"").reverse.toInt

1
python / ruby​​ / perl
lhk

これは負のIntでは失敗します。-123は-321返す必要があります
samach

6

ルビー(14)

x = 13456
x.to_s.reverse

3
「no」は未定義です。あなたはそこに「x」を置くつもりだったと思います。
デビッドリバーズ

3
123456.to_s.reverseはさらに短くなります。
ステフェンローラー

@mmdemirbas -タイプミスを修正してくれてありがとう
紛れもない

3
.to_s.reverse.to_i仕様に準拠する必要があります。
histocrat

0で始まる数字は機能しないようです。0112.to_s.reverse.to_i => 47-
ジョエル

5

数値を文字列に変換し、文字列を逆にしてから、その文字列を数値に戻すことができます。この種の機能は、おそらくすべての言語で利用できます。より数学的な方法を探しているなら、これは役に立つかもしれません:

int n = 76543;
int r = 0;

while (n > 0) {
    r *= 10;
    r += n % 10;
    n /= 10;
}

5
私のものはまったく同じです(:

違いは、コードがPythonのように見えることだけです。

このメソッドは、精度が制限されている言語でオーバーフローします。試してください1111111119
-st0le

5

Python 3+

関数形式:28文字

r=lambda i:int(str(i)[::-1])

(サブ)プログラム形式:25文字

print(input()[::-1])

他のPythonの例のいくつかは、ハードコーディングされた入力を使用している、および/または要件を完全に満たしていないため、不正行為、または少なくとも安価であると考えています。


5

Golfscript、5文字

`-1%~

これはスタックで引数を取り、結果をスタックに残します。私は仕様の「サブプログラム」オプションを利用しています:関数を主張する場合、それはさらに4文字がスタックに残ります:

{`-1%~}:r

`-1%~むしろあなたが意味したに違いないと思う`-1$~(そして私はあなたの答えを編集する自由をとってそう言った)。
イルマリカロネン

5

シェルスクリプトで:

  echo "your number"|rev

これが役に立てば幸いです:)


良いもの!bashがそれに対応できることも知りませんでした!
プラニットバウバ13年

1
私は技術的には推測、同様に型指定された「数」を返す...とさらに短縮することができrev<<<yournumber、例えばrev<<<132(bashの/ zshのためではなく、POSIXあたりが)
ホタル

1
ただ、rev問題は、それは言っていない、十分である持っている機能であることを。rev組み込み関数ではありませんが、組み込み関数と比較できます。
nyuszika7h 14

これは無効です。「rev」は組み込みではなく、外部プログラム呼び出しです。
バスティアンBittorf

67バイトの純粋なPOSIXシェル:X = $ 1; while [$ X!= 0]; do Y = $((Y * 10 + X%10)); X = $((X / 10)); done; echo $ Y
バスティアンビットトルフ

3

ちょっと遅いけど

APL、3

⍎⌽⍞

機能を主張する場合

⍎∘⌽∘⍕

私は上記の重複を見つけることができなかったように見えますまあ...(それは2ページ目にあることに起因する)
TwiNight

私は悲しいです、誰もbrainfu * kまたはホワイトスペースソリューションを与えなかったこと:((もう1つの投票とあなたは最初のページにいます)
キリルキーロフ

@KirilKirov私はBrainfu * kソリューションを持っています:codegolf.stackexchange.com/a/32826/24829
rpax 14

3

Mathematica、14バイト

IntegerReverse

この関数は先週の10.3リリースでのみ追加されたため、これは競合していませんが、完全を期すために、このタスクにこれまでに(と思う?)ビルトインのみを追加すると思いました。


2

Javaで次のことができます。これは文字列に変換され、逆に変換されるため、数学的な解決策ではないことに注意してください。

public class test {
    public static int reverseInt(int i) {
        return Integer.valueOf((new StringBuffer(String.valueOf(i))).reverse().toString());
    }

    public static void main(String[] args) {
        int i = 1234;
        System.out.println("reverse("+i+") -> " + reverseInt(i));
    }
}

2
これは数学的な解決策です。数学は数字ではなく、算術ではありません。数学は記号の文字列も扱います。そして、この特別なケースでは、文字列への変換と文字列からの変換は、単にbase-10との間の変換です。
R.マルティーニョフェルナンデス

「数学的な解決策ではない」とは、自分で数学をやっていないということです。メソッドは、すべての解析と数学を行っています。たとえば、キリルキーロフの答えとは対照的。
ビクター

オーバーフローします
...-st0le

2

ルア

数字と文字列は交換可能であるため、これは簡単です

string.reverse(12345)

2

残りのいくつかとは異なり、これは実際に入力を受け取ります。

print`input()`[::-1]

Python btw。


2

Actionscript

43文字。関数のパラメーターとしてのnum:

num.toString().split('').reverse().join('')

2

Groovy

r={"$it".reverse() as BigDecimal}

assert r(1234) == 4321
assert r(345678987654567898765) == 567898765456789876543
assert r(345346457.24654654) == 45645642.754643543

2

Perl, 11 chars

The p flag is needed for this to work, included in the count.

Usage:

$ echo 76543 | perl -pE '$_=reverse'

I count 10 chars
F. Hauri

The p flag is included in the count
Zaid

2

Clojure (42 chars)

#(->> % str reverse(apply str)read-string)

Example usage:

(#(->> % str reverse(apply str)read-string) 98321)

returns 12389


2

Common Lisp - 60 chars

(first(list(parse-integer(reverse(write-to-string '4279)))))

will get you 9724.


Why (first(list? parse-integer already returns the number.
Florian Margaine

2

K, 3 bytes:

.|$

Evaluate (.) the reverse (|) of casting to a string ($).

Usage example:

  .|$76543
34567

2

rs, 20 bytes

#
+#(.*)(.)/\2#\1
#/

Technically, this doesn't count (rs was created earlier this year), but I didn't see any other regex-based answers, and I thought this was neat.

Live demo.

Explanation:

#

Insert a pound character at the beginning of the string. This is used as a marker.

+#(.*)(.)/\2#\1

Continuously prepend the last character of the main string to the area before the marker until there are no characters left.

#/

Remove the marker.


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.