Concours de programmation AtCoder dwango B à résoudre en Ruby, Perl et Java

introduction

Ce thème

Le thème de cette époque est l'agrégation par réduction Ruby Par exemple, la chaîne de caractères «1251251252525» est convertie en «25» -> «a» pour faciliter le comptage des caractères. => 1a1a1aaa Le nombre de «a» consécutifs est (1, 1, 3), donc additionnez le nombre de combinaisons pour chacun.

bit.rb


s = gets.chomp

s.gsub!(/25/, 'a')
p = []
c = 0
0.upto(s.size - 1) do |i|
  if s[i] == 'a'
    c += 1
  elsif c > 0
    p.push(c)
    c = 0
  end
  p.push(c) if i == s.size - 1 && c > 0
end
sum = 0
0.upto(p.size - 1) do |i|
  sum += (1..p[i]).reduce{|a, b| a + b}
end
puts sum

reduce.rb


  sum += (1..p[i]).reduce{|a, b| a + b}
  sum += (1..p[i]).reduce(&:+)
  sum += (1..p[i]).inject(:+)
  sum += (1..p[i]).sum

La partie de réduction peut être soit injectée, soit additionnée (ruby 2.4 ou version ultérieure). ** Addenda ** Ajout de réduire (&: +) dans les commentaires.

Perl

perl.pl


use v5.18; # strict say state
use List::Util qw/reduce/;

chomp (my $s = <STDIN>);
$s =~ s/25/a/g;
my $c = 0;
my @p;
for my $i (0..length($s)-1) {
  if (substr($s, $i, 1) eq 'a') {
    $c++;
  } elsif ($c > 0) {
    push @p, $c;
    $c = 0;
  }
  if ($i == length($s)-1 && $c > 0) {
    push @p, $c;
  }
}
my $sum = 0;
for my $i (0..$#p) {
  $sum += reduce {$a + $b} 1..$p[$i];
}
say $sum;

reduce.pl


use List::Util qw/reduce sum/;

  $sum += reduce {$a + $b} 1..$p[$i];
  $sum += sum(1..$p[$i]);

La partie réduite peut également être une somme. Java

java.java


import java.util.*;
import java.util.stream.IntStream;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        sc.close();
        s = s.replace("25", "a");
        List<Integer> p = new ArrayList<>();
        int c = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.substring(i, i + 1).equals("a")) {
                c++;
            } else if (c > 0) {
                p.add(c);
                c = 0;
            }
            if (i == s.length() - 1 && c > 0) {
                p.add(c);
            }
        }
        int sum = 0;
        for (int i = 0; i < p.size(); i++) {
            sum += IntStream.rangeClosed(1, p.get(i)).reduce(0, (a, b) -> a + b);
        }
        System.out.println(sum);
    }
}

reduce.java


            sum += IntStream.rangeClosed(1, p.get(i)).reduce(0, (a, b) -> a + b);
            sum += IntStream.rangeClosed(1, p.get(i)).sum();

La partie réduite peut également être une somme.

Ruby Perl Java
Longueur du code 284 Byte 411 Byte 847 Byte
Temps d'exécution 34 ms 28 ms 284 ms
Mémoire 4092 KB 2816 KB 33228 KB

Résumé

Site référencé

Recommended Posts

Concours de programmation AtCoder dwango B à résoudre en Ruby, Perl et Java
Résolution avec Ruby, Perl et Java AtCoder ABC 113 C Reference
AtCoder ARC 081 C hash à résoudre en Ruby, Perl et Java
Tri par hachage AtCoder ABC 111 C résolu en Ruby, Perl et Java
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 2) Méthode de planification dynamique
Résolution avec Ruby, Perl et Java AtCoder ABC 128 C
Résolvez AtCoder Beginner Contest 151 avec Java
Résolvez AtCoder Beginner Contest 150 avec Java
Résolvez AtCoder Beginner Contest 153 avec Java
Résolvez AtCoder Beginner Contest 175 avec Java
Résolvez AtCoder Beginner Contest 152 avec Java
Résolvez AtCoder Beginner Contest 156 avec Java
Résolution avec Ruby, Perl et Java AtCoder ABC 129 C (Partie 1)
Recherche de priorité de largeur AtCoder ABC 136 D résolue en Ruby, Perl et Java
AtCoder Beginner Contest 169 A, B, C avec rubis
Programmation par contraintes en Java
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
Programmation Java (variables et données)
[Java] Termes de base en programmation
Apprendre Ruby avec AtCoder 6 [Concours 168 Donc]
Exemple d'encodage et de décodage en Java
Classe StringBuffer et StringBuilder en Java
Ecrire des clés et des valeurs dans Ruby
Comprendre equals et hashCode en Java
AtCoder Beginner Contest 167 Problème C (Java)
Bonjour tout le monde en Java et Gradle
Pensons à ce qu'est la programmation déclarative en Java et Elm (partie 1)
J'ai écrit EX25 du guide de programmation AtCoder pour les débutants (APG4b) en java.
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 2-Programmation)
Différence entre final et immuable en Java
Faire un tri à bulles et sélectionner le tri avec Ruby
Apprendre Ruby avec AtCoder 7 [Contest 168 Triple Dots]
Programmation Java (classes et instances, méthodes principales)
Programmation Java (clause statique et "variables de classe")
[Ruby] Distinction et utilisation des boucles dans Ruby
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
Différence entre les listes d'arry et les listes liées en Java
Programmer les en-têtes et pieds de page PDF en Java
Apprenez les modèles Flyweight et ConcurrentHashMap en Java
La direction de Java dans "C ++ Design and Evolution"
De Java à C et de C à Java dans Android Studio
Lire et écrire des fichiers gzip en Java
Différence entre int et Integer en Java
Concours de programmation diverta 2019 A & B & C & D
Discrimination d'énum dans Java 7 et supérieur