Hackerrank – Popis problému
Celý popis zadania sa nacháza – Hackerrank.
Riešenie
Rozdelil som si zadaný reťazec po častiach obsahujúcich vždy po 3 znaky. Potom som skontroloval, či je prvý znak rovný S
, druhý O
a tretí S
. Spočítal som všetky zmenené.
Vytvoril som riešenie v týchto programovacích jazykoch:
Všetky riešenia sú dostupné aj na mojom GitHub profile.
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.*; public class MarsExploration { public static void main(String[] args) { Scanner stdin = new Scanner(System.in); String msg = stdin.nextLine(); int result = 0; for(int i = 0; i < msg.length(); i += 3) { if(msg.charAt(i) != 'S') { result++; } if(msg.charAt(i + 1) != 'O') { result++; } if(msg.charAt(i + 2) != 'S') { result++; } } System.out.println(result); stdin.close(); } } |
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
'use strict'; const processData = input => { const msg = input; let result = 0; for(let i = 0; i < msg.length; i += 3) { if(msg.charAt(i) != 'S') { result++; } if(msg.charAt(i + 1) != 'O') { result++; } if(msg.charAt(i + 2) != 'S') { result++; } } console.log(result); }; process.stdin.resume(); process.stdin.setEncoding("ascii"); let _input = ""; process.stdin.on("data", input => _input += input); process.stdin.on("end", () => processData(_input)); |
Scala
1 2 3 4 5 6 7 8 9 10 11 12 |
object MarsExploration extends App { val line = Source.stdin.getLines().toList.head val tris = line.grouped(3) val sosDiffs = tris.map(diffSignal) println(sosDiffs.sum) def diffSignal(s: String): Long = { (if(s(0) == 'S') 0 else 1) + (if(s(1) == 'O') 0 else 1) + (if(s(2) == 'S') 0 else 1) } } |
Ruby
1 2 3 4 5 6 7 8 9 10 11 |
msg = gets.to_s.strip index = 0 result = 0 while index < msg.length do result += 1 if msg[index] != 'S' result += 1 if msg[index + 1] != 'O' result += 1 if msg[index + 2] != 'S' index += 3 end puts result |