LoginSignup
12
1

More than 3 years have passed since last update.

色んな言語でidol++して「大石泉すき」と出力する

Last updated at Posted at 2019-12-03

この記事は 「大石泉すき」アドベントカレンダー 3日目の記事です。
色んな言語でidol++したいと思います。
どうせ被るなら全方位に被せていけ!というモチベーションでやりました。すいません。

やること

変数 idol = 0izumi = 1111 に到達するまで idol++ して結果を出力します。
出力が一行だと寂しいので100の倍数でも出力しています。

諸注意

インクリメント演算子がない言語、++が違う動きをする言語もありましたので併記します。

環境構築しんどいので初めての方がすぐに試せるよう動作確認はRepl.itで行ないました。
Repl.it - The world's leading online coding platform
コードのあとにリンクを貼っておくので知らない言語にも是非触れてみてください。

各言語でなるべく同じ動きをするように努めましたが諸事情により一部で再帰していたりします。
{Clojure => whileがなかった, JavaScript => 楽しくなってしまった}

僕自身初挑戦の言語ばかりなので優しいマサカリをお待ちしております。
(この言語ではこう書くのが主流だよ, ifブロックは改行しろ, 等々)

また、各コードの実行結果は下記のようになります。

alt

それではやっていきましょう。

idol++できる言語

C

main.c
#include <stdio.h>
#define IZUMI 1111

int main(void) {
  int idol = 0;

  while (1) {
    if (idol == IZUMI) break;
    if (idol && !(idol % 100)) printf("%d\n", idol);
    idol++;
  }

  printf("%d到達! 大石泉すき", idol);
  return 0;
}

Repl.it - OhishiIzumiSukiC

C#

main.cs
using System;

class MainClass {
  public static void Main (string[] args) {
    int idol = 0;
    const int IZUMI = 1111;

    while (true) 
    {
      if (idol == IZUMI) break;
      if (idol != 0 && idol % 100 == 0) Console.WriteLine (idol);
      idol++;
    }

    Console.WriteLine ("{0}到達! 大石泉すき", idol);
  }
}

C++

main.cpp
#include <iostream>

int main() {
  int idol = 0;
  const int IZUMI = 1111;

  while (1) {
    if (idol == IZUMI) break;
    if (idol && !(idol % 100)) std::cout << idol << "\n";
    idol++;
  }

  std::cout << idol << "達成! 大石泉すき\n";
}

Repl.it - OhishiIzumiSukiCPP

Go

main.go
package main

import f "fmt"

func main() {
  var idol int
  const izumi = 1111

  for {
    if idol == izumi { break }
    if idol != 0 && idol % 100 == 0 { f.Println(idol) }
    idol++
  }

  f.Printf("%v到達! 大石泉すき", idol)
}

Repl.it - OhishiIzumiSukiGO

Java

Main.java
class Main {
  public static void main(String[] args) {
    int idol = 0;
    final int IZUMI = 1111;

    while (true) {
      if (idol == IZUMI) break;
      if (idol != 0 && idol % 100 == 0) System.out.println(idol);
      idol++;
    }

    System.out.printf("%d到達! 大石泉すき\n", idol);
  }
}

Repl.it - OhishiIzumiSukiJAVA

JavaScript

index.js
const recursion = (idol, izumi) => {
  if (idol === izumi) return idol
  if (idol && !(idol%100)) console.log(idol)
  idol++
  return recursion(idol, izumi)
}

const result = recursion(0, 1111)
console.log(`${result}到達! 大石泉すき`)

Repl.it - OhishiIzumiSukiJS

Kotlin

main.kt
fun main() {
  var idol: Int = 0
  val izumi: Int = 1111

  while(true) {
    if (idol == izumi) break
    if (idol != 0 && idol % 100 == 0) println(idol)
    idol++
  }

  println("%d到達! 大石泉すき".format(idol))
}

何故かRepl.itがエラー吐いてたのでここだけKotlin Playgroundです。
(repl作った段階では動いてました。betaだから?)

Kotlin Playground: Edit, Run, Share Kotlin Code Online

PHP

main.php
$idol = 0;
const IZUMI = 1111;

while (true) {
  if ($idol == IZUMI) break;
  if ($idol && !($idol % 100)) echo "$idol\n";
  $idol++;
}

echo "{$idol}到達! 大石泉すき\n";

Repl.it - OhishiIzumiSukiPHP

idol++したかった言語

Clojure

inc idol

main.clj
(defn recursion [x y]
  (loop [idol x izumi y]
    (if (and (not= idol 0) (== (rem idol 100) 0)) 
        (println idol)) 
    (if (= idol izumi)
        idol 
      (recur (inc idol) izumi))))

(def start 0)
(def goal 1111)
(def result (recursion start goal))
(printf "%d到達! 大石泉すき" result)

Repl.it - OhishiIzumiSukiCLJ

Haskell

succ idol
Haskellに++はありますがインクリメントではなくリスト結合になっています。

main.hs
import Data.List

recursion idol izumi list = do
  if idol == izumi 
  then list
  else recursion(succ idol)(izumi)(list ++ [succ idol])

recursion' idol izumi = recursion idol izumi []

filter100 list = filter (\x -> (mod x 100) == 0) list

(start, goal) = (0, 1111)

main = do
  let result = recursion' start goal
  let strList = map show (filter100 result)
  putStrLn $ intercalate "\n" strList
  putStr (show (last result))
  putStrLn "到達! 大石泉すき"

Repl.it - OhishiIzumiSukiHS

Python

idol += 1

main.py
idol = 0
izumi = 1111

while True:
  if idol == izumi: break
  if idol != 0 and idol % 100 == 0: print(idol)
  idol += 1

print("%d到達! 大石泉すき" %idol)

Repl.it - OhishiIzumiSukiPY

Ruby

idol += 1

main.rb
idol = 0
izumi = 1111

while true 
  if idol == izumi
    break
  end

  if idol != 0 && idol % 100 == 0
    puts idol
  end

  idol += 1
end

printf("%d到達! 大石泉すき", idol)

Repl.it - OhishiIzumiSukiRB

Rust

idol += 1

main.rs
fn main() {
  let mut idol = 0;
  let izumi = 1111;

  loop {
    if idol == izumi { break; }
    if idol != 0 && idol % 100 == 0 { println!("{}", idol); }
    idol += 1;
  }

  println!("{}到達! 大石泉すき", idol);
}

Repl.it - OhishiIzumiSukiRS

迂闊

「大石泉すき」アドベントカレンダー2日目、
cobot00さんのRubyで「大石泉スキ」を標準出力する & idol++にて
Rubyでidol++されていました。

こういう抜け穴探すような実装大好きなので勉強になりました。ありがとうございます。
(半日格闘してもHaskellの++には勝てませんでした(どなたか教えてください))

12
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
1