จัดเรียงตัวเลขตามลำดับตัวอักษร


24

ได้รับจำนวนเต็มไม่เป็นลบ ( n) สร้างฟังก์ชั่นที่ให้ผลตอบแทนตามลำดับตัวอักษรตามที่สะกดที่แท้จริงของแต่ละหลักในnn

ตัวอย่าง:

Input: 101
>> one, zero, one
>> one, one, zero
Output: 110

Input: 31948
>> three, one, nine, four, eight
>> eight, four, nine, one, three
Output: 84913

Input: 5544
>> five, five, four, four
>> five, five, four, four
Output: 5544

Input: 1234567890
Output: 8549176320

หมายเหตุ: การดำเนินการในตัวอย่างเป็นเพียงตัวอย่างเท่านั้นและไม่จำเป็นต้องรวมในเอาต์พุต ต้องส่งคืนเฉพาะตัวเลขที่เรียงตามตัวอักษร

นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ

แก้ไข: อินพุตสามารถนำไปใช้ในรูปแบบที่ต้องการซึ่งเหมาะสมกับภาษาของคุณมากที่สุดและสามารถสร้างเอาต์พุตในทำนองเดียวกันโดยกลับมาจากฟังก์ชั่นหรือการพิมพ์ ข้อมูลที่ป้อนจะเป็นจำนวนธรรมชาติเสมอ (รวมถึง 0) และจะไม่มีเลข 0 นำหน้า

พบรายการ OEIS ที่เกี่ยวข้อง (A057846) ที่ @DomHastings


1
ฉันยังสามารถใช้ตัวเลขเป็นสตริงและส่งออกสตริงได้หรือไม่
ThreeFx

1
@nimi 00....
TuxCrafting

5
คุณอาจต้องการที่จะระบุว่าการป้อนข้อมูลเป็นทศนิยมหรือคุณจะได้รับคำตอบที่หน้าด้านโดยใช้ unary ...
Martin Ender

6
นี่เป็นความสับสนเล็กน้อย: คุณเขียนในความคิดเห็นที่คุณคาดหวังว่าจะเป็นประเภทตัวเลขเป็นอินพุทและเอาท์พุทของฟังก์ชั่น ดังนั้นถ้าผลลัพธ์คือ849หมายความว่าเราได้รับอนุญาตให้พิมพ์จำนวน849แต่ไม่สตริง"849"? IMO นี่เป็นเพียงรูปแบบ I / O ที่ยุ่งยาก (ไม่ดี!) บนความท้าทายที่สมบูรณ์แบบ
ลินน์

1
เลขศูนย์นำสำคัญหรือไม่ เช่น001เอาต์พุตอะไร หากพวกเขามีความสำคัญและผลลัพธ์ไม่ได้1ภาษาส่วนใหญ่จะต้องใช้สตริงเป็นข้อมูลสำหรับความจริงง่ายๆว่ามันเป็นเรื่องหยาบไม่ได้ผลและมักจะเป็นไปไม่ได้ที่จะขอให้ parser รักษาศูนย์นำในฐานตัวเลข 10 ตัวอักษร
แมว

คำตอบ:


12

Perl 6 ,  32  28 ไบต์

{+[~] .comb.sort: *.Str.uniname}
{+[~] .comb.sort: *.uniname}

คำอธิบาย:

{
  # turn the following into a Numeric
  +

  # fold the following list using string concatenation operator
  [~]

    # split $_ into individual characters
    # (implicit method call on implicit parameter)
    .comb

    .sort:
    *.uniname # sort by the Unicode name of the character (digit)
}

ทดสอบ:

#! /usr/bin/env perl6
use v6.c;
use Test;

my @tests = (
  101 => 110,
  31948 => 84913,
  5544 => 5544,
  1234567890 => 8549176320,
);

# give the lambda a lexical name for clarity
my &int-sort = {+[~] .comb.sort: *.uniname}

plan 3 * @tests;

for @tests -> $_ ( :key($input), :value($expected) ) {
  put '';
  isa-ok $input, Int, "input ($input) is an Int";

  my $output = int-sort $input;

  is $output, $expected, .gist;
  isa-ok $output, Int, "output ($output) is an Int"
}
1..12

ok 1 - input (101) is an Int
ok 2 - 101 => 110
ok 3 - output (110) is an Int

ok 4 - input (31948) is an Int
ok 5 - 31948 => 84913
ok 6 - output (84913) is an Int

ok 7 - input (5544) is an Int
ok 8 - 5544 => 5544
ok 9 - output (5544) is an Int

ok 10 - input (1234567890) is an Int
ok 11 - 1234567890 => 8549176320
ok 12 - output (8549176320) is an Int


8

JavaScript (ES6), 54

แก้ไขจำนวนถ่านเดียวกัน แต่หลีกเลี่ยงตัวแปรโกลบอลz

อินพุต / เอาต์พุตเป็นสตริง

n=>[...n].sort((a,b)=>n[a]-n[b],n='9487216503').join``

ทดสอบ

f=n=>[...n].sort((a,b)=>n[a]-n[b],n='9487216503').join``

function test() {
  O.textContent=f(I.value)
}

test()
<input id=I type=number value=31948 oninput='test()'>
<pre id=O></pre>


2
รักนี้ใช้ป้อนตัวเลขเป็นดัชนีของสตริงz...
Dom เฮสติ้งส์

6

Haskell, 62 51 44 ไบต์

ตามที่ @nimi แนะนำการใช้ list comprehension นั้นสั้นกว่าฟังก์ชั่นการเขียน:

f x=0+read[a|a<-"8549176320",b<-show x,a==b]

สำหรับการอ้างอิงรุ่นของฉัน:

f n=read.(=<<)(\x->filter(==x)$show n)$"8549176320"

เวอร์ชั่นของ pointfree นั้นยาวกว่านี้เล็กน้อย:

f=flip(read.)"8549176320".(=<<).flip(filter.(==)).show

ตรงไปตรงมา: กรองตัวเลขตามลำดับที่ถูกต้องแล้วต่อผลลัพธ์ให้ถูกต้อง


5

Pyth, 12 10 ไบต์

ox`C" Ȁ\0

ไม่แน่ใจว่าสามารถเล่นกอล์ฟต่อไปได้หรือไม่ อินพุตต้องอยู่ในเครื่องหมายคำพูด

บันทึก 2 ไบต์ต้องขอบคุณ @isaacg!

ใน pythonic pseudocode:

                Q = input()
o          Q    sort(Q, key = lambda N:
  `C" Ȁ\0        repr(base256toDec(" Ȁ\0"))
 x        N         .index(N)     # 8 being absent from the number yields -1
                )

ทดสอบได้ที่นี่


@busukxuan ฉันยังได้รับ14 ไบต์ : p
Adnan

@Adnan กลับไปเป็นตัวเลขแล้ว ดูเหมือนจะมีไม่ได้เป็นวิธีการบีบอัดตัวเลขเหล่านี้ ...
busukxuan

2
บันทึก 2 ไบต์โดยแทนที่549176320ด้วยC" »Ä\0
isaacg

@isaacg ขอบคุณ! ฉันพยายามแปลงให้เป็นฐาน 256 สองสามครั้ง แต่ผลลัพธ์ไม่ถูกต้อง คุณทำถูกต้องอย่างไร?
busukxuan

1
คุณจะต้องหลบหนีไบต์ null \0โดยการแทนที่พวกเขาด้วย นั่นอาจเป็นปัญหาที่คุณพบ
isaacg

4

Perl, 37 ไบต์

รหัส 36 ไบต์ + 1 บรรทัดคำสั่งไบต์ (-F)

say sort{8549176320=~/$b.*$a/||-1}@F

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

echo -n "04823" | perl -F -M5.010 entry.pl


3

เยลลี่ 11 ไบต์

“U1°ŀ”OṾf@€

ลองที่นี่

คำอธิบาย

“U1°ŀ”O       Get the Unicode ordinals of “U1°ŀ”
                (all of which are coincidentally single bytes
                in the Jelly code page!)
              The result is [85, 49, 176, 320].
       Ṿ      Uneval. This gets us the string “85,49,176,320”.
        f@€   For each char in this string, extract all chars
                from the first command line argument that
                equal it.

3

Mathematica 35 78 47 ไบต์

บันทึกแล้ว 31 ไบต์ขอบคุณคำแนะนำโดย LIAMnYP!

FromDigits@SortBy[IntegerDigits@#,IntegerName]&

IntegerDigitsแยกตัวเลขออกเป็นตัวเลขแล้วเรียงลำดับตามชื่อในภาษาอังกฤษ FromDigitsรวบรวมตัวเลขเป็นเลขฐาน 10


FromDigits@SortBy[IntegerDigits@#,IntegerName]&[1234567890]

8549176320


ด้วยการใช้ "SortBy" คุณไม่มีปัญหาในการแปลงคำกลับเป็นตัวเลข FromDigits@SortBy[IntegerName]@IntegerDigits@#&
LLlAMnYP

นอกจากนี้ยังInterpreterมีความเจ็บปวดช้าดังนั้นมันจึงเป็นโบนัสเพิ่มเติม
LLlAMnYP

การปรับปรุงที่ยอดเยี่ยม
DavidC

11 ไบต์ใน Mtmca เมื่อใดก็ตามที่เกิดขึ้น
Michael Stern

3

C, 142 141 117

ผ่านพารามิเตอร์เป็นlong long *ไปf(); ฟังก์ชั่นปรับเปลี่ยนพารามิเตอร์:

f(long long*n){char*c="8549176320",g[10]={0};for(;*n;*n/=10)++g[*n%10];for(;*c;++c)for(;g[*c-48]--;*n=*n*10+*c-48);}

long longเป็นสิ่งจำเป็นเนื่องจากกรณีทดสอบครั้งล่าสุดโอเวอร์โฟลว์ a intเมื่อเรียงลำดับ


2

Python 2 - 95 ไบต์

def s(n):
    l=list("8549176320")
    return "".join(sorted(list(n),key=lambda x: l.index(x)))

พยายามตีกอล์ฟต่อไป ... ฉันคิดว่าบรรทัด 2 ไม่จำเป็นและนี่อาจกลายเป็น 1 แลมบ์ดา

แก้ไข: 49 รุ่นถ่านในความคิดเห็นขอบคุณที่ xnor และ vaultah เพื่อขอความช่วยเหลือ


lambda n:''.join(sorted(`n`,key="8549176320".find))
vaultah

4
@vaultah ทางออกที่ดีคุณควรโพสต์มัน! ฉันคิดว่าคุณสามารถละเว้น8เพื่อfindให้ -1
xnor

1
โอ้ที่ฉลาด @xnor สั้นที่สุดที่ฉันจะได้รับlambda n: "".join(sorted(n,key="549176320".find))ซึ่งก็คล้ายกับที่คุณแนะนำ vaultah คุณควรโพสต์มัน!
Jeremy

1
@Jeremy คุณควรแก้ไขเวอร์ชันนั้นในโพสต์ของคุณ
DJMcMayhem

2
อย่างน้อยกำจัดช่องว่างที่ฟุ่มเฟือย ... การเยื้องสามารถทำได้ด้วยพื้นที่เดียว นอกจากนี้สิ่งนี้ไม่ถูกต้องเนื่องจากOP ระบุว่าเอาต์พุตต้องเป็นชนิดตัวเลข
Mego

2

- Oracle 11 (SQL): 164 ไบต์

  SELECT LISTAGG(DECODE(s,0,'zero',TO_CHAR(TO_DATE(s,'j'),'jsp')),',')WITHIN GROUP(ORDER BY 1)FROM(SELECT SUBSTR(&1,level,1)s FROM dual CONNECT BY LEVEL<=LENGTH(&1));

แบบยาวและคำอธิบาย

  SELECT LISTAGG(DECODE(s,0,'zero',TO_CHAR(TO_DATE(s,'j'),'jsp')),',') WITHIN GROUP (ORDER BY 1)
  FROM ( SELECT SUBSTR(&1,level,1)s FROM dual
           CONNECT BY LEVEL <= LENGTH(&1)
        );

รับอินพุตเป็นพารามิเตอร์สำหรับสคริปต์:

  SELECT &1 FROM dual

แถว "สร้าง" โดยใช้การเชื่อมต่อโดยอิงจากความยาวของอินพุต:

  CONNECT BY LEVEL <= LENGTH(&1)

ตัดตัวเลขแต่ละตัวออกจากสายอักขระสำหรับแต่ละตำแหน่ง:

  SELECT SUBSTR(&1,level,1)s FROM dual

แปลงตัวเลขเป็นวันที่จูเลียนและกลับสู่ Char เพื่อรับการสะกด:

  TO_CHAR(TO_DATE(s,'j'),'jsp')

ตรวจสอบศูนย์ - กรณีพิเศษ

  DECODE(s,0,'zero'

ใช้ฟังก์ชัน LISTAGG เพื่อต่อแถวกลับเข้าไปในรายการแถวเดียวคั่นด้วยเครื่องหมายจุลภาคเรียงตามลำดับตัวอักษร

  LISTAGG(DECODE(s,0,'zero',TO_CHAR(TO_DATE(s,'j'),'jsp')),',') WITHIN GROUP (ORDER BY 1)

สนุกกับการพยายามปรับแต่ง SQL เพื่อทำสิ่งนี้เสมอ ...



1

แร็กเก็ต, 142 130 ไบต์

(λ(n)(string->number(list->string(sort(string->list(~a n))char<? #:key(λ(m)(string-ref "9487216503"(-(char->integer m)48)))))))

ซึ่งแปลงเป็นกว่า เกือบครึ่งหนึ่งของความยาว ( 76 64 bytes)


(+ 1 answer)สำหรับแร็กเก็ต!
แมว

@cat มีประโยชน์สำหรับฉันที่จะฝึกซ้อมแร็กเก็ตต่อไปเนื่องจากเป็นวิธีที่จะรักษาความรู้ด้านการเขียนโปรแกรมที่ใช้งานได้ในขณะที่ทำงานกับโปรแกรม Java ดั้งเดิม (และ Python ที่สืบทอดน้อยกว่า) จากเพื่อนร่วมงานของฉัน ฉันสามารถพูดจาโผงผางเกี่ยวกับการมีวัตถุไม่จำเป็นต้องสร้างโปรแกรมเชิงวัตถุ แต่แทนที่จะทำอย่างนั้นฉันก็แค่ทำให้ปัญหากอล์ฟของฉันหายไปในแร็กเกต
Steven H.

อืม ... ฉันเห็นอกเห็นใจอย่างแน่นอนและเป็นไปได้และสนุกกับการเขียน Python ที่ใช้งานได้ แต่ Java ของ Fawful บางทีคุณอาจได้ผู้บังคับบัญชาของคุณเพื่อให้คุณใช้ Scala สำหรับการนำไปใช้งานและ Java ก็เหมือนกับกาว :)
แมว

โดยวิธีการถ้าคุณชอบ Forth และตาของคุณเหนื่อยเล็กน้อยจากการอ่าน Lisp Inside-Out คุณควรตรวจสอบปัจจัยซึ่งเป็นเสียงกระเพื่อมและ CLOS แต่ใน postfix Forth-y และปลอมตัวจุดฟรี
แมว

1

TSQL, 260 ไบต์

ใช้การเรียงลำดับแบบย้อนกลับของฟองเพื่อหลีกเลี่ยงการอ้างถึงความยาวเพื่อบันทึกบางไบต์

แข็งแรงเล่นกอล์ฟ:

DECLARE @ varchar(99)=101

,@i INT=99,@j INT=98WHILE @i>1SELECT
@=IIF(CHARINDEX(x,'598327614')>CHARINDEX(y,'598327614'),STUFF(STUFF(@,@j,1,x),@i,1,y),@),@i-=IIF(@j=1,1,0),@j=IIF(@j=1,@i,@j-1)FROM(SELECT
SUBSTRING(@,@i,1)x,SUBSTRING(@,@j,1)y)z
PRINT @

Ungolfed:

DECLARE @s BIGINT=1234567890

DECLARE @ char(99)=@s,@i INT=99,@j INT=98
WHILE @i>1
  SELECT 
    @=IIF(CHARINDEX(x,'236719458')>CHARINDEX(y,'236719458'),
        STUFF(STUFF(@,@j,1,x),@i,1,y),@), 
    @i-=IIF(@j=1,1,0),
    @j=IIF(@j=1,@i,@j-1)
  FROM(SELECT SUBSTRING(@,@i,1)x,SUBSTRING(@,@j,1)y)z
PRINT CAST(@ as bigint)

ยืนยันการใช้ชนิดจำนวนเต็มเป็นอินพุตและเอาต์พุตเพิ่ม 37 ไบต์


DECLARE @ varchar(99)=1010.o 101เปลี่ยนเป็นสตริงโดยอัตโนมัติหรือไม่?
แมว

ยังstuffเป็นชื่อฟังก์ชั่นที่น่ากลัวอย่างเป็นกลาง squashหรือshoveหรือpackจะดีกว่า: P
แมว

@cat ใช่มันจะถูกแปลงเป็นสตริงโดยอัตโนมัติ แต่นั่นจะเป็นการโกงตาม descriptino ฉันเห็นด้วยสิ่งต่าง ๆ เป็นชื่องี่เง่า
t-clausen.dk

1
ฉันหมายความว่าเราอาจจะเรียกทุกฟังก์ชั่นstuffเพราะนั่นคือสิ่งที่ทำหน้าที่: พวกเขาทำสิ่งต่าง ๆ จากนั้นโค้ดของคุณจะดูเหมือนstuff(stuff(4, 5, stuff), stuff(stuff()).(stuff())()); stuff(stuff)
cat

1

ClojureScript 45 ไบต์

#(apply str(sort-by(vec"9487216503")(str %)))

ใช้การส่งข้อมูลแบบสตริง -> การแปลงจาก Javascript รั่วไหลผ่านดังนั้นจึงไม่ใช่ Clojure ที่ถูกต้อง


1

Firebird ขนาด 317 ไบต์

แข็งแรงเล่นกอล์ฟ:

select list(s,'')from(with recursive q as(select 1 p,substring(:a from 1 for 1)s from rdb$database q union all select q.p+1 p,substring(:a from q.p+1 for 1)s from q where q.p<char_length(:a))select s from q order by iif(s=8,0,iif(s=5,1,iif(s=4,2,iif(s=9,3,iif(s=1,4,iif(s=7,5,iif(s=3,7,iif(s=2,8,iif(s=0,9,6))))))))))

Ungolfed:

select list(s, '')
from (
   with recursive q as (
      select 1 as p, substring(:a from 1 for 1) s
      from rdb$database q
      union all
      select q.p + 1 as p, substring(:a from q.p + 1 for 1) as s
      from q
      where q.p < char_length(:a)
   )
   select s
   from q
   order by iif(s = 8, 0,
               iif(s = 5, 1,
                  iif(s = 4, 2,
                     iif(s = 9, 3,
                        iif(s = 1, 4,
                           iif(s = 7, 5,
                              iif(s = 3, 7,
                                 iif(s = 2, 8,
                                    iif(s = 0, 9, 6)))))))))
)

ไม่มีฟังก์ชั่นการแยกใน Firebird แต่ฉันสร้างแบบสอบถามแบบเรียกซ้ำเพื่อให้ได้อักขระตัวถัดไปซ้ำ ๆ จากนั้นเลือกใหม่ในขณะที่เรียงลำดับตามคำสั่งที่เหมาะสมของเรา สุดท้ายเชื่อมผลลัพธ์เหล่านั้นกลับมารวมกันอีกครั้งในรายการ แทนที่ตัวคั่นจุลภาคเริ่มต้นด้วยค่าว่าง ฉันสามารถบันทึก 11 ไบต์ด้วยการสร้างตารางจำลองใหม่แทนrdb$databaseแต่ฉันคิดว่าอาจผิดกฎ


1

ZX Spectum, รหัสเครื่อง, 53 48 47 45 44 ไบต์

    org 49200 ; #c030

; table converts ascii to alfabetical order
; start from BASIC with any number as : PRINT "1234567890" AND USR 49208

convtab defb 249 ; zero defb 244 ; one defb 248 ; two defb 247 ; three defb 2+205 ; four defb 1+205 ; five defb 246 ; six defb 245 ; seven ; defb 0 ; eight ; defb 3 ; nine ; last 2 conversions hidden in call-command

start Call #2bf1    ; fetch stackindex
    call #2ab2 ; store back
    ld h,#c0    ; set highbyte of table


Sort Push de
loop ld b,d
    ld c,e
    inc de
    ld a,(bc)   ; fetch number
    Ld l,a
    ld a,(de)
    cp 34       ; endmarker "
    Jr z,exit   ; end reached?
    push hl     ; save number
    ld l,a
    Ld a,(hl)   ; convert second number
    pop hl
    cp (hl)     ; compare numbers
    jr nc,loop  ; in order, no swap
swap ld a,(bc)  ; swap original numbers
    ld l,a
    ld a,(de)
    ld (bc),a
    ld a,l
    ld (de),a
Exit pop de
    Ret z
    jr sort     ; check number for order


ด้วย Gnome-sort มันสามารถย่อให้สั้นลงและตารางสามารถสั้นลง 1 ไบต์ เวอร์ชันใหม่ที่จะมา ...
Johan Koelman

Gnome-sort ที่นี่ยาวขึ้น แต่การเพิ่มประสิทธิภาพอื่น ๆ
Johan Koelman

0

ปัจจัย, 128

[ 10 base> [ 48 - ] { } map-as dup [ number>text ] map zip [ second first ] sort-with [ first ] map [ 48 + ] ""map-as 10 >base ]

ไชโยสำหรับ builtins! : D


0

PHP, 126 ไบต์

เท่าที่ฉันรู้ php ไม่มี builtins ใด ๆ ที่จะช่วยได้จริงๆ (ที่ดีที่สุดที่ฉันสามารถทำได้โดยใช้ usort (str_split ()) คือ 5 ไบต์อีกต่อไป) ดังนั้นสิ่งเดียวที่ฉันมีความสุขในคำตอบนี้คือ เกมที่เล่นด้วย $ i เพื่อประหยัดสองไบต์ในการทำซ้ำ

<?php for($i=-1;$i<9;)$a[++$i]=preg_replace("/[^$i]/","",$argv[1]);array_multisort([9,4,8,7,2,1,6,5,0,3],$a);echo implode($a);

0

APL, 23 ไบต์

{⍎n['8549176320'⍋n←⍕⍵]}

คำอธิบาย:

  • n←⍕⍵: รับการเป็นตัวแทนสตริงnและเก็บไว้ในn
  • '8549176320'⍋: พบการเปลี่ยนแปลงของnทุกประเภทที่ได้รับการสั่งซื้อn8549176320
  • n[... ]: เรียงลำดับใหม่nตามการเปลี่ยนแปลงนั้น
  • : ประเมินผลลัพธ์ (เพื่อเปลี่ยนกลับเป็นตัวเลข)

ตั้งแต่ I / O อาจจะเป็นสตริงคุณสามารถลบและ แปลง tradfn โดยการลบ{และ}แทนสำหรับ สุดท้ายเอา0เป็นประเภทที่ไม่แสดงที่สิ้นสุด:n['854917632'⍋n←⍞]
อดัม

0

Clojure 53 ไบต์

แนวคิดแนวคิดความเข้าใจรายการจากโซลูชัน Haskell นั้นสั้นที่สุด:

#(apply str(for[p"8549176320"b(str %):when(= p b)]p))

วิธีดั้งเดิมของฉันยาวกว่า 1 ไบต์:

#(apply str(sort-by(zipmap"549176320"(range))(str %)))

คุณสามารถดูทั้งฟังก์ชั่นออนไลน์ได้ที่นี่: https://ideone.com/afac5n


0

เสียงกระเพื่อมสามัญ 104

(lambda(n)(#1=parse-integer(sort(format()"~A"n)'string<= :key(lambda(u)(format()"~R"(#1#(string u)))))))

Ungolfed

(lambda (n)
  (parse-integer
   (sort (format nil "~A" n)
         #'string<=
         :key (lambda (u) (format nil "~R" (parse-integer (string u)))))))

แปลงจำนวนเต็มเป็นสตริงเรียงอักขระโดยใช้การstring<=เปรียบเทียบในขณะที่ใช้:keyฟังก์ชันแบบกำหนดเองซึ่งแปลงอักขระที่กำหนดเป็นการแสดงภาษาอังกฤษของค่าตัวเลขที่แทน โดยปกติแล้วฉันจะไม่ใช้ฟังก์ชั่นคีย์ที่ทำอะไรได้มากเท่านี้ แต่มันมีค่าใช้จ่ายน้อยกว่าในไบท์มากกว่าการตกแต่ง / เรียงลำดับ / ยกเลิกการตกแต่ง


0

Python 3, 234 ไบต์

นี่เป็นการแปลโดยตรงของคำตอบตัวคูณของฉันเพื่อความสนุกสนาน

def f(n):
 s=list(map(int,str(n)))
 return int("".join(list(map(str,list(map(lambda x:x[1],sorted(list(zip(list(map(lambda t:{0:"zero",1:"one",2:"two",3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine"}[t],s)),s)))))))))

ความหมายของการประเมินผลแผนที่ "สันหลังยาว" และวัตถุซิปเป็นชิ้นส่วนที่ยากต่อการหาข้อผิดพลาดของการขับม้าของแท้ในจักรวาล บางครั้งs = map(f, x)จะไม่อนุญาตให้sใช้อย่างถูกต้องหรือเลย



0

C, 80 ไบต์

รับสายที่มีตัวเลขในฐาน 10 แล้วพิมพ์ไปที่stdio:

F(char*i){for(char*p,d,*o="8549176320";*o;++o)for(p=i;d=*p++;d-*o||putchar(d));}


0

Python 3, 74 ไบต์

lambda x:''.join(i[1]for i in sorted(['9487216503'[int(j)],j]for j in x))

คุณอาจสามารถบันทึกไบต์โดยใช้แลมบ์ดา
Daniel

0

PHP , 107 ไบต์

function($a){usort($a,function($a,$b){return($z=array_flip([8,5,4,9,1,7,6,3,2,0]))[$a]-$z[$b];});return$a;}

ลองออนไลน์!

ใช้ฟังก์ชันการเปรียบเทียบที่ผู้ใช้กำหนดเพื่อปรับลำดับการเรียง

เอาท์พุต

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