2007-05-11

fizzbuzz.com

http://anond.hatelabo.jp/20070508170219 こいつをアセンブラで書こうとしていたが、

すでに

http://anond.hatelabo.jp/20070510170511 にそれっぽいものが書かれていた。

しかしデクリメントした直後に判定するならフラグですむがそうじゃないときtest命令入れないといけないのでうまくいかんと思った。

とりあえず8086アセンブラで書いてみたが長くなったので実行ファイル(fizzbuzz.com)をBase64で下に書いておくよ。

~) ls -al fizzbuzz.com
-a--rwx       98 May 11 03:28 fizzbuzz.com*

~) base64 < fizzbuzz.com
uwUDuQoJvl0B/s91ErcD/st1BrpSAesOkLpLAesWkP7LdQi6VgGzBesKkLg6OivBiQSL1rQJzSH+
zXXNtQr+yXXHulYBzSG0TM0hRml6eg0KJEZpenpCdXp6DQokVU0NCiQ=

数字の表示の処理で10で割った余りを使っていたのでまずいと思って修正した。ついでに98バイトまで縮めてみた。

こんなことに時間を使っている俺はバカだ。

ソースも載せとこう。8086なんてほとんど初めてに等しいので汚いだろうけど。


CODE	SEGMENT
	ASSUME	CS:CODE,DS:CODE
	ORG 100H
START:
	mov bx, 0305h
	mov cx, 090Ah
	mov si, OFFSET NUM
LOOP:
	dec bh
	jnz skip1
; 3の倍数だった
	mov bh, 3
	dec bl
	jnz skip2
; 3の倍数で5の倍数だった
	mov dx, OFFSET FIZZBUZZ
	jmp loop5
skip2:
; 3の倍数で5の倍数じゃなかった
	mov dx, OFFSET FIZZ
	jmp loopend
skip1:	
; 3の倍数じゃないとき
	dec bl
	jnz skip3
; 3の倍数じゃなくて5の倍数だった
	mov dx, OFFSET BUZZ
loop5:	mov bl, 5
	jmp loopend
skip3:	
; 3の倍数じゃなくて5の倍数でもなかった
; 数字を表示する。2桁でいい
	mov ax, 3A3Ah
	sub ax, cx
	mov [si],ax
	mov dx, si
	
loopend:
	mov ah,9
	int 21h

	dec ch
	jne loop
	mov ch,10
	dec cl
	jne loop

; 最後のBuzzを表示する
	mov dx, OFFSET BUZZ
	int 21h

	mov ax, 4c00H
	int 21h

	
FIZZ:		DB	'Fizz', 0dh, 0ah, '$'
FIZZBUZZ:	DB	'Fizz'
BUZZ:		DB	'Buzz', 0dh, 0ah, '$'
NUM:		DB	'UM', 0dh, 0ah, '$'
CODE	ENDS

	END START

記事への反応 -
  • 1から100までの整数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリン...

    • http://anond.hatelabo.jp/20070508170219 こいつをアセンブラで書こうとしていたが、 すでに http://anond.hatelabo.jp/20070510170511 にそれっぽいものが書かれていた。 しかしデクリメントした直後に判定す...

      • 無くなりそうで無くならないのがアセンブラ使い。 高度な処理には頭を使うが、基本的にはこっちの方が分かりやすいよね。

    • 1.upto(100){|i| case i when 1..2 p i when 3 p &#39;Fizz&#39; when 4 p i when 5 p &#39;Buzz&#39; (中略) end}

      • m9

      • おいおい、回答の追記は反則だろ。 確かに「俺はわかっててやってるんだ!」って気持ちは凄くよくわかる。でも増田なんだから別エントリに書いてしまえばいい。たとえm9されても、...

        • まどろっこしいことするなあ print("1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n16\n17\nFizz\n19\nBuzz\nFizz\n22\n23\nFizz\nBuzz\n26\nFizz\n28\n29\nFizzBuzz\n31\n32\nFizz\n34\nBuzz\nFizz\n37\n38\nFizz\nBuzz\n41\n...

          • ネタをつきつめたつもりなんじゃね、といおうと思ったけど お前それすごいな。自動生成したのかどっかに転がってた出力を使ったのか知らんが、どちらにせよわざわざご苦労さん。

            • 手で書いた可能性を考慮しないお前の優しさ

              • 面接を受けに来た自称プログラマーが、真剣な表情でこんなのをチマチマ打ってるところを想像したら泣けてきた。 更に指まで使って「これは3の倍数で…」とかやってたりしたらもう

    • #include &lt;stdio.h&gt;main(){ int i; int fizz; int buzz; fizz = 3; buzz = 5; for (i = 1; i &lt;= 100; i++) { if (fizz != i &amp;amp;&amp;amp; buzz != i) printf(&quot;%d&#92;n&quot;, i); else { ...

      • 想定していた回答はこんなの http://anond.hatelabo.jp/20070508173455 が気に入ったのでこなたあげます っ(=ω=.)

      • 想定していた回答はこんなの def setr(a,k,str) a[k-1] = str if a[k-1]==nil && k&lt;=100endres = Array.new(100)(1..100).each{|i| setr(res,i ,i.to_s) setr(res,i*3 ,&quot;Fizz&quot;) setr(res,i*5 ,&quot;Buzz&quot;) setr(res,i*15,&quot;Fiz...

    • http://anond.hatelabo.jp/20070508200406 てか、この程度だったらマシン語のほうがわかりやすそう。 念のため、リンク。http://anond.hatelabo.jp/20070508170219

    • w3m -dump http://anond.hatelabo.jp/20070508193251 | grep print | sed 's/print("//;s/");//;s/\\n/\n/g'

    • ついでに作ってみた。Javaだお。 public class FizzBuzz { private final int start; private final int last; private final int fizz; private final int buzz; public FizzBuzz(int start, int last, int fizz, int buzz) { this.start = start; this....

      • Javaって変態さんなんですね☆ つーかバグってね?

      • これはひどい。要件を理解してない。

        • public class FizzBuzz { private final int start; private final int last; private final int fizz; private final int buzz; public FizzBuzz(int start, int last, int fizz, int buzz) { this.start = start; this.last = last; this.fizz = fizz; this.buzz = ...

          • http://anond.hatelabo.jp/20070511005106 private boolean isMultiple(int i, int base) { if(i/base * base == i){ return true; } return false; } あ、CならisMultipleは#defineするから一行で済むんだが…。 こうか #define IS_MULT...

          • http://anond.hatelabo.jp/20070511005106 execute()メソッドがprivateなのって何でですか?

            • main() と同一クラス内にあって public にする必要が無いからじゃない? もちろん FizzBuzz が外部からも使用されるようなクラスなら execute() を public にする必要があると思う。

              • あ、なるほど。ありがとうございます。 ついでにもうひとつ聞いてみたいんですけど パラメータってなんでもかんでもメンバ変数にしてしまうのがclassの設計作法としてあるんですかね...

                • http://anond.hatelabo.jp/20070511095003 こりゃ中途半端に拡張性を意識した名残だろうね。fizz 変数の値で割り切れる場合は "Fizz" と表示して buzz 変数の値で割り切れる場合は "Buzz" と表示するよう...

            • 真の答えは、 new FizzBuzz().execute() と最初に書いてからEclipseのquick fixでメソッドを作っていったので、Eclipseが勝手にprivateにしてしまった。 です。

          • http://anond.hatelabo.jp/20070511005106 private boolean isMultiple(int i, int base) { if(i/base * base == i){ return true; } return false; } あ、CならisMultipleは#defineするから一行で済むんだが…。 どうして private b...

      • public class FizzBuzz { public static class NumMessagePair { private final int base; private final String message; public NumMessagePair(int base, String message) { this.base = base; this.message = message; } public boolean isAliquot(int num) ...

    • FizzBuzz・・・。 DROP TABLE IF EXISTS `tmp_fizzbuzz`;CREATE TABLE `tmp_fizzbuzz` (`num` int( 4 ) NOT NULL default 0,`fizz` VARCHAR( 4 ) NOT NULL default &#39;&#39;,`buzz` VARCHAR( 4 ) NOT NULL default &#39;&#39;,PRIMARY KEY (`num`));delimiter //DR...

      • mySQLで迷子。 なんだこれ難しいな…。 100までの整数がなんらかの状態でレコードにあって後はSQLひとつ流せばおわりなんだけど select if (tf.fizzbuzz = &#39;&#39;,tf.num,tf.fizzbuzz) fizzbuzzfrom ( select...

    • http://anond.hatelabo.jp/20070508170219 Public Sub FizzBuzz() Dim i As Integer Dim cc As Range For i = 1 To 100 Set cc = Cells(i, 1) cc.FormulaR1C1 = _ &quot;=IF(INT(ROW()/3)*3=ROW()*1,IF(INT(ROW()/5)*5=ROW()*1,&quot;&quot...

      • http://anond.hatelabo.jp/20070510170511 皆素直に繰り返しの構文で1から100まで回してんのね(違うのがあったら面白いかなと思った)。 そうか、せっかくExcelなんだからループいらないじゃん。 ...

        • =IF(MOD(ROW(),3),IF(MOD(ROW(),5),ROW(),"Buzz"),IF(MOD(ROW(),5),"Fizz","FizzBuzz"))

        • 剰余不可より100回ループ不可、てほうが制限としては面白いかもね。 まあそれは再帰するだけの話で $arr = [nil,&quot;Fizz&quot;,&quot;Buzz&quot;,&quot;FizzBuzz&quot;]def fzbz(i) f = ((i%3) == 0) ? 1 : 0 f |= ((i...

    • ちゃんとツリーに表示されるように始点へリンクを張ってくれ→http://anond.hatelabo.jp/20070508170219

    • 皆素直に繰り返しの構文で1から100まで回してんのね(違うのがあったら面白いかなと思った)。 さて、乗算除算の負担すらバカにならん古臭いCPUを考慮し、こんな感じのロジックを考え...

    • リンクつけわすれごめんなさい http://anond.hatelabo.jp/20070508170219 こうですか?よくわかりません(><) COBOLなんて需要無いか… (目に見えてアレなミスをこっそり修正、ああ、どじっ子さ…) ...

      • COBOLすげーー! すげーーーー! 出てない言語はいろいろありそうだけど、 なんかコレハ!ってのないかな。 Googleの検索コマンドで書くとか。。

        • 1,2,3,…,99,100 という文字列に対して正規表現でFizzBuzzに置換するような解法は出てないかなと思ったけど(出てたらごめんなさい><)、正規表現あんまり得意じゃないので私にはできません...

    • http://anond.hatelabo.jp/20070508170219 「%(剰余演算子)使用禁止」みたいな話があったので、逆に無駄に馬鹿っぽいプログラムが出てくると、どれくらい間抜けな「剰余を求める関数」になるか見...

    • http://anond.hatelabo.jp/20070508170219 自分のソースの汚さに焼身自殺したい #include &lt;stdio.h&gt;int main(void);int main(void){ int cn,nf,nb,nfb; cn=nf=nb=nfb=0; for(cn=1;cn&lt;=100;cn++){ while(cn&gt;nf) nf+=3; while(cn&gt...

    • ゴルファーじゃないけど短く出来たので #!/usr/bin/perl@s[map {$_*3} (1..33)] = map {&quot;Fizz&quot;} (1..33);@s[map {$_*5} (1..20)] = map {@s[$_*5].&quot;Buzz&quot;} (1..20);print join &quot;\n&quot;, map {$s[$_]||$_} (1..100,&quot;&qu...

    • int aa=0;do{if(aa==aa/15*15)printf(&quot;FizzBuzz\n&quot;);else if(aa==aa/3*3)printf(&quot;Fizz\n&quot;);else if(aa==aa/5*5)printf(&quot;Buzz\n&quot;);else printf(&quot;%d\n&quot;,aa);}while(aa++&lt;100);

      • インデントしてくれ

        • 自分でインデントして再掲するってのは、どやろか。 http://anond.hatelabo.jp/20070510221124

      • http://anond.hatelabo.jp/20070510221521 じゃあやるわ オリジナルはこちら→http://anond.hatelabo.jp/20070510220016 #include &lt;stdio.h&gt;int main() { int count = 0; do { if (count == count / 15 * 15) printf(&quot;FizzBuzz\n&qu...

    • 大元のhttp://anond.hatelabo.jp/20070508170219に剰余(MOD)使用禁止って縛りがあったのよ。

    • いくつか考えられるな まず、if で書いた方が可読性が高い、という考え方。まあでも一行で書いてもすぐわかる以上はよっぽどのアホが入るかも知れないプロジェクトで考慮するような...

    • 元ネタ http://anond.hatelabo.jp/20070508170219 php初めて半年程度でこれ。 もっと上手いやり方があるんだろうなぁ。 $i3=1; $i5=1; $flag=0; for($n=1;$n&lt;101;$n++){ if($i3==3 &amp;&amp; $i5==5){ echo "FizzBuzz"; ...

      • プログラミング的な話だと else if を使ったほうがインデントの階層が一個減るので良い。 数学的な話だとnとi3とi5が分かれてるのはnだけにして%演算子で割った方がシンプルで良い。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん