AtCoder Beginners Selection in Java
https://t.co/qFatTDC1Rl においてC++より人気っぽい言語を選んできたので次はここから言語を選んでABSを解きます
— Naomi Yuritani (@NaomiatLibrary) 2019年6月27日
この流れだとC#をやるはずなんですが、
資本主義に生きる人間なので左を見て唐突にClojureが気になったりもしましたが、右を見ると難しい言語なんだろうなあという気持ちになる pic.twitter.com/3EJInm6N5b
— Naomi Yuritani (@NaomiatLibrary) 2019年6月28日
金に目が眩んで来たのでClojureをやりたいなあ。
Clojure開発者はもともと長らくJavaで開発していたような熟練開発者が多い傾向があるような気はする🤔
— lagénorhynque🐬カマイルカ (@lagenorhynque) 2019年6月28日
言語としては(Lispなので少なくともコアは)単純で、初期の学習の大半は標準ライブラリ関数/マクロのイディオマティックな使い方や主要なライブラリ/ツールの活用方法を把握することになると思う。 https://t.co/0UwlEM62wp
らしいのでJavaをやります。
C#は一時間くらいやって放置していたunityを勉強する予定なのできっとその時にやるでしょう。
Javaの経験としては、 五月祭2019 Live Codegolf Contest day2 の練習で1行くらい書きました。
それだけだけど、特に困ることなくすぐにできてしまいました。やはりHaskellみたいにC++やPythonと違う書き方をしなきゃいけない言語の方が楽しいかな(募集中)
Bash
naomi-notebook.hatenablog.com
JavaScript
naomi-notebook.hatenablog.com
Haskell
naomi-notebook.hatenablog.com
PracticeA Welcome to AtCoder
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int a=sc.nextInt();int b=sc.nextInt();int c=sc.nextInt(); String d=sc.next(); System.out.println((a+b+c)+" "+d); } }
ABC086A Product
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int a=sc.nextInt();int b=sc.nextInt(); System.out.println(a*b%2==0?"Even":"Odd"); } }
ABC081A Placing Marbles
これで文字をカウントしている記事が出てくるのですが、1が最後にある時WAになってしまいます。
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); String s=sc.next(); System.out.println(s.split("1").length-1); } }
String.prototype.split() - JavaScript | MDNによると
separator が文字列の最初または最後、あるいは両方に現れた場合、それぞれ、配列の最初、最後、その両方が空の文字列になります。
らしいのですが、実際には後続の空の文字列は破棄されるようです。
これでAC
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); String s=sc.next(); System.out.println((s+"0").split("1").length-1); } }
ABC081B Shift only
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int[] A=new int[N]; for(int i=0;i<N;i++){ A[i]=sc.nextInt(); } for(int sum=0;;sum++){ for(int i=0;i<N;i++){ if(A[i]%2>0){System.out.println(sum);return;} A[i]/=2; } } } }
ABC087B Coins
10^5ループがいけるなんて早いなあ(Bashをやったあとの発言)
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int A=sc.nextInt(); int B=sc.nextInt(); int C=sc.nextInt(); int X=sc.nextInt(); int ans=0; for(int i=0;i<=A;i++){ for(int j=0;j<=B;j++){ for(int k=0;k<=C;k++){ if(i*500+j*100+k*50==X)ans++; } } } System.out.println(ans); } }
ABC083B Some Sums
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int A=sc.nextInt(); int B=sc.nextInt(); int ans=0; for(int i=1;i<=N;i++){ int sum=0;int num=i; while(num>0){sum+=num%10;num/=10;} if(A<=sum&&sum<=B)ans+=i; } System.out.println(ans); } }
ABC088B Card Game for Two
sortを使うために、sortなどのメゾットが存在するobject型であるInteger(primitive型であるint型のwrapper)を使わなければならない。読み込みについては自動でキャストしてくれるようだ。
import java.util.*; import java.util.Arrays; import java.util.Collections; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); Integer[] A=new Integer[N]; for(int i=0;i<N;i++){ A[i]=sc.nextInt(); } int ans=0; Arrays.sort(A, Collections.reverseOrder()); for(int i=0;i<N;i++){ ans+=i%2==0?A[i]:-A[i]; } System.out.println(ans); } }
ABC085B Kagami Mochi
重複を許さないSet,Hash Setに入れて重複を消します。
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); List<Integer> A = new ArrayList<Integer>(); for(int i=0;i<N;i++){ A.add(sc.nextInt()); } Set<Integer> set = new HashSet<Integer>(A); System.out.println(set.size()); } }
ABC085C Otoshidama
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); int N=sc.nextInt(); int Y=sc.nextInt(); int ans=0; for(int i=0;i<=N;i++){ for(int j=0;i+j<=N;j++){ if(10000*i+5000*j+(N-i-j)*1000==Y){ System.out.println(i+" "+j+" "+(N-i-j)); return; } } } System.out.println("-1 -1 -1"); } }
ABC049C 白昼夢 / Daydream
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); String s=sc.next(); System.out.println(s.matches("^(erase|eraser|dream|dreamer)+$")?"YES":"NO"); } }
ABC086C Traveling
import java.util.*; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); Integer N=sc.nextInt(); Integer[] t=new Integer[N+1]; Integer[] x=new Integer[N+1]; Integer[] y=new Integer[N+1]; Boolean b=true; t[0]=x[0]=y[0]=0; for(int i=1;i<=N;i++){ t[i]=sc.nextInt(); x[i]=sc.nextInt(); y[i]=sc.nextInt(); Integer d=Math.abs(t[i]-t[i-1])-Math.abs(x[i]-x[i-1])-Math.abs(y[i]-y[i-1]); if(d<0||d%2>0){ b=false; } } System.out.println(b?"Yes":"No"); } }