Help us understand the problem. What is going on with this article?

自作クラスでPPAPテスト(js/VB/HSP/Lisp)

More than 3 years have passed since last update.

続き: コールバックPPAPズンドコキヨシ(js/ts/VB/C#/HSP/Lisp)

概要

出力

コンソール
アッポー
ペン
ペンアッポー
ペンペンアッポーアッポーペン
ペンパイナッポーパイナッポーアッポーペンパイナッポーアッポーペンアッポー
ペンアッポーアッポーパイナッポーペン
ペンペンアッポーアッポー
ペン
ペン
ペンペン
ペンアッポーアッポーパイナッポー
ペン
ペンアッポーアッポーパイナッポー
ペン
ペンパイナッポーアッポーペン
ペンパイナッポーアッポーペン ピコ!

メイン部

JavaScript/ppap.js
const zundoko=require("./zundoko");
(function(){
    const ppap=new zundoko(["\nペン","アッポー","パイナッポー","ペン"],"\nペンパイナッポーアッポーペン ピコ!",[0,2,1,3],true);
    console.log(ppap.kiyoshi());
})();
VB.net/ppap.vb
Imports System
Imports System.Console
Imports zundoko
Module Program
    Sub Main()
        Dim ppap As New zundoko({vbLf & "ペン","アッポー","パイナッポー","ペン"},vbLf & "ペンパイナッポーアッポーペン ピコ!",{0,2,1,3},True)
        WriteLine(ppap.kiyoshi())
    End Sub
End Module
HSP/ppap.hsp
#runtime "hsp3cl"
#include "zundoko.as"

newmod ppap,zundoko
words="\nペン","アッポー","パイナッポー","ペン"
fin="\nペンパイナッポーアッポーペン ピコ!"
ptn=0,2,1,3
set_zd ppap,words,fin,ptn,1
mes kiyoshi(ppap)
CommonLisp/ppap.lisp
(load "zundoko")
(defparameter ppap (make-instance 'zundoko :words '("~%ペン" "アッポー" "パイナッポー" "ペン") :fin "ペンパイナッポーアッポーペン ピコ!" :ptn '(0 2 1 3) :dbl t))
(format t "~%~a~%" (kiyoshi ppap))

ズンドコクラス

JavaScript/zundoko.js
"use strict";

module.exports=function zundoko(_zundoko_list,_exit_kiyoshi,_zdchk,_dbl){
    var zundoko_list;
    var exit_kiyoshi;
    var zdchk;
    var dbl;
    var stk;

    var new_zundoko=function(args){
        if(zundoko.length==args.length){
            zundoko_list=_zundoko_list;
            exit_kiyoshi=_exit_kiyoshi;
            zdchk=_zdchk;
            dbl=_dbl;
        }
        else if(zundoko.length-1==args.length && _dbl==null){
            zundoko_list=_zundoko_list;
            exit_kiyoshi=_exit_kiyoshi;
            zdchk=_zdchk;
            dbl=false;
        }
        else{
            zundoko_list=["ズン","ドコ"];
            exit_kiyoshi="キ・ヨ・シ!";
            zdchk=[0,0,0,0,1]
            dbl=false;
        }
        stk=new Array(zdchk.length);
    }

    this.kiyoshi=function(){
        for(;;){
            let zd=Math.floor(Math.random()*zundoko_list.length);
            process.stdout.write(zundoko_list[zd]);
            stk.push(zundoko_list[zd])
            let stk0=stk.shift();
            if((dbl?true:stk0!=zundoko_list[zdchk[0]]) && stk.join()==zdchk.map(val=>zundoko_list[val]).join()){
                return exit_kiyoshi;
            }
        }
    }
    return new_zundoko(arguments);
}
VB.net/zundoko.vb
Imports System
Imports System.Console
Imports System.Collections.Generic
Class zundoko
    Dim rand As New Random()
    Dim zundoko_list As String()
    Dim exit_kiyoshi As String
    Dim zdchk As Integer()
    Dim dbl As Boolean
    Dim stk As New LinkedList(Of String)()
    Dim New2 As Action=Sub() Me.stk=New LinkedList(Of String)(New String(zdchk.Length-1){})

    Sub New(zundoko_list As String(),exit_kiyoshi As String,zdchk As Integer(),dbl As Boolean)
        Me.zundoko_list=zundoko_list.Clone
        Me.exit_kiyoshi=exit_kiyoshi
        Me.zdchk=zdchk.Clone
        Me.dbl=dbl
        New2()
    End Sub

    Sub New(zundoko_list As String(),exit_kiyoshi As String,zdchk As Integer())
        Me.zundoko_list=zundoko_list.Clone
        Me.exit_kiyoshi=exit_kiyoshi
        Me.zdchk=zdchk.Clone
        Me.dbl=False
        New2()
    End Sub

    Sub New()
        Me.zundoko_list={"ズン","ドコ"}.Clone
        Me.exit_kiyoshi="キ・ヨ・シ!"
        Me.zdchk={0,0,0,0,1}.Clone
        Me.dbl=False
        New2()
    End Sub

    Function kiyoshi() As String
        Do
            Dim zd As Long=rand.Next(zundoko_list.Length)
            Write(zundoko_list(zd))
            stk.AddLast(zundoko_list(zd))
            Dim stk0 As String=stk.First.Value
            stk.RemoveFirst()

            If if(dbl,True,stk0<>zundoko_list(zdchk(0))) And String.Join("",stk)=String.Join("",Array.ConvertAll(zdchk,Function(val) zundoko_list(val))) Then
                Return exit_kiyoshi
            End If
        Loop
    End Function
End Class
HSP/zundoko.as
#uselib "msvcrt.dll"
randomize
#module zundoko zundoko_list,exit_kiyoshi,zdchk,dbl
    #func printf "printf" str
    #modinit
        zundoko_list="ズン","ドコ"
        exit_kiyoshi="キ・ヨ・シ!"
        zdchk=0,0,0,0,1
        dbl=0
        sdim stk,,length(zdchk)
    return

    #modfunc set_zd array _zundoko_list,str _exit_kiyoshi,array _zdchk,int _dbl
        sdim zundoko_list,,length(_zundoko_list)
        repeat length(_zundoko_list)
            zundoko_list(cnt)=_zundoko_list(cnt)
        loop

        exit_kiyoshi=_exit_kiyoshi
        sdim zdchk,,length(_zdchk)
        repeat length(_zdchk)
                zdchk(cnt)=_zdchk(cnt)
        loop

        dbl=_dbl
        sdim stk,,length(zdchk)
    return

    #modcfunc kiyoshi
        repeat
            zd=rnd(length(zundoko_list))
            stk0=stk(0)
            repeat length(stk)-1
                stk(cnt)=stk(cnt+1)
            loop

            printf zundoko_list(zd)
            stk(length(stk)-1)=zundoko_list(zd)
            double_check=stk0!=zundoko_list(zdchk(0))
            if dbl:double_check=1
            if double_check {
                repeat length(stk)
                    if stk(cnt)!=zundoko_list(zdchk(cnt)){
                        break
                    }
                    if cnt=length(stk)-1{
                        return exit_kiyoshi
                    }
                loop
            }
        loop
#global
CommonLisp/zundoko.lisp
(defclass zundoko()(
    (zundoko_list
        :initarg :words
        :initform '("ズン" "ドコ")
    )
    (exit_kiyoshi
        :initarg :fin
        :initform "キ・ヨ・シ!"
    )
    (zdchk
        :initarg :ptn
        :initform '(0 0 0 0 1)
    )
    (dbl
        :initarg :dbl
        :initform nil
    )
))

(defmethod kiyoshi((me zundoko))
    (let(
        (*random-state* (make-random-state t))
        (zundoko_list (slot-value me 'zundoko_list))
        (exit_kiyoshi (slot-value me 'exit_kiyoshi))
        (zdchk (slot-value me 'zdchk))
        (dbl (slot-value me 'dbl))
    )(let(
        (stk (mapcar #'(lambda(val)"") zdchk))
    )
        (defun fact(stk)
            (let(
                (zd(random(length zundoko_list)))
            )(let(
                (stkzd (append (rest stk) `(,(elt zundoko_list zd))))
            )
                (format t (elt zundoko_list zd))
                (if (and
                    (if dbl t (string/= (first stk) (first zundoko_list)))
                    (equal stkzd (mapcar #'(lambda(val)(elt zundoko_list val)) zdchk))
                )
                    exit_kiyoshi
                    (fact stkzd)
                )
            ))
        )
        (fact stk)
    ))
)

実行環境

JavaScript: node v4.3.2
VB.net: vbc 14.0.1055
HSP 3.32
CommonLisp: CLISP 2.49, SBCL 1.2.7

yosgspec
JavaScript(Node.js,TypeScript),VB.NET,C#,CommonLisp,HSP,Python3,D,C++,VBA 等。 適当な言語マニアです。最近オブジェクト指向を覚えてから下手に多用することが多くなった。 その他に若干読み書きできる言語: Ruby,Lua,Java,Tcl,Scala,Scheme,Clojure,Go,Perl,Matlab,R 他
http://yosgspec.blog103.fc2.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away