58 lines
1.4 KiB
Text
58 lines
1.4 KiB
Text
var formats = [
|
|
{|a,b,c|
|
|
Hash(
|
|
func => {|d,e,f,g| ((d.$a(e)).$b(f)).$c(g) },
|
|
format => "((%d #{a} %d) #{b} %d) #{c} %d"
|
|
)
|
|
},
|
|
{|a,b,c|
|
|
Hash(
|
|
func => {|d,e,f,g| (d.$a((e.$b(f)))).$c(g) },
|
|
format => "(%d #{a} (%d #{b} %d)) #{c} %d",
|
|
)
|
|
},
|
|
{|a,b,c|
|
|
Hash(
|
|
func => {|d,e,f,g| (d.$a(e)).$b(f.$c(g)) },
|
|
format => "(%d #{a} %d) #{b} (%d #{c} %d)",
|
|
)
|
|
},
|
|
{|a,b,c|
|
|
Hash(
|
|
func => {|d,e,f,g| (d.$a(e)).$b(f.$c(g)) },
|
|
format => "(%d #{a} %d) #{b} (%d #{c} %d)",
|
|
)
|
|
},
|
|
{|a,b,c|
|
|
Hash(
|
|
func => {|d,e,f,g| d.$a(e.$b(f.$c(g))) },
|
|
format => "%d #{a} (%d #{b} (%d #{c} %d))",
|
|
)
|
|
},
|
|
];
|
|
|
|
var op = %w( + - * / )
|
|
var blocks = op.map { |a| op.map { |b| op.map { |c| formats.map { |format|
|
|
format(a,b,c)
|
|
}}}}.flat
|
|
|
|
loop {
|
|
var input = Sys.scanln("Enter four integers or 'q' to exit: ");
|
|
input == 'q' && break;
|
|
|
|
if (input !~ /^\h*[1-9]\h+[1-9]\h+[1-9]\h+[1-9]\h*$/) {
|
|
say "Invalid input!"
|
|
next
|
|
}
|
|
|
|
var n = input.split.map{.to_n}
|
|
var numbers = n.permutations
|
|
|
|
blocks.each { |block|
|
|
numbers.each { |n|
|
|
if (block{:func}.call(n...) == 24) {
|
|
say (block{:format} % (n...))
|
|
}
|
|
}
|
|
}
|
|
}
|