Skip to content

Instantly share code, notes, and snippets.

@omas-public
Last active October 25, 2022 10:20
Show Gist options
  • Save omas-public/46fe461d1591ab7fef84e41b8fa206e4 to your computer and use it in GitHub Desktop.
Save omas-public/46fe461d1591ab7fef84e41b8fa206e4 to your computer and use it in GitHub Desktop.
10・25のお題

【改行あり出力】1,000 行の出力

入力は以下のテンプレートを使用する

const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split('\n')

Arrayを使う方法

const lines = [...Array(1000)].map((v, i) => i + 1)
console.log(lines.join('\n'))

forを使う方法

const lines = []
for (let i = 0; i < 1000; i += 1) {
  lines.push(i + 1)
}
console.log(lines.join('\n'))
const stream = 813
console.log(stream)
const lines = [8, 13]
console.log(lines.join('\n'))
const lines = [8, 1, 3]
console.log(lines.join('\n'))
const lines = [813, 1, 2, 923874, 23648, 782356, 3256, 2342, 24324, 112]
console.log(lines.join('\n'))

【半角スペース区切りの出力】1,000 個の数値を出力

Arrayを使う方法

const lines = [...Array(1000)].map((v, i) => i + 1)
console.log(lines.join(' '))

forを使う方法

const lines = []
for (let i = 0; i < 1000; i += 1) {
  lines.push(i + 1)
}
console.log(lines.join(' '))
const stream = '1 1'
const lines = stream.split(' ')
console.log(lines.join(' '))
const stream = '8 1 3'
const lines = stream.split(' ')
console.log(lines.join(' '))
const stream = '1 2 3 4 5 6 7 8 9 10 '
const lines = stream.split(' ')
console.log(lines.join(' '))
const stream = '1 2 3 4 5 6 7 8 9 10'
const lines = stream.split(' ')
console.log(lines.join(' '))

【文字列の出力】入力された 10 個の文字列を出力

const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split(' ')
console.log(lines.join('\n'))
const stream = 'paiza'
console.log(stream)
const stream = 'paiza learning'
const lines = stream.split(' ')
console.log(lines.join(' '))
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const [S, T] = stream.split('\n')
console.log([S, T].join('\n'))
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split('\n')
console.log(lines.join(' '))

【n 行の出力】1,000 行以内の出力

const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseInt(stream)
const lines = [...Array(N)].map((v, i) => i + 1)
console.log(lines.join('\n'))
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseInt(stream)
const lines = [...Array(N)].map((v, i) => i + 1)
console.log(lines.join('\n'))
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseInt(stream)
const lines = [...Array(N)].map((v, i) => i + 1)
console.log(lines.join('\n'))
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseInt(stream)
const lines = [...Array(N)].map((v, i) => i + 1)
console.log(lines.join('\n'))

【特定の文字で区切り 1 行で出力】大きな数値を 3 けたごとにカンマ区切りで出力 2

const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = BigInt(stream)
console.log(N.toLocaleString())
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split(' ')
const [N, M] = lines.map(Number)
console.log([N, M].join(','))
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split('\n')
const [S1, S2, S3] = lines
console.log([S1, S2, S3].join('|')) // console.log(lines.join('|')) でも良い
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split(' ')
console.log(lines.join(',') + ',')
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split(' ')
console.log(lines.join(','))
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split('\n')
console.log(lines.join(' | '))

【n * n の 2 次元配列の表示】N * N の九九表の出力

const multi = a => b => a * b
const multimap = seq => n => seq.map(multi(n))
const seq = n => [...Array(n)].map((v, i) => i + 1)
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseInt(stream)

const matrix = seq(N).map(multimap(seq(N)))
console.log(matrix.map(v => v.join(' ')).join('\n'))
const stream = '0,8\n1,3'
const lines = stream.split('\n')
const matrix = lines.map(line => line.split(',').map(Number))
console.log(lines.map(line => line.join(' ')).join('\n'))

関数型アプローチ

const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split(' ')
const ROW_NUM = 3
const COL_LEN = lines.length / ROW_NUM
const matrix = [...Array(ROW_NUM).keys()].map((v, index) => 
  lines.slice(index * ROW_NUM, index * ROW_NUM + COL_LEN))
  
console.log(matrix.map(line => line.join(' ')).join('\n'))

手続き型アプローチ

const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split(' ')
const ROW_NUM = 3
const COL_LEN = lines.length / ROW_NUM

const matrix = []
for (const [index, value] of lines.entries()) {
  const col_index = index % COL_LEN
  const row_index = Math.trunc(index / COL_LEN)
  if (col_index === 0) {
    matrix.push([value])
  }
  else {
    matrix[row_index].push(value)
  }
}
console.log(matrix.map(line => line.join(' ')).join('\n'))

関数型アプローチ

const multimap = seq => n => seq.map(v => v * n)
const seq = n => [...Array(n)].map((v, i) => i + 1)
const N = 9
const matrix = seq(N).map(multimap(seq(N)))
console.log(matrix.map(v => v.join(' ')).join('\n'))

手続き型アプローチ

const matrix = []
const N = 9
for (let i = 0; i < N; i += 1) {
  const cols = []
  for (let j = 0; j < N; j += 1) {
    cols.push((i + 1) * (j + 1))
  }
  matrix.push(cols)
}

console.log(matrix.map(v => v.join(' ')).join('\n'))

【行によって長さが違う二次元配列の表示】すべての行の長さと値が不定な 2 次元配列の出力

const fn = (A, B) => {
  const cumsum = array => [0, ...array.map((value, sum = 0) => sum += value)]
  const indexes = cumsum(B)
  return indexes
    .map((v, i, a) => A.slice(v, a[i + 1]))
    .slice(0, -1)
}
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split('\n')
const [[N, M], A, B] = lines.map(line => line.split(' ').map(Number))
const result = fn(A, B)

console.log(result.map(line => line.join(' ')).join('\n'))
const seq = n => [...Array(n)].map((v, i) => i + 1)
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseInt(stream)
const ROW_NUM = 2
const COL_NUM = N / ROW_NUM
const matrix = seq(ROW_NUM).map((v, col_index) => 
  seq(COL_NUM).map(v => col_index * COL_NUM + v))

console.log(matrix.map(cols => cols.join(' ')).join('\n'))  
const seq = n => [...Array(n)].map((v, i) => i + 1)
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const [N, M] = stream.split(' ').map(Number)
const matrix = [
  seq(N), seq(M)
]

console.log(matrix.map(cols => cols.join(' ')).join('\n'))  
const seq = n => [...Array(n)].map((v, i) => i + 1)
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseInt(stream)
const matrix = seq(N).map(v => seq(v))

console.log(matrix.map(cols => cols.join(' ')).join('\n'))  
const seq = n => [...Array(n)].map((v, i) => i + 1)
const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const lines = stream.split('\n')
const cols = lines[1].split(' ').map(Number)
const matrix = cols.map(v => seq(v))

console.log(matrix.map(cols => cols.join(' ')).join('\n'))  

【実数をフォーマット指定して出力】複数の実数を出力

const stream = require('fs').readFileSync('/dev/stdin', 'utf8').trim()
const N = parseFloat(stream)
console.log(N)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment