g | x | w | all
Bytes Lang Time Link
005Thunno 2230729T113814ZThe Thon
045Vyxal G230429T132104ZThe Thon
045Nibbles230429T144020Zxigoi
044Scala230429T002233Z138 Aspe
037Regex ECMAScript190227T041641ZDeadcode
006Jelly200627T082129Zfireflam
010GolfScript200109T041615Zuser8505
016Perl 6190319T194055Zbb94
026ES6190228T180155Zelipszil
00505AB1E190307T182029ZThePlasm
024Kotlin190304T104008Zsnail_
021Java 8190304T034243ZDaniel W
040Java 1190304T040500ZDaniel W
023JavaScript SpiderMonkey190227T041740Ztsh
014x86 machine code190304T002114ZPeter Co
029Wolfram Language Mathematica190227T090344ZRainer G
028><>190301T103416ZEmigna
045Batch190301T005027ZNeil
008MATL190228T135707ZSanchise
017x86 Machine Code190301T070413ZCody Gra
008K 8 Bytes190228T170006ZJ. Sendr
036Ink190227T213458ZSara J
031C# Visual C# Interactive Compiler190227T053921ZGymhgy
026Cubix190228T213435ZMickyT
048R190228T001258ZNick Ken
031Haskell190228T040715Zxnor
032Python 2190227T064733ZChas Bro
018Tidy190227T150620ZConor O&
033Java 8190227T125610ZKevin Cr
043Perl 5190227T135037ZKjetil S
031Retina 0.8.2190227T132842ZNeil
004Catholicon190227T131155ZOkx
00505AB1E190227T123809ZKevin Cr
006Charcoal190227T123800ZNeil
005APL dzaima/APL190227T054220ZAdá
034C gcc190227T100316Zceltschk
025Julia 1.0190227T094951ZKirill L
043Python 3190227T053018ZNeil A.
012J190227T073130ZGalen Iv
010APL+WIN190227T044508ZGraham
016Perl 6190227T042618ZJo King
019Ruby190227T033744ZDoorknob
005Japt190227T042053ZASCII-on

Thunno 2, 5 bytes

32B4Ƈ

Try it online! or see all the rude numbers up to 200

Does the base-32 (32B) version of the input contain 4 ()?

Vyxal G, 36 bits1, 4.5 bytes

32τ4=

Try it Online! (link is to bitstring)

Suggested by @lyxal

Vyxal, 37 bits1, 4.625 bytes

32τ4c

Try it Online! (link is to bitstring) or see all the rude numbers up to 200

Explanation

32τ4=  # Implicit input
32τ    # Input in base 32
   4=  # Equals 4 (vectorised)?
       # Implicit output of maximum
32τ4c  # Implicit input
32τ    # Input in base 32
   4c  # Contains 4?
       # Implicit output

Nibbles, 4.5 bytes

?`@32$4

Attempt This Online!

?`@32$4
?        Find the first index of
      4  4
 `@32    in the base 32 representation of
     $   input

Scala, 44 bytes

Try it online!

def f(a:Int):Boolean=a%32==4||(a>0&&f(a/32))

Regex (ECMAScript), 37 bytes

Input is in unary, as the length of a string of xs.

^((?=(x+)(\2{31}x*))\3)*(x{32})*x{4}$

Try it online!

^
(
    (?=(x+)(\2{31}x*))    # \2 = floor(tail / 32); \3 = tool to make tail = \2
    \3                    # tail = \2
)*                        # Loop the above as many times as necessary to make
                          # the below match
(x{32})*x{4}$             # Assert that tail % 32 == 4

Jelly, 6 bytes

ḃ32=4Ẹ

Try it online!

Returns 1 if the number is rude, 0 otherwise

ḃ32=4Ẹ
ḃ32      # convert to base 32
   =4    # For each entry, is it equal to 4?
     Ẹ   # Are any equal to 4??

GolfScript, 10 bytes

Empty list is false, a list with something is true. (Seems like cheating. But it isn't.)

~32base 4&

Try it online!

Explanation

~           # Evaluate the input
 32base     # Convert to base-32
            # Copy
        4&  # Setwise and: does this list have 4?

Perl 6, 16 bytes

{.base(32)~~/4/}

Returns 「4」 (truthy) when given a rude number and Nil (falsy) otherwise.

ES6, 31 30 26 bytes

b=>b.toString(32).match`4`

Feel free to say ideas on how to reduce this further, if any.

05AB1E, 5 bytes

32в4¢

Try it online!

Returns a truthy value (> 1) if the input is a rude number, and 0 otherwise. Uses a conversion to base 32 (to group by 5 bits) and tests for a 4 (00100 in binary, a rude number)

Kotlin, 24 bytes

Simple base-32 conversion approach.

{'4' in it.toString(32)}

{  // lambda implicitly takes an int and returns a boolean
 '4' in  // 4 is within...
        it.toString(32)  // arg written in base-32
}

Try it online!

Java 8, 28 22 21 bytes

n->n%32==4|n>>5%32==4

Inspired by @kevin-cruijssen's answer. Only works for 2 hands.

Try it online!

Explanation:

n->                 // Method with int parameter and boolean return-type
  n%32              // Only consider right 5 bytes (fingers)
  ==4               // Middle finger
  | ... n>>5       // Repeat with shifted bits for other hand

Java 1, 42 40 bytes

r(int n){return n>0&&(4==n%32|r(n>>5));}

Edit: Replaced ternary operator with && to save 1 char, thanks to @Dillon Davis, which works due to short-circuit; inspiring me to change || to | to save another character

Try it online.

Explanation:

r(int n)        // Method with int parameter and boolean return-type
  n>0           // Stop recursion if no more bits
  &&            // Short-circuit stops recursion
  n%32=4        // Rude
  | r(n>>5)     // Recurse with shifted bits

JavaScript (SpiderMonkey), 23 bytes

f=x=>x&&x%32==4|f(x>>5)

Try it online!

This is a trivial solution, you just want to convert to base 32 and check if there is a 4 in it.


JavaScript (SpiderMonkey), 26 bytes

x=>x.toString(32).match(4)

Try it online!

It's interesting that /4/.test(...) cost one more byte than ....match(4).

x86 machine code, 14 bytes

(same machine code works in 16-bit, 32-bit, and 64-bit. In 16-bit mode, it uses AX and DI instead of EAX and EDI in 32 and 64-bit mode.)

Algorithm: check low 5 bits with x & 31 == 4, then right-shift by 5 bits, and repeat if the shift result is non-zero.

Callable from C with char isrude(unsigned n); according to the x86-64 System V calling convention. 0 is truthy, non-0 is falsy (this is asm, not C1).

 line   addr    code bytes
  num
     1                             ; input:  number in EDI
     2                             ; output: integer result in AL: 0 -> rude, non-zero non-rude
     3                             ; clobbers: RDI
     4                         isrude:
     5                         .check_low_bitgroup:
     6 00000000 89F8               mov    eax, edi
     7 00000002 241F               and    al, 31          ; isolate low 5 bits
     8 00000004 2C04               sub    al, 4           ; like cmp but leaves AL 0 or non-zero
     9 00000006 7405               jz    .rude            ; if (al & 31 == 4) return 0;
    10                         
    11 00000008 C1EF05             shr    edi, 5
    12 0000000B 75F3               jnz   .check_low_bitgroup
    13                             ;; fall through to here is only possible if AL is non-zero
    14                         .rude:
    15 0000000D C3                 ret


    16          0E             size:  db $ - isrude

This takes advantage of the short-form op al, imm8 encoding for AND and SUB. I could have used XOR al,4 to produce 0 on equality, but SUB is faster because it can macro-fuse with JZ into a single sub-and-branch uop on Sandybridge-family.

Fun fact: using the flag-result of a shift by more than 1 will be slow on P6-family (front-end stalls until the shift retires), but that's fine.


Footnote 1: This is an assembly language function, and x86 asm has both jz and jnz, so as per meta I can choose either way. I'm not intending this to match C truthy/falsy.

It happened to be convenient to return in AL instead of EFLAGS, so we can describe the function to a C compiler without a wrapper, but my choice of truthy/falsy isn't constrained by using a C caller to test it.

Wolfram Language (Mathematica), 37 bytes 36 bytes 29 bytes

-2 bytes by Jonathan Frech

#~IntegerDigits~32~MemberQ~4&

Try it online!

31-byte solution:

MemberQ[IntegerDigits[#,32],4]&

Try it online!

><>, 28 bytes

Outputs 4 for rude numbers throws an exception for non-rude numbers.

:1(?^:" ":\
,&-v?=4:%&/
 ;n<

Try it online!

Batch, 77 45 bytes

@cmd/cset/a"m=34636833,n=%1^m*4,(n-m)&~n&m*16

Based on these bit twiddling hacks. Explanation: Only 6 hands need to be checked due to the limited range (30 bits) of the input that's required to be supported. The magic number m is equivalent to 111111 in base 32, so that the first operation toggles the rude bits in the input number. It then remains to find which of the 6 hands is now zero.

MATL, 8 bytes

32YA52=a

Try it online!

x86 Machine Code, 17 bytes

6A 20 59 85 C0 74 09 99 F7 F9 83 FA 04 75 F4 91 C3

The above bytes define a function that takes the number as input in the EAX register, and returns the result as a Boolean value in the EAX register (EAX == 0 if the input is not a rude number; EAX != 0 if the input is a rude number).

In human-readable assembly mnemonics:

; Determines whether the specified number is a "rude" number.
; Input:    The number to check, in EAX
; Output:   The Boolean result, in EAX (non-zero if rude; zero otherwise)
; Clobbers: ECX, EDX
IsRudeNumber:
    push    32           ; \ standard golfing way to enregister a constant value
    pop     ecx          ; /  (in this case: ECX <= 32)
CheckNext:
    test    eax, eax     ; \ if EAX == 0, jump to the end and return EAX (== 0)
    jz      TheEnd       ; /  otherwise, fall through and keep executing
    cdq                  ; zero-out EDX because EAX is unsigned (shorter than XOR)
    idiv    ecx          ; EAX <= (EAX / 32)
                         ; EDX <= (EAX % 32)
    cmp     edx, 4       ; \ if EDX != 4, jump back to the start of the loop
    jne     CheckNext    ; /  otherwise, fall through and keep executing
    xchg    eax, ecx     ; store ECX (== 32, a non-zero value) in EAX
TheEnd:
    ret                  ; return, with result in EAX

Try it online!

K 8 Bytes

|/4=32\:

True if any digit of 32-base is 4

NOTES:

Ink, 38 36 bytes

=r(n)
{n:{n%32-4:->r(n/32)|1}|0}->->

Try it online!

Edit: Saved 2 bytes by simplifying the first conditional to "if n" rather than "if n>0".

C# (Visual C# Interactive Compiler), 31 bytes

n=>{for(;n>0;n/=n%32==4?0:32);}

Outputs by throwing an exception. The way you convert one number from decimal to another base is to divide the decimal number by that base repeatedly and take the remainder as a digit. That is what we do, and we check if any of the digits have a value of 4 in base-32;

Try it online!

Cubix, 26 bytes

u!@-W14;OIS%/\;;,p;?wO@u/s

Try it online!

Wraps onto a cube with edge length 3 as follows

      u ! @
      - W 1
      4 ; O
I S % / \ ; ; , p ; ? w
O @ u / s . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Watch it run

A fairly basic implementation, without all the redirects it does :

R, 50 48 bytes

any(2^(0:4)%*%matrix(scan()%/%2^(0:34)%%2,5)==4)

Try it online!

Uses a neat matrix-based approach now (courtesy of @Giueseppe). It generates a 5x7 matrix of bits, converts this to a series of base 32 integers, and checks for any 4s.

Haskell, 31 bytes

elem 9.(mapM(:[6..36])[0..5]!!)

Try it online!

Python 2, 34 32 bytes

f=lambda a:a%32==4or a>0<f(a/32)

Try it online!

2 bytes thanks to tsh

Tidy, 18 bytes

{x:4∈base(32,x)}

Try it online! Checks if 4 is an element of base(32,x) (base conversion).

Java 8, 40 33 bytes

n->n.toString(n,32).contains("4")

Port of @Adám's APL (dzaima/APL) answer.

Try it online.

Explanation:

n->                 // Method with Integer parameter and boolean return-type
  n.toString(n,32)  //  Convert the input to a base-32 String
   .contains("4")   //  And check if it contains a "4"

Perl 5, 43 bytes

sub f{sprintf("%099b",@_)=~/00100(.{5})*$/}

Try it online!

Retina 0.8.2, 31 bytes

.+
$*
+`(1+)\1{31}
$1;
\b1111\b

Try it online! Link includes test cases. Outputs zero unless the number is rude. Works by converting the input to unary and then to unary-encoded base 32 and counting the number of 4s in the result.

Catholicon, 4 bytes

ǔ?QǑ

Takes a number as a base-256 string.

Try it online!

Test suite

05AB1E, 5 bytes

32B4å

Port of @Adám's APL (dzaima/APL) answer.

Try it online or verify all test cases.

Explanation:

32B    # Convert the (implicit) input to Base-32
   4å  # And check if it contains a 4
       # (output the result implicitly)

Charcoal, 6 bytes

№⍘N³²4

Try it online! Link is to verbose version of code. Outputs -s according to how rude the number is. Explanation:

  N     Input as a number
 ⍘      Convert to base as a string
   ³²   Literal 32
№       Count occurrences of
     4  Literal string `4`

I use string base conversion to avoid having to separate the numeric literals for 32 and 4.

APL (dzaima/APL), 5 bytes

4∊32⊤

Try it online!

4∊ is 4 a member of

32⊤ to-base-32?

C (gcc), 34 bytes

f(i){return i?i&31^4?f(i/32):1:0;}

Try it online!

Julia 1.0, 25 bytes

f(n)=n%32==4||n>0<f(n>>5)

Try it online!

Julia 1.0, 26 bytes

Alternative that is 1 character shorter, but 1 byte longer, too bad that takes 3 bytes in unicode.

n->'4'∈string(n,base=32)

Try it online!

Python 3, 43 bytes

Checks every 5-bit chunk to see if it is rude (equal to 4).

lambda n:any(n>>5*i&31==4for i in range(n))

Try it online!

J, 12 bytes

4 e.32#.inv]

Try it online!

APL+WIN, 10 bytes

Prompts for input of integer

4∊(6⍴32)⊤⎕

Noting six hands are required to represent 10^9 converts to vector of 6 elements of the base 32 representation and checks if a 4 exists in any element.

Perl 6, 16 bytes

{.base(32)~~/4/}

Try it online!

Checks if there is a 4 in the base 32 representation of the number. Returns either Nil as false or a Match containing a 4.

You can prove this by the fact that \$2^5 = 32\$ so each digit is the state of each hand.

Ruby, 36 19 bytes

->n{n.to_s(32)[?4]}

Try it online!

Saved 17 bytes with @tsh's method.

Japt, 5 bytes

sH ø4

Try it online!

Explanation

      // Implicit input
sH    // To a base-H (=32) string
   ø  // Contains
    4 // 4 (JavaScript interprets this as a string)