Her Harfi İçeren İlk Sayı


41

Giriş olarak A'dan Z'ye (J ve K hariç) tek bir harf verildiğinde, bu mektubu içeren en küçük negatif olmayan tamsayıyı yazılı olarak verin. Sayıların asla "ve" kelimesini içermediğini, bu 101nedenle "yüz bir" değil "yüz bir" olduğunu varsayalım . Amerikan (kısa ölçekli) sayımını varsayalım, bir milyon 10^6ve bir milyar 10^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 ve K, giriş belirtiminin bir parçası değildir, bu nedenle davranışınız onlar için tanımsızdır. Yukarıdaki harflerden biri verildiğinde, yanındaki (ondalık) sayıyı girin. Girdiyi küçük harf veya büyük harf olarak alabilirsiniz, ancak bazı girdilerin küçük harf ve diğerleri büyük harf gerektirmez.

Bu , yani bayt cinsinden en kısa cevap kazanır.


11
Bu mücadelenin neden bu kadar fazla indirildiğinden emin değilim? Görebildiğim kadarıyla açık ve konuyla ilgili. Her bir mektubu sadece karşılık gelen numarasına kodlamasının muhtemel olduğundan emin olabilirsiniz, ancak bunun 3 indirmeyi haklı çıkardığını sanmıyorum?
caird coinheringaahing

2
@Jonah, geri bildiriminiz için teşekkür ederiz
Stephen

10
Diyorsun ki "bir bajillion" gerçek bir sayı değil mi?
Jo King,

2
@JoKing ondalık gösterimi nedir? :)
Stephen

8
Bir sayının adında k görünmeyeceğini düşünen bir StackExchange kullanıcısı, hayal gücünün çok üstünde olduğunu sanıyorum.
Andrew Grimm

Yanıtlar:


16

JavaScript (Node.js) ,  78 75 74  73 bayt

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

Çevrimiçi deneyin!

Nasıl?

[32..52]n32[53..80]10n53

Yorumlananlar

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


6

/// , 125 bayt

/:/\/\///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/

Çevrimiçi deneyin!

Giriş, G / Ç meta'sine göre kodun sonuna eklenir . Yukarıdaki TIO bağlantısındaki altbilgi, tüm harfleri eşzamanlı olarak tek bir yeni satır sınırlı dize olarak test eder, ancak kod tek bir karakter girerken de gayet iyi çalışır .



6

Stax , 33 bayt

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

Koş ve hata ayıkla

Prosedür:

  1. Kod noktasını girişten çıkarın.
  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]Kod noktası kullanarak sabit diziye indeksleyin. (sarma ile)
  3. Sonuç negatifse, 10bu gücü düşürüp yükseltin , aksi halde olduğu gibi bırakın.

6

Excel, 85 bayt

=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 bit:

  • Üsleri kullanarak (örneğin 1E15) kaydeder 26 bytes.
  • Varsayılan CHOOSEhiçbir şey sağlandığında olduğu 0kaydeder,4 bytes

4

05AB1E , 36 bayt

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

Port @recursive 'Stax cevabı s .
Küçük harfle giriş yapın.

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

•—ß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)

Bu 05AB1E madenin ucu bakın (bölüm ne kadar büyük tamsayılar sıkıştırmak için? Ve kompres tamsayı listelerine nasıl? ) Anlamak için •—ßusδtθ}™-5„©‘öæH•ise 3133432551338094772548436198140408157771728287ve •—ßusδtθ}™-5„©‘öæH•57вolup [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'a kaybetmemelidir!
Grimmy,




2

Perl 6 , 67 bayt

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

Çevrimiçi deneyin!

Eksi sayının üssün negatifi anlamına geldiği bir arama tablosu kullanır, aksi halde sayının kendisidir.


2

05AB1E , 32 bayt

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

Çevrimiçi deneyin!

•н“вü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

Hala o 'binary'yapıyı anlamadım , haha. xD Ama sanırım bazen böyle yararlı olabilir. ;)
Kevin Cruijssen

2

Bash , 129 100 bayt

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

Çevrimiçi deneyin!

Çevrimiçi deneyin!

Nasıl çalışır:

A=xDVw04835zzbA10SJ0624526k0

$ A: "a" - "z" olarak kodlanan Base64: 100'den küçük sayılar doğrudan kaydedilir. Büyük sayılar +30 sayıları olarak kodlanır. (örneğin: 1,000 = 33, 100 = 32 vb.)

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

Bir harfi $ 1 argümanında belirtilen pozisyonda $ A'dan çıkartın (base64 kodu çözüldü, -10 'a' ofsetini hesaba katar). Base64 bu karakteri çözer ve c de saklar.

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

$ C 30'dan büyükse, $ c-30 sıfırlarla dolgulu "1" yazdırın. Aksi takdirde, $ c yazdırın.


2

Balyoz , 17 bayt

Teknik olarak, bu 133 bit uzunluğundadır, ancak kompresörün iddia ettiği gibi bu 16.625 byte'ı gerçekten yapmaz.

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

Bu muhtemelen çözer

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

(yaklaşık olarak Mathematica cevabımla aynı) kodlamamasına rağmen (bilgisayarımda her şeyle uyumluluk sorunları var gibi gözüküyor), kontrol etmek için tekrar çözmede iyi şanslar. Kodlayıcıyı kullanırken bazı hatalar yapmış olabilirim, bu yüzden dikkatli olun.


1

Jöle , 36 bayt

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

Çevrimiçi deneyin!

Argümanı olarak küçük bir harf alan ve bir tamsayı döndüren tek parça bir bağlantı. İade 0için jve k.

açıklama

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

Retina 0.8.2 , 89 bayt

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

Çevrimiçi deneyin! Link, test durumlarını içerir. Açıklama:

^
$'

Girişi çoğaltın.

T`l`111104835__111011062452620`^.

İlk kopyayı ilgili sonucun (ilk) basamağına değiştirin.

T`abcm\pq`139285

Sayının 3 sonunda bir sıfır varsa, şimdi bu çarpımı alın.

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

Ve aslında onu takip eden sayıdaki sıfırlara dönüştürün. (Bunun *3*0Retina 1’de kolaylaştıracağını unutmayın .)

d
00

Düzelt d.

T`\lyl`10_

Sabitleyin lve ykalan harfleri kaldırın.


1

PHP , 104 bayt

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

Çevrimiçi deneyin!

^FX]0483500GC10UL0624526P0"A" dan "z" ye her giriş harfi için tek bir karakter tutan bir dize var . Bu karakteri girişi temel alarak çıkartıyorum ve içine yerleştiriyorum $a. Karakter bir rakam değilse, ASCII kod mod 30'da saklanacaktır $b.

Eğer $abir rakam, aynı rakam bu arasında bir çıkış ihtiyacı olan herhangi bir giriş için kullanılır, basılır 0 ve 9 ( "e", "f", vb gibi).

Aksi takdirde $b20 veya 11 ise, aynı numara yazdırılır, bu "l" ve "y" için kullanılır.

Aksi halde, $b"0" s ile doldurulmuş "1" rakamı yazdırılır. Örneğin "a" girişi için, ASCII 94 koduna sahip "^" karakteri bulunur 94 % 30 = 4ve "0" ile 4'e kadar "1" harfi "1000" olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.