実際に文字である数字


42

非負の整数の入力が与えられると、プログラムを書くこと変換進戻る数の16進形式の文字のみを含む場合truthy値の数Aを介してF、そうでなければfalsey値。


テストケース

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数を16進数のバージョンは数字のみが含まれている場合0-9Mix進数は、少なくとも一つの番号と、少なくとも一つの文字が含まれている場合。


これはコードゴルフです。標準ルールが適用されます。バイト単位の最短コードが優先されます。機能または完全なプログラムのいずれかが許可されます。


2
現在、Golficalで回答を作成中です。
SuperJedi224

私の現在の考え方:ベースとして10数のリターンをその文字列を解析しようとしているかどうかを確認し、その後、ベース16文字列にひそかNaN
Cyoce

それが動作するかもしれ@Cyoce、言語の選択に応じて、
SuperJedi224

3
非現実的なボーナス(もう一度):単なる文字列はMixOnlynumbersletters21文字です
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



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?

オンラインで試してみてください(Web上で動作するわずかに修正されたバージョン)


3
これは長いので、下票ですか?私が知らないこの答えには他に何か間違っていることがありますか?それとも誰かが個人的にこの答えが好きではないのですか?
ダウンゴート

2
16または13バイトが長いとは言いません!
ルイスメンドー

23
投稿をさりげなくするのはかなり魅力的であることを認めなければなりません。
デニス

10

Python、24バイト

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

入力を16進文字列(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
うーんそれは何ですか?matlabは今いくつかのnucパワーを得たようです!
Abr001am

@ Agawa001ハハハ。並べ替え
ルイス・メンドー


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()を受け取り、(false)またはゼロ以外(true)のintいずれかを返します0

私はボーナスを達成しようとしてさえいませんでした"MixOnly lettersnumbers"。23バイトだけで、新しい状態を追跡するにprintf()は9バイトが追加され、8バイトでした。

メインテスト:

#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はa?:bそれに評価GNU拡張であるa場合atruthy値であり、そうでない場合にb。のようなNULLポインターを処理するのに便利send(message ?: "(no message)");です。ポータブルではないことはわかっていますが、コードゴルフではコードの移植性が問題になることはありません:)
Stefano Sanfilippo

@StefanoSanfilippoこれを行うことでこれを33バイトに減らすことができます:F(x){x=(x%16>9)*(x<16?:F(x/16));}これは、関数に戻り変数がなく、メイン引数が設定されている場合、場合によってメイン引数を自動的に返す(GCC)バグを悪用します(行われたロジックに基づいて)、これはそれらのケースの1つです!オンラインで試してください:bit.ly/2pR52UH
アルバートレンショー

8

Pythonの3、30の 29バイト

sysreqとPython 3のおかげで1バイトが削除されました。

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

シンプルlambdaでスライス。


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、正規表現なし、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に対してtrueを返すため、正しくありません。
ゾッキー

そうそう、最短になると思いF=n=>n%16>9&&n<16|F(n>>4)ます。
user81655

@ user81655を短絡する必要があると確信していますが、その場合の代わりに||使用することで逃げることができると思います。&&&
ニール

@Neilなんで?テストしましたか?
user81655

7

ジュリア、18バイト

n->isalpha(hex(n))

これは、整数を受け入れてブール値を返す匿名関数です。呼び出すには、名前を付けf=n->...ます。

入力はを使用して16進文字列に変換され、を使用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、そうですか?
電卓

@CatsAreFluffy nが 'A'のような数値でない場合(これがこのチャレンジの全体のポイントです)、~n == -1一方-n-1 == NaN
edc65



4

Java、46 44 38バイト

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

整数を16進文字列に変換し、正規表現を使用してすべての文字が文字であるかどうかを判断する非常に単純なワンライナー。

@ Eng.Fouadのおかげで-2バイト。


"[a-f]+"2バイト節約できます。
Eng.Fouad

516で失敗した...
CalculatorFeline


さて、文字列に16進文字が含まれいるかどうかを判断するので、削除します+- これはバイトの無駄です。
CalculatorFeline

@CatsAreFluffy No matchesは、指定された正規表現で文字列全体が一致する場合にtrueを返します。[a-f]プラス記号がないと、複数の文字が含まれているために文字列全体と一致しないため、正しくありません。有効な文字が1つだけ存在する場合に限ります。
TNT


3

ルビー、19バイト

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

ゴルフをしていない:

-> 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/ソリューションのいずれかの短いチェックです、そして溶液2は70の生のバイト数ではなく、75を持っている
バリューインク


2

セイロン、55バイト

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

わかりやすい... n16進数としてフォーマットし(文字列を生成)、その文字列の各文字に.digit数値(数字の場合はtrueを返す)を呼び出し、それらのいずれかが真であるかどうかを確認してから、これを否定します。

ボーナス付きのバージョンは、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


考えがある。より多くの閉鎖!
電卓


2

真剣に、12バイト

4ª,¡OkúOkd-Y

六角ダンプ:

34a62cad4f6b
a34f6b642d59

オンラインで試す

他のスタック言語の回答と同じです。文字列の減算を真剣にサポートしていれば、わずか7バイトになります。

編集:文字列の減算を真剣にサポートするようになり、次の7バイトソリューションが機能するようになりました。

ú4╙,¡-Y

六角ダンプ:

a334d32cad2d59

オンラインで試す


1
11: 4╙,¡#S;ú∩S=(又はあるいは、方法の多くは、スペルに:16:2バイトで:P)
MEGO

私はSIが考えることを知りませんでした。
キントピア

2

05AB1E、2バイト(非競合)

コード:

ha

ハ!それは2バイトです!残念ながら、この言語は課題を先延ばしにしているため競合していません:(

説明:

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つ!すごいボーナス!
魔法のタコUr



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文字は表示されません(一部がない限り)。このカウンターは決定的な決定者であり、それは言う81

1
実装が内部でUTF-16を使用することは問題ではありません。他の地域では、範囲内のUTF-8文字である可能性0-127があります81。したがって、バイトカウントはです。

フィードバックのおかげで、「バイト」が文字ごとに2を数える必要があるかどうかはわかりませんでした。81です。
snail_

実際、現在の+ 10 / -0のコンセンサス(ところで、私はこれに同意しません)は、インタープリターが使用するエンコードを常に使用する必要があるということです。同意できない場合は、その質問について反対意見を投稿してください。
リルトシアスト

@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良い観察ですが、文字を含むすべての数字に対してtrueを返します。
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.