Exactly three adjacent 3 in lists: Difference between revisions
Thundergnat (talk | contribs) m (→{{header|Ring}}: mark incorrect '''again'''.....) |
|||
Line 120: | Line 120: | ||
=={{header|Ring}}== |
=={{header|Ring}}== |
||
{{incorrect|Ring|Will incorrectly pass for a list with '''more''' than 3 consecutive 3s. Test with [9,3,3,3,3,1,7,8,5]}} |
|||
<lang ring> |
<lang ring> |
||
see "working..." + nl |
see "working..." + nl |
Revision as of 11:50, 7 December 2021
- Task
Let given 5 lists of ints:
list[1] = [9,3,3,3,2,1,7,8,5]
list[2] = [5,2,9,3,3,7,8,4,1]
list[3] = [1,4,3,6,7,3,8,3,2]
list[4] = [1,2,3,4,5,6,7,8,9]
list[5] = [4,6,8,7,2,3,3,3,1]
Print 'true' if the value '3' appears in the list exactly 3 times and they are adjacent ones otherwise print 'false'.
FreeBASIC
<lang freebasic>dim as integer list(1 to 5, 1 to 9) = {_
{9,3,3,3,2,1,7,8,5}, {5,2,9,3,3,7,8,4,1},_ {1,4,3,6,7,3,8,3,2}, {1,2,3,4,5,6,7,8,9},_ {4,6,8,7,2,3,3,3,1}}
dim as boolean go, pass dim as integer i, j, c
for i = 1 to 5
go = false pass = true c = 0 for j = 1 to 9 if list(i, j) = 3 then c+=1 go = true else if go = true and c<>3 then pass=false go = false end if next j print i;" "; if c = 3 and pass then print true else print false
next i</lang>
- Output:
1 true 2 false 3 false 4 false 5 true
Julia
<lang julia>function consecutivein(a::Vector{T}, lis::Vector{T}) where T
return any(i -> a == lis[i:i+length(a)-1], 1:length(lis)-length(a)+1)
end
needle = [3, 3, 3] for haystack in [
[9,3,3,3,2,1,7,8,5], [5,2,9,3,3,7,8,4,1], [1,4,3,6,7,3,8,3,2], [1,2,3,4,5,6,7,8,9], [4,6,8,7,2,3,3,3,1]] println("$needle in $haystack: ", consecutivein(needle, haystack))
end </lang>
Raku
Generalized <lang perl6>for 1 .. 4 -> $n {
say "\nExactly $n {$n}s, and they are consecutive:";
say .gist, ' ', lc (.Bag{$n} == $n) && ( so .rotor($n=>-($n - 1)).grep: *.all == $n ) for [9,3,3,3,2,1,7,8,5], [5,2,9,3,3,7,8,4,1], [1,4,3,6,7,3,8,3,2], [1,2,3,4,5,6,7,8,9], [4,6,8,7,2,3,3,3,1], [3,3,3,1,2,4,5,1,3], [0,3,3,3,3,7,2,2,6], [3,3,3,3,3,4,4,4,4]
}</lang>
- Output:
Exactly 1 1s, and they are consecutive: [9 3 3 3 2 1 7 8 5] true [5 2 9 3 3 7 8 4 1] true [1 4 3 6 7 3 8 3 2] true [1 2 3 4 5 6 7 8 9] true [4 6 8 7 2 3 3 3 1] true [3 3 3 1 2 4 5 1 3] false [0 3 3 3 3 7 2 2 6] false [3 3 3 3 3 4 4 4 4] false Exactly 2 2s, and they are consecutive: [9 3 3 3 2 1 7 8 5] false [5 2 9 3 3 7 8 4 1] false [1 4 3 6 7 3 8 3 2] false [1 2 3 4 5 6 7 8 9] false [4 6 8 7 2 3 3 3 1] false [3 3 3 1 2 4 5 1 3] false [0 3 3 3 3 7 2 2 6] true [3 3 3 3 3 4 4 4 4] false Exactly 3 3s, and they are consecutive: [9 3 3 3 2 1 7 8 5] true [5 2 9 3 3 7 8 4 1] false [1 4 3 6 7 3 8 3 2] false [1 2 3 4 5 6 7 8 9] false [4 6 8 7 2 3 3 3 1] true [3 3 3 1 2 4 5 1 3] false [0 3 3 3 3 7 2 2 6] false [3 3 3 3 3 4 4 4 4] false Exactly 4 4s, and they are consecutive: [9 3 3 3 2 1 7 8 5] false [5 2 9 3 3 7 8 4 1] false [1 4 3 6 7 3 8 3 2] false [1 2 3 4 5 6 7 8 9] false [4 6 8 7 2 3 3 3 1] false [3 3 3 1 2 4 5 1 3] false [0 3 3 3 3 7 2 2 6] false [3 3 3 3 3 4 4 4 4] true
Ring
<lang ring> see "working..." + nl
list = List(5) list[1] = [9,3,3,3,2,1,7,8,5] list[2] = [5,2,9,3,3,7,8,4,1] list[3] = [1,4,3,6,7,3,8,3,2] list[4] = [1,2,3,4,5,6,7,8,9] list[5] = [3,3,3,1,2,4,5,1,3]
for n = 1 to 5
strn = list2str(list[n]) cnt = count(strn,"3") if cnt > 2 for m = 1 to len(list[n])-2 if list[n][m] = 3 and list[n][m+1] = 3 and list[n][m+2] = 3 flag = 1 exit ok next else flag = 0 ok if flag = 1 see "" + n + " true" + nl else see "" + n + " false" + nl ok
next
see "done..." + nl
func count(cString,dString)
sum = 0 while substr(cString,dString) > 0 sum++ cString = substr(cString,substr(cString,dString)+len(string(sum))) end return sum
</lang>
- Output:
working... 1 true 2 false 3 false 4 false 5 true done...
Wren
<lang ecmascript>var lists = [
[9,3,3,3,2,1,7,8,5], [5,2,9,3,3,7,8,4,1], [1,4,3,6,7,3,8,3,2], [1,2,3,4,5,6,7,8,9], [4,6,8,7,2,3,3,3,1]
] System.print("Exactly three adjacent 3's:") for (list in lists) {
var threesCount = list.count { |n| n == 3 } var condition = false if (threesCount == 3) { var i = list.indexOf(3) condition = list[i+1] == 3 && list[i+2] == 3 } System.print("%(list) -> %(condition)")
}</lang>
- Output:
Exactly three adjacent 3's: [9, 3, 3, 3, 2, 1, 7, 8, 5] -> true [5, 2, 9, 3, 3, 7, 8, 4, 1] -> false [1, 4, 3, 6, 7, 3, 8, 3, 2] -> false [1, 2, 3, 4, 5, 6, 7, 8, 9] -> false [4, 6, 8, 7, 2, 3, 3, 3, 1] -> true