Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Challenges

Comments on How many odd digits?

Parent

How many odd digits?

+1
−0

Given a positive integer, count its odd digits.

Input

  • An integer from 1 to 999,999,999, inclusive, in any of the following formats:
    • A number (such as an integer or floating point number), like 123.
    • A string, like "123".
    • A sequence of characters (such as an array or list), like ['1', '2', '3'].
    • A sequence of single digit numbers, like [1, 2, 3].

Output

  • The number of odd digits in the input.

Test cases

Test cases are in the format input : output.

1 : 1
2 : 0
3 : 1
4 : 0
5 : 1
6 : 0
7 : 1
8 : 0
9 : 1
10 : 1
11 : 2
12 : 1
13 : 2
14 : 1
15 : 2
16 : 1
17 : 2
18 : 1
19 : 2
20 : 0
111111111 : 9
222222222 : 0
123456789 : 5
999999999 : 9

Scoring

This is a code golf challenge. Your score is the number of bytes in your code. Lowest score for each language wins.

Explanations are optional, but I'm more likely to upvote answers that have one.

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

Input format (5 comments)
Post
+1
−0

C (gcc), 41 bytes

r;o(char*s){for(;*s;r+=*s++&1);return r;}

Try it online!

This is under the assumption that in a function solution, input has to be passed as parameter and output through the return value. The result variable is allocated outside the function to get gcc implicit int declaration and zero initialization for free.

It's very straight-forward: input as string, iterate until null terminator found. Mask each character's ASCII value with 1 to see if odd or even, under the assumption that '0' == 48, an even value. From there, ASCII character are guaranteed to be adjacent in the symbol table.

I also tried to write it with recursion but got exactly the same amount of characters (41):

r;o(char*s){r+=*s&1;*s&&o(s+1);return r;}

Printing the result inside the function also works but is longer:

r=48;o(char*s){for(;*s;r+=*s++&1);puts(&r);}
History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

1 comment thread

Alternative function IO (3 comments)
Alternative function IO
trichoplax‭ wrote 17 days ago · edited 17 days ago

This is under the assumption that in a function solution, input has to be passed as parameter and output through the return value

I would be interested to hear any alternatives you considered, and whether you think they would make good defaults for input and output for function solutions.

Even if you don't think they should be defaults, I'd be interested to hear the options that future challenge authors might explicitly permit for particular challenges.

Lundin‭ wrote 16 days ago

It doesn't really matter that much, it's just an offset of fixed number of characters that you add/remove to the total. But it's quite far-fetched (at least in the C family of languages) to say that input and output to a program may come through function parameters IMO, which I believe are the default rules.

trichoplax‭ wrote 16 days ago

The idea is not that the input would come into the program through function parameters, but that the function would be called from within a larger program, and the program would call it using arguments as input. This allows competing to find the shortest function that solves a problem, rather than to find the shortest complete program.