23
\$\begingroup\$

Write a program or function that

  • checks if a variable name is valid and
  • output 1 or True if it is valid,
  • 0.5 if it is valid but starts with an underscore (_),
  • and 0 or False if it is not valid.

Rules

  • A variable name in most languages is valid if it begins with an underscore or letter (a – z, A – Z, _) and the rest of the characters are either underscores, letters, or numbers. (a – z, A – Z, 0 – 9, _)
  • Output 1 or True if the variable name is valid and 0 or False if not valid.
  • However, it is not good practice to start a variable with an underscore, so return 0.5 if it starts with an underscore and the name is valid.
  • Standard loopholes apply.

Test Cases

input output reason
abcdefghijklmnop 1
_test_ 0.5 starts with an underscore
123abc 0 starts with a number
A_b1C_23 1
_! 0 not 0.5 because it’s not valid
magical pony1 0 no spaces

Scoring

This is , so shortest code wins. Bonus: −10% if your program/function outputs 0 for an empty string("").

Kai Burghardt
1,1942 gold badges11 silver badges15 bronze badges
asked Mar 19, 2016 at 15:01
\$\endgroup\$
19
  • 1
    \$\begingroup\$ Can we output truthy/falsy/anything? \$\endgroup\$ Commented Mar 19, 2016 at 15:14
  • 5
    \$\begingroup\$ Just noting, in python, under scores are often used. Classes need an init function, helper functions in classes are sometimes begun with an underscore. \$\endgroup\$ Commented Mar 19, 2016 at 16:17
  • 1
    \$\begingroup\$ @EasterlyIrk beware of mini-markdown; you meant __init__; also, no, classes do not need an __init__ but typically have one \$\endgroup\$ Commented Mar 19, 2016 at 16:29
  • 6
    \$\begingroup\$ Can we assume that the input will be non-empty? (Most of the current answers seem to fail for empty input.) \$\endgroup\$ Commented Mar 19, 2016 at 16:35
  • 2
    \$\begingroup\$ -10% now, and don't round. Express your answer as a decimal. \$\endgroup\$ Commented Mar 19, 2016 at 16:44

26 Answers 26

13
\$\begingroup\$

JavaScript (ES6), 37 - 10% = 33.3 bytes

Saved 4 bytes thanks to @edc65

Saved 5.6 bytes thanks to @Mateon

s=>!/^\d|\W|^$/.test(s)/-~(s[0]=='_')
answered Mar 19, 2016 at 15:14
\$\endgroup\$
1
  • 3
    \$\begingroup\$ Are you absolutely sure this is not perl? \$\endgroup\$ Commented Mar 21, 2016 at 19:56
8
\$\begingroup\$

05AB1E, (削除) 25 (削除ここまで) (削除) 24 (削除ここまで) (削除) 20 (削除ここまで) 19 bytes

Code:

¬D'_Qsa·+1žj-""Q*2/

Explanation:

¬ # Push input and also push the first character.
 D # Duplicate the first character.
 '_Q # Check if it is equal to an underscore character.
 sa # Swap and check the duplicate if it's an alphabetic character.
 · # Double the value.
 + # Add both values up
 1 # Take the first input.
 žj- # žj is short for [a-zA-Z0-9_]. This will be substracted from the
 initial string. 
 ""Q # Check if the string is empty.
 * # Multiply this with the first value.
 2/ # Halve it, resulting into 0.0, 0.5, or 1.0.

In short, the formula for the string s in pseudocode is:

((s[0] == '_' + s.isalpha() ×ばつ 2) ×ばつ (s.remove([a-zA-Z0-9_]) == "")) / 2

Try it online!

Uses CP-1252 encoding.

answered Mar 19, 2016 at 15:32
\$\endgroup\$
6
\$\begingroup\$

PHP (50 - 10% = 45)

Thanks to Schism for the -2 :)

preg_match('/^[a-z_]\w*$/i',$s)?$s[0]=='_'?.5:1:0;

Not to compete with the golflang answers, but I thought I'd try it anyways.

preg_match('/^[a-z_]\w*$/i', $s) # Matches every a-zA-Z0-9_ string that doesnt start with a number
? $s[0] == '_' # Then, if it starts with an _
 ? .5 # give 0.5 points
 : 1 # If it doesn't, give 1
: 0; # If it didn't match the regex, give 0

Something to note is that in PHP, without the /u modifier, \w only selects ASCII letters. In some other languages/Regex flavours, this pattern won't work.

Edit: I see a lot of people using \w and \d in their answers, when they use a language that includes non-ASCII letters and digits too. That is NOT the puzzle. They are wrong. (Can't downvote/comment yet, sorry to need to tell it this way.)

answered Mar 20, 2016 at 16:26
\$\endgroup\$
5
  • \$\begingroup\$ Welcome to Programming Puzzles and Code Golf Stack Exchange. This is a great answer; often code-golf challenges are within languages as well as between them. I'm giving you a +1 for this solution! Well done. \$\endgroup\$ Commented Mar 20, 2016 at 17:03
  • 1
    \$\begingroup\$ You can shave off two characters with [a-z].../i. \$\endgroup\$ Commented Mar 21, 2016 at 3:42
  • \$\begingroup\$ @Schism Thank you. Don't know how I managed to forget that, usually I'm good at these kind of regex puzzles :) \$\endgroup\$ Commented Mar 21, 2016 at 16:23
  • 1
    \$\begingroup\$ About your edit: can you be more specific - what languages? In javascript \d is exactly the same as [0-9]. \w is exactlly the same as [A-Za-z0-9_] developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… \$\endgroup\$ Commented Mar 21, 2016 at 17:56
  • \$\begingroup\$ The code page that the language uses is irrelevant; as long as the regex properly handles ASCII, it's valid. All of the current regex-based answers work, to my knowledge. You're not trying to match a variable name in your language; rather, you're trying to match a variable name based on the rules in the challenge. \$\endgroup\$ Commented Mar 22, 2016 at 0:29
5
\$\begingroup\$

Retina, (削除) 30 - 10% = 27 (削除ここまで) (削除) 28 - 10% = 25.2 (削除ここまで) 29 - 10% = 26.1 bytes

Both versions qualify for bonus, as they handle empty input correctly (outputs 0)

I had to fix a bug caused by one of .NET regex features, which considers some (read as many) Unicode characters as "word" characters. Fortunately, this cost me only a single byte in both versions. It only came down to adding a modifier to make the regex matching behavior compliant to ECMAScript standards. More about that here.

New (削除) 28 (削除ここまで) 29-byte version, made by @MartinBüttner. Thanks!

^_
$_¶_
Mme`^(?!\d)\w+$
2
0.5

Explanation

First, we check if the input starts with an underscore. If it does, the input is duplicated, with a newline in between. For example: _test_ -> _test_\n_test_, where \n is the newline. Then we try to match anything, that doesn't start with a number, but is followed by any number of "word" characters (a-z, A-Z, digits, and underscore) on each line. Note that if input started with an underscore and was replaced to two lines, this will match both lines. Then we check if we had 2 matches, and replace them with 0.5. Empty or invalid line will always yield 0 matches, and valid variable names always yield 1 match.


My own (削除) 30 (削除ここまで) 31-byte version

Ae`^\d|\W
^_.*
0.5
^\D.*
1
^$
0

Explanation

First of all, we check if input starts with a digit or contains a non-word character (anything other than a-z, A-Z, digits and underscore). If it does, it's discarded, because it's invalid. Then we check if it starts with an underscore. If it does, it's replaced with 0.5. Then we check if it starts with a non-digit character (at this point the first character is either 0, a-z, or A-Z. Only a-z and A-Z are non-digits, obviously). If it does, it's replaced with a 1. Then we check for empty string and replace it with 0.

Try it online!
Try it online! Old version

answered Mar 19, 2016 at 19:28
\$\endgroup\$
4
  • \$\begingroup\$ Waitwaitwait. At the ^\D.* stage it can start with a 0? That's weird. \$\endgroup\$ Commented Mar 19, 2016 at 19:55
  • \$\begingroup\$ @CatsAreFluffy It can, if it started with a _ and was replaced with 0.5. Then it starts with a 0. \$\endgroup\$ Commented Mar 19, 2016 at 19:58
  • \$\begingroup\$ This incorrectly gives a 1 for input Ψ. \$\endgroup\$ Commented Mar 21, 2016 at 19:27
  • \$\begingroup\$ @TimmyD Interesting. I don't understand why does it do so. Quick check indicates that \w is matching non-ASCII characters, which it shouldn't do (I've tried to give it ƜƝƞƟƠ and ᎳᎴᎵᎶᎷᎸᎹ as input). I'll look into this later. Possible solution seems replacing \w with [a-zA-Z\d_]. \$\endgroup\$ Commented Mar 21, 2016 at 19:43
4
\$\begingroup\$

Python 3, 36 bytes

lambda s:s.isidentifier()/-~(s[:1]=='_')

The code is 40 bytes long and qualifies for the -10% bonus.

Note that this will only work correctly for code pages that don't have non-ASCII letters/digits.

answered Mar 21, 2016 at 18:51
\$\endgroup\$
3
\$\begingroup\$

MATL, 27 bytes

1)95=2/8M3Y2m+G7M95h4Y2hmA*

This works in current version(15.0.0) of the language.

Input is a string with single quotes.

Try it online!

Explanation

1) % take input implicitly. Get its first element
95= % true if it equals 95 (underscore)
2/ % divide by 2: gives 0.5 if underscore, 0 if not
8M % push first element of input again
3Y2 % predefined literal: string with all letters
m % true if it's a letter
+ % add. Gives 1 if letter, 0.5 if underscore
G % push input again
7M % push string with all letters again
95h % concatenate underscore
4Y2h % predefined literal: string with all digits. Concatenate
mA % true if all input chars belong to that concatenated string
* % multiply. Display implicitly
answered Mar 19, 2016 at 15:31
\$\endgroup\$
3
\$\begingroup\$

Pyke, 21 bytes

(noncompeting, added string subtraction, various string constants)

Qh~u{Q~J\_+-|!Qh\_qh/

Explanation:

Qh~u{ - Check first char isn't a digit
 Q~J\_+- - Is the input alphanumeric + "_"
 |! - Combine
 Qh\_q - Is the first char an "_"
 h/ - Combine
answered Mar 19, 2016 at 15:53
\$\endgroup\$
2
\$\begingroup\$

Pyth, 27 bytes

c!|-rz0++G\_JjkUT}hzJhqhz\_

Test Suite

answered Mar 19, 2016 at 15:16
\$\endgroup\$
0
2
\$\begingroup\$

Gogh, 29 bytes

÷"[^\W\d]\w*"g¦"_.*"g+÷2=0.5¿

Run using:

$ ./gogh no '÷"[^\W\d]\w*"g¦"_.*"g+÷2=0.5¿' "_test"

Explanation

 " Implicit input "
÷ " Duplicate the TOS "
"[^\W\d]\w*"g " Fully match the STOS against the TOS (regex) "
¦ " Swap the STOS and TOS "
"_.*"g " Fully match the STOS against the TOS (regex) "
+ " Add the TOS to the STOS "
÷ " Duplicate the TOS "
2= " Determine if the TOS is equal to 2 "
0.5¿ " Leave the correct output on the stack "
 " Implicit output "
answered Mar 19, 2016 at 15:58
\$\endgroup\$
2
\$\begingroup\$

Perl, 21 bytes

$_=!/\W|^\d//2**/^_/

The score includes +1 byte for the -p switch. Try it on Ideone.

answered Mar 19, 2016 at 15:59
\$\endgroup\$
3
  • \$\begingroup\$ could you have, say -$_||$_=... to account for the empty answer? (using - because + is a noop in perl) \$\endgroup\$ Commented Mar 21, 2016 at 14:05
  • \$\begingroup\$ No, that's a runtime error. But even if it worked, it would make my score worse. \$\endgroup\$ Commented Mar 21, 2016 at 15:41
  • \$\begingroup\$ I only did minimalistic tests, so I'll trust you. Fair that 10% of 21 bytes isn't much.. \$\endgroup\$ Commented Mar 21, 2016 at 15:43
2
\$\begingroup\$

Pyth, 19 bytes

c!:z"\W|^\d"0h!xz\_

Try it with the Pyth Compiler.

Note that this will only work correctly for code pages that don't have non-ASCII letters/digits.

How it works

c!:z"\W|^\d"0h!xz\_ (implicit) Save the input in z.
 :z 0 Test if z matches the following regex:
 "\W|^\d" A non-word character or a digit at the beginning.
 This returns True iff z is an invalid name.
 ! Apply logical NOT to yield True iff z is a valid name.
 xz\_ Find the first index of the underscore in z.
 This yields 0 iff z begins with an underscore.
 h! Apply logical NOT and increment.
 This yields 2 if z begins with an underscore, 1 otherwise.
c Divide the two results.
answered Mar 19, 2016 at 16:33
\$\endgroup\$
0
2
\$\begingroup\$

Factor, 84 * 0.9 = 76.5

USE: regexp
[ R/ [_a-zA-Z]\w*/ R/ _.*/ [ matches? 1 0 ? ] bi-curry@ bi 0 = 1 2 ? / ]

Runs on the listener (repl), defines a quotation (anonymous function) that takes a string and outputs { 0 | 1/2 | 1 }.

Defining it as a word it's 97 chars:

USE: regexp
: v ( s -- n ) R/ [_a-zA-Z]\w*/ R/ _.*/ [ matches? 1 0 ? ] bi-curry@ bi 0 = 1 2 ? / ;

How does it work:

R/ [_a-zA-Z]\w*/ R/ _.*/ defines two regular expressions. bi-curry@ partially applies the quotation [ matches? 1 0 ? ] to each regex, leaving two curried quotations on the stack. bi applies each quotation to the argument string.

Each of those (curried quotations) leave either a 1 or a 0, depending if they matched. The first matches on the well formed names, the second on names starting with underscore.

0 = 1 2 ? / The last value is replaced with a 1 if it was 0, or with a 2 if it was 1. Then the first (1 or 0, valid or not) is divided by the second (2 or 1, starts with underscore or not).

This is loooong! Any pointers to shrinking a bit more appreciated...

And I hate regexps!

PS.

{ 0 } [ "" v ] unit-test
{ 0 } [ "" v ] unit-test
{ 0 } [ "1" v ] unit-test
{ 0 } [ "1var" v ] unit-test
{ 0 } [ "var$" v ] unit-test
{ 0 } [ "foo var" v ] unit-test
{ 1 } [ "v" v ] unit-test
{ 1 } [ "var" v ] unit-test
{ 1 } [ "var_i_able" v ] unit-test
{ 1 } [ "v4r14bl3" v ] unit-test
{ 1/2 } [ "_" v ] unit-test
{ 1/2 } [ "_v" v ] unit-test
{ 1/2 } [ "_var" v ] unit-test
{ 1/2 } [ "_var_i_able" v ] unit-test
{ 1/2 } [ "_v4r14bl3" v ] unit-test

all test pass ;)

Mama Fun Roll
9,9681 gold badge38 silver badges47 bronze badges
answered Mar 21, 2016 at 18:18
\$\endgroup\$
4
  • \$\begingroup\$ Just wondering, is the whitespace truly necessary? I can't say for sure since I don't know the language or have the interpreter. \$\endgroup\$ Commented Mar 21, 2016 at 23:46
  • \$\begingroup\$ @MamaFunRoll yeah, not the best golfing language! In the Forth tradition, only delimiter are whitespace chars. \$\endgroup\$ Commented Mar 22, 2016 at 2:59
  • \$\begingroup\$ Oh, I see. Here, have an upvote. \$\endgroup\$ Commented Mar 22, 2016 at 3:07
  • \$\begingroup\$ Yay, ty! Now to break havoc with my comment-everywhere priv! \$\endgroup\$ Commented Mar 22, 2016 at 3:23
2
\$\begingroup\$

Dyalog APL, 19 bytes - 10% = 17.1

{(0≤⎕NC⍵)÷1+'_'=⊃⍵}

{......} anonymous function where the right argument is represented by
⊃⍵ first character (gives space if empty)
'_'= 1 if equal to 'underbar, 0 otherwise
1+ evaluates to 2 if initial underbar, 1 otherwise
⎕NC⍵ name class; -1 if invalid name, 0 if undefined (but valid name), 2-9 if defined (and thus valid)

answered Mar 21, 2016 at 15:16
\$\endgroup\$
1
\$\begingroup\$

Mathematica, 93 bytes

If[#~StringMatchQ~RegularExpression@"[A-Za-z_][0-9A-Za-z_]*",If[#~StringTake~1=="_",.5,1],0]&

I'm honestly not sure if this can be golfed further.

answered Mar 19, 2016 at 15:18
\$\endgroup\$
0
1
\$\begingroup\$

Perl, 34 + 1 = 35 bytes

$_=/^([^\W\d])\w*$//((1ドル eq"_")+1)

Uses the -p flag.

Explanation

$_=/^([^\W\d])\w*$//((1ドル eq"_")+1)
 /^([^\W\d])\w*$/ matches any string that starts with an underscore or a letter of the alphabet followed by 0 or more alphanumeric + underscore characters. The first character is stored in a capture group
 / divide result by
 ((1ドル eq"_")+1) (capture == "_") + 1. This is 1 if the first character was not an underscore and 2 if it was.
$_= assign to $_ and implicitly print
answered Mar 19, 2016 at 15:08
\$\endgroup\$
4
  • \$\begingroup\$ [_a-zA-Z] -> [^\W\d] if perl works the same as JavaScript, I think you'd also have to do \w* \$\endgroup\$ Commented Mar 19, 2016 at 15:22
  • \$\begingroup\$ @Downgoat Seems to work fine with \w+. \$\endgroup\$ Commented Mar 19, 2016 at 15:24
  • \$\begingroup\$ matches false for a \$\endgroup\$ Commented Mar 19, 2016 at 15:26
  • \$\begingroup\$ @Downgoat Ah, right. I see. \$\endgroup\$ Commented Mar 19, 2016 at 15:36
1
\$\begingroup\$

Python, 84 -10% = 76 bytes

lambda x:[0,[[.5,1][x[0]>'z'],0][x[0]<'A']][x.replace('_','a').isalnum()]if x else 0
answered Mar 20, 2016 at 9:10
\$\endgroup\$
1
\$\begingroup\$

Vyxal, 22 bytes

hkdc¬:[kr\_+?F¬?h\_=ß1⁄2

Try it Online!

A mess.

answered Aug 26, 2021 at 20:56
\$\endgroup\$
1
\$\begingroup\$

Japt, 23 bytes

Guess which genius once upon a time suggested removing _ from Japt's \w character class thereby costing himself 3 bytes here! ETH was going to add a new class with _ included but then he disappeared.

\f"[%l_][%w_]+")/ÒUè"^_

Try it or run all test cases

answered Sep 3, 2021 at 9:45
\$\endgroup\$
1
  • \$\begingroup\$ japt forking time? \$\endgroup\$ Commented Sep 3, 2021 at 13:42
0
\$\begingroup\$

JavaScript ES7, 37 bytes

x=>!x.match(/\W|^\d/)/2**/^_/.test(x)

Try it online

How it works:

x=> // Fat arrow function
 !x.match(/\W|^\d/) // Gives false if contains non word or starting 
 // with a digit. Booleans in numeric context will 
 // be 0 or 1
 2** // 2 to the power of...
 /^_/.test(x) // gives true if starting with '_'. 
 // true -> 1 -> 2**1 -> 2
 // false -> 0 -> 2**0 -> 1
 / // Devide the lValue boolean with the numeric rValue:
 // lValue = 0 or 1
 // rValue = 2 or 1

Port of @Dennis's Perl answer

answered Mar 19, 2016 at 23:59
\$\endgroup\$
0
\$\begingroup\$

Ruby, 44 bytes

->(s){s=~/^(_|\d)?\w*$/?1ドル?1ドル==?_?0.5:0:1:0}
answered Mar 20, 2016 at 3:34
\$\endgroup\$
3
  • \$\begingroup\$ You don't need parens around the parameters for stabby lambdas \$\endgroup\$ Commented Mar 21, 2016 at 18:24
  • \$\begingroup\$ Also if you can figure out a way to drop that extra ternary you can probably save some bytes. Maybe /^([a-z_]).../i instead of /^(_|\d)?.../ \$\endgroup\$ Commented Mar 21, 2016 at 18:44
  • \$\begingroup\$ @NotthatCharles D'oh... you're right. I'll give it a closer look when I a chance \$\endgroup\$ Commented Mar 21, 2016 at 20:35
0
\$\begingroup\$

Ruby, 57 - 10% = 51.3 bytes

->(s){case s
when'',/^\d/,/\W/
0
when/^_/
0.5
else
1
end}

A pretty naïve approach

answered Mar 20, 2016 at 3:27
\$\endgroup\$
4
  • \$\begingroup\$ 51.3 bytes, mind you. :) \$\endgroup\$ Commented Mar 21, 2016 at 16:19
  • \$\begingroup\$ @Xesau whoops - embarassing. Fixed now :) \$\endgroup\$ Commented Mar 21, 2016 at 17:40
  • \$\begingroup\$ You save a huge amount of bytes if you use ternary chaining: ->(s){s=~/^$|^\d|\W/?0:s=~/^_/?0.5:1} \$\endgroup\$ Commented Mar 21, 2016 at 20:27
  • \$\begingroup\$ @KevinLau True - I added another ruby answer in that vein already (though it's not great either) \$\endgroup\$ Commented Mar 21, 2016 at 20:37
0
\$\begingroup\$

Lua, 82 - 10% = 73.8

v=function(s)return(s:match("^[_%a]+[_%w]*$")and 1or 0)*(s:match("_")and.5or 1)end

Test Cases:

print(v("a") == 1) -- true
print(v("1") == 0) -- true
print(v("_") == 0.5) -- true
print(v("") == 0) -- true
print(v("1a") == 0) -- true
print(v("a1") == 1) -- true
print(v("_1") == 0.5) -- true
print(v("_a") == 0.5) -- true
print(v("1_") == 0) -- true
print(v("a_") == 0.5) -- true
answered Mar 21, 2016 at 20:15
\$\endgroup\$
1
  • \$\begingroup\$ I think you can use STDIN to eat at least 10 bytes. \$\endgroup\$ Commented Mar 30, 2016 at 15:39
0
\$\begingroup\$

Lua, 68 * .9 = 61.2 bytes

s=arg[1]print(s:find("^[%a_][%w_]*$")and(s:find("^_")and.5or 1)or 0)

Takes arguments on the command line

answered Mar 22, 2016 at 0:51
\$\endgroup\$
0
\$\begingroup\$

Julia 1.3, (削除) 46 (削除ここまで) 44 -10% = (削除) 41.4 (削除ここまで) 39.6 bytes

!s=[1 .5]count.(r"^[a-z]\w*$"i=>r"^_\w*$",s)

Try it online!

explanation

  • r"^[a-z]\w*$"i is the regex for a variable not starting with a _ (the i means case-insensitive)
  • r"^_\w*$" for a variable starting with a _
  • count.() counts the number of time each regex appears in s, result is in a vector (similar to a ×ばつ1 matrix)
  • [1 .5] is a ×ばつ2 matrix, when multiplied by the previous result, gives the expected result (0.5 when starting with _, 1 otherwise)
answered Aug 27, 2021 at 8:59
\$\endgroup\$
0
\$\begingroup\$

Scala 3, 85 bytes

Golfed version. Attempt This Online!

s=>if(s.isEmpty||s(0).isDigit|| !s.matches("^\\w+$")).0 else if(s(0)=='_').5 else 1.0

Ungolfed version. Attempt This Online!

object Main {
 def main(args: Array[String]): Unit = {
 val testCases = Map(
 "abcdefghijklmnop" -> 1,
 "_test_" -> 0.5,
 "123abc" -> 0,
 "A_b1C_23" -> 1,
 "_!" -> 0,
 "magical pony1" -> 0
 )
 testCases.foreach { case (input, expected) =>
 val result = validateString(input)
 println(s"Input: $input, Expected: $expected, Result: $result, Correct: ${result == expected}")
 }
 }
 def validateString(s: String): Double = {
 if(s.isEmpty || s.head.isDigit || !s.matches("^\\w+$")) {
 0.0
 } else if(s.head == '_') {
 0.5
 } else {
 1.0
 }
 }
}
answered Mar 12, 2024 at 6:31
\$\endgroup\$
0
\$\begingroup\$

Perl 5, (22 + 1 -p bytes) * .9 = 20.7

$_=!/\W/*/^\D//2**/^_/

Try it online!

answered Mar 12, 2024 at 6:37
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.