Popis problému
Celý popis zadania sa nacháza – Hackerrank.
Riešenie
Vypočítaj width
a height
želanej matice:
height = ceil(length(input_string)
width = floor(length(input_string)
Potom vytvor maticu s rozmermi height x width
, ktorá bude obsahovať všetky znaky zo vstupného reťazca. Transponuj maticu a vypíš všetky riadky.
Poznámka: Namiesto riešenia hore, môžme vypísať všetky stĺpce vytvorenej matice. Pre každé dva znaky i
and j
vo vstupnom reťazci platí, že sú v jednom stĺpci, ak i mod height = j mod height
.
Vytvoril som riešenie v týchto programovacích jazykoch:
Všetky riešenia sú dostupné aj na mojom GitHub profile.
Scala
1 2 3 4 5 6 7 8 9 10 |
import scala.collection.immutable.TreeMap object Encryption extends App { val input = io.Source.stdin.bufferedReader().readLine() val height = Math.ceil(Math.sqrt(input.length)) val width = Math.floor(Math.sqrt(input.length)) val groupByColumn = TreeMap(input.indices.toList.groupBy(_ % height).toArray:_*).values val encrypted = groupByColumn.map(_.map(input.charAt).mkString("")).mkString(" ") println(encrypted) } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.Scanner; public class Encryption { public static void main(String[] args) { Scanner stdin = new Scanner(System.in); String input = stdin.nextLine(); int height = (int) Math.ceil(Math.sqrt(input.length())); int width = (int) Math.floor(Math.sqrt(input.length())); StringBuilder result = new StringBuilder(); for(int i = 0; i < height; i++) { int j = i; while(j < input.length()) { result.append(input.charAt(j)); j += height; } result.append(' '); } 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 |
function processData(input) { var height = parseInt(Math.ceil(Math.sqrt(input.length)), 10); var width = parseInt(Math.floor(Math.sqrt(input.length)), 10); var result = ''; for(var i = 0; i < height; i++) { var j = i; while(j < input.length) { result += input[j]; j += height; } result += ' '; } console.log(result); } process.stdin.resume(); process.stdin.setEncoding("ascii"); _input = ""; process.stdin.on("data", function (input) { _input += input; }); process.stdin.on("end", function () { processData(_input); }); |
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 |
input = gets.chomp width = Math.sqrt(input.length).floor height = Math.sqrt(input.length).ceil result = "" for i in 0...height do j = i while j < input.length result += input[j] j += height end result += " " end puts result |