วิธีที่สั้นที่สุดเพื่อกลับจำนวน


31

เขียนฟังก์ชั่น (หรือโปรแกรมย่อยเทียบเท่า) เพื่อยอมรับอาร์กิวเมนต์ค่าจำนวนเต็มเดี่ยวและส่งกลับค่า (พิมพ์คล้ายกัน) ที่พบโดยการกลับคำสั่งของตัวเลขฐาน 10 ของอาร์กิวเมนต์

ตัวอย่างเช่นได้รับ 76543 ผลตอบแทน 34567


6
ย้อนกลับไปตามเวลาที่ตัวเลขเป็นสตริงจากนั้นย้อนกลับสตริง
pmg

2
แนวคิดของ "อัลกอริธึมที่สั้นที่สุด" ค่อนข้างกว้างขวางโดยเฉพาะอย่างยิ่งหากคุณอนุญาตให้ "ภาษาใดก็ได้" คิดอัลกอริทึมแล้วฉันจะให้ DSL กับโอเปอเรเตอร์ "~" ที่เหมาะสมสำหรับคุณ ...

3
เพียงแค่แจ้งให้ทราบล่วงหน้า: หมายเลขใด ๆ ที่ลงท้ายด้วย 0 กลายเป็นจำนวนสั้นของตัวเลขเมื่อย้อนกลับ ...
powtac

44
ฉันรู้ว่าอัลกอริทึมที่ใช้เวลาเวลาที่ไม่ทั้งหมดแต่ใช้งานได้เฉพาะกับตัวเลข palindromic;)
schnaader

พบเวลาเขียนตัวเองใหม่ ฉันหวังว่านี่จะเป็นปริศนาที่เอลตันตั้งใจทำ
dmckee

คำตอบ:


85

HTML 21 7 ตัวอักษร (1 อักขระถ้าฉันหน้าด้าน ... )

‮n

แทนที่nด้วยหมายเลขของคุณ


1
นี่เป็นอัจฉริยะธรรมดา ฉันจะไปหนึ่งตัวละคร หรือ 2 ตามที่เข้ารหัสเป็นสองไบต์ใน UTF-16: P
tomsmeding

17
ฮ่าฮ่าฮ่าฉันค้นหาด้วย Google บนแท็กนั้นและได้รับรางวัลYour search -‮ - ไม่ตรงกับเอกสารใด ๆ
JoeFish

คุณสามารถลองลิงค์นี้ในเบราว์เซอร์:data:text/html,&%238238;egnahcxEkcatS olleH
F. Hauri

3
ตลกในGoogle transateด้วย @ JoeFish: ฉันไม่สามารถทำซ้ำได้โปรดโพสต์ลิงค์!
เอฟ HAURI

1
@ JoeFish เมื่อฉันดูความคิดเห็นชื่อผู้ใช้ของคุณจะถูกพลิกและมีข้อความหลังจากนั้น txet emos si ereH
Stefnotch

32

หลาม

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

แก้ไข:

วิธีการแก้ปัญหาที่สั้นกว่าตามที่แนะนำโดย @gnibbler:

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

หรือถ้าด้านบนไม่ชัดเจน:

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

4
s[::-1]เร็วกว่ามาก''.join(reversed(s))
ริซา

4
คุณสามารถใช้ backticks (สำหรับการพิมพ์ซ้ำ) แทนการใช้ str
gnibbler

@gnibbler ขอบคุณสำหรับคำแนะนำ ฉันอัพเดตคำตอบแล้ว
เวเดอร์

2
TBH นั้นไม่ใช่ฟังก์ชั่น / ขั้นตอน / สิ่งที่คุณต้องการเรียกมันและสเปคนั้นต้องการ
Thomas Eding

นอกจากนี้ยังไม่ยอมรับแม้แต่ค่า ...
Exelian

28

สากล (ภาษาผู้ไม่เชื่อเรื่องพระเจ้า / เป็นอิสระ )

หากคุณต้องการที่จะใช้ตัวเลขเท่านั้น (หลีกเลี่ยงการแปลงหมายเลขที่สตริง) และไม่ต้องการที่จะใช้บางส่วนเฉพาะห้องสมุด (จะสากลสำหรับภาษาใด ๆ ):

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

นี่คืองูหลาม แต่มันสามารถทำได้ในภาษาใด ๆ เพราะมันเป็นเพียงวิธีการทางคณิตศาสตร์


หากคุณแทนที่modด้วย%ก็ถูกต้องหลาม;)
phihag

คุณถูกต้องจริง ๆ แล้ว 10x 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

คุณค่าของคุณอยู่ที่ไหน


2
ในฐานะที่เป็นฟังก์ชั่น: |.&.":"reverse under do" ซึ่งเป็นงานแปลตามตัวอักษร
FireFly



8

Befunge (3 ตัวอักษร)

โปรแกรมที่รันได้สมบูรณ์:

N.@

Nหมายเลขของคุณอยู่ที่ไหน กฎบอกว่า "ยอมรับการโต้แย้งค่าจำนวนเต็ม "; ใน Befunge คุณสามารถป้อนจำนวนเต็มตั้งแต่ 0 ถึง 9 เท่านั้น


3
สิ่งเหล่านี้เป็นตัวอักษรเพียงตัวเดียวแต่ตัวเลขอื่น ๆ สามารถแทนได้อย่างแน่นอน มิฉะนั้นคำตอบที่ชนะจะเป็น Brainfuck ด้วยโปรแกรมเปล่า ;-)
FireFly

8

ภาษาอิสระ / คณิตศาสตร์

แรงบันดาลใจจากคำตอบของคิริลคิรอฟข้างต้น ฉันอยากรู้เกี่ยวกับคุณสมบัติทางคณิตศาสตร์ของการกลับจำนวนดังนั้นฉันตัดสินใจที่จะตรวจสอบเล็กน้อย

ปรากฎว่าคุณพล็อตความแตกต่างn - rev(n)ของจำนวนธรรมชาติnในบางฐานrคุณจะได้รูปแบบเช่นนี้ ( (n - rev(n)) / (r - 1)สำหรับการr=10พันที่rคอลัมน์สีแดงหมายถึงจำนวนลบ):

table of differences

ลำดับนี้สามารถสร้างขึ้นได้เช่น (pseudocode):

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: th ตามลำดับเพื่อที่เราจะได้มีการแสดงออกในรูปแบบปิดเพื่อแก้ปัญหาทั้งหมด น่าเสียดายที่ฉันไม่สามารถค้นหานิพจน์ดังกล่าว ... แต่ดูเหมือนว่าควรจะเป็นไปได้ :(

ดังนั้นใช่ไม่มากนักกอล์ฟรหัสเป็นความอยากรู้ทางคณิตศาสตร์ แต่ถ้ามีการแสดงออกในรูปแบบปิดของลำดับข้างต้นมันอาจจะมีประโยชน์ในการส่งกอล์ฟ PL ที่เหมาะสม


7

Haskell, 28 24 ตัวอักษร

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

2
แล้วไงf=read.reverse.show.(+0)ล่ะ
FUZxxl

2
(+0): มนุษย์ที่ถูกกฎหมาย! แม้ว่าในทางเทคนิคแล้วคุณไม่ต้องการใช้.(+0)เลย แต่fจะมีความหลากหลายมากกว่าปัญหาที่ต้องการ (อนุญาตให้ส่งคืนเอาต์พุต 'พิมพ์คล้ายกัน') ฉันจะโกนตัวละครทั้งห้าออกไป
Thomas Eding

7

เป็นกลุ่ม

17 ตัวอักษร

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

ฉันจะบอกว่าเป็น 10 ตัวอักษร (การกดแป้นพิมพ์) หากคุณพิมพ์คำสั่งโดยตรงในกลุ่ม Btw ฉันได้เรียนรู้สิ่งใหม่ ๆ เป็นกลุ่มในวันนี้ขอบคุณ :)
daniero

6

สกาลา - 33 ตัวอักษร

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

1
+1 สำหรับสกาล่าดีใจที่ได้เห็นอย่างอื่นมากกว่าไพ ธ อน / ruby ​​/ perl
lhk

สิ่งนี้จะล้มเหลวเมื่อลบค่าลบ -123 ควรกลับ -321
samach

6

ทับทิม (14)

x = 13456
x.to_s.reverse

3
"ไม่" ไม่ได้กำหนด ฉันคิดว่าคุณตั้งใจจะใส่ "x" ที่นั่น
David Rivers

3
123456.to_s. การย้อนกลับยิ่งสั้น
Steffen Roller

@mmdemirbas - ขอบคุณสำหรับการแก้ไขการพิมพ์ผิด
bodacious

3
จำเป็นต้อง.to_s.reverse.to_iปฏิบัติตามข้อกำหนด
ชำนาญในประวัติศาสตร์

หมายเลขที่ขึ้นต้นด้วย 0 ดูเหมือนจะไม่ทำงาน 0112.to_s.reverse.to_i => 47
Joel

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

(Sub) แบบฟอร์มโปรแกรม: 25 ตัวอักษร

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

ฉันคิดว่าตัวอย่างงูหลามอื่น ๆ ที่จะโกงหรืออย่างน้อยราคาถูกเนื่องจากการใช้อินพุต hardcoded และ / หรือไม่ตรงตามข้อกำหนดทั้งหมด


5

Golfscript 5 ตัวอักษร

`-1%~

สิ่งนี้รับอาร์กิวเมนต์บนสแต็กและปล่อยให้ผลลัพธ์บนสแต็ก ฉันใช้ประโยชน์จากตัวเลือก "โปรแกรมย่อย" ใน spec: หากคุณยืนยันในฟังก์ชั่นนั่นคือตัวอักษรสี่ตัวที่เหลือไว้ใน stack:

{`-1%~}:r

ฉันคิดว่าคุณต้องมีความหมาย`-1%~มากกว่า`-1$~(และฉันมีเสรีภาพในการแก้ไขคำตอบของคุณเพื่อพูดเช่นนั้น)
Ilmari Karonen

5

ในการเขียนสคริปต์เชลล์:

  echo "your number"|rev

หวังว่านี่จะเป็นประโยชน์ :)


สิ่งที่ดี! ไม่ทราบว่าทุบตีก็สามารถที่จะ!
ปราณี Bauva

1
ฉันเดาในทางเทคนิคแล้วมันจะคืนค่า "number" ที่พิมพ์ในทำนองเดียวกัน ... อาจจะสั้นลงอีกrev<<<yournumberเช่นrev<<<132(สำหรับ bash / zsh ไม่ใช่ POSIX ต่อแม้ว่า)
FireFly

1
เพียงแค่revเป็นพอคำถามที่ไม่ได้บอกว่ามันมีจะเป็นฟังก์ชั่น คุณสามารถเปรียบเทียบrevกับฟังก์ชันในตัวแม้ว่าจะไม่ใช่ฟังก์ชัน
nyuszika7h

สิ่งนี้ไม่ถูกต้อง: 'rev' ไม่ใช่ builtin แต่เป็นการเรียกใช้โปรแกรมภายนอก
Bastian Bittorf

67 ไบต์บริสุทธิ์ POSIX shell: X = $ 1; ในขณะที่ [$ X! = 0]; ทำ Y = $ ((Y * 10 + X% 10)); X = $ ((X / 10)) เสร็จแล้ว echo $ Y
Bastian Bittorf

3

ค่อนข้างจะสาย แต่

APL, 3

⍎⌽⍞

หากคุณยืนยันในฟังก์ชั่น

⍎∘⌽∘⍕

ดูเหมือนว่าฉันจะไม่สามารถเห็นสำเนาด้านบน ... (เนื่องจากอยู่ในหน้า 2)
TwiNight

ฉันเสียใจที่ไม่มีใครให้ brainfu * k หรือวิธีแก้ปัญหาช่องว่าง :( (อีกหนึ่งโหวตและคุณอยู่ในหน้าแรก)
Kiril Kirov

@KirilKirov ฉันมีวิธีแก้ไขปัญหาสมอง * k: codegolf.stackexchange.com/a/32826/24829
rpax

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
มันเป็นวิธีการแก้ปัญหาทางคณิตศาสตร์ คณิตศาสตร์ไม่ใช่ตัวเลขไม่ใช่เลขคณิต คณิตศาสตร์ยังเกี่ยวกับสตริงของสัญลักษณ์ และในกรณีพิเศษนี้การแปลงไปยังและจากสตริงเป็นเพียงการแปลงเป็นและจากฐาน -10
R. Martinho Fernandes

สิ่งที่ฉันหมายถึงโดย "ไม่ใช่โซลูชันทางคณิตศาสตร์" คือเราไม่ได้ทำคณิตศาสตร์ด้วยตนเอง วิธีการกำลังทำการแยกวิเคราะห์และคณิตศาสตร์ทั้งหมดสำหรับเรา ตรงข้ามกับคำตอบของอีริคคิริลคิรอฟ
Victor

จะล้น ...
st0le

2

Lua

ตัวเลขและสตริงสามารถใช้แทนกันได้ดังนั้นนี่จึงเป็นเรื่องเล็กน้อย

string.reverse(12345)

2

อันนี้จริง ๆ แล้วใช้อินพุตไม่เหมือนส่วนที่เหลือ:

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

Python btw


2

Actionscript

43 ตัวอักษร NUM เป็นพารามิเตอร์ของฟังก์ชัน:

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


2

Perl, 11 ตัวอักษร

pจำเป็นต้องใช้การตั้งค่าสถานะนี้รวมอยู่ในการนับ

การใช้งาน:

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

ฉันนับ 10 ตัวอักษร
F. Hauri

pธงจะรวมอยู่ในการนับ
Zaid

2

Clojure (42 ตัวอักษร)

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

ตัวอย่างการใช้งาน:

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

ส่งคืน 12389


2

เสียงกระเพื่อมสามัญ - 60 ตัวอักษร

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

คุณจะได้รับ 9724


ทำไม(first(list? parse-integerส่งคืนหมายเลขแล้ว
Florian Margaine

2

K, 3 ไบต์:

.|$

หาค่า ( .) reverse ( |) ของการร่ายไปที่ string ( $)

ตัวอย่างการใช้งาน:

  .|$76543
34567

2

อาร์เอส , 20 ไบต์

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

ในทางเทคนิคแล้วสิ่งนี้ไม่นับ (อาร์เอสถูกสร้างขึ้นเมื่อต้นปีนี้) แต่ฉันไม่เห็นคำตอบที่อิงจาก regex อื่น ๆ และฉันคิดว่านี่เป็นระเบียบ

การสาธิตสด

คำอธิบาย:

#

แทรกอักขระปอนด์ที่จุดเริ่มต้นของสตริง สิ่งนี้ใช้เป็นเครื่องหมาย

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

เพิ่มอักขระตัวสุดท้ายของสายอักขระหลักอย่างต่อเนื่องไปยังพื้นที่หน้าเครื่องหมายจนกระทั่งไม่มีตัวอักษรเหลืออยู่

#/

ลบเครื่องหมาย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.