หมายเลขแรกที่มีตัวอักษรแต่ละตัว


41

ให้ตัวอักษรเดียวจาก A ถึง Z (ยกเว้น J และ K) เป็นอินพุตเอาต์พุตจำนวนเต็มที่ไม่เป็นลบที่เล็กที่สุดที่มีตัวอักษรนั้นในรูปแบบที่เขียน สมมติว่าตัวเลขไม่เคยมีคำว่า "และ" ดังนั้น101ก็คือ "หนึ่งร้อยหนึ่ง" ไม่ใช่ "หนึ่งร้อยและหนึ่ง" สมมติอเมริกัน (สั้นขนาด) นับดังนั้นหนึ่งล้านบาทและเป็นหนึ่งในพันล้าน10^610^9

a 1000                           one thousand
b 1000000000                     one billion
c 1000000000000000000000000000   one octillion
d 100                            one hundred
e 0                              zero
f 4                              four
g 8                              eight
h 3                              three
i 5                              five
j 
k
l 11                             eleven
m 1000000                        one million
n 1                              one
o 0                              zero
p 1000000000000000000000000      one septillion
q 1000000000000000               one quadrillion
r 0                              zero
s 6                              six
t 2                              two
u 4                              four
v 5                              five
w 2                              two
x 6                              six
y 20                             twenty
z 0                              zero

J และ K ไม่ได้เป็นส่วนหนึ่งของข้อมูลจำเพาะอินพุตดังนั้นพฤติกรรมของคุณจึงไม่ได้กำหนดไว้ รับหนึ่งในตัวอักษรข้างต้นส่งออกจำนวน (ทศนิยม) ถัดจากมัน คุณสามารถรับอินพุตเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ แต่คุณไม่สามารถกำหนดให้อินพุตบางตัวเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่อื่น ๆ ได้

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


11
ฉันไม่แน่ใจว่าทำไมความท้าทายนี้จึงลดน้อยลงมาก? เท่าที่ฉันเห็นมันชัดเจนและอยู่ในหัวข้อ แน่ใจว่าเป็นไปได้มากที่สุดที่จะเข้ารหัสตัวอักษรแต่ละตัวให้ตรงกับหมายเลขที่ตรงกัน แต่ฉันไม่คิดว่าจะปรับแก้ 3 downvote?
caird coinheringaahing

2
@Jonah เพิ่มแล้วขอบคุณสำหรับคำติชม
Stephen

10
คุณกำลังพูดว่า "หนึ่งพันล้านล้าน" ไม่ใช่จำนวนจริงหรือ
Jo King

2
@ โจกิ้งมันคืออะไรแทนทศนิยม? :)
สตีเฟ่น

8
ฉันคิดว่าผู้ใช้ StackExchange ที่คิดว่า k ไม่สามารถปรากฏในชื่อของตัวเลขนั้นค่อนข้างน่าเบื่อในจินตนาการ
Andrew Grimm

คำตอบ:


16

JavaScript (Node.js) ,  78 75 74  73 ไบต์

c=>(n=([x]=Buffer(c+'8>P7 $(#%  +;! MD &"$%"&4 '))[x-96]-53)<0?n+21:10**n

ลองออนไลน์!

อย่างไร?

แต่ละค่ามีการเข้ารหัสด้วยอักขระที่พิมพ์ได้หนึ่งตัว เราใช้ช่วงความ ASCII [32..52]การเข้ารหัสn-32และช่วง[53..80]การเข้ารหัส10n-53 53

แสดงความคิดเห็น

c =>                                   // c = input character
  ( n =                                //
    ( [x] =                            // let x be the 1st byte of the
        Buffer(                        // buffer made of:
          c +                          //   c followed by
          '8>P7 $(#%  +;! MD &"$%"&4 ' //   the encoded values
        )                              //
    )[x - 96]                          // let n be the encoded value corresponding to c
    - 53                               // minus 53
  ) < 0 ?                              // if n is negative:
    n + 21                             //   return n + 21
  :                                    // else:
    10 ** n                            //   return 10 ** n

7

Ruby , 65 ไบต์

->n{i="CI[B?;7<:??4F>?XO?9=;:=9+?"[n.ord-65].ord-64;i>0?10**i:~i}

ลองออนไลน์!

การปรับปรุงได้แรงบันดาลใจจากความคิดเห็นของ GB

Ruby , 70 ไบต์

->n{i="ci}b@DHCE@@KfA@xo@FBDEBFT@"[n.ord-65].ord;i>96?10**(i-96):i-64}

ลองออนไลน์!



@GB ขอบคุณแนวคิดของการมีค่าลบสำหรับiมีประโยชน์ ลงไปที่ 65.
Level River St

6

/// , 125 ไบต์

/:/\/\///T/000:d/100:a/d0:m/aT:b/aTT:q/bTT:p/qTTT:c/pT:e/0:f/4:g/8:h/3:i/5:l/11:n/1:o/0:r/0:s/6:t/2:u/4:v/5:w/2:x/6:y/20:z/0/

ลองออนไลน์!

ป้อนข้อมูลต่อท้ายของรหัสเป็นต่อI / O เมตา ส่วนท้ายในข้างต้นเชื่อมโยง TIO ทดสอบตัวอักษรทั้งหมดพร้อมกันเป็นสตริงขึ้นบรรทัดใหม่ที่คั่นเดียว แต่รหัสนี้ยังทำงานได้ดีเมื่อป้อนตัวอักษรตัวเดียว



6

Stax , 33 ไบต์

º░¡µ?Äz*B╥╪╩ΓoΣ4ù↓|♂5%⌡ÿΩ²┼h{☻4O└

เรียกใช้และแก้ไขข้อบกพร่อง

ขั้นตอน:

  1. แยก codepoint จากอินพุต
  2. ดัชนีลงในอาร์เรย์คงที่[3, 5, 7, 9, 11, -6, 1, 0, -24, -15, 0, 6, 2, 4, 5, 2, 6, 20, 0, -3, -9, -27, -2, 0, 4, 8]โดยใช้ codepoint (ล้อมรอบด้วย)
  3. หากผลลัพธ์เป็นลบให้ลบล้างและยกระดับ10พลังนั้นมิฉะนั้นปล่อยให้เป็นไปตามนั้น

6

Excel, 85 ไบต์

=CHOOSE(CODE(A1)-96,1E3,1E9,1E27,100,,4,8,3,5,,,11,1E6,1,,1E24,1E15,,6,2,4,5,2,6,20,)

2 บิต Golfy:

  • โดยใช้เลขยกกำลัง (เช่น1E15) 26 bytesช่วยประหยัด
  • เริ่มต้นCHOOSEเมื่อไม่มีสิ่งใดถูก0บันทึกไว้4 bytes

4

05AB1E , 36 ไบต์

•—ßusδtθ}™-5„©‘öæH•57в₆-sÇ`èD0‹iÄ°

ท่าเรือ@recursive 's คำตอบที่แตกซ์
อินพุตเป็นตัวพิมพ์เล็ก

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

•—ßusδtθ}™-5„©‘öæH # Push compressed integer 3133432551338094772548436198140408157771728287
 57в                  # Converted to base-57 as list: [39,41,43,45,47,30,37,36,12,21,36,42,38,40,41,38,42,56,36,33,27,9,34,36,40,44]
    ₆-                # Subtract 36 from each: [3,5,7,9,11,-6,1,0,-24,-15,0,6,2,4,5,2,6,20,0,-3,-9,-27,-2,0,4,8]
      sÇ`             # Swap to take the input, and convert it to its unicode value
         è            # Index it into the list (with automatic wraparound)
          D0i        # Create a copy, and if this is negative:
              Ä       #  Take the absolute value
               °      #  And then take 10 the power this value
                      # (implicitly output the top of the stack as result)

ดู 05AB1E นี้เคล็ดลับของฉัน (ส่วนวิธีการบีบอัดจำนวนเต็มขนาดใหญ่?และวิธีการบีบอัดรายการจำนวนเต็ม? )จะเข้าใจว่าทำไม•—ßusδtθ}™-5„©‘öæH•เป็น3133432551338094772548436198140408157771728287และเป็น•—ßusδtθ}™-5„©‘öæH•57в[39,41,43,45,47,30,37,36,12,21,36,42,38,40,41,38,42,56,36,33,27,9,34,36,40,44]


2
32 . 05AB1E ไม่ควรแพ้ Stax!
Grimmy



3

C # (Visual C # Interactive Compiler) , 77 74 68 ไบต์

x=>((x="1‘Ʊ!  aƁñ"[x-65])&15)*Math.Pow(10,x>>4)

a×10a

แสดงความคิดเห็น

x=>                                                 //Lambda taking in a char
  (x=                                         )     //Re-assign x to
     "1‘Ʊ!   aƁñ"[x-65]      //The character's value at index x-65
 (                                             &15) //Bitwise AND by 15                                
  * Math.Pow(10,x>>4)                               // Multiplied by 10**(floor(x/16))

ลองออนไลน์!


2

Perl 6 , 67 ไบต์

{/\-/??10**-$_!!$_}o{'`ZHacgkfhccn]dcKTciegheiwc'.ords[.ord-97]-99}

ลองออนไลน์!

ใช้ตารางการค้นหาโดยที่ค่าลบหมายถึงว่าเป็นค่าลบของเลขชี้กำลังไม่เช่นนั้นจะเป็นตัวเลขเอง


2

05AB1E , 32 ไบต์

•н“вüQ;æ¡ζæÀÛß%aÜ×₃t•56вsCè2‰`i°

ลองออนไลน์!

•н“вüQ;æ¡ζæÀÛß%aÜ×₃t•56в  # compressed list:
# [31, 0, 12, 4, 8, 10, 4, 12, 40, 0, 7, 19, 55, 5, 0, 8, 16, 6, 10, 1, 1, 22, 13, 2, 0, 49]

s                         # swap so the input is at the top
 C                        # parse input as "binary" (a -> 36, b -> 37, ...)
  è                       # index (wraps around)
   2‰                     # divmod 2: [n / 2, n % 2]
     `                    # dump both on the stack
      i                   # if the modulo is 1:
       °                  #  10 ** the quotient
                          # implicit output

ฉันยังไม่ได้รับสิ่งนั้นใน'binary'ตัวฮ่าฮ่า xD แต่ฉันคิดว่ามันมีประโยชน์เช่นนี้ในบางครั้ง ;)
Kevin Cruijssen

2

Bash , 129 100 ไบต์

A=xDVw04835zzbA10SJ0624526k0
c=$[64#${A:$[64#$1-10]:1}]
[ $c -gt 30 ]&&printf 1%0$[c-30].0f||echo $c

ลองออนไลน์!

ลองออนไลน์!

มันทำงานอย่างไร:

A=xDVw04835zzbA10SJ0624526k0

$ A: Base64 เข้ารหัส "a" - "z": เก็บตัวเลขน้อยกว่า 100 โดยตรง ตัวเลขที่มากขึ้นจะถูกเข้ารหัสเป็นจำนวนศูนย์ +30 (เช่น: 1,000 = 33, 100 = 32, ฯลฯ )

c=$[64#${A:$[64#$1-10]:1}]

แยกจดหมายหนึ่งฉบับจาก $ A ที่ตำแหน่งที่ระบุไว้ในอาร์กิวเมนต์ $ 1 (base64 ถอดรหัส, -10 ไปยังบัญชีเพื่อชดเชย 'a') Base64 ถอดรหัสตัวละครนั้นและเก็บไว้ในค

[ $c -gt 30 ]&&printf 1%0$[c-30].0f||echo $c

ถ้า $ c มากกว่า 30 ให้พิมพ์ "1" ที่เติมด้วยศูนย์ $ c-30 อื่นพิมพ์ $ c


2

Sledgehammer ขนาด 17 ไบต์

ในทางเทคนิคแล้วมันมีความยาว 133 บิต แต่นั่นไม่ได้ทำให้ 16.625 ไบต์เท่าที่จริงคอมเพรสเซอร์เรียกร้อง

⣜⢍⢞⢹⡱⡋⣽⡱⡆⢺⢦⡽⡐⡌⢗⠈⣵

นี่อาจเป็นถอดรหัส

x1 = Input[]; x2 = 0; While[StringFreeQ[IntegerName[x2], x1], x2++]; Print[x2]

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


1

เยลลี่ขนาด 36 ไบต์

Oị“[@ịẆþĊ`o&÷ḲḞṘḂỊP¥t’b48¤_⁹⁵*ɗ¹>?20

ลองออนไลน์!

ลิงก์ monadic ที่ใช้อักษรตัวพิมพ์เล็กเป็นอาร์กิวเมนต์และส่งคืนจำนวนเต็ม ส่งคืน0สำหรับjและkและ

คำอธิบาย

O                       | Convert to code point
 ị          ¤           | Index into following as a nilad (wraps around):
  “[...t’               | - Integer 5370441668223940717846370165240010583188867 (stored base 250)
         b48            | - Convert to base 48
                 ɗ >?20 | If >20, following as a dyad using 20 as right argument:
             _⁹         | - Subtract right argument (20)
               ⁵*       | - 10 to the power of this
                  ¹     | Else: leave unchanged (identity function)

1

เรติน่า 0.8.2 , 89 ไบต์

^
$'
T`l`111104835__111011062452620`^.
T`abcm\pq`139285
\d$
$*0$&$*0$&$*0
d
00
T`\lyl`10_

ลองออนไลน์! ลิงค์มีกรณีทดสอบ คำอธิบาย:

^
$'

ทำสำเนาอินพุต

T`l`111104835__111011062452620`^.

เปลี่ยนสำเนาแรกเป็นหลัก (แรก) ของผลลัพธ์ที่เกี่ยวข้อง

T`abcm\pq`139285

หากตัวเลขมีศูนย์ต่อท้าย 3 ตัวให้รับหลายตัวทันที

\d$
$*0$&$*0$&$*0

และแปลงให้เป็นจำนวนศูนย์ต่อท้ายที่เกี่ยวข้อง (โปรดทราบว่านี่จะลดความซับซ้อนลง*3*0ใน Retina 1)

d
00

dแก้ไขปัญหาขึ้น

T`\lyl`10_

แก้ไขปัญหาขึ้นlและyและลบตัวอักษรใด ๆ ที่เหลือ


1

PHP , 104 ไบต์

<?=A<($a='^FX]0483500GC10UL0624526P0'[ord($argn)-97])?20==($b=ord($a)%30)||11==$b?$b:str_pad(1,$b,0):$a;

ลองออนไลน์!

ฉันมีสตริง^FX]0483500GC10UL0624526P0ที่เก็บอักขระหนึ่งตัวสำหรับจดหมายอินพุตทุกอันจาก "a" ถึง "z" $aผมดึงตัวละครตัวนี้อยู่บนพื้นฐานของการป้อนข้อมูลและเก็บไว้ใน ถ้าตัวละครไม่ได้เป็นหลักรหัส ASCII ของ mod 30 $bจะถูกเก็บไว้ใน

ถ้า$aเป็นตัวเลข, ดิจิตเดียวกันถูกพิมพ์ออกมาสิ่งนี้ใช้สำหรับอินพุตใด ๆ ที่ต้องการเอาต์พุตระหว่าง 0 ถึง 9 (เช่น "e", "f", ฯลฯ )

มิ$bฉะนั้นถ้าเป็น 20 หรือ 11 หมายเลขเดียวกันจะถูกพิมพ์ซึ่งจะใช้สำหรับ "l" และ "y"

อื่นตัวเลข "1" ที่ถูกเติม$bด้วย "0" จะถูกพิมพ์ ตัวอย่างเช่นสำหรับการป้อนข้อมูลของ "a" ตัวละครคือ "^" ซึ่งมีรหัส ASCII จาก 94 94 % 30 = 4และ "1" เบาะถึง 4 กับ "0" จะเป็น "1000"

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