Aslında harf olan sayılar


42

Negatif olmayan bir tam sayı giriş göz önüne alındığında, bir program bilgileri dönüştüren onaltılık ve geri dönüş sayısının onaltılı formu sadece karakter içeriyorsa bir truthy değeri sayısı Aüzerinden Fve başka bir şekilde Falsey değer.


Test durumları

10
==> True (A in hexadecimal)

100
==> False (64 in hexadecimal)

161
==> False (A1 in hexadecimal)

11259375
==> True (ABCDEF in hexadecimal)

0
==> False (0 in hexadecimal)

Bonus: -40 bayt, eğer programınız Only lettersyukarıda açıklanan zorluk Only numbersiçin basarsa, sayının onaltılık versiyonu sadece rakam içeriyorsa 0-9ve Mixonaltılık rakam en az bir rakam ve en az bir harf içeriyorsa.


Bu kod golfü. Standart kurallar geçerlidir. Bayt cinsinden en kısa kod kazanır. İşlevlere veya tam programlara izin verilir.


2
Şu anda Golfical bir cevap hazırlıyor.
SuperJedi224

Şu anki fikrim: tabana 16 karakter dizisi, sonra NaN
bakalım

@Cyoce Dil seçiminize bağlı olarak işe yarayabilir
SuperJedi224

3
Gerçekçi olmayan bonus (bir kez daha): sadece MixOnlynumbersletterskarakter 21 karakterdir
edc65

3
"Pozitif tamsayı girişi" diyorsunuz, ancak 0 bir test durumu.
XNOR

Yanıtlar:


22

Pyth, 43 - 40 = 3 bayt

?&K@J.HQG-JG"Mix"%"Only %sers"?K"lett""numb

Test odası

Bu bonusu elde eder. Only numbersve Only lettersneyse ki sadece 4 harften farklı. printf tarzı biçimlendirme ile kullanılır %.

Seçim sistemi, hem hex'in kesişim noktası, hem Gde alfabe ile çıkarılması ve çıkarılması ile yapılır G. İkisi de sahte değilse, bu bir karışımdır, kesişme sahte ise, sayılar ve çıkarma sahte ise, harflerdir.


1
Kahretsin bu Pyth çok garip. Olsa olumsuz bir puan alırsanız çok iyi olurdu.
KaareZ

15

Pyth, 6 bayt

!-.HQG

  .HQ   # Converts the input to hexadecimal
 -   G  # Deletes all letters
!       # If empty, output True, else False

Burada test et


12

Jöle , 6 bayt

b16>9P

Çevrimiçi deneyin!

Nasıl çalışır

b16>9P  Input: z

b16     Convert the input to base 16.
   >9   Compare each resulting digit with 9; return 1 iff greater.
     P  Take the product of the resulting Booleans.

16 için bir yerleşik var mı yoksa bir şey değil mi?
Hesap makinesiFeline

1
Şimdi var. Bu ilk Jelly cevaplarından biriydi ...
Dennis,

11

TeaScript , 11 bayt 13 15 16

xT(16)O(Sz)

Oldukça basit. Bu TeaScript 2.0 kullanır. Bu sürümü Github'dan alabilirsiniz.

açıklama

        // Implicit: x = input, Sz = alphabet
xT(16)  // input -> hex
O(Sz)   // Only letters?

Çevrimiçi deneyin (web üzerinde çalışan biraz değiştirilmiş sürüm)


3
Aşağı oylama bu uzun olduğu için mi? Bu cevabı bilmediğim bir yanlışlık var mı? Yoksa şahsen bu cevabı sevmeyen biri mi?
Downgoat

2
16 ya da 13 byte uzun diyemem!
Luis Mendo

23
Kabul etmelisin ki yazıların oldukça çekici.
Dennis,

10

Python, 24 bayt

lambda n:min('%x'%n)>'9'

Girdiyi bir onaltılı dizgeye ( 0xönek olmadan ) dönüştürür '%x'%n. Tüm karakter büyükse görür '9'eğer görerek (hangi harf) minüzerindedir '9'.


Python'un karakterleri / sayıları nasıl kullandığını bilmiyorum, ancak ASCII kodu '9'54'tür. Yani yazabiliyorsanız ...>54bir bayt kaydedebilirsiniz.
CompuChip

@CompuChip Python karakterleri veya karakterleri sayı olarak ele almaz. Aslında, Python 2 onları tüm sayılardan daha büyük olarak görüyor.
xnor

8

MATL , 10

i16YA1Y2mA

Örnekler

>> matl i16YA1Y2mA
> 240
0
>> matl i16YA1Y2mA
> 255
1

açıklama

i       % input                         
16YA    % convert to string representation in base 16
1Y2     % predefined literal: 'A':'Z'
m       % true for set member             
A       % all

Bonus meydan okuma: 53−40 = 13

i16YA1Y2mXKA?'Only letters'}Ka?'Mix'}'Only numbers']]

Örnekler

>> matl
 > i16YA1Y2mXKA?'Only letters'}Ka?'Mix'}'Only numbers']]
 > 
> 255
Only letters

>> matl
 > i16YA1Y2mXKA?'Only letters'}Ka?'Mix'}'Only numbers']]
 > 
> 100
Only numbers

>> matl
 > i16YA1Y2mXKA?'Only letters'}Ka?'Mix'}'Only numbers']]
 > 
> 240
Mix

açıklama

i                       % input                                                 
16YA                    % convert integer to string representation in base 16
1Y2                     % predefined literal: 'A':'Z'
m                       % true for set member       
XK                      % copy to clipboard K                 
A                       % all                                   
?                       % if (top of the stack)                 
  'Only letters'        % string literal                                        
}                       % else                 
  K                     % paste from clipboard K      
  a                     % any                
  ?                     % if (top of the stack)      
    'Mix'               % string literal    
  }                     % else                                                  
    'Only numbers'      % string literal           
  ]                     % end             
]                       % end          

2
hmmm bu nedir? Matlab şimdi biraz nuc gücü var gibi görünüyor!
Abr001

@ Agawa001 Hahaha. Sırala
Luis Mendo


8

C, 46 43 37 bayt

Şimdi daha fazla özyineleme ile! (Teşekkürler Dennis):

F(x){return(x%16>9)*(x<16?:F(x/16));}

Bonus: daha kısa (33 bayt), ancak bunun için başarısız x = 0:

F(x){return!x?:(x%16>9)*F(x/16);}

b;F(x){for(b=x;x;x/=16)b*=x%16>9;return b;}

F()bir intve alır 0(yanlış) veya sıfır olmayan (doğru) döndürür .

Bonusu elde etmeye bile çalışmadım, "MixOnly lettersnumbers"sadece 23 bayt alır, yeni koşulu 9 ek bayt gerektiriyorsa takip eder printf(), 8 bayt olur, bu da 40'a kadar ekler ve çabayı boşa harcar.

Ana test:

#include <stdio.h>

int main() {
  int testdata[] = {10, 100, 161, 11259375, 0};
  for (int i = 0; i < 5; ++i) {
    int d = testdata[i];
    printf("%d (0x%x) -> %s\n", d, d, F(d)?"yep":"nope");
  }
}

Nedir ?:? Ben ile değiştirmek zorunda ||o derlemek için alır. Ayrıca, byte'leri değiştirerek bir bayt kurtarabilir *ve &böylece soldakilerden kaçınarak ()(sonradan boşluk eklemeniz gerekebilir)?
Neil,

@Neil , aksi takdirde bir gerçeğe uygun değer olup a?:bolmadığını değerlendiren bir GNU uzantısıdır . Gibi sıfır işaretçiler işlemek için kullanışlı geliyor . Taşınabilir olmadığını biliyorum, ancak kod taşınabilirliği hiçbir zaman kod golfü için bir sorun değildir :)aabsend(message ?: "(no message)");
Stefano Sanfilippo

@StefanoSanfilippo bunu 33yaparak bunu baytlara indirgeyebilirsiniz : F(x){x=(x%16>9)*(x<16?:F(x/16));}bu, bir işlevde geri dönüş değişkeni yoksa ve ana argüman ayarlanmışsa, bazı durumlarda ana argümanı otomatik olarak döndürür (GCC) hatası kullanır. hangi mantığın yapıldığına bağlı olarak), ve bu da bu durumlardan biri! Çevrimiçi deneyin: bit.ly/2pR52UH
Albert Renshaw

8

Python 3, 30 29 bayt

Sysreq ve Python 3 sayesinde 1 bayt soyuldu .

lambda n:hex(n)[2:].isalpha()

Basit lambdave dilimleme.



7

Mathematica, 32 bayt

Tr@DigitCount[#,16,0~Range~9]<1&

Açıklama:

                               &   A function returning whether
Tr@                                 the sum of elements of
   DigitCount[ ,  ,         ]        the numbers of
                   0~Range~9          zeros, ones, ..., nines in
                16                    the hexadecimal expansion of
              #                       the first argument
                             <1     is less than one.

7

Javascript, ES6, düzenli ifade yok, 28 bayt

F=n=>n%16>9&&(n<16||F(n>>4))

Bu 27 baytlık sürümü de var ama tersini döndürüyor.

F=n=>n%16<10||n>15&&F(n>>4)

Güzel! Ayrıca 23 bayt için böyle onu yeniden düzenlemek olabilir:F=n=>!n||n%16>9&F(n>>4)
user81655

@ user81655 - Ne yazık ki, bu sürüm 0 için true döndürüyor, bu yüzden yanlış.
zocky

Doğru, sanırım en kısa olan F=n=>n%16>9&&n<16|F(n>>4)o zaman.
user81655

@ user81655 Güzelim emin kısa devre gerekir ||ama kullandığınız paçayı düşünüyorum &yerine &&bu durumda.
Neil,

@Neil Neden? Test ettin mi?
user81655

7

Julia, 18 bayt

n->isalpha(hex(n))

Bu bir tamsayıyı kabul eden ve bir boolean döndüren adsız bir işlevdir. Aramak için bir isim verin, örneğin f=n->....

Giriş kullanılarak onaltılık bir dizgeye dönüştürülür hex, ardından tamamen alfabetik karakterlerden oluşup oluşmadığını kontrol ederiz isalpha.


6

JavaScript ES6, 29

Bonus yok

n=>!/\d/.test(n.toString(16))

Yeni değeriyle -40 ikramiye şimdi yakın ... ama yeterli değil. Bonus puanı 70 71 - 40 => 30 31

n=>/\d/.test(n=n.toString(16))?1/n?'Only numbers':'Mix':'Only letters'

Test snippet'i (giriş kutusunun içine bir sayı yazın)

#I { width:50%}
<input id=I oninput="test()"/><br>
Hex <span id=H></span><br>
Result <span id=R></span>


-n-1= ~n, doğru mu?
Hesap MakinesiFeline

N 'A' gibi sayısal değilse @CatsAreFluffy (bu meydan ~n == -1-n-1 == NaN
okumadaki tek şey

4

GS2 , 6 bayt

V↔i/◙s

Kaynak kod CP437 kodlamasını kullanır. Çevrimiçi deneyin!

Nasıl çalışır

V       Evaluate the input.
 ↔      Push 16.
  i     Perform base conversion.
   /    Sort.
    ◙   Push [10].
     s  Perform greater-or-equal comparison.


4

Java, 46 44 38 bayt

i->i.toHexString(i).matches("[a-f]+");

Tam sayıyı onaltılık bir dizgeye dönüştüren ve tüm karakterlerin harf olup olmadığını belirlemek için regex kullanan oldukça basit bir astar.

@ Eng.Fouad sayesinde -2 bayt.


"[a-f]+"2 bayt kurtarırdı.
Eng.Fouad

516 için başarısız ..
Hesap MakinesiFeline

@CatsAreFluffy Hayır, hayır.
TNT

Dize içeriyorsa Eh şimdi belirleyen bir , altıgen mektubu böylece kaldırmak +bayt -Bu bir atık.
Hesap MakinesiFeline

@CatsAreFluffy No. matches , dizenin tamamı belirtilen regex ile eşleştirilebiliyorsa true değerini döndürür. [a-f]artı işareti olmadan yanlıştır, çünkü birden fazla karakter içerdiği için dizgenin tamamına uymaz ; eğer ve sadece bir geçerli karakter varsa.
TNT


3

Ruby, 19 bayt

->n{!('%x'%n)[/\d/]}

Ungolfed:

-> n {
  !('%x'%n)[/\d/]
}

Kullanımı:

f=->n{!('%x'%n)[/\d/]} # Assigning it to a variable
f[0]
=> false
f[10]
=> true
f[100]
=> false
f[161]
=> false
f[11259375]
=> true

Bonus ile, 70 - 40 = 30 bayt

->n{'%x'%n=~/^(\d+)|(\D+)$/;$1?'Only numbers':$2?'Only letters':'Mix'}

Kullanımı:

f=->n{'%x'%n=~/^(\d+)|(\D+)$/;$1?'Only numbers':$2?'Only letters':'Mix'}
f[10]
=> Only letters
f[100]
=> Only numbers
f[161]
=> Mix

Geç, fakat '%x'%n!~/\d/
Value Ink

3

Perl, 69 - 40 = 29 bayt

$_=sprintf"%X",<>;print s/\d//?$_?"Mix":"Only numbers":"Only letters"

2

Seylan, 55 bayt

Boolean l(Integer n)=>!any(formatInteger(n,16)*.digit);

Basitçe ... nonaltılık bir sayı olarak biçimlendiririz (bir dize üretir), o dizenin her karakterini çağırır .digit(bu sayı bir rakamsa doğru döner), sonra bunların herhangi birinin doğru olup olmadığını kontrol edin, sonra bunu olumsuzlayın.

Bonuslu sürümde 119 - 25 = 94 puan daha yüksek :

String c(Integer n)=>let(s=formatInteger(n),d=s*.digit)(every(d)then"Only numbers"else(any(d)then"Mix"else"Only letters"));

Kimsenin bonus versiyonunu, bonus olmayan versiyondan daha iyi olacak kadar kısa bir sürede nasıl yapabileceğinden emin değilim. Belki bir truthy / falsey değeri üretmeyi gerçekten zorlaştıran bir dil.

İşte biçimlendirilmiş bir versiyon:

String c(Integer n) =>
        let (d = formatInteger(n,16)*.digit)
    (every(d) then "Only numbers"
                else (any(d) then "Mix"
                    else "Only letters"));

2

Pas, 70 bayt

fn f(n:i32)->bool{format!("{:x}",n).chars().all(|c|c.is_alphabetic())}

Çünkü biliyorsunuz Java Rust.

Aslında, oldukça zarif:

format!("{:x}", n)         // format n as hex (:x)
  .chars()                 // get an Iter over the characters
  .all(                    // do all Iter elements satisfy the closure?
    |c| c.is_alphabetic()  // self-explanatory
  )

Ancak, işlev tanımı kazanının çok uzun olması utanç verici ....: P


Bir fikrim var. Daha fazla kapak!
Hesap MakinesiFeline


2

Cidden, 12 bayt

4ª,¡OkúOkd-Y

Hex Dump:

34a62cad4f6b
a34f6b642d59

Çevrimiçi Deneyin

Diğer yığın dili cevaplarıyla aynı. Ciddi bir şekilde dize çıkarma henüz desteklendiyse, sadece 7 bayt olurdu.

EDIT: Cidden şimdi dize çıkarma destekler ve aşağıdaki 7 byte çözüm şimdi çalışıyor:

ú4╙,¡-Y

Hex Dump:

a334d32cad2d59

Çevrimiçi Deneyin


1
11: 4╙,¡#S;ú∩S=(veya veya iki byte olarak hecelemenin birçok yolu :16:: P)
Mego

SI'ın fikrini bilmiyordum.
quintopia




2

SmileBASIC 3.2.1, 78 bayt

INPUT V FOR I=0 TO 9
IF INSTR(HEX$(V),STR$(I))>-1 THEN ?"FALSE"END
NEXT?"TRUE"

Burada ASCII olmayan karakterler göremiyorum (bazıları olmadıkça); Bu sayaç kesin karardır ve diyor 81.
kedi

1
Uygulamanın dahili olarak UTF-16 kullanması önemli değil; dünyanın geri kalanına onlar da menzildeki UTF-8 karakterleri olabilir 0-127, bu yüzden bayt sayınız 81.
kedi

Geri bildirim için teşekkürler, "bayt" ın karakter başına 2 saymam gerektiği anlamına gelmediğinden emin değildi. 81 öyle.
salyangoz_

Aslında, mevcut + 10 / -0 konsensüs (bu arada, şimdi aynı fikirde değilim), her zaman bir tercümanın kullandığı kodlamayı kullanmamız gerektiğidir. Kabul etmiyorsanız, lütfen bu soru hakkında muhalif bir görüş gönderin.
lirtosiast

@ThomasKwa pfft, tamam, aman, şimdi daha iyi biliyorum. Bu konuda bir fikir birliği olduğunun farkında değildim ve meta üzerine oldukça zaman harcadım.
Kedi,

1

Japt, 12 bayt

!UsG r"[a-f]

Çevrimiçi deneyin!

Nasıl çalışır

!UsG r"[a-f] // Implicit: U = input integer, G = 16
 UsG         // Convert U to a base-16 string.
     r"[a-f] // Replace all lowercase letters with an empty string.
!            // Take the logical NOT of the result.
             // This returns true for an empty string; false for anything else.

Sanırım !!UsG r"\\dişe yarayabilir ve bir bayt kurtarabilir
Downgoat

@Downgoat İyi gözlem, ancak bu, harf içeren herhangi bir sayı için geçerlidir .
ETHProductions

1

Gema, 41 karakter

*=@c{@radix{10;16;*}}
c:<D>=f@end;?=;\Z=t

Gema'da boole yok, bu yüzden sadece “t” veya “f” veriyor.

Örnek çalışma:

bash-4.3$ echo -n '11259375' | gema '*=@c{@radix{10;16;*}};c:<D>=f@end;?=;\Z=t'
t
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.