├── .gitignore ├── AiScript ├── Dockerfile ├── README.md ├── ddsk.is └── index.ts ├── Bash ├── Dockerfile ├── README.md └── ddsk.sh ├── C# ├── Chatyusha.cs ├── Dockerfile └── README.md ├── C++ ├── Dockerfile ├── README.md ├── chatyusha.cpp └── chatyusha2.cpp ├── C ├── Chatyusha.c ├── Dockerfile └── README.md ├── Clojure ├── Dockerfile ├── README.md └── ddsk.clj ├── CommonLisp ├── Dockerfile ├── README.md └── ddsk.lisp ├── D ├── Dockerfile ├── README.md └── ddsk.d ├── Dart ├── Dockerfile ├── README.md └── ddsk.dart ├── F# ├── Dockerfile ├── README.md └── ddsk.fsx ├── Gleam ├── .gitignore ├── Dockerfile ├── README.md ├── gleam.toml ├── manifest.toml ├── src │ └── ddsk_gleam.gleam └── test │ └── ddsk_gleam_test.gleam ├── Go ├── .gitignore ├── Dockerfile ├── README.md ├── ddsk.go └── ddsk2.go ├── Haskell ├── Dockerfile ├── README.md └── ddsk.hs ├── Java ├── Ddsk.java ├── Dockerfile └── README.md ├── JavaScript ├── Dockerfile ├── README.md ├── ddsk.js └── index.html ├── Julia ├── Dockerfile ├── README.md └── ddsk.jl ├── Kotlin ├── Dockerfile ├── README.md └── ddsk.kt ├── LaTeX ├── Chatyusha.tex ├── Dockerfile ├── README.md └── tex2pdf.sh ├── Nadesiko3 ├── Dockerfile ├── README.md └── ddsk.nako3 ├── Nim ├── Dockerfile ├── README.md └── ddsk.nim ├── Perl ├── Dockerfile ├── README.md └── ddsk.pl ├── PowerShell ├── Dockerfile ├── README.md └── ddsk.ps1 ├── Python ├── Dockerfile ├── README.md └── chatyusha.py ├── README.md ├── Ruby ├── Dockerfile ├── README.md └── ddsk.rb ├── S ├── Chatyusha.s ├── Dockerfile └── README.md ├── Sed ├── Dockerfile ├── README.md └── ddsk.sed ├── Swift ├── .gitignore ├── Dockerfile ├── Package.swift ├── README.md └── Sources │ ├── Resources │ ├── en.lproj │ │ └── Localizable.strings │ └── ja.lproj │ │ └── Localizable.strings │ └── main.swift ├── TypeScript ├── Dockerfile ├── README.md └── ddsk.ts ├── V ├── .editorconfig ├── .gitattributes ├── .gitignore ├── Dockerfile ├── README.md └── ddsk.v ├── Vimscript ├── Dockerfile ├── README.md └── ddsk.vim ├── Zig ├── .gitignore ├── Dockerfile ├── README.md ├── build.zig └── src │ └── main.zig ├── php ├── Dockerfile ├── README.md ├── ddsk-web.php ├── ddsk.php └── docs │ └── preview.png └── rust ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── README.md └── src └── main.rs /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | ./**/.DS_Store 3 | ./C++/a.out 4 | ./LaTeX/*.log 5 | ./LaTeX/*.aux 6 | ./LaTeX*.dvi 7 | ./LaTeX/*.pdf 8 | 9 | .DS_Store 10 | -------------------------------------------------------------------------------- /AiScript/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM denoland/deno:latest 2 | 3 | WORKDIR /usr/src/ddsk 4 | 5 | COPY ./ddsk.is . 6 | COPY ./index.ts . 7 | 8 | RUN deno cache ./index.ts 9 | 10 | CMD deno run -A index.ts -------------------------------------------------------------------------------- /AiScript/README.md: -------------------------------------------------------------------------------- 1 | # AiScript 2 | 3 | ## 実行方法 4 | 5 | ### deno 6 | 7 | ``` 8 | deno run -A ./index.ts 9 | ``` 10 | 11 | ### docker 12 | 13 | ``` 14 | docker build . -t ddsk:aiscript 15 | docker run --rm ddsk:aiscript 16 | ``` -------------------------------------------------------------------------------- /AiScript/ddsk.is: -------------------------------------------------------------------------------- 1 | let ddsk = [ "ドド" "スコ" ] 2 | let pattern = "ドドスコスコスコドドスコスコスコドドスコスコスコ" 3 | var tmp = "" 4 | 5 | loop { 6 | let word = ddsk[Math:rnd(0, 1)] 7 | <: word 8 | 9 | tmp = `{tmp}{word}` 10 | 11 | if tmp.len > pattern.len { 12 | tmp = word 13 | } elif tmp == pattern { 14 | <: "ラブ注入♡" 15 | break 16 | } 17 | } -------------------------------------------------------------------------------- /AiScript/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Interpreter, 3 | Parser, 4 | values, 5 | } from "https://esm.sh/@syuilo/aiscript@0.15.0/"; 6 | 7 | const interpreter = new Interpreter({}, { 8 | out(value: values.Value) { 9 | const to_str = interpreter.scope.get("Core:to_str") as values.VFn; 10 | 11 | const res = to_str.native!([value], { 12 | call: interpreter.execFn, 13 | registerAbortHandler: interpreter.registerAbortHandler, 14 | unregisterAbortHandler: interpreter.unregisterAbortHandler, 15 | }) as values.VStr; 16 | 17 | console.log(res.value); 18 | }, 19 | }); 20 | 21 | interpreter.exec(Parser.parse(await Deno.readTextFile("./ddsk.is"))); 22 | -------------------------------------------------------------------------------- /Bash/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM bash:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.sh . 6 | 7 | ENTRYPOINT [ "bash", "ddsk.sh" ] 8 | -------------------------------------------------------------------------------- /Bash/README.md: -------------------------------------------------------------------------------- 1 | # Bash 2 | 3 | ## 実行方法 4 | 5 | `bash ddsk.sh` 6 | 7 | ## Docker 8 | 9 | `docker build -t ddsk:bash` 10 | 11 | `docker run --rm ddsk:bash` 12 | -------------------------------------------------------------------------------- /Bash/ddsk.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # -------------------- 4 | # * LICENSE : MIT 5 | # * Author : Fus1onDev, Hayao0819 6 | # -------------------- 7 | 8 | DDSK=("ドド" "スコ") 9 | ddsk_temp="ドドスコスコスコドドスコスコスコドドスコスコスコ" 10 | text="" 11 | while [[ $text != *$ddsk_temp* ]] 12 | do 13 | random=$((RANDOM % 2)) 14 | echo "${DDSK[$random]}" 15 | text+=${DDSK[$random]} 16 | done 17 | echo "ラブ注入♡" 18 | -------------------------------------------------------------------------------- /C#/Chatyusha.cs: -------------------------------------------------------------------------------- 1 | // -------------------- 2 | // * LICENSE : MIT 3 | // * Author : Chatyusha 4 | // -------------------- 5 | using System; 6 | using System.Collections; 7 | using System.Collections.Generic; 8 | 9 | namespace DDSK 10 | { 11 | class Program 12 | { 13 | 14 | static void Main() 15 | { 16 | bool Flag = false; 17 | 18 | int counter = 0; 19 | 20 | string DDSKTmp = "ドドスコスコスコドドスコスコスコドドスコスコスコ"; 21 | 22 | List DDSKList = new List(); 23 | 24 | string DDSKString = ""; 25 | DDSKList.Add("ドド"); 26 | DDSKList.Add("スコ"); 27 | 28 | while(Flag == false) 29 | { 30 | var gen = new Random(); 31 | var unit =DDSKList[gen.Next(0,2)%2]; 32 | DDSKString += unit; 33 | Console.WriteLine(unit); 34 | if(DDSKString.Length >= 24) 35 | { 36 | if(DDSKString.Substring(counter*2,24) == DDSKTmp) 37 | { 38 | Flag = true; 39 | Console.WriteLine("ラブ注入♡"); 40 | } 41 | counter++; 42 | } 43 | } 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /C#/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | RUN apt-get -y update 4 | 5 | RUN apt-get install -y build-essential \ 6 | language-pack-ja fonts-takao 7 | 8 | RUN locale-gen en_US.UTF-8 9 | ENV LANG en_US.UTF-8 10 | ENV LANGUAGE en_US:en 11 | ENV LC_ALL en_US.UTF-8 12 | 13 | RUN apt install -y gnupg ca-certificates 14 | RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF 15 | RUN echo "deb https://download.mono-project.com/repo/ubuntu stable-focal main" | tee /etc/apt/sources.list.d/mono-official-stable.list 16 | RUN apt update 17 | RUN apt install -y mono-devel 18 | 19 | WORKDIR /work 20 | 21 | COPY ./Chatyusha.cs . 22 | 23 | RUN mcs ./Chatyusha.cs 24 | 25 | ENTRYPOINT [ "mono","Chatyusha.exe" ] 26 | -------------------------------------------------------------------------------- /C#/README.md: -------------------------------------------------------------------------------- 1 | # C# 2 | 3 | ## 実行方法 4 | 5 | [Mono](https://www.mono-project.com/)を使ってコンパイル、実行をします。 6 | 7 | Monoの入手ほうは[こちら](https://www.mono-project.com/download/stable/)をご覧ください。 8 | 9 | ``` 10 | mcs Chatyusha.cs 11 | mono Chatyusha.exe 12 | ``` 13 | 14 | ## Docker 15 | 16 | ```sh 17 | docker build . -t ddsk:cs 18 | docker run --rm ddsk:cs 19 | ``` -------------------------------------------------------------------------------- /C++/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | RUN apt-get -y update 4 | 5 | RUN apt-get install -y build-essential \ 6 | language-pack-ja fonts-takao 7 | 8 | RUN locale-gen en_US.UTF-8 9 | ENV LANG en_US.UTF-8 10 | ENV LANGUAGE en_US:en 11 | ENV LC_ALL en_US.UTF-8 12 | 13 | WORKDIR /work 14 | 15 | COPY ./chatyusha.cpp . 16 | 17 | RUN g++ ./chatyusha.cpp 18 | 19 | ENTRYPOINT [ "./a.out" ] 20 | -------------------------------------------------------------------------------- /C++/README.md: -------------------------------------------------------------------------------- 1 | # C++ 2 | -------------------------------------------------------------------------------- /C++/chatyusha.cpp: -------------------------------------------------------------------------------- 1 | // -------------------- 2 | // * LICENSE : MIT 3 | // * Author : Chatyusha 4 | // -------------------- 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | int main(int argc, char const *argv[]) 12 | { 13 | std::vector DDSK(2); 14 | DDSK[0] = "ドド"; 15 | DDSK[1] = "スコ"; 16 | 17 | std::random_device rd; 18 | std::mt19937 engine(rd()); 19 | 20 | std::vector stack; 21 | 22 | bool flag = false; 23 | 24 | for (int i = 0; i < 4*3; i++) 25 | { 26 | int t = engine()%2; 27 | stack.push_back(DDSK[t]); 28 | std::cout< 7 | #include 8 | #include 9 | #include 10 | 11 | int main(int argc, char const *argv[]) 12 | { 13 | uint ddsk_tmp = 0b100010001000; // ドドスコ*3 14 | unsigned int ddsk_binary = 0; 15 | std::random_device rd; 16 | std::mt19937 engine(rd()); 17 | 18 | while (ddsk_binary!=ddsk_tmp) 19 | { 20 | int t = engine()&1; 21 | ddsk_binary <<=1; 22 | if(t==0){ 23 | //ドド 24 | ddsk_binary |= 1; 25 | std::cout<<"ドド"; 26 | }else{ 27 | // スコ 28 | std::cout<<"スコ"; 29 | } 30 | ddsk_binary &= 0b111111111111; 31 | } 32 | std::cout<<"ラブ注入♡"<=24){ 35 | int p = 1; 36 | for(i=0;i<24;i++){ 37 | if(DDSKString[i] == DDSKTemp[i]){ 38 | p = p<<1; 39 | } 40 | } 41 | if(p==(1<<24)){ 42 | flag=TRUE; 43 | wprintf(L"ラブ注入♡"); 44 | wprintf(L"\n"); 45 | break; 46 | } 47 | for(i=0;i<24;i+=2){ 48 | DDSKString[i] = DDSKString[i+2]; 49 | DDSKString[i+1] = DDSKString[i+3]; 50 | } 51 | DDSKString[22]=DDSK[t][0]; 52 | DDSKString[23]=DDSK[t][1]; 53 | } 54 | else if(len<24){ 55 | DDSKString[len]=DDSK[t][0]; 56 | DDSKString[len+1]=DDSK[t][1]; 57 | len+=2; 58 | } 59 | wprintf(L"%ls",DDSKString); 60 | wprintf(L"\n"); 61 | } 62 | return 0; 63 | } 64 | -------------------------------------------------------------------------------- /C/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | RUN apt-get -y update 4 | 5 | RUN apt-get install -y build-essential \ 6 | language-pack-ja fonts-takao 7 | 8 | RUN locale-gen en_US.UTF-8 9 | ENV LANG en_US.UTF-8 10 | ENV LANGUAGE en_US:en 11 | ENV LC_ALL en_US.UTF-8 12 | 13 | WORKDIR /work 14 | 15 | COPY ./Chatyusha.c . 16 | 17 | RUN gcc ./Chatyusha.c 18 | 19 | ENTRYPOINT [ "./a.out" ] 20 | -------------------------------------------------------------------------------- /C/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Comamoca/Awesome-DDSK/2a487134c324625e79f3b8699103c33afa162791/C/README.md -------------------------------------------------------------------------------- /Clojure/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM clojure:temurin-18-alpine 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.clj . 6 | 7 | ENTRYPOINT ["clojure", "./ddsk.clj"] 8 | -------------------------------------------------------------------------------- /Clojure/README.md: -------------------------------------------------------------------------------- 1 | # DDSK-Clojure 2 | 3 | ## 実行方法 4 | 5 | ```bash 6 | docker build -t ddsk:clojure . 7 | docker run --rm -t ddsk:clojure 8 | ``` 9 | 10 | ## License 11 | 12 | MIT 13 | -------------------------------------------------------------------------------- /Clojure/ddsk.clj: -------------------------------------------------------------------------------- 1 | (require '[clojure.string :as str]) 2 | 3 | (defn count-ddsk [l] 4 | (->> l 5 | (take-last 3) 6 | (filter #(= "ドドスコスコスコ" %)) 7 | count)) 8 | 9 | (loop [ddsk []] 10 | (if (= 3 (count-ddsk ddsk)) 11 | (println "ラブ注入❤") 12 | (recur (let [x (str/join (repeatedly 4 #(rand-nth ["ドド", "スコ"])))] 13 | (do 14 | (println x) 15 | (conj ddsk x)))))) 16 | -------------------------------------------------------------------------------- /CommonLisp/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM fukamachi/sbcl:latest 2 | 3 | WORKDIR /app 4 | 5 | COPY ddsk.lisp /app/ddsk.lisp 6 | 7 | ENTRYPOINT ["sbcl", "--script", "/app/ddsk.lisp"] 8 | -------------------------------------------------------------------------------- /CommonLisp/README.md: -------------------------------------------------------------------------------- 1 | # Common Lisp 2 | 3 | ## 実行方法 4 | 5 | ```sh 6 | docker build . -t ddsk:cl 7 | docker run --rm ddsk:cl 8 | ``` 9 | -------------------------------------------------------------------------------- /CommonLisp/ddsk.lisp: -------------------------------------------------------------------------------- 1 | (defpackage :ddsk 2 | (:use :cl)) 3 | (in-package :ddsk) 4 | 5 | (setf *random-state* (make-random-state t)) 6 | (defparameter *chunks* '("ドド" "スコ")) 7 | (defparameter *start-state* :s0) 8 | (defparameter *accepting-state* :s12) 9 | (defparameter *state-diagram* 10 | '(:s0 (:s1 :s0) 11 | :s1 (:s1 :s2) 12 | :s2 (:s1 :s3) 13 | :s3 (:s1 :s4) 14 | :s4 (:s5 :s0) 15 | :s5 (:s1 :s6) 16 | :s6 (:s1 :s7) 17 | :s7 (:s1 :s8) 18 | :s8 (:s9 :s0) 19 | :s9 (:s1 :s10) 20 | :s10 (:s1 :s11) 21 | :s11 (:s1 :s12) 22 | :s12 (:s12 :s12))) 23 | 24 | (defun transition (state input) 25 | (nth input (getf *state-diagram* state))) 26 | 27 | (defun is-accepted-p (state) 28 | (eq state *accepting-state*)) 29 | 30 | (defun input-randomly () 31 | (random 2 *random-state*)) 32 | 33 | (defun say-chunk (input) 34 | (format t (nth input *chunks*))) 35 | 36 | (defun inject-love () 37 | (format t "ラブ注入♡~%")) 38 | 39 | (defun ddsk (state) 40 | (let* ((input (input-randomly)) 41 | (next-state (transition state input))) 42 | (say-chunk input) 43 | (if (is-accepted-p next-state) 44 | (inject-love) 45 | (ddsk next-state)))) 46 | 47 | (ddsk *start-state*) 48 | -------------------------------------------------------------------------------- /D/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM dlanguage/dmd:latest 2 | 3 | WORKDIR / 4 | 5 | COPY ./ddsk.d . 6 | 7 | ENTRYPOINT [ "rdmd", "./ddsk.d" ] 8 | -------------------------------------------------------------------------------- /D/README.md: -------------------------------------------------------------------------------- 1 | # D 2 | 3 | ## 実行方法 4 | 5 | `rdmd ddsk.d` 6 | 7 | ## Docker 8 | 9 | ```sh 10 | docker build . -t ddsk:D 11 | docker run --rm ddsk:D 12 | ``` 13 | -------------------------------------------------------------------------------- /D/ddsk.d: -------------------------------------------------------------------------------- 1 | import std.stdio, std.random; 2 | 3 | void main() 4 | { 5 | string[] text=["ドド","スコ"]; 6 | auto rand = Random(unpredictableSeed); 7 | uint results_stream_end=0x777; 8 | uint results_stream=0; 9 | while(results_stream_end!=(results_stream&0xfff)){ 10 | results_stream<<=1; 11 | uint flag=uniform(0, 2, rand); 12 | results_stream=flag|(results_stream&~uint(1)); 13 | writeln(text[flag]); 14 | } 15 | writeln("ラブ注入♡"); 16 | } -------------------------------------------------------------------------------- /Dart/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM dart:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.dart . 6 | 7 | ENTRYPOINT ["dart", "ddsk.dart"] 8 | -------------------------------------------------------------------------------- /Dart/README.md: -------------------------------------------------------------------------------- 1 | # Dart 2 | 3 | ## 実行方法 4 | 5 | `dart ddsk.dart` 6 | -------------------------------------------------------------------------------- /Dart/ddsk.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | void main() 4 | { 5 | const DDSK = ["ドド", "スコ"]; 6 | const ddsk_temp = "ドドスコスコスコドドスコスコスコドドスコスコスコ"; 7 | var text = ""; 8 | 9 | while (!text.contains(ddsk_temp)) { 10 | final random = Random().nextInt(2); 11 | print(DDSK[random]); 12 | text += DDSK[random]; 13 | } 14 | 15 | print("ラブ注入♡"); 16 | } 17 | -------------------------------------------------------------------------------- /F#/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine 2 | 3 | WORKDIR /work 4 | COPY ./ddsk.fsx . 5 | 6 | ENTRYPOINT ["dotnet", "fsi", "./ddsk.fsx"] -------------------------------------------------------------------------------- /F#/README.md: -------------------------------------------------------------------------------- 1 | # F# 2 | 3 | ## 実行方法 4 | 5 | `dotnet fsi ddsk.fsx` 6 | 7 | ## F# Playground 8 | 9 | https://sharplab.io/#v2:DYLgZgzgNALiBOBXAdlAJiA1AHyA 10 | 11 | ## Docker 12 | 13 | ```sh 14 | docker build . -t ddsk:fsharp 15 | docker run --rm ddsk:fsharp 16 | ``` 17 | -------------------------------------------------------------------------------- /F#/ddsk.fsx: -------------------------------------------------------------------------------- 1 | open System 2 | open System.Collections.Generic 3 | 4 | [] 5 | let DDSK = "ドドスコスコスコドドスコスコスコドドスコスコスコ" 6 | 7 | 8 | let withLastNElements n (sq: seq<'T>) = 9 | let mutable queue = Queue() 10 | 11 | seq { 12 | for elem in sq do 13 | yield elem, queue.ToArray() 14 | 15 | queue.Enqueue elem 16 | 17 | if queue.Count > n then 18 | queue.Dequeue() |> ignore 19 | } 20 | 21 | let ddskSeq = 22 | let rand = Random() 23 | let ddOrSk = [ "ドド"; "スコ" ] 24 | 25 | Seq.initInfinite (fun _ -> rand.Next(0, ddOrSk.Length)) 26 | |> Seq.map (fun i -> ddOrSk[i]) 27 | 28 | ddskSeq 29 | |> withLastNElements (DDSK.Length / 2) 30 | |> Seq.map (fun (elem, lastElems) -> elem, String.concat "" lastElems) 31 | |> Seq.takeWhile (snd >> (<>) DDSK) 32 | |> Seq.iter (fst >> printf "%s") 33 | 34 | printfn "ラブ注入💕" 35 | -------------------------------------------------------------------------------- /Gleam/.gitignore: -------------------------------------------------------------------------------- 1 | *.beam 2 | *.ez 3 | build 4 | erl_crash.dump 5 | -------------------------------------------------------------------------------- /Gleam/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/gleam-lang/gleam:v0.30.5-erlang 2 | 3 | COPY . . 4 | ENTRYPOINT ["gleam", "run"] 5 | -------------------------------------------------------------------------------- /Gleam/README.md: -------------------------------------------------------------------------------- 1 | # Gleam 2 | 3 | GleamはErlang VM(BEAM)とJavaScript Runtime(Node/Deno)上で動く静的型付け関数型言語です。 4 | 5 | [公式サイト](https://gleam.run) 6 | 7 | ## 実行方法 8 | 9 | ```sh 10 | gleam run # Run the project 11 | gleam test # Run the tests 12 | gleam shell # Run an Erlang shell 13 | ``` 14 | 15 | ## Gleam Playground 16 | 17 | (JavaScriptターゲットのみ実行可能です。) 18 | https://johndoneth.github.io/gleam-playground/ 19 | 20 | ## Docker 21 | 22 | ```sh 23 | docker build . -t ddsk:gleam 24 | docker run --rm ddsk:gleam 25 | ``` 26 | -------------------------------------------------------------------------------- /Gleam/gleam.toml: -------------------------------------------------------------------------------- 1 | name = "ddsk_gleam" 2 | version = "0.1.0" 3 | description = "A Gleam project" 4 | 5 | # Fill out these fields if you intend to generate HTML documentation or publish 6 | # your project to the Hex package manager. 7 | # 8 | # licences = ["Apache-2.0"] 9 | # repository = { type = "github", user = "username", repo = "project" } 10 | # links = [{ title = "Website", href = "https://gleam.run" }] 11 | 12 | [dependencies] 13 | gleam_stdlib = "~> 0.30" 14 | 15 | [dev-dependencies] 16 | gleeunit = "~> 0.10" 17 | -------------------------------------------------------------------------------- /Gleam/manifest.toml: -------------------------------------------------------------------------------- 1 | # This file was generated by Gleam 2 | # You typically do not need to edit this file 3 | 4 | packages = [ 5 | { name = "gleam_stdlib", version = "0.30.1", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "704258528887F95075FFED7AAE1CCF836A9B88E3AADA2F69F9DA15815F94A4F9" }, 6 | { name = "gleeunit", version = "0.11.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "1397E5C4AC4108769EE979939AC39BF7870659C5AFB714630DEEEE16B8272AD5" }, 7 | ] 8 | 9 | [requirements] 10 | gleam_stdlib = { version = "~> 0.30" } 11 | gleeunit = { version = "~> 0.10" } 12 | -------------------------------------------------------------------------------- /Gleam/src/ddsk_gleam.gleam: -------------------------------------------------------------------------------- 1 | import gleam/io 2 | import gleam/int 3 | import gleam/list 4 | import gleam/string 5 | import gleam/result 6 | 7 | pub fn main() { 8 | ddsk() 9 | } 10 | 11 | pub fn ddsk() { 12 | let resp = generate(#(False, "ドド")) 13 | io.println(resp.1) 14 | } 15 | 16 | pub fn generate(tp: #(Bool, String)) -> #(Bool, String) { 17 | 18 | let ddsk_list = ["ドド", "スコ"] 19 | 20 | let d = ddsk_list 21 | |> list.at(int.random(0, 2)) 22 | |> result.unwrap("") 23 | 24 | let ddsk_str = string.append(tp.1, d) 25 | 26 | let flag = tp.1 |> 27 | string.slice(-30, 30) == "ドドスコスコスコドドスコスコスコドドスコスコスコ" 28 | 29 | io.println(ddsk_str) 30 | 31 | case flag { 32 | True -> #(True, string.append(ddsk_str, "ラブ注入💓")) 33 | False -> generate(#(False, ddsk_str)) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Gleam/test/ddsk_gleam_test.gleam: -------------------------------------------------------------------------------- 1 | import gleeunit 2 | // import gleeunit/should 3 | // import ddsk_gleam 4 | 5 | pub fn main() { 6 | gleeunit.main() 7 | } 8 | -------------------------------------------------------------------------------- /Go/.gitignore: -------------------------------------------------------------------------------- 1 | ddsk 2 | ddsk2 3 | -------------------------------------------------------------------------------- /Go/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.go . 6 | 7 | ENTRYPOINT [ "go", "run", "./ddsk.go" ] 8 | -------------------------------------------------------------------------------- /Go/README.md: -------------------------------------------------------------------------------- 1 | # DDSK-Go 2 | ## 実行方法 3 | go run ddsk.go 4 | ## license 5 | MIT 6 | -------------------------------------------------------------------------------- /Go/ddsk.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "math/rand" 6 | "time" 7 | ) 8 | 9 | func main() { 10 | rand.Seed(time.Now().UnixNano()) 11 | const ddskTemp = "ドドスコスコスコドドスコスコスコドドスコスコスコ" 12 | ddsk := [2]string{"ドド", "スコ"} 13 | text := "" 14 | n := 0 15 | 16 | for { 17 | t := rand.Intn(2) 18 | fmt.Println(ddsk[t]) 19 | text += ddsk[t] 20 | if len(text) < 3*24 { 21 | continue 22 | } 23 | if text[2*n:] == ddskTemp { 24 | fmt.Println("ラブ注入♡") 25 | return 26 | } 27 | n += 3 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Go/ddsk2.go: -------------------------------------------------------------------------------- 1 | // Created by Qs-F on 2022-08-14 2 | 3 | package main 4 | 5 | import ( 6 | "fmt" 7 | "math/rand" 8 | "time" 9 | ) 10 | 11 | func main() { 12 | rand.Seed(time.Now().UnixNano()) 13 | 14 | mapToDDSK := []string{"ドド", "スコ"} 15 | expected := 0x011101110111 16 | mask := 0xFFFFFFFFFFFF 17 | current := 0xFFFFFFFFFFFF 18 | for { 19 | choice := rand.Int() % 2 20 | fmt.Println(mapToDDSK[choice]) 21 | current = (current<<4 | choice) & mask 22 | if current == expected { 23 | fmt.Println("ラブ注入♡") 24 | return 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Haskell/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM haskell:9 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.hs . 6 | 7 | RUN cabal update 8 | 9 | RUN cabal install --lib random 10 | 11 | RUN ghc -o ./ddsk ./ddsk.hs 12 | 13 | ENTRYPOINT ["./ddsk"] 14 | -------------------------------------------------------------------------------- /Haskell/README.md: -------------------------------------------------------------------------------- 1 | # DDSK-Haskell 2 | 3 | ### How to run 4 | 5 | ### Docker 6 | 7 | 1. Create a Docker image 8 | ``` 9 | docker build -t ddsk:haskell . 10 | ``` 11 | 12 | 2. Execute the program with `docker run` 13 | ``` 14 | docker run --rm ddsk:haskell 15 | ``` 16 | -------------------------------------------------------------------------------- /Haskell/ddsk.hs: -------------------------------------------------------------------------------- 1 | import System.Random 2 | import Control.Monad 3 | 4 | main = do 5 | g <- newStdGen 6 | let args = ["ドド", "スコ"] 7 | let ns = randomRs (0,length args-1) g 8 | strs = map (args !!) ns 9 | let (_, res) = isDdsk initstr strs [] 10 | mapM_ putStr res 11 | putStrLn "ラブ注入♡" 12 | 13 | initstr :: [String] 14 | initstr = ["X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X"] 15 | 16 | ddskstr :: [String] 17 | ddskstr = ["ドド", "スコ", "スコ", "スコ", "ドド", "スコ", "スコ", "スコ", "ドド", "スコ", "スコ", "スコ"] 18 | 19 | nextDdsk :: [String] -> String -> [String] 20 | nextDdsk (_:xs) str = xs ++ [str] 21 | 22 | isDdsk :: [String] -> [String] -> [String] -> ([String], [String]) 23 | isDdsk currstr (x:xs) logs | currstr == ddskstr = (currstr, logs) 24 | | otherwise = isDdsk (nextDdsk currstr x) xs $ logs ++ [x] 25 | -------------------------------------------------------------------------------- /Java/Ddsk.java: -------------------------------------------------------------------------------- 1 | import java.util.ArrayList; 2 | import java.util.Collections; 3 | import java.util.List; 4 | import java.util.stream.Collectors; 5 | 6 | public class Ddsk { 7 | public static void main(String... args) { 8 | // ドドスコ要素のセットアップ 9 | List ddskItems = new ArrayList<>(); 10 | ddskItems.add("ドド"); 11 | ddskItems.add("スコ"); 12 | 13 | List ddskHistory = new ArrayList<>(); 14 | 15 | // ドドスコスコスコ * 3 で終了しない限り無限に処理し続ける 16 | while (!endsWith3Ddsk(ddskHistory)) { 17 | // ドド か スコ のどちらかを選択するのを4回繰り返す 18 | StringBuilder ddskStringBuilder = new StringBuilder(); 19 | for (int i=0; i<4; i++) { 20 | Collections.shuffle(ddskItems); 21 | String ddskItem = ddskItems.get(0); 22 | ddskStringBuilder.append(ddskItem); 23 | } 24 | 25 | String ddsk = ddskStringBuilder.toString(); 26 | System.out.println(ddsk); 27 | 28 | ddskHistory.add(ddsk); 29 | } 30 | 31 | System.out.println("ラブ注入❤"); 32 | } 33 | 34 | /** 35 | * リストの末尾3つを取り出して、それらがすべて "ドドスコスコスコ" であった場合に true を返す。 36 | * 37 | * @param items リスト要素 38 | * @return リストの末尾要素3つがすべて "ドドスコスコスコ" であるか否か 39 | */ 40 | private static boolean endsWith3Ddsk(List items) { 41 | int itemSize = items.size(); 42 | if (itemSize < 3) { 43 | return false; 44 | } 45 | 46 | List tailItems = items.subList(itemSize - 3, itemSize); 47 | List filteredItems = tailItems.stream().filter(i -> "ドドスコスコスコ".equals(i)).collect(Collectors.toList()); 48 | return filteredItems.size() == 3; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Java/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:20-jdk 2 | 3 | WORKDIR /work 4 | 5 | COPY ./Ddsk.java . 6 | RUN javac Ddsk.java 7 | 8 | ENTRYPOINT ["java", "Ddsk"] 9 | -------------------------------------------------------------------------------- /Java/README.md: -------------------------------------------------------------------------------- 1 | # DDSK-Java 2 | 3 | ## 実行方法 4 | 5 | ```bash 6 | docker build -t ddsk:java . 7 | docker run --rm -t ddsk:java 8 | ``` 9 | 10 | ## License 11 | 12 | MIT 13 | -------------------------------------------------------------------------------- /JavaScript/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16 2 | 3 | WORKDIR / 4 | 5 | COPY ./ddsk.js . 6 | 7 | ENTRYPOINT [ "node", "./ddsk.js" ] 8 | -------------------------------------------------------------------------------- /JavaScript/README.md: -------------------------------------------------------------------------------- 1 | # JavaScript 2 | 3 | ## 実行方法 4 | 5 | `node ddsk.d` 6 | もしくはindex.htmlをブラウザで開いてください。開発ツールのコンソールにドドスコが出力されます。 7 | 8 | ## Docker 9 | 10 | ```sh 11 | docker build . -t ddsk:JavaScript 12 | docker run --rm ddsk:JavaScript 13 | ``` 14 | -------------------------------------------------------------------------------- /JavaScript/ddsk.js: -------------------------------------------------------------------------------- 1 | function main(){ 2 | const text=["ドド","スコ"]; 3 | const results_stream_end=0x777; 4 | let results_stream=0; 5 | while(results_stream_end!=(results_stream&0xfff)){ 6 | results_stream<<=1; 7 | flag=Math.floor( Math.random() * 2 ); 8 | results_stream=flag|(results_stream&~1); 9 | console.log(text[flag]); 10 | } 11 | console.log("ラブ注入♡"); 12 | } 13 | main(); 14 | 15 | -------------------------------------------------------------------------------- /JavaScript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DDSK(JavaScript) 6 | 7 | 8 | -------------------------------------------------------------------------------- /Julia/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM julia:latest 2 | 3 | COPY ./ddsk.jl . 4 | 5 | CMD julia ddsk.jl 6 | -------------------------------------------------------------------------------- /Julia/README.md: -------------------------------------------------------------------------------- 1 | # Julia 2 | 3 | ## 実行方法 4 | 5 | ### 通常版 6 | 7 | `julia ddsk.jl` 8 | 9 | ### 1関数完結版 10 | 11 | `julia ddsk.jl single` 12 | 13 | ### ショートコード版 14 | 15 | `julia -e '0|>s->while s!=2184;s,w=rand([(2s&511|1,"ドド"),(2s,"スコ")]);print(w);end;println("ラブ注入♡")'` 16 | 17 | `julia -e "15|>s->while s!=1911;s=2s%4096+(i=rand()<.5);print.('ド'.-[16,22]i);end;println(\"ラブ注入♡\")"` 18 | 19 | ## Julia Playground (binder) 20 | 21 | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gist/antimon2/f31dd3d5053eb8fa377cd86864061f28/HEAD?filepath=DDSK.jl.ipynb) 22 | ※注意:タイミングによってはDockerイメージのビルドが始まり起動までに時間がかかる場合があります。 23 | 24 | ## Docker 25 | 26 | ```sh 27 | docker build . -t ddsk:julia 28 | docker run --rm ddsk:julia 29 | # docker run --rm ddsk:julia julia ddsk.jl single # 1関数完結版 30 | # docker run --rm ddsk:julia julia -e '0|>s->while s!=2184;s,w=rand([(2s&511|1,"ドド"),(2s,"スコ")]);print(w);end;println("ラブ注入♡")' # ショートコード版 31 | # docker run -it --rm ddsk:julia julia -L ddsk.jl # ddsk.jl を読み込んだ状態でREPL起動 32 | ``` 33 | 34 | ## その他の実装 35 | 36 | ddsk.jl ファイル内参照 37 | -------------------------------------------------------------------------------- /Julia/ddsk.jl: -------------------------------------------------------------------------------- 1 | # 型+イテレーション定義版 2 | struct DDSK end 3 | 4 | function Base.iterate(::DDSK, s=15) 5 | s < 0 && return nothing 6 | s == 0x777 && return ("ラブ注入♡", -1) 7 | s <<= 1 8 | s &= 0xffe 9 | rand([("ドド", s), ("スコ", s | 1)]) 10 | end 11 | Base.IteratorSize(::Type{DDSK}) = Base.SizeUnknown() 12 | Base.eltype(::Type{DDSK}) = String 13 | 14 | function ddsk() 15 | for w in DDSK() 16 | print(w) 17 | end 18 | println() 19 | end 20 | 21 | # 1関数完結版 22 | function ddsk_single() 23 | s = 15 24 | while s != 0x777 25 | i = rand(0:1) 26 | s = (s << 1 | i) & 0xfff 27 | print(["ドド", "スコ"][i + 1]) 28 | end 29 | println("ラブ注入♡") 30 | end 31 | 32 | # ショートコード版 33 | function ddsk_golf1() 34 | # 105bytes/87chars 35 | 0|>s->while s!=2184;s,w=rand([(2s&511|1,"ドド"),(2s,"スコ")]);print(w);end;println("ラブ注入♡") 36 | end 37 | 38 | function ddsk_golf2() 39 | # 99bytes/87chars 40 | 15|>s->while s!=1911;s=2s%4096+(i=rand()<.5);print.('ド'.-[16,22]i);end;println("ラブ注入♡") 41 | end 42 | 43 | # === main === 44 | if abspath(PROGRAM_FILE) == @__FILE__ 45 | if length(ARGS) == 0 46 | ddsk() 47 | else 48 | arg = ARGS[1] 49 | ddskdic = Dict("single"=>ddsk_single, "golf1"=>ddsk_golf1, "golf2"=>ddsk_golf2) 50 | if haskey(ddskdic, arg) 51 | ddskdic[arg]() 52 | else 53 | throw(ArgumentError("$arg is not supported.")) 54 | end 55 | end 56 | end -------------------------------------------------------------------------------- /Kotlin/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM zenika/kotlin:latest 2 | 3 | COPY ddsk.kt . 4 | 5 | RUN kotlinc ddsk.kt -include-runtime -d ddsk.jar 6 | 7 | ENTRYPOINT [ "java", "-jar", "ddsk.jar" ] 8 | -------------------------------------------------------------------------------- /Kotlin/README.md: -------------------------------------------------------------------------------- 1 | # DDSK-Kotlin 2 | 3 | ## Usage 4 | 5 | Run with Docker 6 | 7 | ```sh 8 | $ docker build . -t ddsk:kotlin 9 | $ docker run ddsk:kotlin 10 | ``` 11 | 12 | ## License 13 | 14 | MIT 15 | -------------------------------------------------------------------------------- /Kotlin/ddsk.kt: -------------------------------------------------------------------------------- 1 | fun main() { 2 | // ドドスコ要素のセットアップ 3 | val ddskItems = listOf("ドド", "スコ") 4 | val ddskHistory = mutableListOf() 5 | 6 | // ドドスコスコスコ * 3 で終了しない限り無限に処理し続ける 7 | while (!endsWith3Ddsk(ddskHistory)) { 8 | // ドド か スコ のどちらかを選択するのを4回繰り返す 9 | val ddskStringBuilder = StringBuilder() 10 | repeat(4) { 11 | val ddskItem = ddskItems.shuffled().first() 12 | ddskStringBuilder.append(ddskItem) 13 | } 14 | 15 | val ddsk = ddskStringBuilder.toString() 16 | println(ddsk) 17 | 18 | ddskHistory.add(ddsk) 19 | } 20 | 21 | println("ラブ注入❤") 22 | } 23 | 24 | /** 25 | * リストの末尾3つを取り出して、それらがすべて "ドドスコスコスコ" であった場合に true を返す。 26 | * 27 | * @param items リスト要素 28 | * @return リストの末尾要素3つがすべて "ドドスコスコスコ" であるか否か 29 | */ 30 | private fun endsWith3Ddsk(items: List): Boolean { 31 | val itemSize = items.size 32 | if (itemSize < 3) { 33 | return false 34 | } 35 | 36 | val tailItems = items.subList(itemSize - 3, itemSize) 37 | val filteredItems = tailItems.filter { it == "ドドスコスコスコ" } 38 | return filteredItems.size == 3 39 | } 40 | -------------------------------------------------------------------------------- /LaTeX/Chatyusha.tex: -------------------------------------------------------------------------------- 1 | \documentclass[]{jsarticle} 2 | \usepackage{ifthen} 3 | \usepackage{lcg} 4 | 5 | \newcommand{\DDSK}{ 6 | \reinitrand[counter=r,first=0,last=1,seed=2148] 7 | 8 | \newcounter{ddskTemp} 9 | \newcounter{ddskBinary} 10 | 11 | \setcounter{ddskTemp}{2184} % 100010001000 12 | \setcounter{ddskBinary}{0} 13 | 14 | \whiledo{\NOT\value{ddskBinary}=\value{ddskTemp}}{ 15 | \addtocounter{ddskBinary}{\value{ddskBinary}} 16 | \ifthenelse{\value{r}=0}{\addtocounter{ddskBinary}{1}ドド}{スコ} 17 | \ifthenelse{\value{ddskBinary}>4095}{\addtocounter{ddskBinary}{-4096}}{} 18 | \rand 19 | } 20 | ラブ注入$\heartsuit$ 21 | } 22 | 23 | \begin{document} 24 | \DDSK 25 | \end{document} -------------------------------------------------------------------------------- /LaTeX/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM paperist/texlive-ja:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./tex2pdf.sh . 6 | 7 | ENTRYPOINT [ "./tex2pdf.sh","Chatyusha.tex" ] 8 | -------------------------------------------------------------------------------- /LaTeX/README.md: -------------------------------------------------------------------------------- 1 | # Latex 2 | 3 | ## 実行方法 4 | 5 | ``` 6 | chmod +x ./tex2pdf 7 | ./tex2pdf Chatyusha.tex 8 | ``` 9 | 10 | ## Docker 11 | 12 | ```sh 13 | docker build . -t ddsk:latex 14 | docker run --rm -v $(pwd):/work ddsk:latex 15 | ``` 16 | -------------------------------------------------------------------------------- /LaTeX/tex2pdf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | platex "$1" 4 | 5 | dvipdfmx "$(basename "$1" .tex).dvi" 6 | 7 | rm *.aux *.dvi -------------------------------------------------------------------------------- /Nadesiko3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:18-alpine 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.nako3 . 6 | 7 | RUN npm -g install nadesiko3 8 | 9 | ENV NAKO_HOME /usr/local/lib/node_modules/nadesiko3 10 | 11 | ENTRYPOINT [ "cnako3", "./ddsk.nako3" ] 12 | -------------------------------------------------------------------------------- /Nadesiko3/README.md: -------------------------------------------------------------------------------- 1 | # なでしこ 3 2 | 3 | ## 実行方法 4 | 5 | `cnako3 ddsk.nako3` 6 | 7 | ## なでしこ 3 貯蔵庫 (Playground) 8 | 9 | https://n3s.nadesi.com/id.php?1752 10 | 11 | ## Docker 12 | 13 | ```sh 14 | docker build . -t ddsk:nako3 15 | docker run --rm ddsk:nako3 16 | ``` 17 | -------------------------------------------------------------------------------- /Nadesiko3/ddsk.nako3: -------------------------------------------------------------------------------- 1 | # License: CC0 (https://creativecommons.org/publicdomain/zero/1.0/deed.ja) 2 | # Author: arrow2nd 3 | 4 | ドドスコは【『ドド』、『スコ』】。 5 | 終了条件は『ドドスコスコスコ』を3でリフレイン。 6 | 履歴は空。 7 | 8 | 履歴が終了条件と不一致の間繰り返す 9 |  ドドorスコにドドスコ@(2の乱数)を代入。 10 |  ドドorスコを継続表示。 11 |  履歴に履歴&ドドorスコの24文字右部分を代入。 12 | ここまで。 13 | 14 | 『ラブ注入♡』を表示。 15 | -------------------------------------------------------------------------------- /Nim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nimlang/nim:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.nim . 6 | 7 | ENTRYPOINT [ "nim", "c", "-r", "./ddsk.nim" ] 8 | -------------------------------------------------------------------------------- /Nim/README.md: -------------------------------------------------------------------------------- 1 | # Nim 2 | 3 | ## 実行方法 4 | 5 | `nim c -r ddsk.nim` 6 | 7 | ## Nim Playground 8 | 9 | https://play.nim-lang.org/#ix=46qx 10 | 11 | ## Docker 12 | 13 | ```sh 14 | docker build . -t ddsk:nim 15 | docker run --rm ddsk:nim 16 | ``` 17 | 18 | ## その他の実装例 19 | 20 | [KMP法](https://gist.github.com/lum1narie/bf9d02206b2bae5f5e8ba993955d2fc7) 21 | -------------------------------------------------------------------------------- /Nim/ddsk.nim: -------------------------------------------------------------------------------- 1 | import random 2 | import strutils 3 | 4 | randomize() 5 | 6 | let ddsk = ["ドド", "スコ"] 7 | var f = 0 8 | 9 | var inner: seq[string] 10 | 11 | proc isDdsk(txt: string) = 12 | if txt == "ドドスコスコスコ" and f >= 0: 13 | f.inc 14 | else: 15 | f = 0 16 | inner.setLen(0) 17 | echo txt 18 | if f >= 3: 19 | echo "ラブ注入♡" 20 | quit 0 21 | 22 | # while true: 23 | # for i in 0..4: 24 | # for j in 0..3: 25 | # let s = sample(ddsk) 26 | # inner.add s 27 | # var o = inner.join("") 28 | # isDdsk(o) 29 | 30 | # ======== Test Program ======== 31 | 32 | while true: 33 | isDdsk("ドドスコスコスコ") 34 | -------------------------------------------------------------------------------- /Perl/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM perl:latest 2 | 3 | COPY ddsk.pl . 4 | 5 | ENTRYPOINT [ "perl", "ddsk.pl" ] 6 | -------------------------------------------------------------------------------- /Perl/README.md: -------------------------------------------------------------------------------- 1 | # DDSK-Perl 2 | ## Usage 3 | `$ perl ddsk.pl` 4 | 5 | or run with Docker 6 | 7 | ``` 8 | $ docker build . -t ddsk:perl 9 | $ docker run ddsk:perl 10 | ``` 11 | 12 | ## License 13 | MIT 14 | -------------------------------------------------------------------------------- /Perl/ddsk.pl: -------------------------------------------------------------------------------- 1 | use warnings; 2 | use strict; 3 | 4 | use constant { 5 | DDSK => 0b011101110111, 6 | MASK => 0b111111111111, 7 | }; 8 | 9 | my $buffer = 0; 10 | my @ddsk = qw/ドド スコ/; 11 | 12 | while ($buffer != DDSK) { 13 | my $index = rand(@ddsk); 14 | print $ddsk[$index]; 15 | $buffer = ($buffer << 1) & MASK | $index; 16 | } 17 | 18 | print "ラブ注入♡\n"; 19 | -------------------------------------------------------------------------------- /PowerShell/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/powershell:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.ps1 . 6 | 7 | ENTRYPOINT ["pwsh", "-File", "./ddsk.ps1"] 8 | 9 | -------------------------------------------------------------------------------- /PowerShell/README.md: -------------------------------------------------------------------------------- 1 | # PowerShell 2 | 3 | PowerShellは、.NET上で動作する、構成管理と自動化のための言語です。 4 | シェルとスクリプトの側面を持ち、Windows、Linux、macOSで動作します。 5 | 6 | [公式サイト](https://learn.microsoft.com/ja-jp/powershell/) 7 | 8 | ## 実行方法 9 | 10 | ```sh 11 | pwsh -f ./ddsk.ps1 # Run the script 12 | pwsh # Run an PowerShell interactive shell 13 | ``` 14 | 15 | ## Docker 16 | 17 | ```sh 18 | docker build . -t ddsk:pwsh 19 | docker run --rm ddsk:pwsh 20 | ``` 21 | -------------------------------------------------------------------------------- /PowerShell/ddsk.ps1: -------------------------------------------------------------------------------- 1 | function Start-DDSK() { 2 | $red = "`e[31m" 3 | $green = "`e[32m" 4 | $blue = "`e[34m" 5 | $reset = "`e[0m" 6 | $dd = $blue + "ドド" 7 | $sk = $green + "スコ" 8 | $target = New-Object System.Collections.Queue 9 | $pattern = @($dd) 10 | 1..3 | ForEach-Object { $pattern += $sk } 11 | 1..3 | ForEach-Object { $pattern | ForEach-Object { $target.Enqueue($_) } } 12 | $history = New-Object System.Collections.Queue 13 | 14 | $elements = @($dd, $sk) 15 | while ($true) { 16 | $randomElement = $elements | Get-Random 17 | Write-Host $randomElement -NoNewline 18 | $history.Enqueue($randomElement) 19 | if (-not (Compare-Object -ReferenceObject $target -DifferenceObject $history )) { 20 | Write-Host $red"ラブ注入♡"$reset -ForegroundColor Red 21 | break 22 | } 23 | if ($history.Count -ge $target.Count) { 24 | $history.Dequeue() | Out-Null 25 | } 26 | } 27 | } 28 | 29 | Start-DDSK 30 | -------------------------------------------------------------------------------- /Python/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./chatyusha.py . 6 | 7 | ENTRYPOINT [ "python", "chatyusha.py" ] 8 | -------------------------------------------------------------------------------- /Python/README.md: -------------------------------------------------------------------------------- 1 | # Python 2 | 3 | ## 実行方法 4 | 5 | `python ./chatyusha.py` 6 | 7 | ## Docker 8 | 9 | ```sh 10 | docker build . -t ddsk:python 11 | docker run --rm ddsk:python 12 | ``` 13 | 14 | -------------------------------------------------------------------------------- /Python/chatyusha.py: -------------------------------------------------------------------------------- 1 | # -------------------- 2 | # * LICENSE : MIT 3 | # * Author : Chatyusha 4 | # -------------------- 5 | 6 | import random 7 | 8 | DDSK = ["ドド","スコ"] 9 | ddsk_tmp = "ドドスコスコスコ" * 3 10 | 11 | judge = "" 12 | 13 | flag = False 14 | 15 | n=0 16 | while(flag == False): 17 | t = random.randint(0,1) % 2 18 | print(DDSK[t]) 19 | judge += DDSK[t] 20 | 21 | if len(judge) >= 24: 22 | if judge[2*n:] == ddsk_tmp: 23 | print("ラブ注入♡") 24 | flag = True 25 | n += 1 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

👏 Awesome DDSK 💕

2 | 3 | ![Last commit](https://img.shields.io/github/last-commit/Comamoca/Awesome-DDSK?style=flat-square) 4 | ![Repository Stars](https://img.shields.io/github/stars/Comamoca/Awesome-DDSK?style=flat-square) 5 | ![Issues](https://img.shields.io/github/issues/Comamoca/Awesome-DDSK?style=flat-square) 6 | ![Open Issues](https://img.shields.io/github/issues-raw/Comamoca/Awesome-DDSK?style=flat-square) 7 | ![Bug Issues](https://img.shields.io/github/issues/Comamoca/Awesome-DDSK/bug?style=flat-square) 8 | 9 | 様々なドドスコプログラムを個人的に集めたリポジトリです。 10 | 11 | 🎉たくさんのPRありがとうございます!🎉 12 |
13 | 14 | ## ドドスコプログラムとは 15 | 16 | ここでのドドスコプログラムとは[Sheeplaさんのツイート](https://twitter.com/Sheeeeepla/status/1554028833942441984?s=20&t=7NM1CBCnhpZsp3-4JfXBwg)が発端で流行り始めた、楽しんごさんの「ラブ注入💕」を決められたルールに従い出力するプログラムの総称です。 17 | 18 | ```txt 19 | 【問題】配列{"ドド","スコ"}からランダムに要素を標準出力し続け、『その並びが「ドドスコスコスコ」を3回繰り返したもの』に一致したときに「ラブ注入♡」と標準出力して終了するプログラムを作成せよ(配点:5点) 20 | ``` 21 | 22 | (2022/08/01 17:58) 23 | 24 | ## ディレクトリ構造について 25 | 26 | ルート直下に各言語名のディレクトリを配置し、その中に`README.md`とプログラムを配置します。 27 | `README`にはプログラムを実行するための環境構築の手順と、実行手順を記載します。 28 | 出来ればWeb上で実行できるリンクやDockerfileなども合わせて配置したいです。 29 | 30 | ## 実装された言語の一覧 31 | 32 | - [AiScript](./AiScript) by @[ikasoba](https://github.com/ikasoba) 33 | - [Bash](./Bash) by @[Fus1onDev](https://github.com/Fus1onDev) and @[Hayao0819](https://github.com/Hayao0819) 34 | - [C#](./C#) by @[Chatyusha](https://github.com/Chatyusha) 35 | - [C++](./C++) by @[Chatyusha](https://github.com/Chatyusha) 36 | - [C](./C) by @[Chatyusha](https://github.com/Chatyusha) 37 | - [Clojure](./Clojure) by @[jiro4989](https://github.com/jiro4989) 38 | - [Common Lisp](./CommonLisp) by @[skyizwhite](https://github.com/skyizwhite) 39 | - [D](./D) by @[PenguinCabinet](https://github.com/PenguinCabinet) 40 | - [Dart](./Dart) by @[Fus1onDev](https://github.com/Fus1onDev) 41 | - [Go](./Go) by @[gamma-410](https://github.com/gamma-410) 42 | - [Gleam](./Gleam) by @[Comamoca](https://github.com/Comamoca) 43 | - [Java](./Java) by @[jiro4989](https://github.com/jiro4989) 44 | - [Kotlin](./Kotlin) by @[OHMORIYUSUKE](https://github.com/OHMORIYUSUKE) 45 | - [Nadesiko3](./Nadesiko3) by @[arrow2nd](https://github.com/arrow2nd) 46 | - [Nim](./Nim) by @[Comamoca](https://github.com/Comamoca) 47 | - [Python](./Python) by @[Chatyusha](https://github.com/Chatyusha) 48 | - [Ruby](./Ruby) by @[Omochice](https://github.com/Omochice) 49 | - [S](./S) by @[Chatyusha](https://github.com/Chatyusha) 50 | - [Sed](./Sed) by @[jiro4989](https://github.com/jiro4989) 51 | - [Swift](./Swift) by @[Fus1onDev](https://github.com/Fus1onDev) 52 | - [TypeScript](./TypeScript) by @[mochi-sann](https://github.com/mochi-sann) 53 | - [Zig](./Zig) by @[YuseiUeno](https://github.com/YuseiUeno) 54 | - [Perl](./Perl) by @[YuseiUeno](https://github.com/YuseiUeno) 55 | - [rust](./rust) by @[mochi-sann](https://github.com/mochi-sann) 56 | - [php](./php) by @[code-raisan](https://github.com/code-raisan) 57 | - [Julia](./Julia) by @[antimon2](https://github.com/antimon2) 58 | - [JavaScript](./JavaScript) by @[PenguinCabinet](https://github.com/PenguinCabinet) 59 | 60 | ## 言語の追加について 61 | 62 | 言語を追加する際は以下のような構造で追加して下さい。 63 | 64 | ``` 65 | └── 言語名 66 |    ├── Dockerfile 67 | ├── README.md 68 |    └── プログラム 69 | ``` 70 | 71 | 各ファイルについて(太字は必須です) 72 | 73 | - **プログラム本体** 74 | プログラム本体。もしプロジェクトを作成する言語の場合はプロジェクトの中身をここに展開、もしくは言語名でプロジェクトを作成して下さい。 75 | 76 | - **README.md** 77 | 言語名、ビルドの手順、Playgroundなどのリンクを記述して下さい。 78 | レイアウトなどについては[NimのREADME](./Nim/README.md)を参考にして下さい。 79 | 80 | - Dockerfile 81 | 必須ではありませんが、あるととても助かります。 82 | -------------------------------------------------------------------------------- /Ruby/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:alpine 2 | 3 | COPY ./ddsk.rb . 4 | 5 | CMD ruby ddsk.rb 6 | -------------------------------------------------------------------------------- /Ruby/README.md: -------------------------------------------------------------------------------- 1 | # Ruby 2 | 3 | ## 実行方法 4 | 5 | `ruby ddsk.rb` 6 | 7 | ## docker 8 | 9 | ```console 10 | docker image build . --tag ddsk:ruby 11 | docker container run --rm ddsk:ruby 12 | ``` 13 | -------------------------------------------------------------------------------- /Ruby/ddsk.rb: -------------------------------------------------------------------------------- 1 | require "thread" 2 | 3 | def get_parsed(ddsk, expected) 4 | q = Queue.new 5 | q.push({ parsed: expected, current: "" }) 6 | results = [] 7 | while !q.empty? 8 | poped = q.pop 9 | parsed = poped[:parsed] 10 | if parsed.empty? 11 | results.push(poped[:current]) 12 | else 13 | ddsk.each_with_index do |s, idx| 14 | if parsed.start_with?(s) 15 | q.push({ 16 | parsed: parsed.slice(s.length..-1), 17 | current: poped[:current] + idx.to_s, 18 | }) 19 | end 20 | end 21 | end 22 | end 23 | 24 | if results.empty? 25 | raise "Cannot parse #{expected} by #{ddsk}" 26 | end 27 | return results 28 | end 29 | 30 | def ddsk_iter(ddsk, expected) 31 | r = Random.new 32 | end_candidates = get_parsed(ddsk, expected) 33 | mask = end_candidates.max { |x, y| x.length <=> y.length }.length 34 | bits = "" 35 | while !bits.end_with?(*end_candidates) 36 | n = r.rand(0..ddsk.length - 1) 37 | bits = bits + n.to_s 38 | if bits.length > mask 39 | bits = bits.slice(-1 * mask..-1) 40 | end 41 | 42 | yield ddsk[n] 43 | end 44 | end 45 | 46 | if $0 == __FILE__ 47 | ddsk = ["ドド", "スコ"] 48 | ddsk_iter(ddsk, "ドドスコスコスコ" * 3) do |res| 49 | print res 50 | end 51 | puts "ラブ注入♡" 52 | end 53 | -------------------------------------------------------------------------------- /S/Chatyusha.s: -------------------------------------------------------------------------------- 1 | .intel_syntax noprefix 2 | .LC0: 3 | .string "" 4 | .LC1: 5 | .string "\3510" 6 | .string "" 7 | .string "\3260" 8 | .string "" 9 | .string "\350l" 10 | .string "" 11 | .string "eQ" 12 | .string "" 13 | .string "a&" 14 | .string "" 15 | .string "" 16 | .string "" 17 | .string "" 18 | .string "" 19 | .LC2: 20 | .string "\n" 21 | .string "" 22 | .string "" 23 | .string "" 24 | .string "" 25 | .string "" 26 | .string "" 27 | .LC3: 28 | .string "%" 29 | .string "" 30 | .string "" 31 | .string "l" 32 | .string "" 33 | .string "" 34 | .string "s" 35 | .string "" 36 | .string "" 37 | .string "" 38 | .string "" 39 | .string "" 40 | .string "" 41 | .globl main 42 | main: 43 | push rbp 44 | mov rbp, rsp 45 | sub rsp, 288 46 | mov DWORD PTR -276[rbp], edi 47 | mov QWORD PTR -288[rbp], rsi 48 | mov rax, QWORD PTR fs:40 49 | mov QWORD PTR -8[rbp], rax 50 | xor eax, eax 51 | lea rax, .LC0[rip] 52 | mov rsi, rax 53 | mov edi, 6 54 | call setlocale 55 | mov DWORD PTR -264[rbp], 0 56 | jmp .L2 57 | .L3: 58 | mov eax, DWORD PTR -264[rbp] 59 | cdqe 60 | mov DWORD PTR -224[rbp+rax*4], 32 61 | add DWORD PTR -264[rbp], 1 62 | .L2: 63 | cmp DWORD PTR -264[rbp], 23 64 | jle .L3 65 | movabs rax, 53639846572233 66 | mov QWORD PTR -240[rbp], rax 67 | movabs rax, 53545357291705 68 | mov QWORD PTR -232[rbp], rax 69 | mov DWORD PTR -248[rbp], 0 70 | movabs rax, 53639846572233 71 | movabs rdx, 53545357291705 72 | mov QWORD PTR -112[rbp], rax 73 | mov QWORD PTR -104[rbp], rdx 74 | movabs rsi, 53545357291705 75 | movabs rdi, 53545357291705 76 | mov QWORD PTR -96[rbp], rsi 77 | mov QWORD PTR -88[rbp], rdi 78 | mov QWORD PTR -80[rbp], rax 79 | mov QWORD PTR -72[rbp], rdx 80 | mov QWORD PTR -64[rbp], rsi 81 | mov QWORD PTR -56[rbp], rdi 82 | mov QWORD PTR -48[rbp], rax 83 | mov QWORD PTR -40[rbp], rdx 84 | mov QWORD PTR -32[rbp], rsi 85 | mov QWORD PTR -24[rbp], rdi 86 | mov DWORD PTR -16[rbp], 0 87 | mov DWORD PTR -260[rbp], 0 88 | jmp .L4 89 | .L14: 90 | call rand 91 | cdq 92 | shr edx, 31 93 | add eax, edx 94 | and eax, 1 95 | sub eax, edx 96 | mov DWORD PTR -244[rbp], eax 97 | cmp DWORD PTR -260[rbp], 23 98 | jle .L5 99 | mov DWORD PTR -252[rbp], 1 100 | mov DWORD PTR -256[rbp], 0 101 | jmp .L6 102 | .L8: 103 | mov eax, DWORD PTR -256[rbp] 104 | cdqe 105 | mov edx, DWORD PTR -224[rbp+rax*4] 106 | mov eax, DWORD PTR -256[rbp] 107 | cdqe 108 | mov eax, DWORD PTR -112[rbp+rax*4] 109 | cmp edx, eax 110 | jne .L7 111 | sal DWORD PTR -252[rbp] 112 | .L7: 113 | add DWORD PTR -256[rbp], 1 114 | .L6: 115 | cmp DWORD PTR -256[rbp], 23 116 | jle .L8 117 | cmp DWORD PTR -252[rbp], 16777216 118 | jne .L9 119 | mov DWORD PTR -248[rbp], 1 120 | lea rax, .LC1[rip] 121 | mov rdi, rax 122 | mov eax, 0 123 | call wprintf 124 | lea rax, .LC2[rip] 125 | mov rdi, rax 126 | mov eax, 0 127 | call wprintf 128 | jmp .L10 129 | .L9: 130 | mov DWORD PTR -256[rbp], 0 131 | jmp .L11 132 | .L12: 133 | mov eax, DWORD PTR -256[rbp] 134 | add eax, 2 135 | cdqe 136 | mov edx, DWORD PTR -224[rbp+rax*4] 137 | mov eax, DWORD PTR -256[rbp] 138 | cdqe 139 | mov DWORD PTR -224[rbp+rax*4], edx 140 | mov eax, DWORD PTR -256[rbp] 141 | lea edx, 3[rax] 142 | mov eax, DWORD PTR -256[rbp] 143 | lea ecx, 1[rax] 144 | movsx rax, edx 145 | mov edx, DWORD PTR -224[rbp+rax*4] 146 | movsx rax, ecx 147 | mov DWORD PTR -224[rbp+rax*4], edx 148 | add DWORD PTR -256[rbp], 2 149 | .L11: 150 | cmp DWORD PTR -256[rbp], 23 151 | jle .L12 152 | mov eax, DWORD PTR -244[rbp] 153 | cdqe 154 | mov eax, DWORD PTR -240[rbp+rax*8] 155 | mov DWORD PTR -136[rbp], eax 156 | mov eax, DWORD PTR -244[rbp] 157 | cdqe 158 | mov eax, DWORD PTR -236[rbp+rax*8] 159 | mov DWORD PTR -132[rbp], eax 160 | jmp .L13 161 | .L5: 162 | cmp DWORD PTR -260[rbp], 23 163 | jg .L13 164 | mov eax, DWORD PTR -244[rbp] 165 | cdqe 166 | mov edx, DWORD PTR -240[rbp+rax*8] 167 | mov eax, DWORD PTR -260[rbp] 168 | cdqe 169 | mov DWORD PTR -224[rbp+rax*4], edx 170 | mov eax, DWORD PTR -260[rbp] 171 | lea ecx, 1[rax] 172 | mov eax, DWORD PTR -244[rbp] 173 | cdqe 174 | mov edx, DWORD PTR -236[rbp+rax*8] 175 | movsx rax, ecx 176 | mov DWORD PTR -224[rbp+rax*4], edx 177 | add DWORD PTR -260[rbp], 2 178 | .L13: 179 | lea rax, -224[rbp] 180 | mov rsi, rax 181 | lea rax, .LC3[rip] 182 | mov rdi, rax 183 | mov eax, 0 184 | call wprintf 185 | lea rax, .LC2[rip] 186 | mov rdi, rax 187 | mov eax, 0 188 | call wprintf 189 | .L4: 190 | cmp DWORD PTR -248[rbp], 0 191 | je .L14 192 | .L10: 193 | mov eax, 0 194 | mov rdx, QWORD PTR -8[rbp] 195 | sub rdx, QWORD PTR fs:40 196 | je .L16 197 | call __stack_chk_fail 198 | .L16: 199 | leave 200 | ret 201 | -------------------------------------------------------------------------------- /S/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | 3 | RUN apt-get -y update 4 | 5 | RUN apt-get install -y build-essential \ 6 | language-pack-ja fonts-takao 7 | 8 | RUN locale-gen en_US.UTF-8 9 | ENV LANG en_US.UTF-8 10 | ENV LANGUAGE en_US:en 11 | ENV LC_ALL en_US.UTF-8 12 | 13 | WORKDIR /work 14 | 15 | COPY ./Chatyusha.s . 16 | 17 | RUN gcc ./Chatyusha.s 18 | 19 | ENTRYPOINT [ "./a.out" ] -------------------------------------------------------------------------------- /S/README.md: -------------------------------------------------------------------------------- 1 | # S 2 | 3 | ## 実行方法 4 | 5 | linux/amd64環境下で動かしてください。 6 | 7 | ```sh 8 | gcc Chatyusha.s 9 | 10 | ./a.out 11 | ``` 12 | 13 | ## Docker 14 | 15 | ### x86_64 16 | 17 | ```sh 18 | docker build . -t ddsk:s 19 | docker run --rm ddsk:s 20 | ``` 21 | 22 | ### Arm 23 | 24 | ```sh 25 | docker build . --platform linux/amd64 -t ddsk:s 26 | 27 | docker run --rm ddsk:s 28 | ``` 29 | -------------------------------------------------------------------------------- /Sed/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stable-slim 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.sed . 6 | 7 | ENTRYPOINT ["sh", "-c", "echo '' | sed -E -f ddsk.sed"] 8 | -------------------------------------------------------------------------------- /Sed/README.md: -------------------------------------------------------------------------------- 1 | # DDSK-Sed 2 | 3 | ## 注意事項 4 | 5 | GNU Sedを使用しています。 6 | BSD SedやBusybox Sedでは動作しないかもしれません。 7 | 8 | ## 実行方法 9 | 10 | ```bash 11 | docker build -t ddsk:sed . 12 | docker run --rm -t ddsk:sed 13 | ``` 14 | 15 | ## License 16 | 17 | MIT 18 | -------------------------------------------------------------------------------- /Sed/ddsk.sed: -------------------------------------------------------------------------------- 1 | :a 2 | s/.*/echo &$(shuf -en1 ドド スコ)/e 3 | /(ドドスコスコスコ){3}$/!ba 4 | s/$/ラブ注入❤/ 5 | -------------------------------------------------------------------------------- /Swift/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | DerivedData/ 7 | .swiftpm/config/registries.json 8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata 9 | .netrc 10 | -------------------------------------------------------------------------------- /Swift/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM swift:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.swift . 6 | 7 | ENTRYPOINT [ "swift", "ddsk.swift" ] 8 | -------------------------------------------------------------------------------- /Swift/Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version: 5.5 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "DDSK", 7 | defaultLocalization: "ja", 8 | targets: [ 9 | .executableTarget( 10 | name: "DDSK", 11 | path: "Sources", 12 | resources: [.process("Resources")]), 13 | ] 14 | ) 15 | -------------------------------------------------------------------------------- /Swift/README.md: -------------------------------------------------------------------------------- 1 | # Swift 2 | 3 | ## 実行方法 4 | 5 | ```sh 6 | swift run 7 | ``` 8 | -------------------------------------------------------------------------------- /Swift/Sources/Resources/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | DDSK 4 | 5 | Created by treastrain on 2022/08/14. 6 | 7 | */ 8 | 9 | "ドド" = "Dodo"; 10 | "スコ" = "Suko"; 11 | "ラブ注入♡" = "Love injection♡"; 12 | -------------------------------------------------------------------------------- /Swift/Sources/Resources/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | DDSK 4 | 5 | Created by treastrain on 2022/08/14. 6 | 7 | */ 8 | 9 | "ドド" = "ドド"; 10 | "スコ" = "スコ"; 11 | "ラブ注入♡" = "ラブ注入♡"; 12 | -------------------------------------------------------------------------------- /Swift/Sources/main.swift: -------------------------------------------------------------------------------- 1 | // -------------------- 2 | // * LICENSE : MIT 3 | // * Contributors : Fus1onDev, treastrain 4 | // -------------------- 5 | 6 | import Foundation 7 | 8 | enum DDSK: String { 9 | case dd = "ドド" 10 | case sk = "スコ" 11 | } 12 | 13 | extension DDSK: CustomStringConvertible { 14 | var description: String { 15 | Bundle.currentLocaleModule.localizedString(forKey: rawValue, value: nil, table: nil) 16 | } 17 | } 18 | 19 | extension DDSK { 20 | static let match: [DDSK] = [.dd, .sk, .sk, .sk, .dd, .sk, .sk, .sk, .dd, .sk, .sk, .sk] 21 | static let jackpot = Bundle.currentLocaleModule.localizedString(forKey: "ラブ注入♡", value: nil, table: nil) 22 | } 23 | 24 | extension Bundle { 25 | static var currentLocaleModule: Bundle { 26 | guard let path = Bundle.module.path(forResource: Locale.current.languageCode, ofType: "lproj"), 27 | let bundle = Bundle(path: path) else { 28 | return .module 29 | } 30 | return bundle 31 | } 32 | } 33 | 34 | /// [レギュレーション](https://twitter.com/Sheeeeepla/status/1554028833942441984) では文字列配列からの定義を求められているため。 35 | /// このレギュレーションを無視するなら、`DDSK` を `CaseIterable` に適合させて `allCases` を使う。 36 | let ddskStrings = ["ドド", "スコ"] 37 | let ddsk = ddskStrings.map { DDSK(rawValue: $0)! } 38 | 39 | var current: [DDSK] = [] 40 | while current != DDSK.match { 41 | let newElement = ddsk.randomElement()! 42 | current.append(newElement) 43 | print(newElement.description) 44 | 45 | if current.count > DDSK.match.count { 46 | current.removeFirst() 47 | } 48 | } 49 | print(DDSK.jackpot) 50 | -------------------------------------------------------------------------------- /TypeScript/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM denoland/deno:latest 2 | 3 | WORKDIR /work 4 | 5 | COPY ./ddsk.ts . 6 | 7 | ENTRYPOINT [ "deno", "run", "./ddsk.ts" ] 8 | -------------------------------------------------------------------------------- /TypeScript/README.md: -------------------------------------------------------------------------------- 1 | # TypeScript 2 | 3 | ## 実行方法 4 | 5 | `deno run ddsk.ts` 6 | 7 | 8 | ## Docker 9 | 10 | ``` 11 | docker build . -t ddsk:ts 12 | docker run --rm ddsk:ts 13 | ``` 14 | -------------------------------------------------------------------------------- /TypeScript/ddsk.ts: -------------------------------------------------------------------------------- 1 | const main = () => { 2 | const DDSK = ["ドド", "スコ"]; 3 | const ddsk_temp = "ドドスコスコスコドドスコスコスコドドスコスコスコ"; 4 | let text = ""; 5 | while (true) { 6 | const Random = Math.floor(Math.random() * 2); 7 | text += DDSK[Random]; 8 | console.log(text); 9 | if (text.includes(ddsk_temp) == true) { 10 | console.log("ラブ注入♡"); 11 | break; 12 | } 13 | } 14 | }; 15 | main(); 16 | -------------------------------------------------------------------------------- /V/.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | end_of_line = lf 4 | insert_final_newline = true 5 | trim_trailing_whitespace = true 6 | 7 | [*.v] 8 | indent_style = tab 9 | -------------------------------------------------------------------------------- /V/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.bat eol=crlf 3 | 4 | **/*.v linguist-language=V 5 | **/*.vv linguist-language=V 6 | **/*.vsh linguist-language=V 7 | **/v.mod linguist-language=V 8 | -------------------------------------------------------------------------------- /V/.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | ddsk 3 | *.exe 4 | *.exe~ 5 | *.so 6 | *.dylib 7 | *.dll 8 | 9 | # Ignore binary output folders 10 | bin/ 11 | 12 | # Ignore common editor/system specific metadata 13 | .DS_Store 14 | .idea/ 15 | .vscode/ 16 | *.iml 17 | 18 | # ENV 19 | .env 20 | 21 | # vweb and database 22 | *.db 23 | *.js 24 | -------------------------------------------------------------------------------- /V/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM thevlang/vlang:latest AS builder 2 | WORKDIR /build 3 | COPY ddsk.v . 4 | RUN v -prod ddsk.v 5 | 6 | FROM alpine:latest 7 | WORKDIR /app 8 | COPY --from=builder /build/ddsk . 9 | 10 | ENTRYPOINT ["/app/ddsk"] 11 | -------------------------------------------------------------------------------- /V/README.md: -------------------------------------------------------------------------------- 1 | # V 2 | 3 | ## 実行方法 4 | 5 | `v run ddsk.v` 6 | 7 | ## V Playground 8 | 9 | https://play.vlang.io/p/1f2ea95e7e 10 | 11 | (出力が長すぎる場合表示がおかしくなるようです) 12 | 13 | ## Docker 14 | 15 | ```sh 16 | docker build . -t ddsk:v 17 | docker run --rm ddsk:v 18 | ``` 19 | -------------------------------------------------------------------------------- /V/ddsk.v: -------------------------------------------------------------------------------- 1 | import rand 2 | 3 | const ddsk = ['ドド', 'スコ'] 4 | const love = 'ドドスコスコスコ'.repeat(3) 5 | 6 | fn main() { 7 | mut ddsk_buffer := []string{len: 12, cap: 12, init: ''} 8 | for { 9 | current_ddsk := rand.element(ddsk)! 10 | 11 | ddsk_buffer.drop(1) 12 | ddsk_buffer << current_ddsk 13 | 14 | print(current_ddsk) 15 | 16 | if ddsk_buffer.join('') == love { 17 | println('ラブ注入♡') 18 | return 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Vimscript/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:latest 2 | ENV LANG="ja_JP.UTF-8" \ 3 | LANGUAGE="ja_JP:ja" \ 4 | LC_ALL="ja_JP.UTF-8" 5 | 6 | RUN apt-get update 7 | RUN apt-get install -y vim language-pack-ja 8 | 9 | WORKDIR /root 10 | COPY ./ddsk.vim /root/ddsk.vim 11 | 12 | CMD ["vim", "-S", "ddsk.vim"] 13 | -------------------------------------------------------------------------------- /Vimscript/README.md: -------------------------------------------------------------------------------- 1 | # Vim script 2 | 3 | ## 実行方法 4 | 5 | `vim -S ddsk.vim` 6 | 7 | ## Dockerfile 8 | 9 | ``` 10 | docker build . -t ddsk:vim 11 | docker run --rm -it ddsk:vim 12 | ``` 13 | 14 | ## ベース 15 | https://github.com/ryoppippi/dodosuko.vim 16 | -------------------------------------------------------------------------------- /Vimscript/ddsk.vim: -------------------------------------------------------------------------------- 1 | function! Ddsk() 2 | vnew 3 | let l:ddsk = ["ドド", "スコ","スコ", "スコ"] 4 | while 1 5 | call append('$', ["ドド", "スコ"][rand()%2]) 6 | if getline(line('$')-3, '$') == ddsk && getline(line('$')-7, line('$')-4) == ddsk && getline(line('$')-11, line('$')-8) == ddsk 7 | call append('$', "ラブ注入♡") 8 | break 9 | endif 10 | endwhile 11 | endfunction 12 | call Ddsk() 13 | -------------------------------------------------------------------------------- /Zig/.gitignore: -------------------------------------------------------------------------------- 1 | /zig-out 2 | zig-cache 3 | -------------------------------------------------------------------------------- /Zig/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:edge as builder 2 | 3 | RUN apk update && \ 4 | apk add --no-cache curl 5 | 6 | RUN curl -Lo zig.tar.xz https://ziglang.org/builds/zig-linux-x86_64-0.10.0-dev.3456+40babaa53.tar.xz 7 | RUN mkdir zig && tar xvf zig.tar.xz -C zig --strip-components 1 8 | ENV PATH $PATH:/zig 9 | 10 | RUN mkdir /test 11 | WORKDIR /test 12 | COPY ./build.zig . 13 | COPY ./src/main.zig ./src/ 14 | 15 | RUN zig build -Drelease-safe=true 16 | 17 | ENTRYPOINT [ "zig", "build", "run", "-Drelease-safe=true" ] 18 | -------------------------------------------------------------------------------- /Zig/README.md: -------------------------------------------------------------------------------- 1 | # Zig 2 | 3 | ## 実行方法 4 | 5 | `zig build run` 6 | 7 | ## Docker 8 | 9 | ```sh 10 | docker build . -t ddsk:zig 11 | docker run --rm ddsk:zig 12 | ``` 13 | -------------------------------------------------------------------------------- /Zig/build.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | 3 | pub fn build(b: *std.build.Builder) void { 4 | // Standard target options allows the person running `zig build` to choose 5 | // what target to build for. Here we do not override the defaults, which 6 | // means any target is allowed, and the default is native. Other options 7 | // for restricting supported target set are available. 8 | const target = b.standardTargetOptions(.{}); 9 | 10 | // Standard release options allow the person running `zig build` to select 11 | // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. 12 | const mode = b.standardReleaseOptions(); 13 | 14 | const exe = b.addExecutable("Zig", "src/main.zig"); 15 | exe.setTarget(target); 16 | exe.setBuildMode(mode); 17 | exe.install(); 18 | 19 | const run_cmd = exe.run(); 20 | run_cmd.step.dependOn(b.getInstallStep()); 21 | if (b.args) |args| { 22 | run_cmd.addArgs(args); 23 | } 24 | 25 | const run_step = b.step("run", "Run the app"); 26 | run_step.dependOn(&run_cmd.step); 27 | 28 | const exe_tests = b.addTest("src/main.zig"); 29 | exe_tests.setTarget(target); 30 | exe_tests.setBuildMode(mode); 31 | 32 | const test_step = b.step("test", "Run unit tests"); 33 | test_step.dependOn(&exe_tests.step); 34 | } 35 | -------------------------------------------------------------------------------- /Zig/src/main.zig: -------------------------------------------------------------------------------- 1 | const std = @import("std"); 2 | 3 | const DDSK = 0b0111_0111_0111; 4 | const MASK = 0b1111_1111_1111; 5 | 6 | const ddsk = [_][]const u8{ "ドド", "スコ" }; 7 | 8 | pub fn main() !void { 9 | const stdout_file = std.io.getStdOut().writer(); 10 | var bw = std.io.bufferedWriter(stdout_file); 11 | const stdout = bw.writer(); 12 | var rand = std.rand.DefaultPrng.init(@intCast(u64, std.time.milliTimestamp())); 13 | 14 | var buffer: usize = 0; 15 | while (buffer != DDSK) { 16 | const index = rand.random().int(usize) % ddsk.len; 17 | try stdout.print("{s}", .{ddsk[index]}); 18 | buffer = (buffer << 1) & MASK | index; 19 | } 20 | try stdout.print("ラブ注入♡\n", .{}); 21 | try bw.flush(); 22 | } 23 | -------------------------------------------------------------------------------- /php/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.4-cli 2 | 3 | COPY . . 4 | 5 | CMD ["php", "ddsk.php"] -------------------------------------------------------------------------------- /php/README.md: -------------------------------------------------------------------------------- 1 | # PHP 2 | 3 | ![PREVIEW](./docs/preview.png) 4 | 5 | ## 実行方法 6 | 7 | CLI 8 | 9 | ```sh 10 | php ddsk.php 11 | ``` 12 | 13 | Web 14 | 15 | ```sh 16 | php -S localhost:5000 17 | curl http://localhost:5000/ddsk-web.php 18 | ``` 19 | 20 | http://localhost:5000/ddsk-web.php 21 | 22 | ## PHP Sandbox 23 | 24 | https://onlinephp.io/c/606e3 25 | 26 | ## Docker 27 | 28 | ```sh 29 | docker build . -t ddsk:php 30 | docker run --rm ddsk:php 31 | ``` -------------------------------------------------------------------------------- /php/ddsk-web.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | DDSK PHP 9 | 10 | 11 |

DDSK PHP

12 |
13 |         
14 |     
15 | 16 | -------------------------------------------------------------------------------- /php/ddsk.php: -------------------------------------------------------------------------------- 1 | = 11) $love = true; 16 | $point++; 17 | }else{ 18 | if(0 === $ddsk_rand){ $point = 1; $line = true; } 19 | else { $point = 0; }; 20 | }; 21 | 22 | if($line) echo "\n"; 23 | echo $ddsk[$ddsk_rand]; 24 | if($love){ echo " ラブ注入♡\n\x1b[32m試行回数: {$num}回\x1b[0m"; $isloop = false; }; 25 | 26 | $num++; 27 | } -------------------------------------------------------------------------------- /php/docs/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Comamoca/Awesome-DDSK/2a487134c324625e79f3b8699103c33afa162791/php/docs/preview.png -------------------------------------------------------------------------------- /rust/.gitignore: -------------------------------------------------------------------------------- 1 | target -------------------------------------------------------------------------------- /rust/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "cfg-if" 7 | version = "1.0.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 10 | 11 | [[package]] 12 | name = "ddsk" 13 | version = "0.1.0" 14 | dependencies = [ 15 | "rand", 16 | ] 17 | 18 | [[package]] 19 | name = "getrandom" 20 | version = "0.2.7" 21 | source = "registry+https://github.com/rust-lang/crates.io-index" 22 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 23 | dependencies = [ 24 | "cfg-if", 25 | "libc", 26 | "wasi", 27 | ] 28 | 29 | [[package]] 30 | name = "libc" 31 | version = "0.2.126" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" 34 | 35 | [[package]] 36 | name = "ppv-lite86" 37 | version = "0.2.16" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 40 | 41 | [[package]] 42 | name = "rand" 43 | version = "0.8.5" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 46 | dependencies = [ 47 | "libc", 48 | "rand_chacha", 49 | "rand_core", 50 | ] 51 | 52 | [[package]] 53 | name = "rand_chacha" 54 | version = "0.3.1" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 57 | dependencies = [ 58 | "ppv-lite86", 59 | "rand_core", 60 | ] 61 | 62 | [[package]] 63 | name = "rand_core" 64 | version = "0.6.3" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 67 | dependencies = [ 68 | "getrandom", 69 | ] 70 | 71 | [[package]] 72 | name = "wasi" 73 | version = "0.11.0+wasi-snapshot-preview1" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 76 | -------------------------------------------------------------------------------- /rust/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "ddsk" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | rand = "0.8.5" 10 | -------------------------------------------------------------------------------- /rust/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM rust:1.62.1 2 | 3 | WORKDIR /app 4 | 5 | COPY . . 6 | 7 | RUN cargo build --release 8 | 9 | ENTRYPOINT ["/app/target/release/ddsk"] 10 | 11 | -------------------------------------------------------------------------------- /rust/README.md: -------------------------------------------------------------------------------- 1 | # Rust 2 | ## 実行方法 3 | 4 | `cargo run` 5 | 6 | 7 | ## Docker 8 | 9 | ``` 10 | docker build . -t ddsk:rust 11 | docker run --rm ddsk:rust 12 | ``` 13 | -------------------------------------------------------------------------------- /rust/src/main.rs: -------------------------------------------------------------------------------- 1 | use rand::Rng; 2 | use std::collections::VecDeque; 3 | 4 | fn main() { 5 | let mut rng = rand::thread_rng(); 6 | 7 | let ddsk_slice: [&str; 2] = ["ドド", "スコ"]; 8 | let match_ward = "ドドスコスコスコドドスコスコスコドドスコスコスコ"; 9 | let mut choice_ddsks:VecDeque<&str> = VecDeque::from([""; 12]); 10 | 11 | loop { 12 | let random = rng.gen_range(0..2); 13 | let choice_ddsk = ddsk_slice[random]; 14 | choice_ddsks.pop_back(); 15 | choice_ddsks.push_front(choice_ddsk); 16 | let ddsk = choice_ddsks.as_slices().0.join(""); 17 | if ddsk == match_ward { 18 | println!("{}", "ラブ注入♡"); 19 | return 20 | } 21 | print!("{}", choice_ddsk); 22 | } 23 | } --------------------------------------------------------------------------------