ตัวเลขที่เป็นตัวอักษรจริงๆ


42

ให้อินพุทเลขจำนวนเต็มที่ไม่เป็นลบเขียนโปรแกรมที่แปลงตัวเลขเป็นเลขฐานสิบหกและส่งกลับค่าความจริงหากรูปแบบเลขฐานสิบหกของตัวเลขมีเพียงตัวอักษรAผ่านFและค่าเท็จ


กรณีทดสอบ

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)

โบนัส: -40 ไบต์หากโปรแกรมของคุณพิมพ์Only lettersสำหรับความท้าทายที่อธิบายไว้ข้างต้นOnly numbersหากเวอร์ชันเลขฐานสิบหกของตัวเลขนั้นมีตัวเลขเท่านั้น0-9และMixถ้าตัวเลขฐานสิบหกมีตัวเลขอย่างน้อยหนึ่งตัวและอย่างน้อยหนึ่งตัวอักษร


นี่คือรหัสกอล์ฟ ใช้กฎมาตรฐาน รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ อนุญาตให้ใช้ฟังก์ชันหรือโปรแกรมเต็มรูปแบบได้


2
กำลังร่างคำตอบใน Golfical
SuperJedi224

ความคิดปัจจุบันของฉัน: แอบแฝงไปยังฐาน 16 สตริงแล้วดูว่าพยายามที่จะแยกสตริงที่เป็นฐาน 10 ผลตอบแทนจำนวนNaN
Cyoce

@Cyoce นั้นอาจใช้ได้ขึ้นอยู่กับภาษาที่คุณเลือก
SuperJedi224

3
โบนัสที่ไม่สมจริง (อีกครั้ง): เพียงสตริงMixOnlynumberslettersคือ 21 ตัวอักษร
edc65

3
คุณพูดว่า "การป้อนจำนวนเต็มบวก" แต่ 0 เป็นกรณีทดสอบ
xnor

คำตอบ:


22

Pyth, 43 - 40 = 3 ไบต์

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

ชุดทดสอบ

ได้รับโบนัสนี้ Only numbersและOnly lettersโชคดีที่แตกต่างกันเพียง 4 ตัวอักษร การจัดรูปแบบ printf %สไตล์ถูกนำมาใช้กับ

ระบบการคัดเลือกจะทำโดยทั้งการตัดของหกเหลี่ยมที่มีตัวอักษรและลบออกG Gหากทั้งสองไม่เป็นเท็จมันเป็นการผสมผสานในขณะที่ถ้าทางแยกเป็นเท็จมันเป็นตัวเลขและหากการลบเป็นเท็จมันเป็นตัวอักษร


1
ประณาม Pyth นี้แปลก จะเจ๋งมากถ้าคุณได้คะแนนติดลบ
KaareZ


12

เยลลี่ 6 ไบต์

b16>9P

ลองออนไลน์!

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

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 มีหรือไม่นั่นไม่ใช่สิ่ง?
CalculatorFeline

1
ตอนนี้มี นี่เป็นหนึ่งในคำตอบแรกของเยลลี่ ...
Dennis

11

TeaScript , 11 ไบต์13 15 16

xT(16)O(Sz)

ค่อนข้างง่าย สิ่งนี้ใช้ TeaScript 2.0 คุณสามารถรับรุ่นนี้ได้จาก Github

คำอธิบาย

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

ลองใช้ออนไลน์ (เวอร์ชันที่แก้ไขเล็กน้อยซึ่งใช้งานบนเว็บ)


3
การลงคะแนนเสียงเป็นเพราะนานไหม? มีบางอย่างผิดปกติในคำตอบนี้ที่ฉันไม่ทราบหรือไม่? หรือใครบางคนไม่ชอบคำตอบนี้เป็นการส่วนตัว?
Downgoat

2
ฉันจะไม่พูดว่า 16 หรือ 13 ไบต์ยาว!
Luis Mendo

23
คุณต้องยอมรับว่าการโพสต์ข้อความที่โพสต์ลงไปนั้นน่าดึงดูดมาก
Dennis

10

Python ขนาด 24 ไบต์

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

แปลงการป้อนข้อมูลสตริงฐานสิบหก (ไม่มี0xคำนำหน้า) '%x'%nด้วย ดูว่าตัวอักษรทั้งหมดนั้นมีค่ามากกว่า'9'ตัวอักษรตัวminไหนโดยดูว่าตัวอักษรอยู่ด้านบน'9'หรือไม่


ฉันไม่รู้ว่า Python จัดการกับตัวละคร / ตัวเลขได้อย่างไร แต่รหัส ASCII ของ'9'คือ 54 ดังนั้นหากคุณสามารถเขียน...>54คุณสามารถบันทึกไบต์ได้
CompuChip

@CompuChip Python ไม่ถือว่าตัวอักษรหรือสตริงเป็นตัวเลข ที่จริงแล้ว Python 2 ถือว่าพวกมันมากกว่าตัวเลขทั้งหมด
xnor

8

MATL , 10

i16YA1Y2mA

ตัวอย่าง

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

คำอธิบาย

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

ความท้าทายโบนัส: 53−40 = 13

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

ตัวอย่าง

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

คำอธิบาย

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 นั่นคืออะไร? ดูเหมือนว่า matlab จะมีพลัง nuc ตอนนี้!
Abr001am



8

C, 46 43 37 ไบต์

ตอนนี้มีการเรียกซ้ำอีกครั้ง! (ขอบคุณเดนนิส):

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

โบนัส: ยิ่งสั้นกว่า (33 ไบต์) แต่ล้มเหลวเพราะ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()ใช้เวลาintและส่งกลับ0(เท็จ) หรือไม่ใช่ศูนย์ (จริง)

ฉันไม่ได้พยายามที่จะได้รับโบนัส"MixOnly lettersnumbers"ใช้เวลาเพียง 23 ไบต์เพียงอย่างเดียวการติดตามเงื่อนไขใหม่จะต้องใช้ 9 ไบต์เพิ่มเติมprintf()คือ 8 ไบต์ซึ่งเพิ่มขึ้นเป็น 40 ลบล้างความพยายาม

ทดสอบหลัก:

#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");
  }
}

อะไรนะ?:? ฉันต้องแทนที่ด้วย||เพื่อให้มันรวบรวม นอกจากนี้คุณสามารถบันทึกไบต์ด้วยการแทนที่*ด้วยการ&หลีกเลี่ยง()s ทางด้านซ้าย (แม้ว่าคุณจะต้องเพิ่มช่องว่าง) หรือไม่
Neil

@Neil a?:bเป็นส่วนขยายของ GNU ที่ประเมินaว่าaเป็นค่าจริงหรือbไม่ มามีประโยชน์ในการจัดการตัวชี้ null send(message ?: "(no message)");เช่น ฉันรู้ว่ามันไม่ได้เป็นแบบพกพา แต่รหัสพกพาไม่เคยมีความกังวลในสนามกอล์ฟรหัส :)
สเตฟาโน Sanfilippo

@StefanoSanfilippo คุณสามารถทำให้นี่เป็น33ไบต์โดยทำสิ่งนี้: F(x){x=(x%16>9)*(x<16?:F(x/16));}การละเมิดข้อผิดพลาด (GCC) ที่ซึ่งหากไม่มีตัวแปรส่งคืนในฟังก์ชั่นและมีการตั้งค่าอาร์กิวเมนต์หลักมันจะคืนค่าอาร์กิวเมนต์หลักโดยอัตโนมัติในบางกรณี ( ขึ้นอยู่กับสิ่งที่ตรรกะทำ) และสิ่งนี้เกิดขึ้นเป็นหนึ่งในกรณีเหล่านั้น! ลองใช้งานออนไลน์: bit.ly/2pR52UH
Albert Renshaw


7

Perl 6 , 18 ไบต์

{.base(16)!~~/\d/} # 18 bytes

การใช้งาน:

# give it a name
my &code = {.base(16)!~~/\d/}

for 10, 100, 161, 11259375, 0 {
  printf "%8s %6s %s\n", $_, .base(16), .&code
}

      10      A True
     100     64 False
     161     A1 False
11259375 ABCDEF True
       0      0 False

7

Mathematica ขนาด 32 ไบต์

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

คำอธิบาย:

                               &   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, ไม่ regexp, 28 ไบต์

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

นอกจากนี้ยังมีรุ่น 27 ไบต์ แต่จะส่งกลับค่าผกผัน

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

ดี! คุณสามารถจัดเรียงใหม่เช่นนี้ได้ 23 ไบต์:F=n=>!n||n%16>9&F(n>>4)
user81655

@ user81655 - น่าเสียดายที่รุ่นนั้นคืนค่าจริงสำหรับ 0 ดังนั้นมันจึงไม่ถูกต้อง
zocky

ขวาโอ้ฉันเดาที่สั้นที่สุดจะเป็นF=n=>n%16>9&&n<16|F(n>>4)แล้ว
user81655

@ user81655 ฉันค่อนข้างแน่ใจว่าคุณต้องลัดวงจร||แต่ฉันคิดว่าคุณสามารถใช้งาน&แทนการใช้&&ในกรณีนั้นได้
Neil

@ Neil ทำไมเป็นอย่างนั้น? คุณทดสอบหรือไม่
user81655

7

Julia อายุ 18 ไบต์

n->isalpha(hex(n))

นี่เป็นฟังก์ชั่นนิรนามที่รับจำนวนเต็มและส่งคืนบูลีน f=n->...เรียกว่าให้มันชื่อเช่น

อินพุตถูกแปลงเป็นสตริงเลขฐานสิบหกโดยใช้hexจากนั้นเราตรวจสอบว่าประกอบด้วยอักขระตัวอักษรทั้งหมดที่ใช้isalphaหรือไม่


6

JavaScript ES6, 29

ไม่มีโบนัส

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

ด้วยค่าใหม่ของ-40โบนัสจะใกล้เข้ามาแล้ว ... แต่ไม่เพียงพอ คะแนนโบนัส 70 71 - 40 => 30 31

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

ตัวอย่างการทดสอบ (พิมพ์ตัวเลขภายในกล่องอินพุต)

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


-n-1= ~nใช่มั้ย
CalculatorFeline

@CatsAreFluffy ถ้า n ไม่ใช่ตัวเลขเช่น 'A' (นั่นคือประเด็นทั้งหมดในการท้าทายนี้) ~n == -1ในขณะที่-n-1 == NaN
edc65



4

Java, 46 44 38 ไบต์

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

ซับในแบบเรียบง่ายที่ค่อนข้างสวยที่แปลงจำนวนเต็มเป็นสตริงเลขฐานสิบหกและใช้ regex เพื่อพิจารณาว่าอักขระทั้งหมดเป็นตัวอักษรหรือไม่

-2 ไบต์ต้องขอบคุณ @ Eng.Fouad


"[a-f]+"จะบันทึก 2 ไบต์
Eng.Fouad

ล้มเหลวสำหรับ 516 ..
CalculatorFeline


ดีตอนนี้มันเป็นตัวกำหนดว่าสตริงมีจดหมายเลขฐานสิบหกเพื่อลบ-IT ของเสียไบต์ +
CalculatorFeline

@CatsAreFluffy No. matchesส่งกลับค่าจริงถ้าสตริงทั้งหมดสามารถจับคู่โดย regex ที่กำหนด [a-f]ไม่มีเครื่องหมายบวกไม่ถูกต้องเนื่องจากไม่ตรงกับสตริงทั้งหมดเนื่องจากมีอักขระมากกว่าหนึ่งตัว มันจะเกิดขึ้นถ้าหากมีเพียงหนึ่งตัวอักษรที่ใช้ได้
TNT


3

ทับทิมขนาด 19 ไบต์

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

Ungolfed:

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

การใช้งาน:

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

ด้วยโบนัส 70 - 40 = 30 ไบต์

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

การใช้งาน:

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

ล่าช้า แต่'%x'%n!~/\d/เป็นการตรวจสอบที่สั้นกว่าสำหรับโซลูชันที่หนึ่งและโซลูชันที่สองมีจำนวนไบต์ดิบที่ 70 ไม่ใช่ 75
Value Ink


2

Ceylon, 55 ไบต์

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

ตรงไปตรงมา ... เราจัดรูปแบบnเป็นเลขฐานสิบหก (ซึ่งสร้างสตริง) เรียกอักขระแต่ละตัวของสตริงนั้นเป็น.digitตัวเลข (ซึ่งจะคืนค่าจริงถ้าเป็นตัวเลข) จากนั้นตรวจสอบว่ามีจริงหรือไม่แล้วคัดค้านสิ่งนี้

รุ่นที่มีโบนัสมีคะแนนสูงกว่ามากที่119 - 25 = 94 :

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

ฉันไม่แน่ใจว่าทุกคนสามารถทำให้รุ่นโบนัสสั้นพอที่จะดีกว่ารุ่นที่ไม่มีโบนัสได้แม้ว่าสตริงเหล่านั้นจะมีความยาว 28 ด้วยกัน อาจเป็นภาษาที่ทำให้ยากแก่การสร้างคุณค่าที่แท้จริง / ความเท็จ

นี่คือรูปแบบที่จัดรูปแบบ:

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

2

สนิม 70 ไบต์

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

เพราะรู้แล้วว่าJava Rust

จริงๆแล้วมันค่อนข้างหรูหรา แต่:

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
  )

แต่มันเป็นความอัปยศที่นิยามของฟังก์ชั่นสำเร็จรูปยาวมาก .... : P


ฉันมีความคิด. ปิดมากขึ้น!
CalculatorFeline


2

จริงจัง 12 ไบต์

4ª,¡OkúOkd-Y

ฐานสิบหก:

34a62cad4f6b
a34f6b642d59

ลองใช้ออนไลน์

มันเหมือนกับคำตอบภาษาสแต็กอื่น ๆ มันจะเป็นเพียง 7 ไบต์หากการลบสตริงที่สนับสนุนอย่างจริงจังยัง

แก้ไข: ตอนนี้สนับสนุนการลบสตริงอย่างจริงจังแล้วและตอนนี้โซลูชัน 7 ไบต์ต่อไปนี้ใช้งานได้:

ú4╙,¡-Y

ฐานสิบหก:

a334d32cad2d59

ลองใช้ออนไลน์


1
11: 4╙,¡#S;ú∩S=(หรือหรือจำนวนมากวิธีการสะกด:16:ในสองไบต์: P)
ชำเลือง

ฉันไม่รู้ SI คิด
quintopia

2

05AB1E , 2 ไบต์ (ไม่แข่งขัน)

รหัส:

ha

ฮา! นั่นคือสองไบต์! น่าเศร้าที่ไม่แข่งขันเพราะภาษานี้โพสต์ความท้าทาย :(

คำอธิบาย:

h   # Convert input to hexadecimal
 a  # is_alpha, checks if the value only contains letters

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


1
hdÔ©1åi•4?ŸâτΛ•}®0åi•4?ŸàpÕTà•}®g2Qi•²•} 36B` สำหรับโบนัสส่งผลให้ ... เพิ่มอีก 6! โบนัส Wooooo!
Magic Octopus Urn



2

SmileBASIC 3.2.1, 78 ไบต์

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

ฉันไม่เห็นอักขระที่ไม่ใช่ ASCII ที่นี่ (ยกเว้นบางส่วน) นับนี้เป็น decider 81ที่ชัดเจนและกล่าวว่า
แมว

1
ไม่สำคัญว่าการติดตั้งใช้งาน UTF-16 เป็นการภายใน กับส่วนที่เหลือของโลกที่พวกเขาได้เป็นอย่างดีอาจจะเป็น UTF-8 ตัวอักษรในช่วงจึงนับไบต์ของคุณ0-127 81
แมว

ขอบคุณสำหรับข้อเสนอแนะไม่แน่ใจว่า "ไบต์" หมายความว่าฉันควรนับ 2 ต่ออักขระ 81 มันคือ
หอยทาก _

ที่จริงฉันทามติ +10 / -0 ปัจจุบัน(ซึ่งตอนนี้ฉันไม่เห็นด้วย) ก็คือเราจะต้องใช้การเข้ารหัสที่นักแปลใช้เสมอ หากคุณไม่เห็นด้วยโปรดโพสต์ความคิดเห็นที่ไม่เห็นด้วยกับคำถามนั้น
lirtosiast

@ThomasKwa pfft โอเคโอ๊ะตอนนี้ฉันรู้ดีขึ้นแล้ว ฉันไม่ทราบว่ามีฉันทามติเกี่ยวกับเรื่องนั้นและฉันใช้เวลาพอสมควรกับเมตา
แมว

1

Japt, 12 ไบต์

!UsG r"[a-f]

ลองออนไลน์!

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

!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.

ฉันคิดว่า!!UsG r"\\dอาจใช้งานได้และบันทึกไบต์
Downgoat

@Downgoat การสังเกตที่ดี แต่มันจะส่งกลับค่าจริงสำหรับหมายเลขใด ๆที่มีตัวอักษร
ETHproductions

1

Gema, 41 ตัวอักษร

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

ไม่มีบูลีนใน Gema ดังนั้นมันจึงให้ผลลัพธ์เป็น“ t” หรือ“ f”

วิ่งตัวอย่าง:

bash-4.3$ echo -n '11259375' | gema '*=@c{@radix{10;16;*}};c:<D>=f@end;?=;\Z=t'
t
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.