バックグラウンド
私は現在、AP Comp Sci A:Javaクラスに参加しており、コードゴルフの友達を何人か始めたいと思っています。コースからの挑戦がありますが、この挑戦をコミュニティが何バイトできるかを知りたいと思います。
チャレンジの詳細:
メイン文字列とピボット文字列の2つの入力文字列が与えられた場合、次の操作を行います。
ピボットストリングがメインストリングのサブストリングとして1回だけである場合、ピボットストリングの前に来るメインストリングの部分は、交換されるサブストリング内の順序を維持しながら、後に来る部分と交換されます。
例えば:
ピボット文字列が空であるか、メイン文字列内にピボット文字列が見つからない場合、プログラムは動作を定義する必要はありません。
ピボット文字列のインスタンスが複数ある場合、分割はピボットの最初のインスタンスでのみ発生します。
例:メイン文字列OneTwoThreeTwoOne
とピボット文字列を指定するTwo
と、出力はになりますThreeTwoOneTwoOne
。
メインストリング1Two2Two3Two4
とピボットTwo
を考えて、出力はあるべきです2Two3Two4Two1
。
メイン文字列OneTwoThree
とピボット文字列「Two」を指定すると、出力はになりますThreeTwoOne
。メイン文字列the rabbit is faster than the turtle
とピボット文字列が与えられた
is faster than
(末尾の前後のスペースに注意してください)、出力はである必要がありますthe turtle is faster than the rabbit
。
メインストリング1-2-3-4-5-6
とピボット-
を考えて、出力はあるべきです2-3-4-5-6-1
。
あとがき:
これはコードゴルフに関する私の最初の質問です。そのため、提案や建設的な批判がある場合は、お気軽にお申し付けください。
さらに、このプロジェクトの私のコード(コースはこれに焦点を当てているためJavaで記述されています)は以下にあります。ヒントがあれば、ぜひご覧ください。現在は363バイトですが、もっと優れた、より小さなソリューションを思いつくことができると思います。
import java.util.Scanner;interface Main{static<T>void D(T f){System.out.println(f);}static void main(String[]A){Scanner s=new Scanner(System.in);D("Enter the first String:");String a=s.nextLine();D("Enter the pivot String:");String p=s.nextLine();if(p.isEmpty()|!a.contains(p)){D("Error: Pivot String not found.");return;}String w[]=a.split(p,2);D(w[1]+p+w[0]);}}
注:入力およびピボット文字列が見つからない場合のテキストは、元の割り当てでは必須ですが、このチャレンジでは必須ではありません。
2-3-4-5-6-1
。
pivot='-'
およびに期待される出力は何main='1-2-3-4-5-6'
ですか?ほとんどの提出物2-3-4-5-6-1
はこのために出力されますが、私が挑戦を理解するとき、それはそうあるべきです2-1-3-4-5-6
。