SmileBASICはもっと注目に値します。私はここで3人のユーザー(自分自身を含む)だけがSBの回答を提供しているのを見たことがありますが、それは驚くことではありませんが、残念です。BASICの方言であるだけでなく、有料の言語であることは確かに人々をオフにしますが、それを所有している人にとっては実際にかなり柔軟で、驚くほどゴルフに適しています。私はこのヒントスレッドを開いて、何が起こるか見てみました。
私は12Me21が頻繁に訪れることを期待しています:)
SmileBASICはもっと注目に値します。私はここで3人のユーザー(自分自身を含む)だけがSBの回答を提供しているのを見たことがありますが、それは驚くことではありませんが、残念です。BASICの方言であるだけでなく、有料の言語であることは確かに人々をオフにしますが、それを所有している人にとっては実際にかなり柔軟で、驚くほどゴルフに適しています。私はこのヒントスレッドを開いて、何が起こるか見てみました。
私は12Me21が頻繁に訪れることを期待しています:)
回答:
string!=""
とstring>""
SBを使用すると、コードポイントに基づいて、文字列の大小比較を行うことができます。ただし、空の文字列は最小の文字列と見なされます。
だから、あなたがない状況のためstring!=""
、あなたがいずれかを使用することができますstring>""
または""<string
すべての文字列がより大きいので、""
そして""
すべての文字列よりも小さいです。あなたが使用しているかどうかに応じて、<
または>
文はあなたがバイトも節約することができる有効な構文であるとの前または後に空白が必要な場合に依存します。
例えば:
WHILE S$!=""
に変えることができます
WHILE S$>""
そしてさらにゴルフ
WHILE""<S$
?
、.
、@
、と閉じていない文字列BASICの多くの方言は?
印刷をサポートしており、SBも例外ではありません。非常に短いテキスト出力機能を持つことは大きな利点です。
SmileBASICでは、.
に評価されるため0.0
、スペースを節約するために0の代わりに使用できます。たとえば、次の
SPSET 0,21
ようになりますSPSET.,21
。1バイトを節約します。(SPSET0,21
理由は無効ですSPSET0
ユーザー定義関数である可能性がある)
EXEC.
は、プログラムを永久にループさせる非常に短い方法です(ただし、すべての変数がリセットされるため、常に使用できるとは限りません)
(のために使用されるラベルGOTO
、GOSUB
及び読み出しがDATA
)として表され@LABEL
SmileBASICいます。式で使用される場合、実際には文字列として扱われます。たとえば、次のBGMPLAY"@305C"
ように書くことができますBGMPLAY@305C
文字列は、行の終わり(またはプログラムの終わり)で自動的に閉じられます。?"Hello, World!"
と書くことができます?"Hello, World!
。これは、長さを変えずに複数行に分割することでプログラムを読みやすくするためにも使用?"Meow"BEEP 69
できます。
?"Meow
BEEP 69
@A<POP(H$)
よりも短くなっている"@"<POP(H$)
(A
それは同じになることはありませんので、問題、それが唯一のこれまでの最初の文字をチェックしません)
MID$
このMID$
関数は、文字列の途中のどこかから部分文字列を取得するための多くのBASICで一般的な関数です。ただし、何らかのインデックスで文字を取得する必要がある場合は、文字列インデックスの使用ははるかに短くなります。例えば:
PRINT MID$("ABC",2,1)
PRINT "ABC"[2]
これらは両方ともCを出力します。文字列は、文字ベースで配列のようなインデックス付けをサポートします。したがって、一度に1文字しかチェックする必要がない場合、これが最善の方法です。
A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
:
(または使用しない場合)この:
文字は、SBでステートメントブレーカーとして使用されます。基本的に、次のようにステートメントを1行にスタックするために使用します。
PRINT "HELLO!":PRINT "GOODBYE!"
それ以外の場合、平均的なステートメントは改行で区切られます。
PRINT "HELLO!"
PRINT "GOODBYE!"
実際には、多くの場合、コロンをまったく使用する必要はありません。ステートメントが構文的に有効なトークンに分割できる限り、パーサーは一方が終了して他方が開始するタイミングを把握する傾向があります。空白についても同様です。
PRINT"HELLO!"PRINT"GOODBYE!"
もちろん、これは常に機能するとは限りません。ステートメントを明示的に中断する必要がある曖昧なケースと無効な構文が常にあります。例:
PRINT "HELLO";END
セミコロン手段PRINT
が声明ブレイクしない限り、プリントアウトするための別の表現を期待している(私たちは改行を抑制するためにセミコロンをダングリング使用しています。)ここでは、想定してはEND
、キーワードであるにもかかわらず、値になるはず、とそれを印刷しようとすると、結果のさエラーで。したがって、コロンでも改行でも、このステートメントを明示的に解除する必要があります。
一般に、何かがあいまいに見える場合は、それが機能するかどうか試してみてください。そうでない場合は、ステートメントを中断します。また、12Me21で述べたように、無効な構文を生成するものはすべて正しく強調表示されません。
SmileBASICのコードエディターには、コードが機能するかどうかを判断するために使用できる構文強調表示機能が組み込まれています。たとえば、実行しようとするBEEP0
と、関数と数字の間にスペースが必要になるため、強調表示されません。ただし、BEEP.
動作します。数字ではありません。
X=7BEEP
関数は数字で始めることはできないため、通常、次のようなコードは有効です。したがって、SBはそれ7
をBEEP
別のものと見なします。しかしながら。X=7END
解釈しようとするため、許可されません(強調表示されません)。7E...
、数値としてますが、Eの後に数字がないため失敗し、エラーが発生します。通常、これを理解するのは非常に困難ですが、非常に信頼性の高い構文ハイライターを使用すると、できることとできないことを伝えるのがはるかに簡単になります。
私のSmileBASIC構文ハイライターは(できれば)SBの振る舞いに完全に一致するように設計されているので、それを使用してコードが有効かどうかを確認できます。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://12Me21.github.io/sbhighlight3/sbhighlight.js"></script>
<link rel="stylesheet" type="text/css" href="https://12Me21.github.io/sbhighlight3/style.css">
<link rel="stylesheet" type="text/css" href="https://12Me21.github.io/external/smilebasicfont.css">
<script>
function update(event){
$code.textContent=$input.innerText;
//must be innerText since contentedible and textContent are too dumb to understand linebreaks
//contenteditable adds <br>s which textContent ignores
//whyyyyy
applySyntaxHighlighting($code,true);
}
function setCaretPosition(elem,caretPos){
if(elem){
if(elem.createTextRange) {
var range=elem.createTextRange();
range.move('character',caretPos);
range.select();
}else{
if(elem.selectionStart){
elem.focus();
elem.setSelectionRange(caretPos,caretPos);
}else
elem.focus();
}
}
}
</script>
<style>
#editcontainer{
position: absolute;
}
#editcontainer>pre{
position: absolute;
left: 0;
top: 0;
}
pre.csssucks *{
color:transparent !important;
background-color:transparent !important;
caret-color: white;
}
pre.csssucks {
color:transparent !important;
background-color:transparent !important;
caret-color: white;
border-color:transparent;
padding-right: 50ch;
}
</style>
</head>
<body>
Use SB font:<input type="checkbox" autocomplete="off" onchange="$code.dataset.sbfont=$input.dataset.sbfont=this.checked;update()"></input>
<button onclick="update()">force update</button>
<hr>
<div id="editcontainer">
<pre id="$code">test</pre>
<pre id="$input" class="csssucks" contenteditable="true" spellcheck="false" onkeydown="setTimeout(function(){update(event)},2);">test</pre>
</div>
</body>
</html>