paizaラーニングレベルアップ問題集の【大きな数値を3けたごとにカンマ区切りで出力】をやってみた。(2)

paizaラーニングレベルアップ問題集の【大きな数値を3けたごとにカンマ区切りで出力】をやってみました。
- - -
##### 問題
###### 大きな数値を3けたごとにカンマ区切りで出力（けた数は3の倍数です）
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step6
###### 大きな数値を3けたごとにカンマ区切りで出力2（けた数は3の倍数とは限りません）
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_boss
- - -
##### 方針
[前回](https://qiita.com/anonymously115/items/7de024e11fe208ce556a)は1桁ずつ出力していましたが、今回は3桁ずつ出力します。
1. けた数が3の倍数
	- 自然数$N$を文字列として受け取ります
	- 自然数$N$のけた数（バイト数）を$d$とします
	- $i=0,3,...,d-3$について
		- $i>0$ならば
			- `,`を出力します
		- 自然数$N$の上位$i+1$けた目から$3$けた出力します
	- 改行を出力します
1. けた数は3の倍数とは限らない
	- 自然数$N$を文字列として受け取ります
	- 自然数$N$のけた数を$d$とします
	- $d$を$3$で割った余りを$r$とします
	- 自然数$N$の先頭$r$けたを出力します
	- $i=r,r+3,...,d-3$について
		- $i>0$ならば
			- `,`を出力します
		- 自然数$N$の上位$i+1$けた目から$3$けた出力します
	- 改行を出力します

:::note info
2.のコードでも1.を正解することができます。
:::
- - -
##### C
###### 3の倍数のけた数
```c
#include <stdio.h>
#include <string.h>

int main() {
	char n[1002];
	scanf("%s", n);
	int d = (int) strlen(n);
	for (int i = 0; i < d; i += 3) {
		if (i > 0) putchar(',');
		char s[4] = "";
		s[3] = '\0';
		printf("%s", strncpy(s, n + i, 3));
	}
	puts("");
	return 0;
}
```
###### 3の倍数とは限らないけた数
```c
#include <stdio.h>
#include <string.h>

int main() {
	char n[1002];
	scanf("%s", n);
	int d = (int) strlen(n);
	int r = d % 3;
	char s[4] = "";
	s[r] = '\0';
	printf("%s", strncpy(s, n, r));
	for (int i = r; i < d; i += 3) {
		if (i > 0) putchar(',');
		s[3] = '\0';
		printf("%s", strncpy(s, n + i, 3));
	}
	puts("");
	return 0;
}
```
- - -
##### C++
###### 3の倍数のけた数
```cpp
#include <iostream>
using namespace std;

int main() {
	string n;
	cin >> n;
	int d = (int) n.size();
	for (int i = 0; i < d; i += 3) {
		if (i > 0) cout << ',';
		cout << n.substr(i, 3);
	}
	cout << endl;
	return 0;
}
```
###### 3の倍数とは限らないけた数
```cpp
#include <iostream>
using namespace std;

int main() {
	string n;
	cin >> n;
	int d = (int) n.size();
	int r = d % 3;
	cout << n.substr(0, r);
	for (int i = r; i < d; i += 3) {
		if (i > 0) cout << ',';
		cout << n.substr(i, 3);
	}
	cout << endl;
	return 0;
}
```
- - -
##### C#
###### 3の倍数のけた数
```cs
using System;

class Program
{
	public static void Main()
	{
		string n = Console.ReadLine();
		int d = n.Length;
		for (int i = 0; i < d; i += 3) {
			if (i > 0) Console.Write(',');
			Console.Write(n.Substring(i, 3));
		}
		Console.WriteLine();
	}
}
```
###### 3の倍数とは限らないけた数
```cs
using System;

class Program
{
	public static void Main()
	{
		string n = Console.ReadLine();
		int d = n.Length;
		int r = d % 3;
		Console.Write(n.Substring(0, r));
		for (int i = r; i < d; i += 3) {
			if (i > 0) Console.Write(',');
			Console.Write(n.Substring(i, 3));
		}
		Console.WriteLine();
	}
}
```
- - -
##### Go
###### 3の倍数のけた数
```go
package main
import "fmt"

func main() {
	var n string
	fmt.Scan(&n)
	d := len(n)
	for i := 0; i < d; i += 3 {
		if i > 0 {
			fmt.Print(",")
		}
		fmt.Print(n[i:i+3])
	}
	fmt.Println()
}
```
###### 3の倍数とは限らないけた数
```go
package main
import "fmt"

func main() {
	var n string
	fmt.Scan(&n)
	d := len(n)
	r := d % 3
	fmt.Print(n[:r])
	for i := r; i < d; i += 3 {
		if i > 0 {
			fmt.Print(",")
		}
		fmt.Print(n[i:i+3])
	}
	fmt.Println()
}
```
- - -
##### Java
###### 3の倍数のけた数
```java
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String n = sc.nextLine();
		sc.close();
		int d = n.length();
		for (int i = 0; i < d; i += 3) {
			if (i > 0) System.out.print(',');
			System.out.print(n.substring(i, i + 3));
		}
		System.out.println();
	}
}
```
###### 3の倍数とは限らないけた数
```java
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String n = sc.nextLine();
		sc.close();
		int d = n.length();
		int r = d % 3;
		System.out.print(n.substring(0, r));
		for (int i = r; i < d; i += 3) {
			if (i > 0) System.out.print(',');
			System.out.print(n.substring(i, i + 3));
		}
		System.out.println();
	}
}
```
- - -
##### JavaScript
###### 3の倍数のけた数
```js
const n = require("fs").readFileSync("/dev/stdin", "utf8").trim();
const d = n.length;
let m = "";
for (var i = 0; i < d; i += 3) {
	if (i > 0) m += ",";
	m += n.substring(i, i + 3);
}
console.log(m);
```
###### 3の倍数とは限らないけた数
```js
const n = require("fs").readFileSync("/dev/stdin", "utf8").trim();
const d = n.length;
const r = d % 3;
let m = n.substring(0, r);
for (var i = r; i < d; i += 3) {
	if (i > 0) m += ",";
	m += n.substring(i, i + 3);
}
console.log(m);
```
- - -
##### Kotlin
###### 3の倍数のけた数
```kotlin
fun main() {
	val n = readLine()!!
	val d = n.length
	for (i in 0 until d step 3) {
		if (i > 0) print(',')
		print(n.substring(i, i + 3))
	}
	println()
}
```
###### 3の倍数とは限らないけた数
```kotlin
fun main() {
	val n = readLine()!!
	val d = n.length
	val r = d % 3
	print(n.substring(0, r))
	for (i in r until d step 3) {
		if (i > 0) print(',')
		print(n.substring(i, i + 3))
	}
	println()
}
```
- - -
##### PHP
###### 3の倍数のけた数
```php
<?php
	$n = trim(fgets(STDIN));
	$d = strlen($n);
	for ($i = 0; $i < $d; $i += 3) {
		if ($i > 0) echo ',';
		echo substr($n, $i, $i + 3);
	}
	echo PHP_EOL;
?>
```
###### 3の倍数とは限らないけた数
```php
<?php
	$n = trim(fgets(STDIN));
	$d = strlen($n);
	$r = $d % 3;
	echo substr($n, 0, $r);
	for ($i = $r; $i < $d; $i += 3) {
		if ($i > 0) echo ',';
		echo substr($n, $i, $i + 3);
	}
	echo PHP_EOL;
?>
```
- - -
##### Perl
###### 3の倍数のけた数
```pl
chomp(my $n = <STDIN>);
my $d = length($n);
for (my $i = 0; $i < $d; $i += 3) {
	if ($i > 0) {
		print ',';
	}
	print substr($n, $i, 3);
}
print $/;
```
###### 3の倍数とは限らないけた数
```pl
chomp(my $n = <STDIN>);
my $d = length($n);
my $r = $d % 3;
print substr($n, 0, $r);
for (my $i = $r; $i < $d; $i += 3) {
	if ($i > 0) {
		print ',';
	}
	print substr($n, $i, 3);
}
print $/;
```
- - -
##### Python3
###### 3の倍数のけた数
```py
n = input()
d = len(n)
for i in range(0, d, 3):
	if i > 0:
		print(',', end="")
	print(n[i:i+3], end="")
print()
```
###### 3の倍数とは限らないけた数
```py
n = input()
d = len(n)
r = d % 3
m = n[:r]
for i in range(r, d, 3):
	if i > 0:
		m += ','
	m += n[i:i+3]
print(m)
```
- - -
##### Ruby
###### 3の倍数のけた数
```rb
n = gets.chomp
d = n.size
0.step(d - 3, 3) do |i|
	if i > 0
		print ','
	end
	print n[i...i+3]
end
puts
```
###### 3の倍数とは限らないけた数
```rb
n = gets.chomp
d = n.size
r = d % 3
print n[0...r]
r.step(d - 3, 3) do |i|
	if i > 0
		print ','
	end
	print n[i...i+3]
end
puts
```
- - -
##### Scala
###### 3の倍数のけた数
```scala
import scala.io.StdIn._

object Main extends App{
	val n = readLine()
	val d = n.length
	for (i <- 0 until d by 3) {
		if (i > 0) {
			print(",")
		}
		print(n.substring(i, i + 3))
	}
	println()
}
```
###### 3の倍数とは限らないけた数
```scala
import scala.io.StdIn._

object Main extends App{
	val n = readLine()
	val d = n.length
	val r = d % 3
	print(n.substring(0, r))
	for (i <- r until d by 3) {
		if (i > 0) {
			print(",")
		}
		print(n.substring(i, i + 3))
	}
	println()
}
```
- - -
##### Swift
###### 3の倍数のけた数
```swift
let n = readLine()!
let d = n.count
var m = ""
for i in stride(from: 0, to: d, by: 3) {
	if i > 0 {
		m += ","
	}
	m += n[n.index(n.startIndex, offsetBy: i)..<n.index(n.startIndex, offsetBy: i + 3)]
}
print(m)
```
###### 3の倍数とは限らないけた数
```swift
let n = readLine()!
let d = n.count
let r = d % 3
var m = n[n.index(n.startIndex, offsetBy: 0)..<n.index(n.startIndex, offsetBy: r)]
for i in stride(from: r, to: d, by: 3) {
	if i > 0 {
		m += ","
	}
	m += n[n.index(n.startIndex, offsetBy: i)..<n.index(n.startIndex, offsetBy: i + 3)]
}
print(m)
```