クインチャレンジI


12

チャレンジ

このタスクでは、整数N (-1e9 <= N <0 && 0 <N <= + 1e9)を入力するプログラムを作成し、T =(abs(N)%M + 1)を計算する必要があります。 Nは正であり、最初からT番目の文字を出力し、そうでない場合はソースの最後からT番目の文字を出力します。

Mは、ソースのバイト単位のサイズです。

例:ソースが次の場合:abcd efg/hi

入力:

 2

出力:

 c

入力

-3

出力:

g 

入力

-9249678

出力:

b 

入力

-11

出力:

i 

制約

  • FILE操作を使用しないでください
  • 任意の言語を使用できます
  • それはすべての楽しみを台無しにするので、回避しようとするか、むしろ1バイトの提出を使用しないでください。
  • 最短のソリューションが勝ちます!

編集:問題文が修正され、ランダムテストデータ(およびすべてのソリューションで同じデータ)を使用してソリューションを判断できるようになりました。したがって、ソリューションを更新してください(ご不便をおかけします)。


この例のテストケースでは、入力が5または-7の場合、出力は単一のスペースである必要があります: ""(引用符なし)。
キクソチック

Nが0の場合はどうなりますか?
aaaaaaaaaaaa

@eBusiness:それを指摘してくれてありがとう、私は問題のステートメントを変更しました、$ 0 $が今発生する可能性はないと思います:
Quixotic

3
ソートは奇妙なマッピングであり続け、文字は0から1へのジャンプでスキップされます-2 -> / -1 -> h 0 -> i 1 -> b 2 -> c。しかし、少なくともマッピングは今では全会一致です。
aaaaaaaaaaaa

1
&&は最初の文のは||
パエロエベルマン

回答:


12

x86アセンブリ(32ビットLinux、AT&T構文):548

ファイルの終わりに改行なし:

pushl 8(%esp)
call atoi
mov $274,%ebx
cmp $0,%eax
jg a
dec %eax
a:cdq
idiv %ebx
cmp $0,%edx
jge p
add %ebx,%edx
p:add $s,%edx
cmp $s+273,%edx
jl l
push $34
mov %esp,%edx
l:mov $4,%eax
mov $1,%ebx
mov %edx,%ecx
mov $1,%edx
int $128
mov $0,%ebx
mov $1,%eax
int $128
s:.ascii "pushl 8(%esp)
call atoi
mov $274,%ebx
cmp $0,%eax
jg a
dec %eax
a:cdq
idiv %ebx
cmp $0,%edx
jge p
add %ebx,%edx
p:add $s,%edx
cmp $s+273,%edx
jl l
push $34
mov %esp,%edx
l:mov $4,%eax
mov $1,%ebx
mov %edx,%ecx
mov $1,%edx
int $128
mov $0,%ebx
mov $1,%eax
int $128
s:.ascii "

私はそれをコンパイルしました gcc -nostartfiles -m32 qc1.S -o qc1

検証、正の数値:

$ for i in $(seq 548 1095); do ./qc1 $i; done | cmp - qc1.S && echo Good
Good

検証、負の数:

$ for i in $(seq -1095 -548); do ./qc1 $i; done | cmp - qc1.S && echo Good
Good

編集は、奇妙な番号付けスキームについて正しく理解しました。 おもう。 長さは変わりませんでした。


+1、アセンブリでこれを行うのは素晴らしい作業ですが、テストを全会一致にするために問題を修正したので、ソリューションを同様に修正してください、ありがとうございます。
キクソチック

へえ、かなりクール。面白いことに、言語が非常に異なるにもかかわらず、これは私の44文字のGolfScriptソリューションに似ているようです。
aaaaaaaaaaaa

1
@Debanjan:私は本当に番号付けスキームに頭を包むことができないようです。適切な検証ラインを提供してもらえますか?(問題文が細かいの場所でしょう)
JB

+1、これはあなたの2番目の「無効な」回答です(コードゴルフの賢明な)、それは賛成する価値があります:)
Eelvex

@Eelvex:レコードの場合、他のレコードは投稿時に有効でした。
JB

10

Whaddayaが知っているように、HQ9 +が大きく復活しました!

Q

選択できる文字が1つしかない場合は、インデックス作成を気にする必要はありません!


入力は必要ですか?
キクソチック

@Debanjan:確認:echo '-1' | hq9+ qc1
JB

申し訳ありませんが、これは私にはあまり意味がありません、私はPHPで 1つの同様のソリューションを持っていますが、このタイプのソリューションはすべての楽しみを台無しにしませんか?ありがとう、
-Quixotic

あなたがいない持っているあなたはそれがに収まるとは思わない場合はそれを受け入れることを、あなたは知っています!賛成する必要さえありません。けれどもあなたも、それをdownvoteも個人的には「dが;-)理解していない
JB

いいえ、それは受け入れまたは拒否についてではありません、私はちょうど私が何か新しいことを学ぶので、私はそれを賛成したいという点を述べてい
Quixotic

5

Ruby 1.9、66文字

z=gets.to_i;s="z=gets.to_i;s=%p;$><<(s%%s)[z%%66]";$><<(s%s)[z%66]

実際、普通の馬とそれほど違いはありません。

  • 編集:新しい仕様に従ってください。

5

GolfScript 26文字

{':f`f'+1/\~.1<- 26%=}:f`f

動的言語が発明される前は、クインはもっと面白かった。

編集:泣き言を言う人のために、これは入力を解析するためだけに使用される「本当の」GolfScriptの馬です。

障害のあるGolfScript 44文字

'"\x27"\+1/\~.1<- 22%='"\x27"\+1/\~.1<- 22%=

同じ文字列が2回繰り返されていることに気付くので、文字列リテラルの'前にハッキングするだけで、すぐに使用できます。


1
私はGolfScriptを知りませんが、あなたのコメントはあなたのコードが制約の「ファイル操作」カテゴリに傾いていると思うように私を押し付けます。内臓を拡大する気になりますか?
JB

魔法は `演算子を使用することで発生します。基本的には、関数を定義し、変数に保存し、関数を独自の文字列表現に変換し(`実行します)、関数を実行します。それは文字列の中に独自の内臓があるので。
aaaaaaaaaaaa

+1:to Quines were more fun before the invention of dynamic languages.:-)
キクソティック

3
まあ、地獄はアセンブリ言語でこれを試しいないだろうと確信しています
JB

6
スクラッチ。私がやったアセンブリ言語でこれを試してみてください。
JB

2

言語、4バイト

ソースコードは4つのヌルバイトで構成されます。したがって、入力に関係なく、出力はNULLバイトである必要があります.。これは1つの命令で実行されます。


0

Smalltalk、94 90 59 52

たとえば、Objectクラスでコンパイルします。

q:n|s|s:=thisContext method source.^s at:n\\s size+1

次に、q:<n>を任意のオブジェクトに送信します。ここで整数:

検証:

1 q:0-> q
1 q:1->:
1 q:2-> n
...
1 q:-1->)
1 q:-2->)
1 q:-3-> 1

またはそれ以上:
(0 to:100)collect:[:n | 1 q:n] as:String-
>')q:n|s m|s:=thisContext method source.m:=s size.^s at:(n>=0ifTrue:n-1\\m+1ifFalse:m-(0-n\\m))q:n|s m|'

(-1 downTo:-500)collect:[:n | 1 q:n] as:String-
>')m\\n-0(-m:eslaFfi1+m\\1-n:eurTfi0=>n(:ta s^.ezis s=:m.ecruos dohtem txetnoCsiht=:s|m s|n:q))m\\n-0('

非スモール
トーカーの説明:thisContextは現在のスタックフレームであり、メソッドを要求することができ、ソースを要求することができます。


0

ルーン文字のエンチャント、17バイト

"3X4+kSq:l͍iS%%@

オンラインでお試しください!

標準のクインを使用してプログラム文字列を生成し、文字列ベースのモジュロ演算子1を使用して、指定されたインデックスの文字を取得します(ネイティブおよび負のインデックス、Pythonの影響を受けた動作をサポートします)。

  1. ,「分割」コマンドがチャンク(論理十分逆に文字列をカットする*文字列複製x回)、+連結し、そして-削除しのx端部(の論理十分逆数から文字+)。そのため、%コマンドは次の役割を果たしcharAt(x)ます:スタックを処理する同じコマンドでスタックのような操作が処理された後、残りの基本的な文字列操作のみ。たとえば、スタックlのサイズと文字列の長さ。

0

JavaScript(ES6)、28バイト

f=n=>("f="+f).substr(n%28,1)

変更されたクイン。

28より大きい値はによって処理され%28、0より小さい値はによって処理され.substr()ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.